Parca convierte profiling en señal de observability continua. Tradicionalmente, profiling era herramienta ad-hoc — pprof cuando algo iba mal. Parca lo hace 24/7 en todo el cluster, vía eBPF, con overhead mínimo (<1% CPU). El resultado: ves cómo cambia el perfil de CPU de tus servicios, detectas regresiones de performance, y debugging tiene una nueva herramienta fundamental.
Qué ofrece
- CPU profiling continuous sin instrumentar apps.
- eBPF-based: no requiere cambios en código.
- Prometheus-style: push/pull, labels, time series.
- Flame graphs interactivos con zoom temporal.
- Parca Agent por nodo en Kubernetes.
- Parca Server para storage + UI.
Instalación
Kubernetes DaemonSet:
helm repo add parca https://parca-dev.github.io/helm-charts
helm install parca-agent parca/parca-agent --namespace monitoring
helm install parca parca/parca --namespace monitoring
Por defecto, Agent perfila todos los procesos del nodo. Puedes filtrar por labels.
Qué ves
Interface:
- Vista temporal: sample CPU over time for a service.
- Flame graph: jerarquía de functions consumiendo CPU.
- Comparison: comparar dos periodos (before/after deploy).
- Filtering: por container, pod, proceso, namespace.
- Iceberg view: inversión del flame graph — top consumers bottom-up.
Casos de uso reales
- Detectar memory leaks que se manifiestan como more work over time.
- Ver tras un deploy si CPU subió en función específica.
- Comparar performance entre versiones.
- Identify hot paths: dónde invertir optimization effort.
- Debugging incidents: post-mortem con data histórica.
Parca vs Pyroscope
Pyroscope (ahora parte de Grafana):
- Soporte multi-language maduro (Go, Python, Ruby, Node, Java, .NET).
- Integration nativa con Grafana.
- eBPF tampoco es primary foco.
Parca:
- eBPF primary: single agent perfila todo.
- Sin instrumentación de app: zero code changes.
- Más reciente: menos maturity que Pyroscope en algunos aspects.
- Grafana integration también disponible.
Para K8s con muchos lenguajes y zero-instrumentation, Parca. Para Grafana stack nativo con apps instrumentadas, Pyroscope.
Overhead real
Benchmarks:
- Parca Agent: ~0.5-1% CPU por nodo.
- Storage: compressed samples, ~GB/día para cluster de 50 nodos.
- Network: minimal — samples aggregated.
Low enough para correr siempre, no solo “cuando debugges”.
Storage
Parca server almacena en:
- ObjectStorage (S3) para samples.
- Prometheus metrics para metadata.
- TSDB interno.
Para storage long-term, S3-compatible + retention policy.
Language support
eBPF-based profiling funciona agnostic del lenguaje, pero:
- Stack unwinding: mejor en Go, C/C++, Rust con debug info.
- Java/.NET: requiere stack walker específico (Parca tiene support experimental).
- Python/Node: interpreted — Parca ve interpreter frames, no Python-level details. Complementar con language-specific profiler.
Para full observability en apps interpreted, Pyroscope tiende a ser mejor.
Integración con Grafana
Parca expone datos queryables. Grafana puede mostrar:
- Time series de CPU por servicio.
- Embedded flame graphs.
- Alertas cuando CPU spike en función específica.
Unified observability stack: metrics (Prometheus) + logs (Loki) + traces (Tempo) + profiles (Parca).
Casos donde sobra
- Apps simple single-node con htop/perf suficiente.
- Sin cluster K8s (Parca es cluster-oriented).
- Sin capacidad de interpretar flame graphs (requires skill).
- Sin incident patterns donde profiling sea valor.
Interpretar flame graphs
Skill clave:
- Width = time: más ancho = más CPU.
- Height = call depth: deeper = más nested.
- Colors: menos relevantes (random para diferenciar).
- Hot paths: mirar los más anchos top-level.
- Comparison: diff entre dos periodos highlights differences.
Para equipos sin experiencia, tutorial de Brendan Gregg es referencia.
Security
Parca Agent requiere:
- Privileged container (eBPF access).
- HostPID para ver procesos del host.
- HostNetwork para ciertos scenarios.
Es superficie de ataque significativa. Scope permissions narrow y auditoría recomendable.
Continuous profiling como cultura
Más allá de tool, es shift cultural:
- Perf regressions se detectan temprano (no hasta prod incident).
- Optimization decisions basadas en data.
- New hires pueden explorar codebase via flame graphs.
- Capacity planning más preciso.
Teams que adoptan profiling continuous reportan reducción meaningful en performance-related incidents.
Limitaciones
- Complejidad de kernel: eBPF diff entre versiones de kernel. Menos portable que hoped.
- Stack unwinding no siempre perfecto.
- Interpretar requiere skill y tiempo.
- Storage puede crecer grande en clusters grandes.
Alternativas commercial
- Datadog Continuous Profiler: mature, multi-language, pago.
- New Relic CodeStream.
- Pyroscope Cloud (ahora Grafana).
- Sentry Profiling.
Para startups, Pyroscope/Parca open-source cubre. Empresas con budget tend to use commercial por soporte.
Conclusión
Parca es herramienta seria para profiling continuous en Kubernetes. Su enfoque eBPF elimina fricción de instrumentación. Para apps compiled (Go, Rust, C), es near-perfect. Para apps interpreted, complementar con language-specific profilers. En stack observability moderno, continuous profiling es la cuarta dimensión (tras metrics/logs/traces). Adoptar Parca cuesta poco y da visibility difícil de conseguir de otras formas. Para equipos serious sobre performance, vale la pena.
Síguenos en jacar.es para más sobre observabilidad, eBPF y performance engineering.