Salta ai contenuti

Parca Agent - Profiling Continuo eBPF Sempre Attivo

Parca Agent - Profiling Continuo eBPF Sempre Attivo Cheatsheet

Parca Agent è un profiler continuo basato su eBPF. Invece di allegare un profiler quando sospetti un problema, campiona stack trace da ogni processo su un nodo, tutto il tempo, con circa l”1% di overhead e con zero strumentazione dell”applicazione. Questo inverte il workflow usuale: invece di riprodurre un incidente sotto un profiler, consulti cosa stava effettivamente girando durante la finestra dell”incidente. Attribuisce CPU (e memoria, per runtime supportati) fino al numero di riga e invia profili a un server Parca o a qualsiasi store di profili compatibile con Prometheus.

Requisiti

  • Kernel Linux con eBPF/BTF (5.4+, versioni più recenti preferite)
  • Root / contenitore privilegiato
  • Server Parca (o store compatibile) per ricevere i profili

Installazione

MetodoComando
Binarioscarica da GitHub Releases
Dockerdocker run --privileged ghcr.io/parca-dev/parca-agent:latest
KubernetesDistribuisci come DaemonSet (manifesti forniti)
Serveresegui parca separatamente per memorizzare/interrogare i profili
Verificaparca-agent --version

Esecuzione

sudo parca-agent \
  --node=my-node-1 \
  --remote-store-address=parca.internal:7070 \
  --remote-store-insecure
FlagScopo
--nodeEtichetta del nodo allegata ai profili
--remote-store-addressDove inviare i profili
--http-addressEndpoint dell”interfaccia utente/metriche locale (:7071)
--profiling-durationFinestra di campionamento (default 10s)
--log-levelVerbosità

DaemonSet Kubernetes

AspettoNota
DistribuzioneUn agente per nodo
Privilegiprivileged: true, hostPID
ScopertaEtichetta automaticamente per pod/container/namespace
Overhead~1% di CPU tipicamente
ArchiviazioneI profili vanno al server Parca, non al nodo

Supporto per Linguaggi

RuntimeUnwinding dello stack
C/C++/Rust/GoNativo (DWARF o frame pointer)
JavaRisoluzione dei simboli JIT
Python / RubyUnwinding consapevole dell”interprete
Node.jsSupportato tramite unwinding runtime
Qualsiasi binario con simboliMigliori risultati quando non privato

Gli stack di linguaggio misto si risolvono in un profilo, che è esattamente quello che ti serve per un servizio poliglotta.

Interrogazione dei Profili

L”interfaccia utente di Parca (e l”API) ti permette di suddividere i profili come metriche:

Dimensione di interrogazioneEsempio
Intervallo di tempoI 5 minuti intorno a un incidente
Etichettenamespace="prod", pod=~"api-.*"
ConfrontoDiff due intervalli di tempo (prima/dopo un deploy)
FunzioneFiltra a un simbolo
# Concettuale: profilo CPU per un servizio durante uno spike
cpu_samples{namespace="prod", container="api"}  [14:05 → 14:10]

La Caratteristica Principale: Confronto

UtilizzoCome
Ricerca di regressioneDiff dei profili prima vs dopo un rilascio
Analisi degli incidentiDiff della finestra dell”incidente vs baseline
Prova dell”ottimizzazioneMostra che la funzione hot si è ridotta

Il profiling continuo rende questo possibile perché il profilo “prima” esiste già — non avevi bisogno di prevedere che lo avresti voluto.

Parca Agent vs Profiler Correlati

AspettoParca AgentperfPyroscopeasync-profiler
ModelloSempre-su, a livello di fleetOn-demand, per esecuzioneSempre-suOn-demand, JVM
StrumentazioneNessuna (eBPF)NessunaOpzioni agente/SDKAgente JVM
Multi-linguaggioSì (nativo)Solo JVM
Migliore perProfiling continuo di produzioneAnalisi locale profondaProfiling continuoPrecisione JVM

Stessa categoria di Pyroscope; usa perf o async-profiler quando hai bisogno di analisi profonda una tantum.

Risorse