Ir al contenido

ebpf_exporter - Métricas personalizadas del kernel para Prometheus

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étodoComando
BinarioDescarga desde GitHub Releases
Dockerdocker run --privileged -p 9435:9435 cloudflare/ebpf_exporter
Desde código fuentegit clone https://github.com/cloudflare/ebpf_exporter && make
Ejecutasudo ebpf_exporter --config.dir=examples --config.names=biolatency
Métricashttp://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
BanderaPropósito
--config.dirDirectorio de configuraciones de programa
--config.namesQué programas cargar (separados por comas)
--web.listen-addressDirección de vinculación (por defecto :9435)
--debugCarga/diagnósticos detallados

Programas incluidos (ejemplos)

ProgramaMide
biolatencyHistograma de latencia de I/O de bloque
bio-tracepointsI/O de disco por dispositivo/operación
run-queue-latencyRetraso de planificador antes de que se ejecute una tarea
tcp-syn-backlogProfundidad de acumulación de SYN
tcp-window-clampsEventos de pinzamiento de ventana de TCP
timersComportamiento de temporizador/softirq
cachestatAcierto/fallo de caché de página
oomkillEventos 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
CampoPropósito
counters / histogramsTipo de métrica a exportar
bucket_typeAgrupamiento de histograma exp2 / linear
bucket_multiplierEscala unidades de kernel sin procesar a segundos
labelsMapea claves de mapa de BPF a etiquetas de Prometheus
decodersConvierte bytes sin procesar (string, uint, ksym, cgroup…)

Decodificadores útiles

DecodificadorConvierte
stringMatriz de bytes → cadena de etiqueta
uintEntero sin procesar
ksymDirección del kernel → nombre de símbolo
majorminorNúmeros de dispositivo → sda, nvme0n1
cgroupID de cgroup → ruta
static_mapEnumeració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

PreguntaExportadores estándarebpf_exporter
”¿Está ocupado el disco?”Sí (node_exporter)
“¿Cuál es la distribución de latencia de I/O?”No
”¿Cuánto tiempo esperan las tareas para programarse?”No
”¿Por qué están sucediendo retransmisiones de TCP?”Parcialmente
”¿Qué cgroup causó esto?”NoSí (decodificador de cgroup)

ebpf_exporter vs herramientas relacionadas

HerramientaModelo
ebpf_exporterMétricas continuas de eBPF → Prometheus
bpftraceLíneas de eBPF de una sola vez, interactivas ad-hoc
bcc-toolsHerramientas de diagnóstico de eBPF pregeneradas
node_exporterMétricas publicadas por kernel estándar
bpftopSobrecarga 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