配置客户端发送剖析数据
Pyroscope 是一个持续剖析数据库,可让您分析应用程序的性能。将剖析数据发送到 Pyroscope 时,可以选择以下三种方法
- 使用 Grafana Alloy 进行自动插桩
- SDK 插桩
- 通过 Grafana Alloy 进行 SDK 插桩
本文档将解释这些技术并指导您何时选择每种方法。
关于使用 Grafana Alloy 或 Agent 收集器进行自动插桩
您可以使用 Grafana Alloy(首选)或 Grafana Agent(旧版)收集器从应用程序发送数据。这两种收集器都支持在拉取模式下对 eBPF、Java 和 Golang 进行剖析。
Grafana Alloy 是 OpenTelemetry (OTel) Collector 的一个供应商中立分发版。Alloy 独特地结合了社区中最好的开源可观测性信号。Grafana Alloy 使用 River 编写的配置文件。
Alloy 是推荐的收集器,取代 Grafana Agent。新安装应使用 Alloy。
注意
Grafana Alloy 是我们的 OTel 收集器分发版的新名称。Grafana Agent 已被弃用,并通过 2025 年 10 月 31 日进入长期支持 (LTS) 阶段。Grafana Agent 将于 2025 年 11 月 1 日达到生命周期终止 (EOL)。阅读更多关于我们为什么推荐迁移到 Grafana Alloy 的信息。
Alloy 是一个与应用程序一同运行的组件,它定期从应用程序收集剖析数据。当您想在不修改应用程序源代码的情况下收集剖析数据时,此方法非常适用。使用 eBPF 剖析选项可以简化此方法,因为它不需要拉取或推送机制。
工作原理如下
- 在应用程序运行的同一机器或容器上安装和配置收集器。
- 收集器定期检索应用程序的性能剖析数据,无论应用程序使用何种语言或技术栈。
- 然后,捕获的剖析数据会被发送到 Pyroscope 服务器进行存储和分析。
使用收集器提供了一种省心无忧的选项,尤其是在处理多个应用程序或微服务时,它允许您集中化剖析过程,而无需更改应用程序的代码库。
关于使用 Pyroscope SDK 进行插桩
或者,Pyroscope SDK 提供了直接对应用程序进行插桩以实现更精确剖析的能力。当您希望完全控制剖析过程,或当您要剖析的应用程序使用 SDK 支持的语言(例如,Java、Python、.NET 等)编写时,请使用 SDK。
使用 Pyroscope SDK 的方法如下
- 安装适用于应用程序编程语言的相应 Pyroscope SDK(例如,
pip
包、npm
包、Ruby gem)。 - 使用 SDK 对应用程序代码进行插桩,以捕获必要的剖析数据。
- SDK 会自动定期将捕获的剖析数据推送到 Pyroscope 服务器进行存储和分析。
通过使用 Pyroscope SDK,您可以根据应用程序的具体要求灵活地自定义剖析过程。您可以选择性地剖析代码的特定部分,或根据您的需求以不同的时间间隔发送剖析数据。
关于通过 Alloy 使用 Pyroscope SDK 进行插桩
Pyroscope SDK 可以配置为先将剖析数据发送到 Grafana Alloy,然后由 Alloy 将其转发到 Pyroscope 服务器。此方法结合了 SDK 插桩的灵活性和 Alloy 的基础设施优势。
工作原理如下
- 您的应用程序已使用 Pyroscope SDK 进行插桩
- SDK 不会将剖析数据直接发送到 Pyroscope,而是发送到 Alloy 的
pyroscope.receive_http
组件 - Alloy 处理并将剖析数据转发到 Pyroscope 服务器
通过 Alloy 发送剖析数据,您可以受益于较低的延迟,因为剖析数据被发送到本地 Alloy 实例,而不是直接通过互联网发送到 Grafana Cloud。您的应用程序代码可以专注于插桩,而身份验证和路由等基础设施问题则由 Alloy 的配置处理。这种分离允许集中管理元数据,您可以在不修改应用程序代码的情况下,使用 Kubernetes 元数据或环境标签等基础设施标签来丰富剖析数据。
选择合适的剖析方法
您可以使用 Grafana Alloy 进行自动插桩,直接使用 Pyroscope 插桩 SDK,或通过 Alloy 使用 SDK。您选择的方法取决于您的具体用例和需求。
以下是一些选择时需要考虑的因素
- 设置便捷性:Grafana Alloy 是快速直接设置的理想选择,无需修改应用程序代码。eBPF 剖析对某些语言(例如 Golang、Python)的支持优于其他语言。对 Java 和其他语言的更强大支持正在开发中。通过 Alloy 使用 SDK 增加了最小的设置复杂性,同时提供了基础设施优势。
- 语言支持:如果您想对剖析过程有更多控制权,并且应用程序使用 Pyroscope SDK 支持的语言编写,请考虑使用 SDK - 直接使用或根据您的基础设施需求通过 Alloy 使用。
- 灵活性:Pyroscope SDK 在自定义剖析过程和使用标签捕获代码特定部分方面提供了更大的灵活性。如果您有特定的剖析需求或想微调数据收集过程,SDK 将是您的最佳选择。与 Alloy 一起使用时,您可以在不影响 SDK 功能的情况下获得额外基础设施灵活性。
要开始使用,请选择下面的集成之一
![]() Grafana Alloy 文档 示例 | ![]() Golang 文档 示例 | ![]() Java 文档 示例 | ![]() eBPF 文档 示例 | ![]() Python 文档 示例 |
![]() Dotnet 文档 示例 | ![]() Ruby 文档 示例 | ![]() Node.js 文档 示例 | ![]() Rust 文档 示例 |
丰富剖析数据
您可以向剖析数据添加标签,以帮助将其与您的其他遥测信号关联起来。常用的标签包括版本、区域、环境和请求类型。您可以使用 SDK 和 Alloy 添加标签。
有效的标签格式可以包含 ASCII 字母、数字以及下划线。它必须匹配正则表达式 [a-zA-Z_][a-zA-Z0-9_]
。在 Pyroscope 中,点号 (.
) 不是标签中的有效字符。
关于 Pyroscope 的帮助
如果您有更多问题,请随时在社区 Slack 频道联系我们,或在GitHub 上创建问题。