Salta ai contenuti

ebpf_exporter - Foglio di aiuto delle metriche del kernel personalizzate per Prometheus

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

MetodoComando
BinarioScarica da GitHub Releases
Dockerdocker run --privileged -p 9435:9435 cloudflare/ebpf_exporter
Dal codice sorgentegit clone https://github.com/cloudflare/ebpf_exporter && make
Eseguisudo ebpf_exporter --config.dir=examples --config.names=biolatency
Metrichehttp://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
FlagScopo
--config.dirDirectory delle configurazioni del programma
--config.namesQuali programmi caricare (separati da virgola)
--web.listen-addressIndirizzo di binding (predefinito :9435)
--debugCaricamento verboso/diagnostica

Programmi in bundle (esempi)

ProgrammaMisura
biolatencyIstogramma di latenza block I/O
bio-tracepointsI/O del disco per dispositivo/operazione
run-queue-latencyRitardo di pianificazione prima che un compito giri
tcp-syn-backlogProfondità del backlog SYN
tcp-window-clampsEvent di pinzatura della finestra TCP
timersComportamento timer/softirq
cachestatRisultato/perdita cache pagina
oomkillEvent 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
CampoScopo
counters / histogramsTipo di metrica da esportare
bucket_typeBucketing istogramma exp2 / linear
bucket_multiplierScala le unità del kernel greggio ai secondi
labelsMappa le chiavi della mappa BPF alle etichette Prometheus
decodersConverti byte grezzi (string, uint, ksym, cgroup…)

Decoder utili

DecoderConverte
stringArray di byte → stringa di etichetta
uintIntero grezzo
ksymIndirizzo kernel → nome del simbolo
majorminorNumeri del dispositivo → sda, nvme0n1
cgroupID cgroup → percorso
static_mapEnum 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

DomandaEsportatori standardebpf_exporter
”Il disco è occupato?”Sì (node_exporter)
“Qual è la distribuzione della latenza I/O?”No
”Quanto tempo aspettano i compiti di essere pianificati?”No
”Perché stanno accadendo le ritrasmissioni TCP?”Parzialmente
”Quale cgroup ha causato questo?”NoSì (decoder cgroup)

ebpf_exporter vs Strumenti correlati

StrumentoModello
ebpf_exporterMetriche eBPF continue → Prometheus
bpftraceOne-liner eBPF ad-hoc e interattivi
bcc-toolsStrumenti diagnostici eBPF predefiniti
node_exporterMetriche standard pubblicate dal kernel
bpftopOverhead 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