ebpf_exporter - Guide des métriques kernel personnalisées pour Prometheus
ebpf_exporter (par Cloudflare) relie eBPF et Prometheus. Les exporters standard surfacent les compteurs que le kernel publie déjà ; ebpf_exporter vous permet d’attacher des programmes eBPF personnalisés aux kernel probes et d’exporter tout ce qu’ils mesurent comme des métriques Prometheus — histogrammes de latence I/O disque, causes de retransmission TCP, délai de scheduler run-queue, comportement du page-cache. Ça transforme les questions kernel profondes, ad-hoc en séries temporelles continuellement scrapées.
Prérequis
- Kernel Linux avec BPF + BTF (5.x recommandé)
- Privilèges root /
CAP_BPF
- Prometheus pour scraper l’endpoint
Installation
| Méthode | Commande |
|---|
| Binaire | Télécharger depuis GitHub Releases |
| Docker | docker run --privileged -p 9435:9435 cloudflare/ebpf_exporter |
| Depuis la source | git clone https://github.com/cloudflare/ebpf_exporter && make |
| Exécuter | sudo ebpf_exporter --config.dir=examples --config.names=biolatency |
| Métriques | http://localhost:9435/metrics |
Exécuter avec les exemples regroupés
# Exporter les histogrammes de latence I/O bloc
sudo ./ebpf_exporter --config.dir=examples --config.names=biolatency
# Plusieurs programmes à la fois
sudo ./ebpf_exporter --config.dir=examples \
--config.names=biolatency,tcp-syn-backlog,run-queue-latency
| Flag | Objectif |
|---|
--config.dir | Répertoire des configs de programme |
--config.names | Quels programmes charger (comma-separated) |
--web.listen-address | Adresse de bind (défaut :9435) |
--debug | Chargement verbeux/diagnostiques |
Programmes regroupés (exemples)
| Programme | Mesure |
|---|
biolatency | Histogramme de latence I/O bloc |
bio-tracepoints | I/O disque par device/opération |
run-queue-latency | Délai scheduler avant qu’une tâche ne s’exécute |
tcp-syn-backlog | Profondeur du backlog SYN |
tcp-window-clamps | Événements TCP window clamping |
timers | Comportement timer/softirq |
cachestat | Page cache hit/miss |
oomkill | Événements OOM kill |
Structure de config
Un programme associe un objet eBPF compilé avec des définitions de métrique :
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
| Champ | Objectif |
|---|
counters / histograms | Type de métrique à exporter |
bucket_type | Bucketing d’histogramme exp2 / linear |
bucket_multiplier | Échelonner les unités kernel brutes en secondes |
labels | Mapper les clés de map BPF aux labels Prometheus |
decoders | Convertir les bytes bruts (string, uint, ksym, cgroup…) |
Décodeurs utiles
| Décodeur | Convertit |
|---|
string | Byte array → label string |
uint | Entier brut |
ksym | Adresse kernel → nom de symbol |
majorminor | Numéros de device → sda, nvme0n1 |
cgroup | ID cgroup → chemin |
static_map | Enum numérique → label lisible |
Interroger dans Prometheus
# p99 block I/O latency par device
histogram_quantile(0.99,
sum(rate(bio_latency_seconds_bucket[5m])) by (le, device))
# Scheduler run-queue delay p95 (signal de CPU saturation)
histogram_quantile(0.95,
sum(rate(run_queue_latency_seconds_bucket[5m])) by (le))
Quand le chercher
| Question | Exporters standard | ebpf_exporter |
|---|
| ”Le disque est-il occupé ?” | Oui (node_exporter) | — |
| “Quelle est la distribution de latence I/O ?” | Non | Oui |
| ”Combien de temps les tâches attendent-elles pour être programmées ?” | Non | Oui |
| ”Pourquoi les retransmissions TCP se produisent-elles ?” | Partiellement | Oui |
| ”Quel cgroup a causé cela ?” | Non | Oui (décodeur cgroup) |
ebpf_exporter vs outils apparentés
| Outil | Modèle |
|---|
| ebpf_exporter | Métriques eBPF continues → Prometheus |
| bpftrace | One-liners eBPF ad-hoc, interactifs |
| bcc-tools | Outils diagnostiques eBPF pré-construits |
| node_exporter | Métriques publiées par kernel standard |
| bpftop | Overhead des programmes eBPF en exécution |
Utiliser bpftrace pour explorer une question interactivement, puis encoder la réponse en tant que métrique permanente ebpf_exporter.
Ressources