Parca Agent - Cheatsheet de Perfilamento Contínuo eBPF Sempre Ativo
Parca Agent é um perfilador contínuo baseado em eBPF. Em vez de anexar um perfilador quando você suspeita de um problema, ele amostra stack traces de todos os processos de um nó, o tempo todo, em aproximadamente 1% de sobrecarga e com zero instrumentação de aplicação. Isso inverte o fluxo de trabalho usual: em vez de reproduzir um incidente sob um perfilador, você procura o que realmente estava em execução durante a janela de incidente. Ele atribui CPU (e memória, para runtimes suportados) até o número de linha e envia perfis para um servidor Parca ou qualquer armazenamento de perfis compatível com Prometheus.
Requisitos
- Kernel Linux com eBPF/BTF (5.4+, mais recente preferido)
- Root / container privilegiado
- Servidor Parca (ou armazenamento compatível) para receber perfis
Instalação
| Método | Comando |
|---|
| Binary | download from GitHub Releases |
| Docker | docker run --privileged ghcr.io/parca-dev/parca-agent:latest |
| Kubernetes | Deploy como DaemonSet (manifestos fornecidos) |
| Servidor | execute parca separadamente para armazenar/consultar perfis |
| Verificar | parca-agent --version |
Executando
sudo parca-agent \
--node=my-node-1 \
--remote-store-address=parca.internal:7070 \
--remote-store-insecure
| Flag | Propósito |
|---|
--node | Rótulo de nó anexado a perfis |
--remote-store-address | Para onde enviar perfis |
--http-address | Endpoint local UI/métricas (:7071) |
--profiling-duration | Janela de amostragem (padrão 10s) |
--log-level | Verbosidade |
Kubernetes DaemonSet
| Aspecto | Nota |
|---|
| Deployment | Um agente por nó |
| Privilégios | privileged: true, hostPID |
| Descoberta | Rotula automaticamente por pod/container/namespace |
| Sobrecarga | ~1% CPU típico |
| Armazenamento | Perfis vão para o servidor Parca, não o nó |
Suporte de Linguagem
| Runtime | Desembrulho de stack |
|---|
| C/C++/Rust/Go | Nativo (DWARF ou frame pointers) |
| Java | Resolução de símbolo JIT |
| Python / Ruby | Desembrulho ciente do intérprete |
| Node.js | Suportado via desembrulho de runtime |
| Qualquer binary com símbolos | Melhores resultados quando não stripped |
Stacks em linguagem mista resolvem em um perfil, que é exatamente o que você precisa para um serviço poliglota.
Consultando Perfis
A UI de Parca (e API) permite fatiar perfis como métricas:
| Dimensão de consulta | Exemplo |
|---|
| Intervalo de tempo | Os 5 minutos em torno de um incidente |
| Rótulos | namespace="prod", pod=~"api-.*" |
| Comparação | Diff dois intervalos de tempo (antes/depois de um deploy) |
| Função | Filtrar para um símbolo |
# Conceitual: Perfil CPU para um serviço durante um pico
cpu_samples{namespace="prod", container="api"} [14:05 → 14:10]
O Recurso Killer: Comparação
| Uso | Como |
|---|
| Caça de regressão | Diff perfis antes vs depois de um lançamento |
| Análise de incidente | Diff janela de incidente vs baseline |
| Prova de otimização | Mostre que a função hot encolheu |
O perfilamento contínuo torna isso possível porque o perfil “antes” já existe — você não precisava prever que o desejaria.
Parca Agent vs Perfiladores Relacionados
| Aspecto | Parca Agent | perf | Pyroscope | async-profiler |
|---|
| Modelo | Sempre ativo, em toda a frota | Sob demanda, por execução | Sempre ativo | Sob demanda, JVM |
| Instrumentação | Nenhuma (eBPF) | Nenhuma | Opções Agent/SDK | JVM agent |
| Multi-linguagem | Sim | Sim (nativo) | Sim | Apenas JVM |
| Melhor para | Perfilamento contínuo de produção | Análise local profunda | Perfilamento contínuo | Precisão de JVM |
Mesma categoria que Pyroscope; use perf ou async-profiler quando você precisa de análise profunda única.
Recursos