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
| Methode | Befehl |
|---|
| Binär | Download von GitHub Releases |
| Docker | docker run --privileged -p 9435:9435 cloudflare/ebpf_exporter |
| Aus Quelle | git clone https://github.com/cloudflare/ebpf_exporter && make |
| Führen Sie aus | sudo ebpf_exporter --config.dir=examples --config.names=biolatency |
| Metrics | http://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
| Flag | Zweck |
|---|
--config.dir | Verzeichnis von Programm Configs |
--config.names | Welche Programme zu laden (komma-getrennt) |
--web.listen-address | Bind Adresse (Standard :9435) |
--debug | Ausführliches Laden/Diagnostik |
Gebündelte Programme (Beispiele)
| Programm | Misst |
|---|
biolatency | Block I/O Latenz Histogram |
bio-tracepoints | Disk I/O nach Gerät/Operation |
run-queue-latency | Scheduler Delay vor einem Task läuft |
tcp-syn-backlog | SYN Backlog Tiefe |
tcp-window-clamps | TCP Window Clamping Events |
timers | Timer/Softirq Verhalten |
cachestat | Page Cache Hit/Miss |
oomkill | OOM 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
| Feld | Zweck |
|---|
counters / histograms | Metric Typ zum Exponieren |
bucket_type | exp2 / linear Histogram Bucketing |
bucket_multiplier | Skalieren Sie rohe Kernel-Einheiten zu Sekunden |
labels | Map BPF Map Keys zu Prometheus Labels |
decoders | Konvertieren Sie rohe Bytes (String, Uint, Ksym, Cgroup…) |
Nützliche Decoders
| Decoder | Konvertiert |
|---|
string | Byte Array → Label String |
uint | Roh Integer |
ksym | Kernel Adresse → Symbol Name |
majorminor | Geräte-Nummern → sda, nvme0n1 |
cgroup | cgroup ID → Pfad |
static_map | Numerisches 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
| Frage | Standard Exporter | ebpf_exporter |
|---|
| ”Ist die Disk beschäftigt?” | Ja (node_exporter) | — |
| “Was ist die Verteilung von I/O Latenz?” | Nein | Ja |
| ”Wie lange warten Tasks zu werden geplant?” | Nein | Ja |
| ”Warum passieren TCP Retransmits?” | Teilweise | Ja |
| ”Welche Cgroup verursachte dies?” | Nein | Ja (Cgroup Decoder) |
| Tool | Modell |
|---|
| ebpf_exporter | Continuous eBPF Metrics → Prometheus |
| bpftrace | Ad-hoc, Interaktive eBPF One-Liner |
| bcc-tools | Vorgefertigte eBPF Diagnose-Tools |
| node_exporter | Standard Kernel-publizierte Metrics |
| bpftop | Overhead von laufenden eBPF Programmen |
Verwenden Sie bpftrace um eine Frage interaktiv zu erkunden, dann kodieren Sie die Antwort als permanente ebpf_exporter Metric.
Ressourcen