将 Telegraf 指标流式传输到 Grafana
简介
Grafana v8 引入了流式传输功能 - 一种将数据几乎实时推送到 UI 面板的方式。在本教程中,我们将展示如何将 Grafana 实时流式传输功能与 Telegraf 结合使用,即时显示系统测量数据。
在本教程中,您将
- 设置 Telegraf 并将测量数据几乎实时直接输出到 Grafana 时间序列面板
先决条件
- Grafana 8.0+
- Telegraf
运行 Grafana 并创建管理员令牌
- 按照适用于您操作系统的安装说明运行 Grafana。
- 登录并前往 Configuration -> API Keys。
- 点击“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/cpu
。stream
作用域是固定的,custom_stream_id
命名空间是 Telegraf 配置中设置的 API URL 的最后一部分(https://:3000/api/live/push/telegraf
),而 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。