Continuous profiling is now GA

Continuous profiling with the Dash0 Operator

The Dash0 Operator can now deploy and manage the Parca eBPF profiler for you and collect CPU profiles from your monitored workloads, without any code changes.

Traces tell you which request was slow. Profiles tell you which function burned the CPU time. Until now, getting profiles from Kubernetes into Dash0 meant deploying an eBPF profiler yourself and wiring it up to the collectors of the Dash0 Operator.

Starting with version 0.159.0, the Dash0 Operator does this for you. It runs the Parca agent as a DaemonSet, sends its profiles through the operator's collector on the same node, and exports them to Dash0.

What you get

  • No code changes: The profiler uses eBPF to sample the processes on each node. There is no library to add and no image to rebuild.
  • Broad runtime coverage: Native code such as Go, Rust and C/C++, as well as Java, Python, Node.js, .NET, Ruby, PHP, Perl, Erlang/Elixir and LuaJIT.
  • Kubernetes context: The operator enriches profiles with Kubernetes metadata, just like your traces, metrics and logs. Profiles follow the same namespace selection: the operator keeps workload profiles only from namespaces that have a Dash0Monitoring resource, and the filter and transform settings of these resources apply to profiles as well.
  • Readable native stack traces: The profiler uploads debug information of native binaries to Dash0 through a proxy managed by the operator, so that Dash0 can resolve native frames to function names. The proxy uses the same credentials as your Dash0 exports.

How do you try it?

Upgrade the Dash0 Operator for Kubernetes to v0.159.0 or later and set operator.ebpfProfilerEnabled=true when installing or upgrading the Helm chart. If you manage the Dash0OperatorConfiguration resource yourself instead of via Helm, also set spec.profiling.enabled and spec.profiling.ebpfProfiler.enabled to true there.

The profiler is opt-in and off by default. Sampling frequency, off-CPU sampling, the enabled runtimes, resources and scheduling are configurable on a self-managed Dash0OperatorConfiguration resource. See the documentation for all options.

Since the agent runs with privileged access to your nodes, review the security requirements before you enable it. Support for GKE Autopilot will follow in a later release.