从 Telegraf 向 Grafana 流式传输指标

Grafana Labs Team
由 Grafana Labs 团队撰写

最后更新于 2023 年 7 月 18 日

初学者

介绍

Grafana v8 引入了流式传输功能——一种近实时地将数据推送到 UI 面板的方式。在本教程中,我们将展示如何将 Grafana 的实时流式传输功能与 Telegraf 结合使用,以即时显示系统测量数据。

在本教程中,您将

  • 设置 Telegraf 并将测量数据近实时地直接输出到 Grafana 时间序列面板

先决条件

  • Grafana 8.0+
  • Telegraf

运行 Grafana 并创建管理员令牌

  1. 按照适合您操作系统的安装说明运行 Grafana。
  2. 登录并导航至 Configuration -> API Keys。
  3. 点击“Add API key”按钮,创建一个具有 Admin 角色的新 API 令牌。

配置并运行 Telegraf

Telegraf 是一个插件驱动的服务器代理,用于从数据库、系统和物联网传感器收集并发送指标和事件。

您可以按照官方安装说明进行安装。

在本教程中,我们将使用 Telegraf 的 HTTP 输出插件将 Influx 格式的指标发送到 Grafana。我们可以使用如下配置:

[agent]
  interval = "1s"
  flush_interval = "1s"

[[inputs.cpu]]
  percpu = false
  totalcpu = true

[[outputs.http]]
  url = "https://:3000/api/live/push/custom_stream_id"
  data_format = "influx"
  [outputs.http.headers]
    Authorization = "Bearer <Your API Key>"

请务必将占位符 <Your API Key> 替换为您在上一步中创建的实际 API 密钥。将此配置保存到 telegraf.conf 文件中,并运行 Telegraf 指向此配置文件。Telegraf 将周期性地(每秒一次)向 Grafana(应运行在 https://:3000 上)报告主机的总 CPU 使用情况。当然,您可以将 custom_stream_id 替换为对您的用例更有意义的内容。

在 Grafana 内部,Influx 数据被转换为 Grafana 数据帧,然后这些帧发布到 Grafana Live 通道。在本例中,将发布 CPU 数据的通道是 stream/custom_stream_id/cpustream 范围是固定的,custom_stream_id 命名空间是 Telegraf 配置中设置的 API URL 的最后一部分(https://:3000/api/live/push/telegraf),而 path 是 cpu - 测量项的名称。

剩下的唯一事情是创建一个包含流数据的仪表盘。

创建包含流数据的仪表盘

  1. 点击左侧菜单中的 Dashboards
  2. 点击 New 并选择 New Dashboard
  3. 在空白仪表盘上,点击 + Add visualization
  4. 在打开的模态框中,选择 -- Grafana -- 数据源。
  5. 选择 Live Measurements 查询类型。
  6. 找到并选择 Channel 字段的测量项 stream/custom_stream_id/cpu
  7. 保存仪表盘更改。

完成这些步骤后,Grafana UI 应该订阅通道 stream/custom_stream_id/cpu,您应该能看到来自 Telegraf 的 CPU 数据近实时更新。

使用 WebSocket 端点流式传输

如果您的目标是发送高频更新,那么您可能需要使用 Telegraf 的 WebSocket 输出插件(在 Telegraf v1.19.0 中引入),而不是我们上面使用的 HTTP 输出插件。配置 WebSocket 输出插件如下:

[agent]
  interval = "500ms"
  flush_interval = "500ms"

[[inputs.cpu]]
  percpu = false
  totalcpu = true

[[outputs.websocket]]
  url = "ws://:3000/api/live/push/custom_stream_id"
  data_format = "influx"
  [outputs.websocket.headers]
    Authorization = "Bearer <Your API Key>"

WebSocket 避免了在处理来自 Telegraf 的每个请求时运行所有 Grafana HTTP 中间件,从而显著降低了 Grafana 后端的 CPU 使用率。

总结

在本教程中,您学习了如何使用 Telegraf 将实时指标流式传输到 Grafana。