Grafana Alloy
您可以使用 Grafana Alloy(首选)或 Grafana Agent(旧版)采集器从您的应用程序发送数据。这两种采集器都支持在拉取模式下使用 eBPF、Java 和 Golang 进行性能分析。
Grafana Alloy 是 OpenTelemetry (OTel) Collector 的一个供应商中立发行版。Alloy 独特地结合了社区中最佳的开源可观测性信号。Alloy 使用 Alloy 配置语法编写的配置文件。有关更多信息,请参阅 Alloy 配置语法。
Alloy 是推荐的采集器,而非 Grafana Agent。新安装应使用 Alloy。
本节说明如何使用 Alloy。
注意
有关支持的 Profile 类型列表,请参阅可用 Profile 类型。
旧版采集器:Grafana Agent
注意
Grafana Alloy 是我们 OTel 采集器发行版的新名称。Grafana Agent 已被弃用,并将进入长期支持 (LTS),持续到 2025 年 10 月 31 日。Grafana Agent 将于 2025 年 11 月 1 日达到生命周期结束 (EOL)。阅读更多关于我们为何推荐迁移到 Grafana Alloy 的信息。
Grafana Agent 是一个用于收集和转发 Profile 数据的旧版工具。Agent 支持在拉取模式下使用 eBPF 和 Golang。有关 Agent 的信息,请参阅Grafana Agent Flow。
有关使用 Grafana Agent 的说明可在 Pyroscope v1.8 及更早版本的文档中找到。
eBPF 性能分析
eBPF(Extended Berkeley Packet Filter)是一种现代 Linux 内核技术,无需修改源代码或重启进程即可安全、高效、可定制地追踪系统和应用程序行为。
eBPF 性能分析的优势
- 低开销:eBPF 在收集数据时对性能影响极小。
- 通用:eBPF 可以追踪系统调用、网络包,甚至用户空间应用程序逻辑。
- 动态:无需重新编译或重启应用程序。eBPF 允许进行实时追踪。
设置 eBPF 性能分析
- 确保您的系统运行的是 Linux 内核版本 4.9 或更高版本。
- 在目标机器或容器上安装一个采集器,例如 Alloy。
- 配置 Alloy 使用 eBPF 进行性能分析。有关详细步骤,请参阅eBPF 文档。
- 采集器收集 eBPF Profile 数据并将其发送到 Pyroscope 服务器。
支持的语言
此 eBPF 性能分析器仅收集 CPU Profile 数据。通常,支持 C/C++、Go 和 Rust 等原生编译语言。有关其他要求,请参阅故障排除未知符号。
Python 是唯一支持的高级语言,前提是 python_enabled=true
。Java、Ruby、PHP 和 JavaScript 等其他高级语言需要额外的工作才能正确显示这些语言中方法的堆栈追踪。目前,这些语言的 CPU 使用情况报告为属于运行时的方法。
拉取模式下的 Golang 性能分析
在拉取模式下,采集器定期从 Golang 应用程序检索 Profile 数据,特别是针对 pprof 端点。
拉取模式下 Golang 性能分析的优势
- 非侵入性:无需修改应用程序的源代码。
- 集中式性能分析:适用于有多个 Golang 应用程序或微服务的环境。
- 自动化:Alloy 处理 Profile 数据的拉取和发送,只需最少的配置。
在拉取模式下设置 Golang 性能分析
- 确保您的 Golang 应用程序暴露了 pprof 端点。
- 在运行应用程序的同一机器或容器上安装并配置 Alloy。
- 确保 Alloy 设置为拉取模式并定位到正确的 pprof 端点。有关分步说明,请访问Go(拉取模式)文档。
- 采集器查询 Golang 应用程序的 pprof 端点,收集 Profile 数据,并将其转发到 Pyroscope 服务器。
从 Pyroscope SDK 接收 Profile 数据
Alloy 可以通过 pyroscope.receive_http
组件接收来自使用 Pyroscope SDK 插桩的应用程序的 Profile 数据。这种方法提供了几个关键优势
- 通过将 Profile 数据发送到本地 Alloy 实例而不是通过互联网发送到 Grafana Cloud,从而提高了性能,减少了延迟和应用程序影响
- 将基础设施关注点与应用程序代码分离 - 开发者无需在代码中处理认证、租户配置或基础设施标签
- 集中管理认证和元数据丰富(例如,Kubernetes 标签、业务标签)
此功能在旧版 Grafana Agent 中不可用。
设置 Profile 数据接收
- 使用指向
pyroscope.receive_http
Alloy 组件的 Pyroscope SDK 配置您的应用程序。 - 有关分步说明,请参阅从 Pyroscope SDK 接收 Profile 数据文档。
后续步骤
无论是使用 eBPF 进行通用的系统和应用程序性能分析,还是依赖 Golang 内置的 pprof 端点进行拉取模式性能分析,Alloy 采集器都提供了简化的流程来收集关键的 Profile 数据。选择最适合您的应用程序和基础设施需求的方法。