docs/sources/configure-client/grafana-alloy/ebpf/setup-docker.md
To set up eBPF profiling with Grafana Alloy on Linux, you need to:
{{< docs/shared lookup="agent-deprecation.md" source="alloy" version="next" >}}
Before you begin, you need:
{{% admonition type="note" %}} If you don't have a Grafana or a Pyroscope server, you can use the Grafana Cloud free plan to get started. {{% /admonition %}}
The eBPF profiler requires a Linux kernel version >= 4.9 due to BPF_PROG_TYPE_PERF_EVENT.
BPF_PROG_TYPE_PERF_EVENT is a type of eBPF program that can be attached to hardware or software events, such as performance monitoring counters or tracepoints, in the Linux kernel.
To print the kernel version of your docker host, run:
docker info | grep Kernel
The kernel version must be 4.9 or later.
You can configure Alloy eBPF profiler to profile local containers.
To do so, use the discovery.docker component to discover local containers and the pyroscope.ebpf component to profile them
For more information about the Alloy configuration, refer to the Alloy Components reference.
Create a file named alloy.config with the following content:
discovery.docker "local_containers" {
host = "unix:///var/run/docker.sock"
}
pyroscope.ebpf "instance" {
forward_to = [pyroscope.write.endpoint.receiver]
targets = discovery.docker.local_containers.targets
}
pyroscope.write "endpoint" {
endpoint {
basic_auth {
password = "<PASSWORD>"
username = "<USERNAME>"
}
url = "<URL>"
}
external_labels = {
"env" = "testing",
"instance" = env("HOSTNAME"),
}
}
Replace the <URL> placeholder with the appropriate server URL.
This could be the Grafana Cloud URL or your own custom Pyroscope server URL.
If you need to send data to Grafana Cloud, you'll have to configure HTTP Basic authentication.
Replace <User> with your Grafana Cloud stack user and <Password> with your Grafana Cloud API key.
For more information, refer to the Configure the Grafana Pyroscope data source documentation.
{{% admonition type="note" %}}
If you're using your own Pyroscope server, you can remove the basic_auth section altogether.
{{% /admonition %}}
To start Alloy with Docker, run:
docker run \
-v $PWD/alloy.config:/etc/alloy/alloy.config \
-v /var/run/docker.sock:/var/run/docker.sock \
--pid=host \
--privileged \
-p 12345:12345 \
grafana/alloy:latest \
run --server.http.listen-addr=0.0.0.0:12345 /etc/alloy/alloy.config
{{< admonition type="note" >}}
The --pid=host and --privileged flags are required to profile local containers with eBPF.
{{< /admonition >}}
To verify that the profiles are received by the Pyroscope server, go to the Pyroscope UI or Grafana Pyroscope data source. Then select a profile type and a service from the dropdown menu.