物联网设备通常按照一定采样周期进行数据上报,不同设备采集的数据也不相同,数据采集的维度、频率、以及设备数量都比较多。比如智能电网,由智能变电站、线路传输、智能交互终端、智能电表、智能中央系统等部分组成,每个部分都有大量设备,集成了大量的传感器,随着中国智能电网建设的不断完善,其测点的规模达到千万级以上,并且不同测点将以毫秒级、秒级等不同频率产生数据。
物联网数据具有明显的时序特性,需要进行时序存储,使用时序数据库是比较好的选择。除此之外,物联网数据采集涉及大量的设备接入、海量的时序数据库传输,对消息服务器的接入吞吐量、后端时序数据库的写入和存储空间消耗有很大压力。
数据入库后,需要同时提供给不同业务使用,如数据可视化、AI智能分析、数字孪生、应用接口调用等,对后端时序数据库查询的并发量和吞吐量要求也有很大挑战。
EMQ X消息中间件和openGemini一站式存储分析平台的组合技术栈完全能够胜任场景中的设备接入、数据存储和分析。而且从长远来看,这套技术组合依然能满足业务增长预期所带来的接入设备数量和查询并发量增加的需求。
本文以物联网常见的数据可视化场景为例,介绍openGemini + EMQ X + Grafana构建物联网数据可视化平台,实现数据的实时监测、指标统计等业务需求,充分发挥数据的价值。
方案介绍
方案整体架构如下图所示:
EMQ X介绍
EMQ X (https://www.emqx.io/cn/) 是基于高并发的 Erlang/OTP 语言平台开发,支持百万级连接和分布式集群架构,发布订阅模式的开源 MQTT 消息中间件。EMQ X 内置了大量开箱即用的功能,目前仅企业版支持通过数据桥接的方式连接不同版本的InfluxDB OSS, 由于openGemini兼容InfluxDB v1,因此这种数据桥接的方式同样适用openGemini。如果想纯使用开源,可以使用EMQ X(开源版) + Telegraf + openGemini + Grafana的组合方式也同样可以实现,其中Telegraf从EMQ X消费MQTT消息,转存到openGemini,这里暂不做过多阐述。
openGemini是什么
openGemini是一款华为云开源的云原生分布式时序数据库,具备高性能、高扩展、高并发等优势。主要面向物联网和运维监控场景,提供海量时序数据库处理和分析的开源解决方案,openGemini支持单机和集群,部署形式多样,可边缘、可云、可物理机部署,支持主流开发语言,二进制运行,无第三方组件依赖,包含260+项系统运行监控指标,可实时洞察系统运行状态。
Grafana介绍
Grafana 是一个跨平台、开源的度量分析和可视化工具,可以通过灵活的配置查询采集到的数据并进行可视化展示。它可以快速灵活的创建客户端图表,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式。支持 openGemini,Graphite,InfluxDB,OpenTSDB,Prometheus等数据源。可以创建自定义规则并通知到其他消息处理服务或组件中。
业务场景
假设现有一批设备,每个设备有一个 Client ID,所有设备均通过 MQTT 协议 往MQTT 服务器 上相应的主题发送数据,主题的设计如下:
devices/{client_id}/messages
每个设备发送的数据格式为 JSON,发送的通过该传感器采集的温度与湿度数据。
{
"temperature": 23,
"humidity" : 21
}
现在需要实时存储数据以便在后续任意时间查看,具体需求如下:
-
每个设备按照每 5 秒钟一次的频率进行数据上报,数据库需存储每条数据;
-
通过可视化系统查看 任意时间区间内 的温度/湿度平均值、最大值、最小值,与 所有时间段内 温度/湿度的平均值。
当前列举场景的可视化平台最终的展示效果如下图。仪表盘右上角可以选择时间区间、自动刷新时间,此时设备持续发送数据,仪表盘数据值会随之变化,实现了功能比较全面的可视化效果。
环境准备
三大部件的官网均有不同操作系统的安装包资源与教程:
-
EMQX 官网
https://www.emqx.com/zh
-
openGemini 官网
http://www.opengemini.org
-
Grafana 官网
https://grafana.com
配置EMQ X存储数据到openGemini
-
在EMQ X的Dashboard页面,点击左侧数据集成->数据桥接->InfluxDB
2. 配置openGemini时序数据库信息
-
版本:V1
-
服务器地址:127.0.0.1:8086, 实际IP地址替换 127.0.0.1
-
数据库名称:openGemini内部创建的实际数据库名称
-
用户名和密码:openGemini的用户名和密码(默认不需要填写)
-
启用TLS:是否启动,依赖openGemini是否开启HTTPS
-
定义解析数据:设置数据的 Measurement,Fields,Timestamp 与 Tags,键值均支持变量,可以使用行协议进行设置
3. 点击创建按钮完成数据桥接创建
4. 创建规则
完成数据桥接创建流程后,接下来将继续创建一条规则来指定需要写入的数据:
SELECT
clientid,
payload.temperature as temperature,
payload.humidity as humidity
FROM
"devices/1/messages"
-
在Dashboard页面,点击左侧数据集成规则,创建规则
-
输入规则 ID 'my_rule',在 SQL 编辑器中输入规则,此处选择将 'devices/1/messages' 主题的 MQTT 消息存储至 InfluxDB,请确保规则选择出来的字段(SELECT 部分)包含第 2 步中定义解析数据时用到的变量,此处规则 SQL 为:
-
添加动作,在动作下拉框中选择使用数据桥接转发选项,选择先前创建好的数据桥接(test)
5. 测试
使用 MQTT X客户端向 'devices/1/messages' 主题发布消息,模拟数据采集,此操作同时会触发规则和数据桥接流程,将数据写入openGemini:
mqttx pub -i emqx_c -t devices/1/messages -m '{"temperature": 23, "humidity": 21}'
可视化配置
1. 配置数据源,在Grafana Dashboard页面添加数据源InfluxDB
输入连接参数进行配置,默认情况下,关键配置信息如下:
-
URL:这里以http://localhost:8086为例, 需根据实际IP地址替换Localhos
-
Database:openGemini内部创建的实际数据库名称,这里以db0为例
2. 添加仪表盘(Dashboard),数据源完成添加后,接下来需要创建仪表盘。在网上存在非常多的相关教程,这里就不再赘述了。需要说明的是,仪表盘是由多个数据面板组成,创建数据面板需要考虑展示什么数据,再根据这一目的设计查询SQL。此外,为了达到更好的展示效果,还需要考虑数据以什么形式显示比较好,比如数字、折线图、饼图等。
总结
至此我们介绍完如何搭配EMQ X + openGemini + Grafana完成物联网数据传输、存储分析、数据展示的整个流程,您可以了解到 EMQ X 丰富的拓展能力与 openGemini强大的海量时序数据处理能力在物联网数据采集中的应用。深入学习掌握 Grafana 的其他功能后,用户可以定制出更完善的数据可视化乃至监控系统。
openGemini社区期待与更多高校和企业伙伴携手,共同推动技术创新
openGemini 共创新,赢未来!
参考文献
-
https://www.emqx.com/zh/blog/build-emqx-influxdb-grafana-iot-data-visualization-solution-in-one-hour
-
https://docs.emqx.com/en/enterprise/v5.0/data-integration/data-bridge-influxdb.html#quick-starts
openGemini 官网:http://www.openGemini.org
openGemini 开源地址:https://github.com/openGemini
openGemini 公众号:
欢迎关注~ 诚邀你加入 openGemini 社区,共建、共治、共享未来!