Pular para o conteúdo

Parca Agent - Cheatsheet de Perfilamento Contínuo eBPF Sempre Ativo

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étodoComando
Binarydownload from GitHub Releases
Dockerdocker run --privileged ghcr.io/parca-dev/parca-agent:latest
KubernetesDeploy como DaemonSet (manifestos fornecidos)
Servidorexecute parca separadamente para armazenar/consultar perfis
Verificarparca-agent --version

Executando

sudo parca-agent \
  --node=my-node-1 \
  --remote-store-address=parca.internal:7070 \
  --remote-store-insecure
FlagPropósito
--nodeRótulo de nó anexado a perfis
--remote-store-addressPara onde enviar perfis
--http-addressEndpoint local UI/métricas (:7071)
--profiling-durationJanela de amostragem (padrão 10s)
--log-levelVerbosidade

Kubernetes DaemonSet

AspectoNota
DeploymentUm agente por nó
Privilégiosprivileged: true, hostPID
DescobertaRotula automaticamente por pod/container/namespace
Sobrecarga~1% CPU típico
ArmazenamentoPerfis vão para o servidor Parca, não o nó

Suporte de Linguagem

RuntimeDesembrulho de stack
C/C++/Rust/GoNativo (DWARF ou frame pointers)
JavaResolução de símbolo JIT
Python / RubyDesembrulho ciente do intérprete
Node.jsSuportado via desembrulho de runtime
Qualquer binary com símbolosMelhores 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 consultaExemplo
Intervalo de tempoOs 5 minutos em torno de um incidente
Rótulosnamespace="prod", pod=~"api-.*"
ComparaçãoDiff dois intervalos de tempo (antes/depois de um deploy)
FunçãoFiltrar 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

UsoComo
Caça de regressãoDiff perfis antes vs depois de um lançamento
Análise de incidenteDiff janela de incidente vs baseline
Prova de otimizaçãoMostre 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

AspectoParca AgentperfPyroscopeasync-profiler
ModeloSempre ativo, em toda a frotaSob demanda, por execuçãoSempre ativoSob demanda, JVM
InstrumentaçãoNenhuma (eBPF)NenhumaOpções Agent/SDKJVM agent
Multi-linguagemSimSim (nativo)SimApenas JVM
Melhor paraPerfilamento contínuo de produçãoAnálise local profundaPerfilamento contínuoPrecisão de JVM

Mesma categoria que Pyroscope; use perf ou async-profiler quando você precisa de análise profunda única.

Recursos