eBPF Profiler
The OpenTelemetry eBPF profiler runs once per host and samples every process on it, not just one instrumented application. It’s the option to reach for when a service isn’t written in one of KloudMate’s supported languages, or when you want whole-system visibility (including native binaries, statically linked Go, and other runtimes the SDKs above can’t reach) without touching application code.
Prerequisites
Section titled “Prerequisites”- A Linux host with a kernel new enough for eBPF (4.19+; 5.x recommended) and privileged access to load BPF programs (
CAP_SYS_ADMIN/CAP_BPF, typically run as root or in a privileged container). - The ingest endpoint:
https://otel.kloudmate.com/v1/profiles/pyroscope - An API key — go to Settings → API Keys, click Add New, and create an Ingest Key – Backend. Copy it immediately; KloudMate shows it only once.
Install and run
Section titled “Install and run”The project ships a container image, so the fastest path is running it directly with Docker. It needs --privileged (to attach eBPF programs) and --pid=host (to see every process on the host, not just its own container):
Swap YOUR_API_KEY for the key you copied above, and my-environment for a name that identifies this host or cluster.
To run it on every node of a Kubernetes cluster instead of a single host, deploy it as a DaemonSet — the repo’s deploy directory has Kubernetes manifests to start from.
Verify it’s working
Section titled “Verify it’s working”Open Profiling → All Services, select cpu from the profile type dropdown, and give it a minute. The host (or one of the processes running on it) appears as a service with a live chart as soon as the first samples land.
If nothing shows up, confirm the container actually started — a missing --privileged flag or an unreadable /sys/kernel/debug mount fails at eBPF-program load time, before it ever tries to reach KloudMate.
Related
Section titled “Related”- Supported Languages — per-language SDKs, if you’d rather profile one application than a whole host.
- Flame Graph — where this data ends up once it’s flowing.