tracing: log_p2p_connections.bt example

A bpftrace (v0.14.1) script that logs information from the
net:*_connection tracepoints.
This commit is contained in:
0xb10c 2022-08-12 18:34:48 +02:00
parent 490b80c07c
commit 996029b1fd
No known key found for this signature in database
GPG Key ID: E2FFD5B1D88CA97D
2 changed files with 73 additions and 0 deletions

View File

@ -335,4 +335,25 @@ $ python3 contrib/tracing/mempool_monitor.py ./src/bitcoind
│ 13:10:32Z added c78e87be86c828137a6e7e00a177c03b52202ce4c39029b99904c2a094b9da87 with feerate 11.00 sat/vB (1562 sat, 142 vbytes) │
│ │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
### log_p2p_connections.bt
A `bpftrace` script to log information about opened, closed, misbehaving, and
evicted P2P connections. Uses the `net:*_connection` tracepoints.
```bash
$ bpftrace contrib/tracing/log_p2p_connections.bt
```
This should produce an output similar to the following.
```bash
Attaching 6 probes...
Logging opened, closed, misbehaving, and evicted P2P connections
OUTBOUND conn to 127.0.0.1:15287: id=0, type=block-relay-only, network=0, net_group=245974404224840066, total_out=1
INBOUND conn from 127.0.0.1:45324: id=1, type=inbound, network=0, net_group=90061749176390714, total_in=1
MISBEHAVING conn id=1, score_before=0, score_increase=20, message='getdata message size = 50001', threshold_exceeded=false
CLOSED conn to 127.0.0.1:15287: id=0, type=block-relay-only, network=0, net_group=245974404224840066, established=1231006505
EVICTED conn to 127.0.0.1:45324: id=1, type=inbound, network=0, net_group=90061749176390714, established=1612312312
...
```

View File

@ -0,0 +1,52 @@
#!/usr/bin/env bpftrace
BEGIN
{
printf("Logging opened, closed, misbehaving, and evicted P2P connections\n")
}
usdt:./src/bitcoind:net:inbound_connection
{
$id = (int64) arg0;
$addr = str(arg1);
$conn_type = str(arg2);
$network = (int32) arg3;
$existing = (uint64) arg4;
printf("INBOUND conn from %s: id=%ld, type=%s, network=%d, total=%d\n", $addr, $id, $conn_type, $network, $existing + 1);
}
usdt:./src/bitcoind:net:outbound_connection
{
$id = (int64) arg0;
$addr = str(arg1);
$conn_type = str(arg2);
$network = (int32) arg3;
$existing = (uint64) arg4;
printf("OUTBOUND conn to %s: id=%ld, type=%s, network=%d, total=%d\n", $addr, $id, $conn_type, $network, $existing + 1);
}
usdt:./src/bitcoind:net:closed_connection
{
$id = (int64) arg0;
$addr = str(arg1);
$conn_type = str(arg2);
$network = (int32) arg3;
printf("CLOSED conn to %s: id=%ld, type=%s, network=%d, established=%ld\n", $addr, $id, $conn_type, $network, arg4);
}
usdt:./src/bitcoind:net:evicted_inbound_connection
{
$id = (int64) arg0;
$addr = str(arg1);
$conn_type = str(arg2);
$network = (int32) arg3;
printf("EVICTED conn to %s: id=%ld, type=%s, network=%d, established=%ld\n", $addr, $id, $conn_type, $network, arg4);
}
usdt:./src/bitcoind:net:misbehaving_connection
{
$id = (int64) arg0;
$message = str(arg3);
$threshold = arg4;
printf("MISBEHAVING conn id=%ld, score_before=%d, score_increase=%d, message='%s', threshold_exceeded=%s\n", $id, arg1, arg2, $message, ($threshold ? "true" : "false"));
}