Zum Inhalt springen

Parca Agent - eBPF-Continuous-Profiling Cheatsheet

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

MethodeBefehl
BinärdateiDownload von GitHub Releases
Dockerdocker run --privileged ghcr.io/parca-dev/parca-agent:latest
KubernetesAls DaemonSet bereitstellen (Manifeste bereitgestellt)
ServerFühre parca separat aus, um Profile zu speichern/abzufragen
Überprüfungparca-agent --version

Ausführung

sudo parca-agent \
  --node=my-node-1 \
  --remote-store-address=parca.internal:7070 \
  --remote-store-insecure
FlagZweck
--nodeKnoten-Label, das an Profile angehängt wird
--remote-store-addressWohin Profile versendet werden
--http-addressLokaler UI/Metrics-Endpoint (:7071)
--profiling-durationAbfenster (Standard 10s)
--log-levelAusführlichkeit

Kubernetes DaemonSet

AspektAnmerkung
BereitstellungEin Agent pro Knoten
Berechtigungenprivileged: true, hostPID
EntdeckungAutomatisch mit Pod/Container/Namespace gekennzeichnet
Overhead~1% CPU typisch
SpeicherProfile gehen zum Parca-Server, nicht zum Knoten

Sprachunterstützung

RuntimeStack-Unwinding
C/C++/Rust/GoNativ (DWARF oder Frame-Zeiger)
JavaJIT-Symbollösung
Python / RubyInterpreter-bewusste Entfaltung
Node.jsUnterstützt via Runtime-Unwinding
Jede Binärdatei mit SymbolenBeste 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-DimensionBeispiel
ZeitbereichDie 5 Minuten um einen Incident
Labelsnamespace="prod", pod=~"api-.*"
VergleichDiff zwei Zeitbereiche (vor/nach einer Bereitstellung)
FunktionFilter 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

VerwendungWie
Regressions-JagdDiff Profile vor vs nach einer Freigabe
Incident-AnalyseDiff Incident-Fenster vs Baseline
Optimierungs-NachweisZeigen 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

AspektParca AgentperfPyroscopeasync-profiler
ModellImmer aktiv, Fleet-weitOn-Demand, pro-LaufImmer aktivOn-Demand, JVM
InstrumentierungKeine (eBPF)KeineAgent/SDK-OptionenJVM-Agent
Multi-LanguageJaJa (native)JaNur JVM
Bestes fürProduction Continuous ProfilingTiefe lokale AnalyseContinuous ProfilingJVM-Genauigkeit

Gleiche Kategorie wie Pyroscope; verwenden Sie perf oder async-profiler, wenn Sie tiefe einmalige Analysen benötigen.

Ressourcen