ebpf_exporter - Foglio di aiuto delle metriche del kernel personalizzate per Prometheus
ebpf_exporter (di Cloudflare) collega eBPF e Prometheus. Gli esportatori standard espongono i contatori che il kernel pubblica già; ebpf_exporter ti consente di allegare programmi eBPF personalizzati ai probe del kernel e di esportare tutto ciò che misurano come metriche Prometheus — istogrammi di latenza I/O del disco, cause di ritrasmissione TCP, ritardo della coda di pianificazione, comportamento della page-cache. Trasforma le domande profonde e ad-hoc del kernel in serie temporali continuamente scrapate.
Requisiti
- Kernel Linux con BPF + BTF (5.x consigliato)
- Privilegi root /
CAP_BPF
- Prometheus per scrapare l”endpoint
Installazione
| Metodo | Comando |
|---|
| Binario | Scarica da GitHub Releases |
| Docker | docker run --privileged -p 9435:9435 cloudflare/ebpf_exporter |
| Dal codice sorgente | git clone https://github.com/cloudflare/ebpf_exporter && make |
| Esegui | sudo ebpf_exporter --config.dir=examples --config.names=biolatency |
| Metriche | http://localhost:9435/metrics |
Esecuzione con esempi in bundle
# Esporta istogrammi di latenza block I/O
sudo ./ebpf_exporter --config.dir=examples --config.names=biolatency
# Più programmi contemporaneamente
sudo ./ebpf_exporter --config.dir=examples \
--config.names=biolatency,tcp-syn-backlog,run-queue-latency
| Flag | Scopo |
|---|
--config.dir | Directory delle configurazioni del programma |
--config.names | Quali programmi caricare (separati da virgola) |
--web.listen-address | Indirizzo di binding (predefinito :9435) |
--debug | Caricamento verboso/diagnostica |
Programmi in bundle (esempi)
| Programma | Misura |
|---|
biolatency | Istogramma di latenza block I/O |
bio-tracepoints | I/O del disco per dispositivo/operazione |
run-queue-latency | Ritardo di pianificazione prima che un compito giri |
tcp-syn-backlog | Profondità del backlog SYN |
tcp-window-clamps | Event di pinzatura della finestra TCP |
timers | Comportamento timer/softirq |
cachestat | Risultato/perdita cache pagina |
oomkill | Event di eliminazione OOM |
Struttura della configurazione
Un programma abbina un oggetto eBPF compilato con definizioni di metriche:
metrics:
histograms:
- name: bio_latency_seconds
help: Block IO latency histogram
bucket_type: exp2
bucket_multiplier: 0.000001 # microseconds → seconds
bucket_min: 0
bucket_max: 26
labels:
- name: device
size: 32
decoders:
- name: string
- name: bucket
size: 8
decoders:
- name: uint
| Campo | Scopo |
|---|
counters / histograms | Tipo di metrica da esportare |
bucket_type | Bucketing istogramma exp2 / linear |
bucket_multiplier | Scala le unità del kernel greggio ai secondi |
labels | Mappa le chiavi della mappa BPF alle etichette Prometheus |
decoders | Converti byte grezzi (string, uint, ksym, cgroup…) |
Decoder utili
| Decoder | Converte |
|---|
string | Array di byte → stringa di etichetta |
uint | Intero grezzo |
ksym | Indirizzo kernel → nome del simbolo |
majorminor | Numeri del dispositivo → sda, nvme0n1 |
cgroup | ID cgroup → percorso |
static_map | Enum numerico → etichetta leggibile |
Query in Prometheus
# latenza block I/O p99 per dispositivo
histogram_quantile(0.99,
sum(rate(bio_latency_seconds_bucket[5m])) by (le, device))
# Ritardo della coda di pianificazione p95 (segnale di saturazione della CPU)
histogram_quantile(0.95,
sum(rate(run_queue_latency_seconds_bucket[5m])) by (le))
Quando usarlo
| Domanda | Esportatori standard | ebpf_exporter |
|---|
| ”Il disco è occupato?” | Sì (node_exporter) | — |
| “Qual è la distribuzione della latenza I/O?” | No | Sì |
| ”Quanto tempo aspettano i compiti di essere pianificati?” | No | Sì |
| ”Perché stanno accadendo le ritrasmissioni TCP?” | Parzialmente | Sì |
| ”Quale cgroup ha causato questo?” | No | Sì (decoder cgroup) |
ebpf_exporter vs Strumenti correlati
| Strumento | Modello |
|---|
| ebpf_exporter | Metriche eBPF continue → Prometheus |
| bpftrace | One-liner eBPF ad-hoc e interattivi |
| bcc-tools | Strumenti diagnostici eBPF predefiniti |
| node_exporter | Metriche standard pubblicate dal kernel |
| bpftop | Overhead dell”esecuzione dei programmi eBPF |
Usa bpftrace per esplorare una domanda in modo interattivo, quindi codifica la risposta come una metrica permanente ebpf_exporter.
Risorse