菜单
文档breadcrumb arrow Grafana Alloybreadcrumb arrow 故障排除breadcrumb arrow 分析资源消耗
开源

分析 Grafana Alloy 资源消耗

Alloy 使用 Go 编程语言编写,该语言提供内置的 Profiling 支持。与其他使用 Go 编写的应用程序一样,你可以通过发送 HTTP 请求来分析 Alloy,该请求将返回 pprof Go Profile。

获取 pprof 文件后,可以在 Grafana Pyroscope 中将其可视化为火焰图。或者,你也可以在Grafana Play 上或通过 Go 的内置pprof 工具在本地可视化它。

注意

Profile 文件可能包含有关你环境的敏感信息。你可能不希望将 Profile 文件上传到公共位置。

用于发送 HTTP 请求的端口由 --server.http.listen-addr 命令行参数控制。默认设置为 127.0.0.1:12345

获取单个 Profile

不同类型的 HTTP 请求获取不同的 Profile。

内存消耗

Goroutine 泄露通常会导致内存泄露。因此,在调查内存问题时,通常需要获取 goroutine profile。例如

bash
curl localhost:12345/debug/pprof/heap -o heap.pprof
curl localhost:12345/debug/pprof/goroutine -o goroutine.pprof

通常建议在内存使用率较低和较高时都收集 Profile 文件。你可以比较这些 Profile 文件,这样可能更容易查明导致内存消耗增加的原因。

CPU 消耗

如果你的 CPU 消耗较高,可以收集 CPU profile

bash
curl https://:12345/debug/pprof/profile?seconds=30 -o cpu.pprof

URL 中 ?seconds=30 部分表示 Profiling 将持续 30 秒。

持续 Profiling

你无需每次都手动发送 curl 命令来收集 Profile 文件。你也可以使用 Alloy 中的pyroscope 组件进行持续 Profiling。

如果你的 Alloy 实例数量很少,甚至可以配置它们对自己进行 Profiling。但是,如果你有大量的采集器集群,最好设置专门负责对其他 Alloy 实例进行 Profiling 的 Alloy 实例。

以下是 Alloy 实例对其自身进行 Profiling 的示例

alloy
pyroscope.scrape "default" {
  targets    = [{"__address__" = "localhost:12345", "service_name"="alloy"}]
  forward_to = [pyroscope.write.default.receiver]
}

pyroscope.write "default" {
  endpoint {
    url = "https://profiles-prod-014.grafana.net"
    basic_auth {
      username = sys.env("PYROSCOPE_USERNAME")
      password = sys.env("PYROSCOPE_PASSWORD")
    }
  }
}

预期资源消耗

有关 Alloy 预期资源消耗的更多信息,请参阅估算资源使用量

Alloy 消耗了异常大量的资源

如果 Alloy 消耗了异常大量的资源,你可以在 Alloy 仓库中提出问题。请附上你的 pprof 文件和 Alloy 配置文件。请确保你在附件中删除了任何敏感信息。