从 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. 登录并转到“配置” ->“API 密钥”。
  3. 按下“添加 API 密钥”按钮并创建一个新的 API 令牌,并赋予“管理员”角色。

配置和运行 Telegraf

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

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

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

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

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

[[outputs.http]]
  url = "https://127.0.0.1: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 将定期(每秒一次)将主机上的总 CPU 使用率状态报告给 Grafana(应该在 https://127.0.0.1:3000 上运行)。当然,您可以将 custom_stream_id 替换为更符合您的用例的名称。

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

这里唯一剩下的就是创建一个带有流式传输数据的仪表盘。

使用流式传输数据创建仪表盘

  1. 单击左侧菜单中的“仪表盘”。
  2. 单击“新建”并选择“新建仪表盘”。
  3. 在空白仪表盘上,单击“+ 添加可视化”。
  4. 在打开的模态框中,选择 -- Grafana -- 数据源。
  5. 选择 实时测量值 查询类型。
  6. 找到并为“通道”字段选择 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://127.0.0.1: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。