ebpf_exporter - Métricas personalizadas del kernel para Prometheus
ebpf_exporter (por Cloudflare) cierra la brecha entre eBPF y Prometheus. Los exportadores estándar exponen contadores que el kernel ya publica; ebpf_exporter te permite adjuntar programas de eBPF personalizados a sondeos del kernel y exportar lo que sea que midan como métricas de Prometheus — histogramas de latencia de I/O de disco, causas de retransmisión TCP, retraso de cola de planificador, comportamiento de caché de página. Convierte preguntas ad-hoc profundas del kernel en series de tiempo continuamente raspadas.
Requisitos
- Kernel de Linux con BPF + BTF (5.x recomendado)
- Privilegios de root /
CAP_BPF
- Prometheus para raspar el punto final
Instalación
| Método | Comando |
|---|
| Binario | Descarga desde GitHub Releases |
| Docker | docker run --privileged -p 9435:9435 cloudflare/ebpf_exporter |
| Desde código fuente | git clone https://github.com/cloudflare/ebpf_exporter && make |
| Ejecuta | sudo ebpf_exporter --config.dir=examples --config.names=biolatency |
| Métricas | http://localhost:9435/metrics |
Ejecución con ejemplos incluidos
# Exporta histogramas de latencia de I/O de bloque
sudo ./ebpf_exporter --config.dir=examples --config.names=biolatency
# Múltiples programas a la vez
sudo ./ebpf_exporter --config.dir=examples \
--config.names=biolatency,tcp-syn-backlog,run-queue-latency
| Bandera | Propósito |
|---|
--config.dir | Directorio de configuraciones de programa |
--config.names | Qué programas cargar (separados por comas) |
--web.listen-address | Dirección de vinculación (por defecto :9435) |
--debug | Carga/diagnósticos detallados |
Programas incluidos (ejemplos)
| Programa | Mide |
|---|
biolatency | Histograma de latencia de I/O de bloque |
bio-tracepoints | I/O de disco por dispositivo/operación |
run-queue-latency | Retraso de planificador antes de que se ejecute una tarea |
tcp-syn-backlog | Profundidad de acumulación de SYN |
tcp-window-clamps | Eventos de pinzamiento de ventana de TCP |
timers | Comportamiento de temporizador/softirq |
cachestat | Acierto/fallo de caché de página |
oomkill | Eventos de terminación por falta de memoria |
Estructura de configuración
Un programa empareja un objeto de eBPF compilado con definiciones de métrica:
metrics:
histograms:
- name: bio_latency_seconds
help: Block IO latency histogram
bucket_type: exp2
bucket_multiplier: 0.000001 # microsegundos → segundos
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 a exportar |
bucket_type | Agrupamiento de histograma exp2 / linear |
bucket_multiplier | Escala unidades de kernel sin procesar a segundos |
labels | Mapea claves de mapa de BPF a etiquetas de Prometheus |
decoders | Convierte bytes sin procesar (string, uint, ksym, cgroup…) |
Decodificadores útiles
| Decodificador | Convierte |
|---|
string | Matriz de bytes → cadena de etiqueta |
uint | Entero sin procesar |
ksym | Dirección del kernel → nombre de símbolo |
majorminor | Números de dispositivo → sda, nvme0n1 |
cgroup | ID de cgroup → ruta |
static_map | Enumeración numérica → etiqueta legible |
Consulta en Prometheus
# p99 latencia de I/O de bloque por dispositivo
histogram_quantile(0.99,
sum(rate(bio_latency_seconds_bucket[5m])) by (le, device))
# Retraso de cola de planificador p95 (señal de saturación de CPU)
histogram_quantile(0.95,
sum(rate(run_queue_latency_seconds_bucket[5m])) by (le))
Cuándo alcanzarlo
| Pregunta | Exportadores estándar | ebpf_exporter |
|---|
| ”¿Está ocupado el disco?” | Sí (node_exporter) | — |
| “¿Cuál es la distribución de latencia de I/O?” | No | Sí |
| ”¿Cuánto tiempo esperan las tareas para programarse?” | No | Sí |
| ”¿Por qué están sucediendo retransmisiones de TCP?” | Parcialmente | Sí |
| ”¿Qué cgroup causó esto?” | No | Sí (decodificador de cgroup) |
ebpf_exporter vs herramientas relacionadas
| Herramienta | Modelo |
|---|
| ebpf_exporter | Métricas continuas de eBPF → Prometheus |
| bpftrace | Líneas de eBPF de una sola vez, interactivas ad-hoc |
| bcc-tools | Herramientas de diagnóstico de eBPF pregeneradas |
| node_exporter | Métricas publicadas por kernel estándar |
| bpftop | Sobrecarga de ejecutar programas de eBPF |
Usa bpftrace para explorar una pregunta interactivamente, luego codifica la respuesta como una métrica permanente de ebpf_exporter.
Recursos