Toolkit and library for efficient BPF-based kernel tracing
BCC is a toolkit for creating efficient kernel tracing and manipulation programs built upon eBPF, and includes several useful command-line tools and examples. BCC eases writing of eBPF programs for kernel instrumentation in C, includes a wrapper around LLVM, and front-ends in Python and Lua. It also provides a high-level library for direct integration into applications.
eBPF-based Networking, Security, and Observability
Cilium is an open source project that provides eBPF-powered networking, security and observability. It has been specifically designed from the ground up to bring the advantages of eBPF to the world of Kubernetes and to address the new scalability, security and visibility requirements of container workloads.
High-level tracing language for Linux eBPF
bpftrace is a high-level tracing language for Linux eBPF. Its language is inspired by awk and C, and predecessor tracers such as DTrace and SystemTap. bpftrace uses LLVM as a backend to compile scripts to eBPF bytecode and makes use of BCC as a library for interacting with the Linux eBPF subsystem as well as existing Linux tracing capabilities and attachment points.
Cloud Native Runtime Security
Falco is a behavioral activity monitor designed to detect anomalous activity in applications. Falco audits a system at the Linux kernel layer with the help of eBPF. It enriches gathered data with other input streams such as container runtime metrics and Kubernetes metrics, and allows to continuously monitor and detect container, application, host, and network activity.
A high performance layer 4 load balancer
Katran is a C++ library and eBPF program to build a high-performance layer 4 load balancing forwarding plane. Katran leverages the XDP infrastructure from the Linux kernel to provide an in-kernel facility for fast packet processing. Its performance scales linearly with the number of NIC's receive queues and it uses RSS friendly encapsulation for forwarding to L7 load balancers.
Scriptable observability for Kubernetes
Pixie is an open source observability tool for Kubernetes applications. Pixie uses eBPF to automatically capture telemetry data without the need for manual instrumentation. Developers can use Pixie to view the high-level state of their cluster (service maps, cluster resources, application traffic) and also drill down into more detailed views (pod state, flame graphs, individual full body application requests).
Pluggable eBPF-based networking and security for containers and Kubernetes
Calico Open Source is designed to simplify, scale, and secure container and Kubernetes networks. Calico's eBPF dataplane utilizes the power, speed, and efficiency of eBPF programs to deliver networking, load-balancing, and in-kernel security enforcement for your environment.
eBPF-based Security Observability & Runtime Enforcement
Tetragon provides eBPF-based transparent security observability combined with real-time runtime enforcement. The deep visibility is achieved without requiring application changes and is provided at low overhead thanks to smart Linux in-kernel filtering and aggregation logic built directly into the eBPF-based kernel-level collector. The embedded runtime enforcement layer is capable of performing access control on kernel functions, system calls and at other enforcement levels.
Continuous Profiling Platform
Pyroscope is an open source project centered around continuous profiling, particularly in a Kubernetes context. It leverages eBPF as its core technology along with a custom storage engine to offer system-wide continuous profiling with minimal overhead as well as efficient storage and querying capabilities. We support Linux 4.9 and up thanks to CO-RE and libbpf.
SSL/TLS capture tool using eBPF
eCapture is a Go language-written tool that can capture HTTPS/TLS plaintext without a CA certificate. It supports TLS encryption libraries such as openssl, boringssl, gnutls, and nspr. It can run on x86_64 CPU architectures with Linux kernel 4.18 or higher, and aarch64 CPU architectures with Linux/Android kernel 5.5 or higher, supporting both CO-RE and non-CO-RE modes without BTF.
Continuous Profiling Platform
Track memory, CPU, I/O bottlenecks broken down by method name, class name, and line number over time. Without complex overhead, in any language or framework. Using Parca's UI the data can be globally explored and analyzed using various visualizations to quickly and efficiently identify bottlenecks in code. Parca uses eBPF to collect profiling data and uses libbpf-go to interact with the kernel.
Network, Service & Security Observability for Kubernetes using eBPF
Hubble is a fully distributed networking and security observability platform for cloud native workloads. It is built on top of Cilium and eBPF to enable deep visibility into the communication and behavior of services as well as the networking infrastructure in a completely transparent manner.
Linux Runtime Security and Forensics using eBPF
Tracee uses eBPF technology to detect and filter operating system events, helping you expose security insights, detect suspicious behavior, and capture forensic indicators.
Schedule bpftrace programs on your Kubernetes cluster
kubectl-trace is a kubectl plugin that allows for scheduling the execution of bpftrace(8) programs in Kubernetes clusters. kubectl-trace does not require installation of any components directly onto a Kubernetes cluster in order to execute bpftrace programs. When pointed to a cluster, it schedules a temporary job called trace-runner that executes bpftrace.
Introspecting and debugging Kubernetes applications using eBPF "gadgets"
Inspektor Gadget is a collection of tools (or gadgets) to debug and inspect Kubernetes resources and applications. It manages the packaging, deployment and execution of eBPF programs in a Kubernetes cluster, including many based on BCC tools, as well as some developed specifically for use in Inspektor Gadget. It automatically maps low-level kernel primitives to high-level Kubernetes resources, making it easier and quicker to find the relevant information.
Sysmon for Linux is a tool that monitors and logs system activity including process lifetime, network connections, file system writes, and more. Sysmon works across reboots and supports advanced filtering to help identify malicious activity as well as how intruders and malware operate on your network.
eBPF-based Linux kernel network packet tracer
pwru is an eBPF-based tool for tracing network packets in the Linux kernel with advanced filtering capabilities. It allows fine-grained introspection of kernel state to facilitate debugging network connectivity issues.
eBPF based Kubernetes service map
Caretta is a Kubernetes service map that uses eBPF to trace network traffic between pods. It can be used to visualize the network traffic between services in a Kubernetes cluster, and gain additional insights into the network traffic and the relationships between services.
A dynamic tracer for Linux
ply is a dynamic tracer for Linux which is built upon eBPF. It has been designed with embedded systems in mind, is written in C and all that ply needs to run is libc and a modern Linux kernel with eBPF support, meaning, it does not depend on LLVM for its program generation. It has a C-like syntax for writing scripts and is heavily inspired by awk(1) and dtrace(1).
Container-aware Runtime Security Enforcement System
KubeArmor is a container-aware runtime security enforcement system that restricts the behavior (such as process execution, file access, networking operation, and resource utilization) of containers at the system level, using LSMs and eBPF.
Use eBPF to speed up your Service Mesh like crossing an Einstein-Rosen Bridge
Merbridge is designed to make traffic interception and forwarding more efficient for service mesh. With Merbridge, developers can use eBPF instead of iptables to accelerate their service mesh without any additional operations or code changes. Currently, Merbridge already supports Istio, Linkerd, and Kuma.
Highly Automated Observability Platform powered by eBPF
DeepFlow is a highly automated observability platform built for cloud native developers. Based on eBPF, DeepFlow innovatively implements an automated distributed tracing mechanism: AutoTracing. Microservice processes, service mesh sidecars, and network interfaces along the way are included as tracing spans, for every distributed transaction, without any code instrumentation. DeepFlow can automatically generate golden RED metrics for any process in cloud native environment.
Linux high-performance transparent proxy solution
"Dae," which means "goose," serves as a high-performance transparent proxy solution. To enhance traffic split performance to the fullest extent, dae employs the transparent proxy and traffic split suite within the Linux kernel using eBPF. As a result, dae can enable direct traffic to bypass the proxy application's forwarding, facilitating genuine direct traffic passage. Through this remarkable feat, there is minimal performance loss and negligible additional resource consumption for direct traffic.
UI for interactive eBPF-based userspace performance debugging
Wachy is a profiler that uses eBPF to trace arbitrary compiled binaries and functions at runtime. It aims to make eBPF uprobe-based debugging much easier to use by displaying traces in a UI next to the source code, and allowing interactive drilldown analysis.
eBPF-based Cloud Native Monitoring & Profiling Tool
Kindling is a monitoring tool that aims to help users understand the execution behavior of programs from kernel space to user space to pinpoint the root cause of critical incidents. It can obtain L4/L7 network performance metrics and build service maps. Kindling implements a mechanism, Trace Profiling, that can display how each trace is executing on-CPU with thread-level flame graph, and how it is slowed down by off-CPU events with related metrics.
A modular runtime security framework for the IoT
Pulsar is an event-driven framework for monitoring the activity of Linux devices. It allows you to collect runtime activity events from the Linux kernel through its modules and evaluate each event against your own set of security policies. Powered by eBPF and written in Rust, Pulsar is lightweight and safe by design.
Kubernetes-based Efficient Power Level Exporter
Kepler (Kubernetes-based Efficient Power Level Exporter) is a Prometheus exporter. It uses eBPF to probe CPU performance counters and Linux kernel tracepoints. These data and stats from cgroup and sysfs are fed into ML models to estimate energy consumption by Pods.
Zero-code automatic instrumentation with eBPF and OpenTelemetry
Beyla is a vendor agnostic, OpenTelemetry and Prometheus application auto-instrumentation tool, which lets you easily get started with Application Observability. eBPF is used to automatically inspect application executables and the OS networking layer, allowing us to capture essential application observability events for HTTP/S and gRPC services. From these captured eBPF events, we produce OpenTelemetry web transaction trace spans and Rate-Errors-Duration (RED) metrics. As with most eBPF tools, all data capture and instrumentation occurs without any modifications to your application code or configuration.
Effortless, Low-Overhead, eBPF-based Kubernetes Monitoring
Alaz is an open source Ddosify eBPF agent that can inspect and collect Kubernetes service traffic without the need for code instrumentation, sidecars, or service restarts. Alaz uses eBPF to create a Service Map that helps identify golden signals and problems like high latencies, 5xx errors, zombie services, slow HTTP requests, and SQL queries.
eBPF programs in a WASM module or JSON
Eunomia-bpf is a dynamic loading library, based on libbpf, and a compiler toolchain. Eunomia-bpf simplifies building eBPF tools and allows you to package, distribute, and run eBPF programs in JSON format or as a WASM module. With eunomia-bpf, you can write kernel eBPF code and automatically expose your data from the kernel and interact with eBPF program in user space with a WASM runtime.
Complete lifecycle management of eBPF programs
L3AF is a platform to launch and manage eBPF programs in distributed environments. L3AF empowers users to compose multiple eBPF programs together to solve unique problems in different environments. Using the APIs provided by L3AF, these eBPF programs can be reconfigured, updated, inspected, and reordered on-the-fly. L3AF also provides configurable metrics for the eBPF programs it has launched.
APM, Application Performance Monitoring System
Apache SkyWalking is an application performance monitor tool for distributed systems, especially designed for microservices, cloud native and container-based (Kubernetes) architectures. SkyWalking Rover is an agent in the SkyWalking ecosystem, as a metrics collector and profiler powered by eBPF to diagnose CPU, I/O and L4/L7(TLS) network performance. Also, Rover provides add-on events for spans in the distributed tracing.
eBPF based cloud-native load-balancer for 5G Edge
LoxiLB is an open-source cloud-native "external" service load-balancer for cloud-native 5G/edge workloads written from scratch using eBPF as its core-engine and based on Go Language. LoxiLB turns Kubernetes network load balancing for 5G/Edge services into high speed, flexible and programmable LB services.
eBPF SSH session monitoring
SSHLog is a Linux daemon written in C++ and Python that monitors OpenSSH servers via eBPF. The agent passively records all SSH session activity (commands and output) to log files for any connecting user. Administrators can also share an SSH session with any logged in user. Actions may be triggered based on SSH behavior such as posting a Slack message when a remote user attempts to gain root access.
A system daemon and Kubernetes operator for managing eBPF programs
bpfd is a system daemon aimed at simplifying the deployment and management of eBPF programs. It's goal is to enhance the developer-experience as well as provide features to improve security, visibility and program-cooperation. bpfd includes a Kubernetes operator to bring those same features to Kubernetes, allowing users to safely deploy eBPF via custom resources across nodes in a cluster.
Layer 4 Kubernetes load-balancer
Blixt is a layer 4 load-balancer for Kubernetes. It has a control-plane implemented using Gateway API and a data-plane built using eBPF and Rust.
Flow based observability platform
NetObserv eBPF agent empowers the collection of essential network metrics, including the tracking of network flow statistics. It conducts in-depth DNS latency analysis for DNS over UDP and TCP, allowing for the measurement of the time it takes for DNS requests to be processed. Additionally, it calculates TCP round trip latency on a per-flow basis, aiding in the identification of latency-related issues within TCP connections. The agent also provides insights into packet drops, offering protocol-specific drop metrics along with the reasons for packet drops. Furthermore, NetObserv eBPF offers filter-based capabilities for capturing raw network packets, enabling administrators to focus on specific network events or issues of interest. These captured packets are stored in the widely supported .pcap format, facilitating easy post-analysis and compatibility with various network analysis tools.
Statless Ingress Node Firewall
The Ingress node firewall is orchestrated by a Kubernetes operator designed to provision stateless firewall rules at the node level. The stateless Ingress node firewall is achieved through the utilization of an eBPF XDP kernel plugin.
Questi progetti sono sostenuti dalla Fondazione eBPF?
- Questa pagina elenca alcuni progetti open source che impiegano eBPF come tecnologia fondante. Non tutti questi progetti sono sostenuti dalla Fondazione eBPF, ma l’elenco rappresenta una fotografia del panorama odierno dei progetti eBPF.
Aggiungi il tuo progetto
- Assicurati che il tuo progetto rispetti i requisiti richiesti. Vedi qui sotto.
- Apri una pull request e fornisci le informazioni richieste. Utilizza uno dei progetti già presenti come modello. L’ordine di presentazione delle applicazioni è in base ai voti (le stelle ottenute) su Github (discendente), aggiornata ogni trimestre..
- La richiesta di pull verrà valutata dalla community e ne verrà fatto il merge da uno dei manutentori. Chiedi pure su Slack se avessi domande da porre.
Sei il manutentore di uno dei progetti elencati?
- Se sei il manutentore di uno dei progetti elencati e vuoi modificarne il contenuto. Entra in contatto su Slack o apri direttamente una richiesta di pull.
Requisiti da rispettare affinché un progetto possa essere incluso
I progetti possono essere aggiunti a questa pagina nella categoria “Major” (Principale) oppure “Emerging” (Emergente). I requisiti per poter essere annoverati come “Emerging” sono:
- Il progetto deve essere open source. Tutti i codici sorgente devono essere rilasciati con una licenza open source. Tutta la documentazione deve essere rilasciata con una licenza open.
- Il progetto deve necessariamente impiegare eBPF come sua tecnologia fondante (in altre parole, un progetto perderebbe il suo scopo qualora le parti eBPF venissero rimosse), oppure favorire l’adozione di eBPF in produzione.
- Il progetto deve essere attivamente mantenuto.
- Il progetto deve essere aperto alla collaborazione e avere un modello di governance aderente alle best-practice dell’open source.
Per poter essere definibile “Major”, un progetto deve soddisfare tutti i requisiti di cui sopra, più:
- Il progetto deve avere più di 50 contributori.
- Il progetto deve essere impiegato in ambienti realistici di produzione che abbiano un significativo numero di utenti. Dal momento che queste informazioni non sono facilmente ricavabili da un collegamento al progetto, dovrebbero essere incluse nella descrizione della pull request.