Der traditionelle Weg, ein Production-Problem zu profilieren, hat eine unangenehme Abhängigkeit: Du musst bereits vermuten, es existiert. Etwas sieht langsam aus, du befestigst einen Profiler, versuchst die Bedingung zu reproduzieren und — wenn du Glück hast und das Problem noch passiert — du erfasst Daten. Der Ausfalls-Modus ist offensichtlich und häufig. Der Incident passiert um 3 Uhr morgens, dauert vier Minuten, und bis jemand schaute, war der Beweis weg. Du addierst Logging, hoffst, es passiert wieder und wartest.
eBPF änderte die Wirtschaft genug, um diesen Workflow umzukehren. Weil eBPF-Programme in einem verifizierten Sandbox im Kernel laufen, können sie Syscalls, Scheduling und Stack-Traces über jeden Prozess auf einer Machine bei Overhead niedrig — konsistent unter 1% — beobachten, um permanent zu laufen. Das verwandelt Profiling von etwas, das du startest, zu etwas, das du abfragst: Die Daten für 3 Uhr morgens existiert bereits. Diese Anleitung deckt diese Verschiebung durch Parca Agent für Continuous Profiling, und eine neuere Anwendung, die aufgekommen ist, wenn autonome Agenten verbreiten — usando die gleiche Kernel-Level-Sichtbarkeit zu sehen, was ein KI-Agent tatsächlich tat, via Tools wie AgentSight.
Warum eBPF Immer-Aktiv machte Umsetzbar
Der technische Grund, dass Continuous Profiling zuvor unpraktisch war, ist, dass die älteren Optionen alle eine Steuer auflegten, die du nicht permanent zahlen würdest. Sampling-Profiler basierend auf perf sind billig, aber erfordern Setup pro Ziel und erzeugen Daten, die du selbst managen musst. Instrumentierte Profiler erfordern Code-Änderungen und addieren Per-Call-Overhead. Sprachspezifische Agenten decken eine Runtime ab und führen oft ihren eigenen Performance-Kosten ein. Keine davon waren Dinge, die du auf jedem Prozess auf jedem Knoten für immer laufen würdest.
eBPFs Beitrag ist, dass Programme in Kernel-Raum laufen, sodass das Sammeln eines Stack-Traces keinen Kontext-Wechsel zu einem Userspace-Agent für jeden Sample erfordert, und der Kernel Verifier statisch beweist, dass das Programm das System nicht zum Crash oder für immer Schleife bringen kann, bevor ihm erlaubt, zu laden. Das Ergebnis ist Kernel-Level-Sichtbarkeit mit Sicherheits-Garantien und Overhead im Noise. Entscheidend ist es auch Null-Instrumentierung: Du modifizierst, kompilierst nicht erneut und restarts nicht die Anwendungen, die profiliert werden, was die organisatorische Reibung entfernt, die die meisten vorherigen Versuche tötete ("wir würde jedes Team einen Agent hinzufügen müssen").
Es gibt eine echte Voraussetzung wert zu geben: Dies hängt von einem ziemlich modernen Kernel mit BTF-Unterstützung ab, und Stack-Unwinding-Qualität hängt davon ab, dass deine Binärdateien Symbole haben. Gestrippte Production-Binärdateien ertragen Profile voll von Hex-Adressen, was ein lösbares Problem ist, aber eins, das du lösen solltest, bevor du abschlussfolgerst, dass das Tool nicht funktioniert.
Continuous Profiling in der Praxis
Parca Agent ist die klareste Ausdrucksweise der Idee. Als DaemonSet auf Kubernetes bereitgestellt (oder ein Prozess auf einem Knoten), es tastet Stack-Traces von jedem Prozess auf diesem Knoten, kontinuierlich, mit Pod-, Container- und Namespace-Metadaten gekennzeichnet und verschifft sie zu einem Server, wo sie wie Metriken gespeichert sind — abfragbar nach Zeit-Bereich und Label.
Das Speicher-Modell ist, was es nützlich macht anstelle von bloß interessant. Weil Profile Zeitserien gekennzeichnet sind, kannst du Fragen stellen, die On-Demand-Profiling nicht kann beantworten. Was verbrauchte CPU im Payments-Namespace zwischen 03:04 und 03:08? Das Profil existiert; du filterst zum Fenster. Noch wertvoller ist Vergleich: diff das Profil vor einer Bereitstellung gegen danach, und die Regression erscheint als Funktion, die wuchs. Du musstest nicht vorhersagen, dass du das "vor"-Profil mögen würdest — kontinuierliche Sammlung bedeutet, es ist immer da.
Parca handhabt Mixed-Language-Stacks, was mehr wichtig ist als es klingt. Ein moderner Service könnte Go aufrufen, das in C-Bibliotheken, oder Python, das native Erweiterungen aufruft, und ein Profil, das nur eine Schicht auflöst, sagt eine irreführende Geschichte. Kernel-Level-Unwinding sieht den ganzen Stack. Für tiefe One-Off-Analysen wirst du immer noch zu perf oder async-profiler greifen — Continuous Profiling optimiert für Abdeckung und Geschichte, nicht Maximum-Pro-Lauf-Detail — aber die alltägliche Frage von "worauf verbringt dieser Cluster CPU" kontinuierlich und billig beantwortet wird.
Das neuere Problem: Was tat der Agent?
Die zweite Anwendung ist neuere und, in 2026, progressiv notwendiger. Teams führen autonome Code-Agenten und LLM-Agenten mit Tool-Zugriff auf echten Systemen aus. Diese Agenten lesen Dateien, führen Befehle aus, installieren Pakete und machen Netzwerk-Aufrufe. Die Observabilität, die diese Systeme liefern, ist Application-Level: Prompts, Tool-Aufrufe, Token-Zählungen, Spannen. Tools wie Langfuse und Arize Phoenix tun dies gut und sind genuinely nützlich zum Verstehen eines Agent-Reasoning.
Aber Application-Level-Tracing hat eine strukturelle Einschränkung: es zeigt, was das Agent-Framework beschloss zu berichten. Wenn ein Tool einen Shell-Befehl ausführt, der Trace zeichnet die Befehl-Zeichenkette — nicht die siebzehn Prozesse, die der Befehl erzeugte, die Dateien, die sie berührte oder den Host, den sie kontaktierten. Wenn der Agent durch Prompt-Injection kompromittiert ist und eine Aktion außerhalb seines beabsichtigten Umfangs nimmt, der Trace zeigt die Aktion, die er erzählte, was genau die falsche Wahrheitsquelle für eine Sicherheitsfrage ist.
AgentSight wendet eBPF hier an: beobachte das Agent echte Systemverhalten auf Kernel-Level — Prozess-Ausführung, Datei-Zugriff, Netzwerk-Verbindungen — ohne Instrumentierung des Agent überhaupt. Der Agent kann nicht diese Ereignisse auslassen oder falsch berichten, weil es nicht der, der sie meldet. Für einen Code-Agent, der auf einem Repository operiert, du erhältst die echte Antwort zu "welche Dateien modifizierte es", "was führte es aus" und "erreichte es außerhalb des Workspace".
Der richtige Zustand ist, dass diese ergänzende Schichten sind, nicht Konkurrenten. Application Tracing sagt dir des Agent Absicht und Reasoning; Kernel Tracing sagt dir seine Effekte. Sie nach Zeitstempel korrelierend gibt dir beide Hälften: das ist, was der Agent versuchte zu tun und das ist, was tatsächlich auf der Machine passierte. Für irgendetwas mit echten Berechtigungen, nur die erste Hälfte zu haben, ist eine Lücke.
Sicherheit, nicht nur Performance
Das Framing zeigt auf der breiter Verwendung. Die gleiche eBPF-Foundation untermauert Runtime-Sicherheits-Tools — Tracee, Falco, Tetragon — die wache für verdächtig Kernel-Level-Verhalten und, in Tetragon Fall, Richtlinie im Kernel durchsetzen können. Sobald du Prozess-, Datei- und Netzwerk-Ereignisse auf jeden Knoten sammelst, ist der Unterschied zwischen "Observability" und "Detection" mostly welche Fragen du das der Daten fragst.
Für Agent-Workloads spezifisch, diese Konvergenz ist nützlich. Die Fragen "warum ist dies langsam," "was änderte der Agent" und "tat irgendetwas seine Sanbox zu entgehen" werden alle von den gleichen Event-Stream beantwortet. Praktisch, das bedeutet eine Organization, die Agenten mit System-Zugriff bereitstellet, sollte Kernel-Level-Sichtbarkeit als Teil der Bereitstellung behandeln, nicht ein Nachdenken — es ist die einzige Schicht, die überprüfbare Beweise davon erzeugt, was ein autonomer Prozess tatsächlich tat.
Die ehrlich Warnung ist Volumen. Kernel-Level-Tracing kann enorm Event-Streams erzeugen, und Naiv logging jedes Syscall auf einem beschäftigten Knoten wird deinen Speicher und deine Fähigkeit, irgendetwas zu finden, überwältigen. Filterung am Quell — durch Pfad, durch Prozess, durch Event-Typ — ist nicht eine Optimierung, aber eine Voraussetzung, und das ist, wo die meisten operationellen Arbeiten in diesen Tools leben.
Lese ein Profil, ohne dich selbst zu täuschen
Continuous Profiling erzeugt viele Daten, und es gibt einige zuverlässige Wege, um sie zu misinterpretieren. Wert zu wissen, bevor du auf einen Flame-Graph handelst.
Breite ist Samples, nicht Wall-Clock-Latency. Ein CPU-Profil zeigt, wo die CPU-Zeit ging. Wenn dein Service langsam ist, weil es wartet — auf eine Datenbank, einen Lock, einen Netzwerk-Anruf — das CPU-Profil kann perfekt gesund aussehen, weil ein blockierter Thread keine CPU verbraucht. Das ist das einzelne häufigste Misdiagnose: abschließend es gibt kein Problem, weil das CPU-Profil flach ist, wenn das Problem Off-CPU-Zeit ist. Wall-Clock- oder Off-CPU-Profiling beantwortet diese Frage anstelle.
Aggregate Hotspots sind nicht unbedingt dein Latenz-Problem. Eine Funktion, die 30% Cluster-CPU verbraucht, kann völlig erwartet Hintergrund-Arbeit sein — Serialisierung, Kompression, Speicherbereinigung. Das interessante Signal ist normalerweise eine Änderung: diese Funktion war 5% letzter Woche und ist jetzt 30%. Das ist, warum Vergleich mehr als absolute Ranking wichtig ist, und warum kontinuierliche Sammlung einen einzelnen Snapshot schlägt.
Symbol-Qualität Formen Schlussfolgerungen. Fehlende Symbole lassen Stacks in unhilfreiche Hex-Adressen zusammenfallen und schlimmer, sie können Zeit zum nächsten lösbaren Frame misattribuieren — erzeugen eine selbstbewusst, falsche Antwort. Wenn ein Profil eine Funktion beschuldigt, die keinen Sinn macht, verdächtig Unwinding bevor du den Code verdächtigst.
Sampling hat einen Fußboden. Eine Funktion, die häufig aber sehr kurz läuft, kann relativ unterrepräsentiert zu seinem echten Kosten sein und seltene-aber-teuere Ereignisse können gar nicht in einem kurzen Fenster erscheinen. Kontinuierliche Sammlung mildert dies durch Aggregation über lange Perioden, das ist ein anderes Argument für Immer-an über On-Demand.
Die praktische Gewohnheit: benutze das Profil, um eine Hypothese zu bilden, dann bestätige es mit einer gezielten Messung, bevor du einen Sprint verbringst, um zu optimieren.
Adopting dieser verständnisvoll
Eine pragmatische Sequenz vermeidet den häufigen Fehler, alles zu bereitstellet und zu ertrinken. Starte mit Continuous Profiling auf einer Subset von Knoten. Es ist das niedrigste-Risiko-Introduction, liefert Wert unmittelbar (du wirst etwas Überraschendes in der ersten Woche finden) und lehrt dich, wie deine Kernel und Symbole verhalten, bevor irgendetwas darauf abhängt. Bestätige, dass Stacks zu echten Funktionsnamen auflösen; behebe Symbol-Verfügbarkeit, wenn sie nicht.
Dann addiere Vergleich-Workflows, weil das ist, wo die Auszahlung konzentriert: Verdrahtung Profile-Diffing in dinen Release-Prozess, sodass eine CPU-Regression gefasst wird als eine Profil-Änderung anstelle als eine Latenz-Alert drei Tage später.
Addiere Agent-Level-Tracing, wenn du tatsächlich Agenten mit System-Zugriff läufst. Wenn deine Agenten nur APIs aufrufen und Text zurückgeben, Kernel-Tracing ist Overkill. Wenn sie Befehle ausführen, Dateien schreiben oder Repositories operieren, die Sichtbarkeit-Lücke ist real und Wert Schließen.
Und filtere aggressiv vom Anfang. Entscheide voraus, welche Pfade, Prozesse und Event-Typen wichtig sind und schließe den Rest aus. Es ist viel leichter, einen engen Filter später zu verbreitern, als zu einer Feuergesch du bereits speicherst retrofit zu filtern.
Endlich, halte die On-Demand-Tools scharf. Continuous Profiling sagt dir dass eine Funktion heiß wurde und wann; perf, bpftrace und async-profiler bleiben besser für den tiefem Tauchgang zu warum. Der Workflow, der funktioniert, ist kontinuierliche Daten für Erkennung und Geschichte, gezielt Tools für Diagnose.
Das Fazit
eBPF verschob Observabilität von "heften ein Profiler an, wenn du ein Problem verdächtigst" zu "die Daten existiert bereits, frage es," weil Kernel-Seite-Ausführung mit einem verifizierten Sandbox Immer-Aktiv-Sammlung under 1% Kosten und null Anwendungs-Änderungen machte. Parca Agent liefert dies als kontinuierlich, Label-abfragbar, Mixed-Language-CPU-Profiling, deren echter Superpower Vergleichen vor und nachher ist. Die neuere Grenze ist applying die gleiche Sichtbarkeit zu autonomen Agenten: AgentSight zeigt, was ein Agent tatsächlich auf dem Syscall-Level tat, schließend die Lücke von Application-Traces, die nur berichten, was der Agent gewählte zu erzählen. Starten Sie mit Profiling auf ein paar Knoten, verifizieren Sie deine Symbole, baue Vergleich in Releases, addiere Agent-Tracing, wenn Agenten echte Systeme berühren, filtere hart vom Tag eins und halte perf und bpftrace zum Tauchgang den tiefem.
Referenzen und Ressourcen
Tools
Hintergrund und Analyse
- 8 Best Open-Source eBPF Tracing Tools in 2026 — Better Stack
- eBPF.io — what is eBPF
- Brendan Gregg on eBPF performance tools
Zugehörige 1337skills Cheatsheets