Aller au contenu

ebpf_exporter - Guide des métriques kernel personnalisées pour Prometheus

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éthodeCommande
BinaireTélécharger depuis GitHub Releases
Dockerdocker run --privileged -p 9435:9435 cloudflare/ebpf_exporter
Depuis la sourcegit clone https://github.com/cloudflare/ebpf_exporter && make
Exécutersudo ebpf_exporter --config.dir=examples --config.names=biolatency
Métriqueshttp://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
FlagObjectif
--config.dirRépertoire des configs de programme
--config.namesQuels programmes charger (comma-separated)
--web.listen-addressAdresse de bind (défaut :9435)
--debugChargement verbeux/diagnostiques

Programmes regroupés (exemples)

ProgrammeMesure
biolatencyHistogramme de latence I/O bloc
bio-tracepointsI/O disque par device/opération
run-queue-latencyDélai scheduler avant qu’une tâche ne s’exécute
tcp-syn-backlogProfondeur du backlog SYN
tcp-window-clampsÉvénements TCP window clamping
timersComportement timer/softirq
cachestatPage 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
ChampObjectif
counters / histogramsType de métrique à exporter
bucket_typeBucketing d’histogramme exp2 / linear
bucket_multiplierÉchelonner les unités kernel brutes en secondes
labelsMapper les clés de map BPF aux labels Prometheus
decodersConvertir les bytes bruts (string, uint, ksym, cgroup…)

Décodeurs utiles

DécodeurConvertit
stringByte array → label string
uintEntier brut
ksymAdresse kernel → nom de symbol
majorminorNuméros de device → sda, nvme0n1
cgroupID cgroup → chemin
static_mapEnum 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

QuestionExporters standardebpf_exporter
”Le disque est-il occupé ?”Oui (node_exporter)
“Quelle est la distribution de latence I/O ?”NonOui
”Combien de temps les tâches attendent-elles pour être programmées ?”NonOui
”Pourquoi les retransmissions TCP se produisent-elles ?”PartiellementOui
”Quel cgroup a causé cela ?”NonOui (décodeur cgroup)

ebpf_exporter vs outils apparentés

OutilModèle
ebpf_exporterMétriques eBPF continues → Prometheus
bpftraceOne-liners eBPF ad-hoc, interactifs
bcc-toolsOutils diagnostiques eBPF pré-construits
node_exporterMétriques publiées par kernel standard
bpftopOverhead 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