ebpf_exporter - Métricas de Kernel Customizadas para Prometheus - Guia de Referência
ebpf_exporter (by Cloudflare) faz ponte eBPF e Prometheus. Exportadores padrão superficiam contadores que o kernel já publica; ebpf_exporter deixa você anexar programas eBPF customizados a sondas de kernel e exportar o que quer que eles meçam como métricas Prometheus — histogramas de latência de I/O de disco, causas de retransmissão TCP, delay de run-queue scheduler, comportamento de page-cache. Transforma perguntas de kernel profundas, ad-hoc em séries temporais continuamente-scrapeadas.
Requisitos
- Kernel Linux com BPF + BTF (5.x recomendado)
- Privilégios root /
CAP_BPF
- Prometheus para scrape do endpoint
Instalação
| Método | Comando |
|---|
| Binário | Baixar de GitHub Releases |
| Docker | docker run --privileged -p 9435:9435 cloudflare/ebpf_exporter |
| Do código-fonte | git clone https://github.com/cloudflare/ebpf_exporter && make |
| Executar | sudo ebpf_exporter --config.dir=examples --config.names=biolatency |
| Métricas | http://localhost:9435/metrics |
# Exportar histogramas de latência de I/O de bloco
sudo ./ebpf_exporter --config.dir=examples --config.names=biolatency
# Múltiplos programas de uma vez
sudo ./ebpf_exporter --config.dir=examples \
--config.names=biolatency,tcp-syn-backlog,run-queue-latency
| Flag | Propósito |
|---|
--config.dir | Diretório de configs de programa |
--config.names | Quais programas carregar (comma-separated) |
--web.listen-address | Endereço bind (padrão :9435) |
--debug | Carregamento verbose/diagnósticos |
Programas Inclusos (exemplos)
| Programa | Mede |
|---|
biolatency | Histograma de latência de I/O de bloco |
bio-tracepoints | I/O de disco por dispositivo/operação |
run-queue-latency | Delay de scheduler antes de uma task executar |
tcp-syn-backlog | Profundidade de SYN backlog |
tcp-window-clamps | Eventos de clamping de janela TCP |
timers | Comportamento de timer/softirq |
cachestat | Page cache hit/miss |
oomkill | Eventos de OOM kill |
Estrutura de Config
Um programa acopla um objeto eBPF compilado com definições de métricas:
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
| Campo | Propósito |
|---|
counters / histograms | Tipo de métrica para exportar |
bucket_type | Bucketing de histograma exp2 / linear |
bucket_multiplier | Escalar unidades de kernel bruto para segundos |
labels | Map chaves de mapa BPF para labels Prometheus |
decoders | Converter bytes brutos (string, uint, ksym, cgroup…) |
Decodificadores Úteis
| Decodificador | Converte |
|---|
string | Array de byte → label string |
uint | Inteiro bruto |
ksym | Endereço de kernel → nome de símbolo |
majorminor | Números de dispositivo → sda, nvme0n1 |
cgroup | ID de cgroup → caminho |
static_map | Enum numérico → label legível |
Consultando em Prometheus
# p99 block I/O latency por dispositivo
histogram_quantile(0.99,
sum(rate(bio_latency_seconds_bucket[5m])) by (le, device))
# Scheduler run-queue delay p95 (sinal de saturação de CPU)
histogram_quantile(0.95,
sum(rate(run_queue_latency_seconds_bucket[5m])) by (le))
Quando Alcançar por Isso
| Pergunta | Exportadores padrão | ebpf_exporter |
|---|
| ”O disco está ocupado?” | Sim (node_exporter) | — |
| “Qual é a distribuição de latência de I/O?” | Não | Sim |
| ”Quanto tempo tasks esperam para serem agendadas?” | Não | Sim |
| ”Por que retransmissões TCP estão acontecendo?” | Parcialmente | Sim |
| ”Qual cgroup causou isso?” | Não | Sim (cgroup decoder) |
ebpf_exporter vs Ferramentas Relacionadas
| Ferramenta | Modelo |
|---|
| ebpf_exporter | Métricas eBPF contínuas → Prometheus |
| bpftrace | One-liners eBPF ad-hoc, interativos |
| bcc-tools | Ferramentas de diagnóstico eBPF pré-construídas |
| node_exporter | Métricas publicadas por kernel padrão |
| bpftop | Overhead de executar programas eBPF |
Use bpftrace para explorar uma pergunta interativamente, depois codifique a resposta como uma métrica permanente ebpf_exporter.
Recursos