在 Docker 上设置 eBPF 性能分析
要在 Linux 上使用 Grafana Agent 设置 eBPF 性能分析,您需要
- 验证您的系统是否满足要求。
- 创建 Grafana Agent 配置文件。有关更多信息,请参阅配置参考。
- 运行 Grafana Agent 或 Grafana Alloy。
- 验证是否已收到配置文件。
注意
Grafana Alloy 是我们分发的 OTel 收集器的新的名称。Grafana Agent 已弃用,并且在 2025 年 10 月 31 日之前处于长期支持 (LTS) 状态。Grafana Agent 将于 2025 年 11 月 1 日达到使用寿命终止 (EOL)。阅读更多关于我们建议迁移到Grafana Alloy的原因。
先决条件
在开始之前,您需要
- 一个 Pyroscope 服务器,代理将向其发送性能分析数据。
- 访问已配置Grafana Pyroscope 数据源的 Grafana。
- 已安装Docker Engine。
注意
如果您没有 Grafana 和/或 Pyroscope 服务器,您可以使用 [Grafana Cloud][gcloud] 免费计划开始。
验证系统是否满足要求
eBPF 性能分析器需要 Linux 内核版本 >= 4.9(由于BPF_PROG_TYPE_PERF_EVENT)。
BPF_PROG_TYPE_PERF_EVENT
是一种 eBPF 程序类型,可以附加到 Linux 内核中的硬件或软件事件,例如性能监控计数器或跟踪点。
要打印 Docker 主机的内核版本,请运行以下命令:
docker info | grep Kernel
确保您的内核版本 >= 4.9。
配置 Grafana Agent
您可以配置 Grafana Agent eBPF 分析器来分析本地容器。为此,请使用 discovery.docker
组件发现本地容器,并使用 pyroscope.ebpf
组件对其进行分析。
创建一个名为 agent.river
的文件,内容如下:
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"),
}
}
将 <URL>
占位符替换为相应的服务器 URL。这可能是 Grafana Cloud URL 或您自己的自定义 Pyroscope 服务器 URL。
如果您需要将数据发送到 Grafana Cloud,则必须配置 HTTP 基本身份验证。将 <User>
替换为您的 Grafana Cloud 堆栈用户,并将 <Password>
替换为您的 Grafana Cloud API 密钥。
注意
如果您使用的是自己的 Pyroscope 服务器,则可以完全删除basic_auth
部分。
有关更多信息,请参阅 配置 Grafana Pyroscope 数据源文档。
启动 Grafana Agent
要使用 Docker 启动 Grafana Agent,请运行以下命令:
docker run \
-e AGENT_MODE=flow \
-v $PWD/agent.river:/etc/agent/config.river \
-v /var/run/docker.sock:/var/run/docker.sock \
--pid=host \
--privileged \
-p 12345:12345 \
grafana/agent:latest \
run --server.http.listen-addr=0.0.0.0:12345 /etc/agent/config.river
注意:
--pid=host
和--privileged
标志是使用 ebpf 分析本地容器所必需的。
验证是否接收到了配置文件
要验证 Pyroscope 服务器是否接收到了配置文件,请转到 Pyroscope UI 或 Grafana Pyroscope 数据源。然后从下拉菜单中选择配置文件类型和服务。