Ir al contenido

Parca Agent - Perfilado Continuo eBPF Siempre Activo

Parca Agent - Perfilado Continuo eBPF Siempre Activo

Parca Agent es un perfilador continuo basado en eBPF. En lugar de adjuntar un perfilador cuando sospechas un problema, muestrea stack traces de cada proceso en un nodo, todo el tiempo, con aproximadamente 1% de overhead y sin instrumentación de aplicación. Eso invierte el flujo de trabajo usual: en lugar de reproducir un incidente bajo un perfilador, buscas qué estaba realmente ejecutándose durante la ventana del incidente. Atribuye CPU (y memoria, para runtimes soportados) hasta el número de línea y envía perfiles a un servidor Parca o cualquier almacén compatible con Prometheus.

Requisitos

  • Kernel Linux con eBPF/BTF (5.4+, versiones más nuevas preferidas)
  • Root / contenedor privilegiado
  • Servidor Parca (o almacén compatible) para recibir perfiles

Instalación

MétodoComando
Binariodescargar desde GitHub Releases
Dockerdocker run --privileged ghcr.io/parca-dev/parca-agent:latest
KubernetesDesplegar como DaemonSet (manifiestos proporcionados)
Servidorejecutar parca por separado para almacenar/consultar perfiles
Verificarparca-agent --version

Ejecución

sudo parca-agent \
  --node=my-node-1 \
  --remote-store-address=parca.internal:7070 \
  --remote-store-insecure
FlagPropósito
--nodeEtiqueta de nodo adjunta a perfiles
--remote-store-addressDónde enviar perfiles
--http-addressEndpoint de UI/métricas local (:7071)
--profiling-durationVentana de muestreo (por defecto 10s)
--log-levelVerbosidad

DaemonSet de Kubernetes

AspectoNota
DespliegueUn agente por nodo
Privilegiosprivileged: true, hostPID
DescubrimientoEtiqueta automáticamente por pod/contenedor/namespace
Overhead~1% CPU típico
AlmacenamientoLos perfiles van al servidor Parca, no al nodo

Soporte de lenguajes

RuntimeDesenvuelto de stack
C/C++/Rust/GoNativo (DWARF o frame pointers)
JavaResolución de símbolos JIT
Python / RubyDesenvuelto consciente del intérprete
Node.jsSoportado vía desenvuelto del runtime
Cualquier binario con símbolosMejores resultados sin strip

Los stacks mixtos de lenguaje se resuelven en un perfil, que es exactamente lo que necesitas para un servicio polígota.

Consultando perfiles

La UI (y API) de Parca te permite segmentar perfiles como métricas:

Dimensión de consultaEjemplo
Rango de tiempoLos 5 minutos alrededor de un incidente
Etiquetasnamespace="prod", pod=~"api-.*"
ComparaciónDiff entre dos rangos de tiempo (antes/después de un deploy)
FunciónFiltrar a un símbolo
# Conceptual: perfil de CPU para un servicio durante un pico
cpu_samples{namespace="prod", container="api"}  [14:05 → 14:10]

La característica definitiva: comparación

UsoCómo
Búsqueda de regresiónDiff de perfiles antes vs después de un release
Análisis de incidenteDiff de ventana de incidente vs baseline
Prueba de optimizaciónMostrar que la función hot se encogió

El perfilado continuo hace esto posible porque el perfil “antes” ya existe — no necesitabas predecir que lo querrías.

Parca Agent vs perfiladores relacionados

AspectoParca AgentperfPyroscopeasync-profiler
ModeloSiempre activo, a nivel de flotaOn-demand, por ejecuciónSiempre activoOn-demand, JVM
InstrumentaciónNinguna (eBPF)NingunaOpciones de agente/SDKAgente JVM
MultilenguajeSí (nativo)Solo JVM
Mejor paraPerfilado continuo en producciónAnálisis local profundoPerfilado continuoPrecisión en JVM

Misma categoría que Pyroscope; usa perf o async-profiler cuando necesites análisis profundo de una sola ejecución.

Recursos