将 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”(添加 API 密钥)按钮,创建一个具有 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),而 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。