一个典型的物联网应用,在现场的任何物理系统或过程中,可能有数百个现场传感器每秒产生大量的数据,并可能以几种不同的协议进行通信。
大多数时候,将这些传感器的数据以短期、高分辨率的方式传输到Grafana这样的可视化工具上是非常有用的,但同时,实时刮取和汇总这些数据以及将它们存储到InfluxDB这样的时间序列数据库的能力也是必要的。
这个用例的大多数应用都是利用Telegraf代理,通过其输入插件的生态系统对传感器数据进行采集和计量。然而,在最近的v8.0版本中,没有简单的方法将这些Telegraf指标流向Grafana,该版本在Grafana Live功能下引入了HTTP推送端点。
在之前的一篇博文中,我们使用了一个基于IMU的传感器系统,通过MQTT协议进行通信,将实时传感器数据流传到Grafana Live。在这里,我们将使用相同的设置来演示HTTP推送端点的易用性,以使用Grafana Live流式传输Telegraf指标。
配置细节
Telegraf是一个基于插件驱动架构的开源服务器代理,用于收集、处理、汇总和写入各种堆栈、传感器和系统的指标。它有各种插件,可用于将多协议传感器系统连接到数据库、云服务、可视化工具等。
Grafana Live是一个集成的实时消息传递引擎,基于Grafana内置的发布-订阅框架,作为v8.0版本的一部分引入。它包括一个新的HTTP推送API端点,接受来自Telegraf的Influx格式的指标,并将它们作为Grafana数据帧流向用户界面。
在这里的演示中概述了IMU传感板和用于发布的MQTT代理的设置。唯一的区别是IMU数据如何被摄入到Grafana Live引擎中。
我们使用MQTT消费者Telegraf输入插件来连接到Pi上本地运行的经纪人。有了这个插件,我们就能定期(~20ms)刮取并计量由IMU传感器发布在适当主题上的消息。下面是一个可用于此的配置样本:
[[inputs.mqtt_consumer]]
## Broker URLs for the MQTT server or cluster. To connect to multiple
## clusters or standalone servers, use a seperate plugin instance.
## example: servers = ["tcp://localhost:1883"]
## servers = ["ssl://localhost:1883"]
## servers = ["ws://localhost:1883"]
servers = ["tcp://192.168.1.100:1883"]
## Topics that will be subscribed to.
topics = [
"imu/data",
]
data_format = "json"
一旦我们在Telegraf代理中获得了数据,通过Grafana Live HTTP Push API端点的HTTP Telegraf输出插件将其摄入Grafana就变得非常容易。下面是一个可以用来做这个的配置样本:
[[outputs.http]]
url = "http://localhost:3000/api/live/push/telegraf"
data_format = "influx"
[outputs.http.headers]
Authorization = "Bearer "
注意:你可以按照这里的说明从Grafana内部获得必要的API密钥。
我们使用时间序列和时间线面板创建了与之前相同的仪表板,以可视化来自加速度计和陀螺仪的三轴数据:

关于如何为你的面板设置个人查询的细节,请参考我们关于将指标从Telegraf流向Grafana的教程:

总结
这个简单的演示展示了使用 Telegraf 从各种多协议传感器系统刮取数据的多功能性和灵活性,并使用单一的 HTTP Push API 端点将所有数据摄入 Grafana Live 引擎进行流式传输。这适用于各种硬件系统的发言协议,如AMQP、MODBUS、Fibaro、IPMI、RabbitMQ、KNX、OPC UA等。如果你有兴趣为你自己的应用程序将 Telegraf 指标串流到 Grafana,请确保遵循此指南的设置细节。