Lexikon · E

eBPF

Linux-Kernel-Technologie, die geprüfte, isolierte Programme bei Kernel- und User-Space-Ereignissen ausführt, ohne Kernel-Code zu ändern.

Von Obseria-RedaktionAktualisiert

Definition

eBPF (Extended Berkeley Packet Filter) ist eine Technologie im Linux-Kernel, die kleine, isolierte Programme als Reaktion auf Ereignisse wie Systemaufrufe, Funktionsaufrufe, Netzwerkpakete oder Timer ausführt. Der Kernel prüft jedes Programm vor der Ausführung auf Sicherheit. So entstehen tiefe Einblicke in Netzwerk, Security und Observability ohne Kernel-Module oder Änderungen am Anwendungscode.

Was eBPF ist

Mit eBPF lässt sich der Linux-Kernel zur Laufzeit erweitern, ohne Kernel-Module zu schreiben oder den Kernel neu zu bauen. Die Wurzeln liegen im ursprünglichen Berkeley Packet Filter, der Anfang der 1990er-Jahre entstand, um Netzwerkpakete für Tools wie tcpdump effizient zu filtern. Ab etwa 2014 erhielt der Linux-Kernel eine erweiterte Version mit leistungsfähigerem Befehlssatz, Datenstrukturen und vielen neuen Einhängepunkten. Heute steht der Name eBPF für die gesamte Technologie, weit über Paketfilterung hinaus.

Für Observability ist eBPF attraktiv, weil es sieht, was der Kernel sieht: jeden Systemaufruf, jede TCP-Verbindung, jeden geplanten Prozess und mit User-Space-Probes sogar Funktionsaufrufe innerhalb von Anwendungen. Das geschieht von außerhalb der Anwendung, Daten lassen sich also erfassen, ohne Code zu ändern oder neu zu starten.

Wie eBPF funktioniert

  1. Schreiben und kompilieren. eBPF-Programme werden meist in eingeschränktem C geschrieben oder von höheren Tools erzeugt und mit LLVM/Clang zu eBPF-Bytecode kompiliert.
  2. Verifizieren. Beim Laden prüft der Verifier im Kernel, dass das Programm terminiert, nur auf erlaubten Speicher zugreift und den Kernel nicht zum Absturz bringen kann. Programme, die die Prüfung nicht bestehen, werden abgewiesen.
  3. JIT-kompilieren und einhängen. Der Bytecode wird just in time in nativen Maschinencode übersetzt und an einen Hook gebunden.
  4. Daten über Maps teilen. eBPF-Maps (Hash-Tabellen, Arrays, Ring Buffer und mehr) speichern Zustand und übergeben Daten an den User Space, wo ein Agent sie aggregiert und exportiert.

Typische Hooks sind kprobes und fentry für Kernel-Funktionen, uprobes für User-Space-Funktionen, Tracepoints, Perf Events für Sampling sowie Netzwerk-Hooks wie XDP und Traffic Control (tc). BTF-Typinformationen und CO-RE („Compile Once, Run Everywhere“) erlauben es, ein kompiliertes Programm auf unterschiedlichen Kernel-Versionen auszuführen.

Warum eBPF für Observability wichtig ist

Bisherige Ansätze für tiefe Einblicke hatten unbequeme Zielkonflikte. Kernel-Module sind mächtig, aber riskant, denn ein Fehler kann den Host zum Absturz bringen. Sprach-Agents und SDKs liefern reichen Kontext, müssen aber in jeden Service und jede Sprache eingebaut und aktuell gehalten werden. eBPF eröffnet einen dritten Weg: sicherer, programmierbarer Zugriff auf Kernel-Ereignisse mit einem Agent pro Host. Besonders wertvoll ist das in Kubernetes-Clustern mit vielen Teams und Sprachen. Dort liefert eBPF eine einheitliche Grundlage aus Netzwerk-, Prozess- und Performance-Daten für jeden Workload, auch für Software von Drittanbietern, die Sie selbst nicht instrumentieren können.

Anwendungsfälle in der Observability

AnwendungsfallWas eBPF liefert
Netzwerk-MonitoringTCP-Verbindungen, Retransmits, DNS-Latenz und Traffic-Flüsse zwischen Pods und Hosts
Continuous ProfilingGesampelte Stacktraces aus Perf Events über alle Prozesse mit geringem Overhead
Automatische InstrumentierungRequest-Metriken und Spans für HTTP und gRPC aus Kernel- und Bibliotheks-Probes
SecurityProzessstarts, Dateizugriffe und Netzwerkaktivität zur Erkennung von Laufzeitbedrohungen
Performance-AnalyseScheduler-Latenz, Disk-I/O-Latenz und Histogramme von Systemaufrufen

Bekannte Open-Source-Projekte sind bpftrace und BCC für Ad-hoc-Tracing, Cilium für Networking, Falco für Runtime Security und Parca für Profiling. Auch das OpenTelemetry-Projekt pflegt eBPF-basierte Komponenten für Netzwerk-Telemetrie und Zero-Code-Instrumentierung.

Beispiel: ein Einzeiler

Mit bpftrace zählen Sie zehn Sekunden lang die Systemaufrufe pro Prozess auf einem Host, ohne eine Anwendung anzufassen:

bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @[comm] = count(); } interval:s:10 { exit(); }'

Produktive Agents nutzen dieselben Mechanismen, allerdings mit vorkompilierten Programmen, sorgfältigem Sampling und Aggregation in Kernel-Maps, sodass nur Zusammenfassungen in den User Space gelangen.

Grenzen und Zielkonflikte

  • Linux-zentriert. eBPF ist ein Feature des Linux-Kernels. Es gibt ein Projekt eBPF for Windows, dessen Ökosystem aber deutlich weniger ausgereift ist, und verwaltete Serverless-Plattformen erlauben meist kein Laden von eBPF-Programmen.
  • Kernel-Version zählt. Viele Funktionen setzen aktuelle Kernel voraus, BTF und CO-RE funktionieren am besten ab der 5.x-Reihe.
  • Berechtigungen. Zum Laden sind erweiterte Capabilities wie CAP_BPF und CAP_PERFMON nötig, auf älteren Kerneln CAP_SYS_ADMIN. Agents laufen daher privilegiert.
  • Weniger Anwendungskontext. eBPF sieht Bytes und Funktionsaufrufe, keine fachliche Bedeutung. Verschlüsselter Traffic erfordert Probes an TLS-Bibliotheken, und vollständige Context Propagation über Services hinweg ist schwieriger als mit SDK-basierter Instrumentierung.

Best Practices

Betrachten Sie eBPF als Ergänzung zu OpenTelemetry-SDKs, nicht als Ersatz. Nutzen Sie es für breite Abdeckung ohne Codeänderung bei Infrastruktur-, Netzwerk- und Profiling-Daten, und ergänzen Sie SDK-Instrumentierung dort, wo Sie fachliche Attribute und präzise Spans brauchen. Legen Sie die unterstützten Kernel-Versionen fest und testen Sie sie, prüfen Sie die Berechtigungen der Agents und messen Sie den Overhead an repräsentativen Workloads, bevor Sie flächendeckend ausrollen.

Wie Obseria unterstützt

Obseria verarbeitet OpenTelemetry-Daten nativ. Telemetrie aus eBPF-basierten OpenTelemetry-Komponenten landet daher direkt neben SDK-Traces, Logs und Metriken. Netzwerk-Monitoring, Continuous Profiling mit unter 1 % Overhead und Kubernetes Monitoring in Obseria setzen diese Low-Level-Daten in den Kontext der betroffenen Services.

Häufig gestellte Fragen

Ursprünglich für Extended Berkeley Packet Filter. Da die Technologie heute weit über Paketfilterung hinausgeht, behandelt die Community eBPF als eigenständigen Namen statt als Abkürzung.

eBPF-Programme werden vor der Ausführung vom Verifier des Kernels geprüft, was Abstürze und Endlosschleifen verhindert. Overhead und Berechtigungen müssen trotzdem geprüft werden, doch eBPF ist für Networking, Security und Observability in Produktion weit verbreitet.

Teilweise. eBPF kann ohne Codeänderung Request-Metriken und einfache Spans erzeugen, ihm fehlt aber fachlicher Kontext, und bei verschlüsseltem Traffic sowie serviceübergreifendem Kontext stößt es an Grenzen. Die meisten Teams kombinieren beides.

Grundlegende eBPF-Unterstützung gibt es seit vielen Jahren, moderne Observability-Tools benötigen aber meist Kernel mit BTF-Unterstützung, wie sie ab der 5.x-Reihe üblich sind. Prüfen Sie die Anforderungen des jeweiligen Tools.

Setzen Sie das Wissen in die Praxis um

Testen Sie Obseria 14 Tage kostenlos, mit OpenTelemetry und ohne proprietäre Agenten.