Zum Inhalt springen

ebpf_exporter – Custom Kernel Metrics for Prometheus Cheatsheet

ebpf_exporter – Custom Kernel Metrics for Prometheus Cheatsheet

ebpf_exporter (von Cloudflare) brückt eBPF und Prometheus. Standard-Exporter exponieren Counter, die der Kernel bereits publiziert; ebpf_exporter lässt Sie benutzerdefinierte eBPF Programme zu Kernel Probes anhängen und was immer sie messen als Prometheus Metrics exponieren – Disk I/O Latenz-Histogramme, TCP Retransmit-Ursachen, Scheduler Run-Queue Delay, Page-Cache Verhalten. Es verwandelt tiefe, Ad-hoc Kernel-Fragen in kontinuierlich-geschrapte Time Series.

Anforderungen

  • Linux Kernel mit BPF + BTF (5.x empfohlen)
  • Root / CAP_BPF Privilegien
  • Prometheus zum Scrapen des Endpunkts

Installation

MethodeBefehl
BinärDownload von GitHub Releases
Dockerdocker run --privileged -p 9435:9435 cloudflare/ebpf_exporter
Aus Quellegit clone https://github.com/cloudflare/ebpf_exporter && make
Führen Sie aussudo ebpf_exporter --config.dir=examples --config.names=biolatency
Metricshttp://localhost:9435/metrics

Mit gebündelten Beispielen laufen

# Exponieren Sie Block I/O Latenz-Histogramme
sudo ./ebpf_exporter --config.dir=examples --config.names=biolatency

# Mehrere Programme auf einmal
sudo ./ebpf_exporter --config.dir=examples \
  --config.names=biolatency,tcp-syn-backlog,run-queue-latency
FlagZweck
--config.dirVerzeichnis von Programm Configs
--config.namesWelche Programme zu laden (komma-getrennt)
--web.listen-addressBind Adresse (Standard :9435)
--debugAusführliches Laden/Diagnostik

Gebündelte Programme (Beispiele)

ProgrammMisst
biolatencyBlock I/O Latenz Histogram
bio-tracepointsDisk I/O nach Gerät/Operation
run-queue-latencyScheduler Delay vor einem Task läuft
tcp-syn-backlogSYN Backlog Tiefe
tcp-window-clampsTCP Window Clamping Events
timersTimer/Softirq Verhalten
cachestatPage Cache Hit/Miss
oomkillOOM Kill Events

Konfiguration Struktur

Ein Programm paart ein kompiliertes eBPF Objekt mit Metric Definitionen:

metrics:
  histograms:
    - name: bio_latency_seconds
      help: Block IO latency histogram
      bucket_type: exp2
      bucket_multiplier: 0.000001   # Mikrosekunden → Sekunden
      bucket_min: 0
      bucket_max: 26
      labels:
        - name: device
          size: 32
          decoders:
            - name: string
        - name: bucket
          size: 8
          decoders:
            - name: uint
FeldZweck
counters / histogramsMetric Typ zum Exponieren
bucket_typeexp2 / linear Histogram Bucketing
bucket_multiplierSkalieren Sie rohe Kernel-Einheiten zu Sekunden
labelsMap BPF Map Keys zu Prometheus Labels
decodersKonvertieren Sie rohe Bytes (String, Uint, Ksym, Cgroup…)

Nützliche Decoders

DecoderKonvertiert
stringByte Array → Label String
uintRoh Integer
ksymKernel Adresse → Symbol Name
majorminorGeräte-Nummern → sda, nvme0n1
cgroupcgroup ID → Pfad
static_mapNumerisches Enum → lesbares Label

Abfragen in Prometheus

# p99 Block I/O Latenz nach Gerät
histogram_quantile(0.99,
  sum(rate(bio_latency_seconds_bucket[5m])) by (le, device))

# Scheduler Run-Queue Delay p95 (CPU Sättigung Signal)
histogram_quantile(0.95,
  sum(rate(run_queue_latency_seconds_bucket[5m])) by (le))

Wann es zu erreichen ist

FrageStandard Exporterebpf_exporter
”Ist die Disk beschäftigt?”Ja (node_exporter)
“Was ist die Verteilung von I/O Latenz?”NeinJa
”Wie lange warten Tasks zu werden geplant?”NeinJa
”Warum passieren TCP Retransmits?”TeilweiseJa
”Welche Cgroup verursachte dies?”NeinJa (Cgroup Decoder)

ebpf_exporter vs verwandte Tools

ToolModell
ebpf_exporterContinuous eBPF Metrics → Prometheus
bpftraceAd-hoc, Interaktive eBPF One-Liner
bcc-toolsVorgefertigte eBPF Diagnose-Tools
node_exporterStandard Kernel-publizierte Metrics
bpftopOverhead von laufenden eBPF Programmen

Verwenden Sie bpftrace um eine Frage interaktiv zu erkunden, dann kodieren Sie die Antwort als permanente ebpf_exporter Metric.

Ressourcen