Last updated: July 5, 2026
Profiling
This document covers profiling support in the Dash0 operator.
Table of Contents
Enabling Profiling Support
The Dash0 operator can be configured to accept, process, and export profiling data via OTLP.
Note: The Dash0 Operator does not currently support collecting profiles, see the Collecting Profiles with the OpenTelemetry eBPF Profiler section.
To enable profiling support, set the operator.profilingEnabled Helm value to true:
12345helm install \--set operator.profilingEnabled=true \... \dash0-operator \dash0-operator/dash0-operator
Alternatively, you can set spec.profiling.enabled: true directly on the Dash0OperatorConfiguration custom resource:
12345678apiVersion: operator.dash0.com/v1alpha1kind: Dash0OperatorConfigurationmetadata:name: dash0-operator-configuration-resourcespec:profiling:enabled: true# ... other settings
When profiling is enabled, you can use the same spec.filter and spec.transform settings on your Dash0Monitoring resources to filter and transform profiling data, just like for traces, metrics, and logs.
See Filtering and Transforming Telemetry for details.
Collecting Profiles with the OpenTelemetry eBPF Profiler
Since the standard OpenTelemetry auto-instrumentation agents do not yet emit OTLP profiles, a separate profiling agent is needed to generate profiling data, like the OpenTelemetry eBPF profiler.
The eBPF profiler is distributed as a specialized OpenTelemetry Collector (otelcol-ebpf-profiler) that includes a profiling receiver.
It runs as a privileged DaemonSet with host PID access, since it relies on eBPF to collect stack traces from all processes on the node.
Below is an example of deploying the eBPF profiler to send profiles to the Dash0 operator's collector:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071apiVersion: v1kind: ConfigMapmetadata:name: ebpf-profiler-confignamespace: dash0-system # same namespace as the operatordata:config.yaml: |receivers:profiling:exporters:otlp/collector:endpoint: ${helm-release-name}-opentelemetry-collector-service.${namespace-of-the-dash0-operator}.svc.cluster.local:4317# The operator's OTLP receiver listens on plain-text gRPC (no TLS), so the exporter must# be configured accordingly. Without this, the gRPC exporter defaults to requiring TLS.tls:insecure: trueservice:telemetry:logs:level: infopipelines:profiles:receivers: [profiling]exporters: [otlp/collector]---apiVersion: apps/v1kind: DaemonSetmetadata:name: ebpf-profilernamespace: dash0-system # same namespace as the operatorlabels:app: ebpf-profilerspec:selector:matchLabels:app: ebpf-profilertemplate:metadata:labels:app: ebpf-profilerspec:hostPID: truecontainers:- name: ebpf-profilerimage: otel/opentelemetry-collector-ebpf-profiler:0.148.0args:- --config=file:/etc/otelcol/config.yaml- --feature-gates=service.profilesSupportsecurityContext:privileged: truevolumeMounts:- name: configmountPath: /etc/otelcol- name: procmountPath: /procreadOnly: true- name: sysmountPath: /sysreadOnly: truevolumes:- name: configconfigMap:name: ebpf-profiler-config- name: prochostPath:path: /proc- name: syshostPath:path: /sys
Replace ${helm-release-name} and ${namespace-of-the-dash0-operator} with the actual Helm release name and namespace.
The eBPF profiler requires:
- Linux kernel 5.4 or later.
- The container must run as privileged (or with
CAP_SYS_ADMIN,CAP_PERFMON, andCAP_BPFcapabilities). hostPID: trueto observe processes running on the node.- Access to
/procand/sysfrom the host.
Once both profiling support in the operator and the eBPF profiler DaemonSet are deployed, profiling data will flow from the eBPF profiler through the operator's collector pipelines (including processors like k8s_attributes for Kubernetes metadata enrichment) and on to the configured backend.
Related Documentation
- Configuration - Configuration options including filtering and transforming telemetry
- Installation - Installation guide