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
| Metodo | Comando |
|---|
| Binario | scarica da GitHub Releases |
| Docker | docker run --privileged ghcr.io/parca-dev/parca-agent:latest |
| Kubernetes | Distribuisci come DaemonSet (manifesti forniti) |
| Server | esegui parca separatamente per memorizzare/interrogare i profili |
| Verifica | parca-agent --version |
Esecuzione
sudo parca-agent \
--node=my-node-1 \
--remote-store-address=parca.internal:7070 \
--remote-store-insecure
| Flag | Scopo |
|---|
--node | Etichetta del nodo allegata ai profili |
--remote-store-address | Dove inviare i profili |
--http-address | Endpoint dell”interfaccia utente/metriche locale (:7071) |
--profiling-duration | Finestra di campionamento (default 10s) |
--log-level | Verbosità |
DaemonSet Kubernetes
| Aspetto | Nota |
|---|
| Distribuzione | Un agente per nodo |
| Privilegi | privileged: true, hostPID |
| Scoperta | Etichetta automaticamente per pod/container/namespace |
| Overhead | ~1% di CPU tipicamente |
| Archiviazione | I profili vanno al server Parca, non al nodo |
Supporto per Linguaggi
| Runtime | Unwinding dello stack |
|---|
| C/C++/Rust/Go | Nativo (DWARF o frame pointer) |
| Java | Risoluzione dei simboli JIT |
| Python / Ruby | Unwinding consapevole dell”interprete |
| Node.js | Supportato tramite unwinding runtime |
| Qualsiasi binario con simboli | Migliori 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 interrogazione | Esempio |
|---|
| Intervallo di tempo | I 5 minuti intorno a un incidente |
| Etichette | namespace="prod", pod=~"api-.*" |
| Confronto | Diff due intervalli di tempo (prima/dopo un deploy) |
| Funzione | Filtra 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
| Utilizzo | Come |
|---|
| Ricerca di regressione | Diff dei profili prima vs dopo un rilascio |
| Analisi degli incidenti | Diff della finestra dell”incidente vs baseline |
| Prova dell”ottimizzazione | Mostra 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
| Aspetto | Parca Agent | perf | Pyroscope | async-profiler |
|---|
| Modello | Sempre-su, a livello di fleet | On-demand, per esecuzione | Sempre-su | On-demand, JVM |
| Strumentazione | Nessuna (eBPF) | Nessuna | Opzioni agente/SDK | Agente JVM |
| Multi-linguaggio | Sì | Sì (nativo) | Sì | Solo JVM |
| Migliore per | Profiling continuo di produzione | Analisi locale profonda | Profiling continuo | Precisione JVM |
Stessa categoria di Pyroscope; usa perf o async-profiler quando hai bisogno di analisi profonda una tantum.
Risorse