跳转到主要内容

配置后端插件

本指南提供了配置后端插件以在启动时启用某些诊断的说明,生成 性能数据。性能数据可以提供调查某些性能问题(如高 CPU 或内存使用)或使用 连续性能分析 时可能有用的信息。

配置性能数据

Grafana 配置文件 允许您在 [plugin.<插件 ID>] 下配置性能分析。

在此文件部分中,指定要配置性能分析的后端插件的 <插件 ID>(唯一标识符),例如,grafana-github-datasource,以及性能配置选项(以下子节中详细说明)。

示例配置

custom.ini
[plugin.<plugin ID>]
profiling_enabled = true
profiling_port = 6060
profiling_block_rate = 5
profiling_mutex_rate = 5

在应用配置更改后重启 Grafana。您应该看到一条指示性能分析是否启用的日志消息。例如

INFO [07-09|19:15:00] Profiling enabled   logger=plugin.<plugin ID> blockProfileRate=5 mutexProfileRate=5
注意

要使用 profiling_block_rateprofiling_mutex_rate,您的插件至少需要使用 grafana-plugin-sdk-go v0.238.0。有关如何更新 SDK 的说明,请参阅 更新 Go SDK

关于 profiling_enabled 选项

使用此选项来启用/禁用分析。默认值为 false

关于 profiling_port 选项

可选地,自定义暴露分析数据的 HTTP 端口。例如,如果您想分析多个插件或默认端口已被占用,请使用它。默认值为 6060

关于 profiling_block_rate 选项

使用此选项来控制报告到阻塞分析中的 goroutine 阻塞事件的分数。默认值为 0(即不跟踪任何事件)。例如,使用 5 来报告 20% 的所有事件。有关更详细的信息,请参阅 https://pkg.go.dev/runtime#SetBlockProfileRate

注意

分数越高(即此值越小),对正常操作的开销就越大。

关于 profiling_mutex_rate 选项

使用此选项来控制报告到互斥锁分析中的互斥锁争用事件的分数。默认值为 0(即不跟踪任何事件)。例如,使用 5 来报告 20% 的所有事件。有关更详细的信息,请参阅 https://pkg.go.dev/runtime#SetMutexProfileFraction

注意

分数越高(即此值越小),对正常操作的开销就越大。

关于开销的说明

在启用分析但未启用 blockmutex 分析的情况下运行后端插件应仅增加一小部分开销。因此,这些端点适合生产或持续分析场景。

通常,添加少量(如 5 或 10,即 10 到 20%)的阻塞和互斥锁分析应该没问题,但具体效果可能因插件而异。

另一方面,可能存在潜在问题。例如,如果您遇到请求变慢或排队,且没有线索,那么您可以将分析临时配置为收集 100% 的阻塞和互斥锁分析以获取全面情况。收集完分析后,请关闭它。

检查调试端点

通过浏览 https://127.0.0.1:<profiling_port>/debug/pprof 检查哪些调试端点可用。

在此文件中,使用的是 localhost,这意味着您连接到运行 Grafana 和插件的宿主机。如果从另一台主机连接,请相应调整。

其他端点

有一些额外的godeltaprof端点可用于分析。这些端点在连续分析场景中更为合适。

这些端点是:

  • /debug/pprof/delta_heap
  • /debug/pprof/delta_block
  • /debug/pprof/delta_mutex

收集和分析分析结果

通常,您使用Go命令pprof来收集和分析分析数据。您也可以使用curl或类似工具来收集分析结果,这在您没有Go pprof命令的环境中可能很方便。

接下来,让我们看看使用curlpprof收集和分析内存和CPU分析结果的示例。

分析高内存使用和内存泄漏

当遇到高内存使用或潜在的内存泄漏时,收集几个堆分析结果非常有用。然后您可以稍后分析和比较它们。

最好在收集每个分析结果之间等待一段时间,例如30秒,以允许内存消耗增加。

在以下示例中,localhost用于表示您连接到运行Grafana和插件的宿主。如果您是从其他宿主连接的,则根据需要调整命令。

curl https://127.0.0.1:<profiling_port>/debug/pprof/heap > heap1.pprof
sleep 30
curl https://127.0.0.1:<profiling_port>/debug/pprof/heap > heap2.pprof

然后您可以使用pprof工具来比较两个堆分析结果。例如

go tool pprof -http=localhost:8081 --base heap1.pprof heap2.pprof

分析高CPU使用

当您遇到高CPU使用时,收集一段时间内的CPU分析结果是一个好主意,例如30秒。

在以下示例中,localhost用于表示您连接到运行Grafana和插件的宿主。如果您是从其他宿主连接的,则根据需要调整命令。

curl 'https://127.0.0.1:<profiling_port>/debug/pprof/profile?seconds=30' > profile.pprof

然后您可以使用pprof工具来比较两个堆分析结果。例如

go tool pprof -http=localhost:8081 profile.pprof

更多信息

有关如何分析Grafana的更多信息,请参阅Grafana分析文档