菜单
开源

在 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 的原因。

开始之前

开始之前,您需要

注意

如果您没有 Grafana 或 Pyroscope 服务器,可以使用 [Grafana Cloud][gcloud] 免费计划来开始。

验证系统要求

由于 BPF_PROG_TYPE_PERF_EVENT,eBPF 分析器需要 Linux 内核版本 >= 4.9。

BPF_PROG_TYPE_PERF_EVENT 是一种 eBPF 程序类型,可以附加到 Linux 内核中的硬件或软件事件,例如性能监控计数器或跟踪点。

要打印您的 Docker 主机的内核版本,运行

shell
docker info | grep Kernel

内核版本必须是 4.9 或更高。

配置 Alloy

您可以配置 Alloy eBPF 分析器来分析本地容器。为此,请使用 discovery.docker 组件 发现本地容器,并使用 pyroscope.ebpf 组件 分析它们。

有关 Alloy 配置的更多信息,请参阅 Alloy 组件参考

创建一个名为 alloy.config 的文件,其内容如下

alloy
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,运行

shell
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 类型和服务。