在 Docker 上设置 eBPF 分析
要在 Linux 上使用 Grafana Alloy 设置 eBPF 分析,您需要
- 验证您的系统满足要求。
- 创建一个 Alloy 配置文件。更多信息请参阅配置参考。
- 运行 Alloy。
- 验证 profiles 是否已接收。
注意
Grafana Alloy 是我们分发的 OTel collector 的新名称。Grafana Agent 已被弃用,并将持续提供长期支持 (LTS) 至 2025 年 10 月 31 日。Grafana Agent 将于 2025 年 11 月 1 日达到生命周期结束 (EOL)。阅读更多关于我们推荐迁移到 Grafana Alloy 的原因。
开始之前
开始之前,您需要
- 一个 Pyroscope 服务器,Alloy 可以将分析数据发送到此服务器。
- 已配置 Grafana Pyroscope 数据源 的 Grafana 访问权限。
- 已安装 Docker Engine。
注意
如果您没有 Grafana 或 Pyroscope 服务器,可以使用 [Grafana Cloud][gcloud] 免费计划来开始。
验证系统要求
由于 BPF_PROG_TYPE_PERF_EVENT,eBPF 分析器需要 Linux 内核版本 >= 4.9。
BPF_PROG_TYPE_PERF_EVENT
是一种 eBPF 程序类型,可以附加到 Linux 内核中的硬件或软件事件,例如性能监控计数器或跟踪点。
要打印您的 Docker 主机的内核版本,运行
docker info | grep Kernel
内核版本必须是 4.9 或更高。
配置 Alloy
您可以配置 Alloy eBPF 分析器来分析本地容器。为此,请使用 discovery.docker
组件 发现本地容器,并使用 pyroscope.ebpf
组件 分析它们。
有关 Alloy 配置的更多信息,请参阅 Alloy 组件参考。
创建一个名为 alloy.config
的文件,其内容如下
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 Basic 认证。将 <User>
替换为您的 Grafana Cloud stack 用户,将 <Password>
替换为您的 Grafana Cloud API 密钥。
有关更多信息,请参阅 配置 Grafana Pyroscope 数据源文档。
注意
如果您使用自己的 Pyroscope 服务器,可以完全移除
basic_auth
部分。
启动 Alloy
要在 Docker 中启动 Alloy,运行
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
注意
--pid=host
和--privileged
标志是使用 eBPF 分析本地容器所必需的。
验证 profiles 是否已接收
要验证 profiles 是否已发送到 Pyroscope 服务器,请访问 Pyroscope UI 或 Grafana Pyroscope 数据源。然后从下拉菜单中选择一个 Profile 类型和服务。