Parca Agent - eBPF-Continuous-Profiling Cheatsheet
Parca Agent ist ein eBPF-basiertes Continuous-Profiler. Anstatt einen Profiler anzuhängen, wenn Sie ein Problem vermuten, werden Stack-Traces aus jedem Prozess auf einem Knoten, die ganze Zeit, mit etwa 1% Overhead und mit Null Application-Instrumentierung abgetastet. Das kehrt den üblichen Workflow um: Anstatt einen Incident unter einem Profiler zu reproduzieren, schauen Sie nach, was tatsächlich während des Incident-Fensters lief. Es ordnet CPU (und Speicher, für unterstützte Runtimes) bis zur Zeilennummer zu und sendet Profile an einen Parca-Server oder jeden Prometheus-kompatiblen Profile-Store.
Anforderungen
- Linux-Kernel mit eBPF/BTF (5.4+, neuere bevorzugt)
- Root / privilegierter Container
- Parca-Server (oder kompatibler Store) zum Empfangen von Profilen
Installation
| Methode | Befehl |
|---|
| Binärdatei | Download von GitHub Releases |
| Docker | docker run --privileged ghcr.io/parca-dev/parca-agent:latest |
| Kubernetes | Als DaemonSet bereitstellen (Manifeste bereitgestellt) |
| Server | Führe parca separat aus, um Profile zu speichern/abzufragen |
| Überprüfung | parca-agent --version |
Ausführung
sudo parca-agent \
--node=my-node-1 \
--remote-store-address=parca.internal:7070 \
--remote-store-insecure
| Flag | Zweck |
|---|
--node | Knoten-Label, das an Profile angehängt wird |
--remote-store-address | Wohin Profile versendet werden |
--http-address | Lokaler UI/Metrics-Endpoint (:7071) |
--profiling-duration | Abfenster (Standard 10s) |
--log-level | Ausführlichkeit |
Kubernetes DaemonSet
| Aspekt | Anmerkung |
|---|
| Bereitstellung | Ein Agent pro Knoten |
| Berechtigungen | privileged: true, hostPID |
| Entdeckung | Automatisch mit Pod/Container/Namespace gekennzeichnet |
| Overhead | ~1% CPU typisch |
| Speicher | Profile gehen zum Parca-Server, nicht zum Knoten |
Sprachunterstützung
| Runtime | Stack-Unwinding |
|---|
| C/C++/Rust/Go | Nativ (DWARF oder Frame-Zeiger) |
| Java | JIT-Symbollösung |
| Python / Ruby | Interpreter-bewusste Entfaltung |
| Node.js | Unterstützt via Runtime-Unwinding |
| Jede Binärdatei mit Symbolen | Beste Ergebnisse, wenn nicht entfernt |
Mixed-Language-Stacks werden in einem Profil aufgelöst, was genau das ist, was Sie für einen polyglotten Service brauchen.
Profile abfragen
Die UI (und API) von Parca lässt Sie Profile wie Metriken schneiden:
| Abfrage-Dimension | Beispiel |
|---|
| Zeitbereich | Die 5 Minuten um einen Incident |
| Labels | namespace="prod", pod=~"api-.*" |
| Vergleich | Diff zwei Zeitbereiche (vor/nach einer Bereitstellung) |
| Funktion | Filter zu einem Symbol |
# Konzeptionell: CPU-Profil für einen Service während eines Spitzenwerts
cpu_samples{namespace="prod", container="api"} [14:05 → 14:10]
Die Killer-Funktion: Vergleich
| Verwendung | Wie |
|---|
| Regressions-Jagd | Diff Profile vor vs nach einer Freigabe |
| Incident-Analyse | Diff Incident-Fenster vs Baseline |
| Optimierungs-Nachweis | Zeigen Sie, dass die heiße Funktion schrumpfte |
Continuous Profiling macht dies möglich, weil das “vor”-Profil bereits existiert — Sie mussten nicht vorhersagen, dass Sie es mögen würden.
Parca Agent vs ähnliche Profiler
| Aspekt | Parca Agent | perf | Pyroscope | async-profiler |
|---|
| Modell | Immer aktiv, Fleet-weit | On-Demand, pro-Lauf | Immer aktiv | On-Demand, JVM |
| Instrumentierung | Keine (eBPF) | Keine | Agent/SDK-Optionen | JVM-Agent |
| Multi-Language | Ja | Ja (native) | Ja | Nur JVM |
| Bestes für | Production Continuous Profiling | Tiefe lokale Analyse | Continuous Profiling | JVM-Genauigkeit |
Gleiche Kategorie wie Pyroscope; verwenden Sie perf oder async-profiler, wenn Sie tiefe einmalige Analysen benötigen.
Ressourcen