从 Telegraf 向 Grafana 流式传输指标
介绍
Grafana v8 引入了流式传输功能——一种近实时地将数据推送到 UI 面板的方式。在本教程中,我们将展示如何将 Grafana 的实时流式传输功能与 Telegraf 结合使用,以即时显示系统测量数据。
在本教程中,您将
- 设置 Telegraf 并将测量数据近实时地直接输出到 Grafana 时间序列面板
先决条件
- Grafana 8.0+
- Telegraf
运行 Grafana 并创建管理员令牌
- 按照适合您操作系统的安装说明运行 Grafana。
- 登录并导航至 Configuration -> API Keys。
- 点击“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/cpu
。stream
范围是固定的,custom_stream_id
命名空间是 Telegraf 配置中设置的 API URL 的最后一部分(https://:3000/api/live/push/telegraf
),而 path 是 cpu
- 测量项的名称。
剩下的唯一事情是创建一个包含流数据的仪表盘。
创建包含流数据的仪表盘
- 点击左侧菜单中的 Dashboards。
- 点击 New 并选择 New Dashboard。
- 在空白仪表盘上,点击 + Add visualization。
- 在打开的模态框中,选择
-- Grafana --
数据源。 - 选择
Live Measurements
查询类型。 - 找到并选择 Channel 字段的测量项
stream/custom_stream_id/cpu
。 - 保存仪表盘更改。
完成这些步骤后,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。