我是 mqtt、时间序列数据库和所有 vps、物联网网络的新手。 我已经为 Ubuntu 20.04 设置了一个 VPS,并安装了 mosquitto 作为 mqtt 代理、telegraf 作为桥梁、influxDB 作为时间序列数据库、grafana 作为可视化工具。 在 Bard 和 ChatGPT 的支持下,能够设置所有这些,以将我的 IOT 网络数据存储在流入中并进行可视化。
消息接收是这样的(内嵌协议),
measurement,deviceId="A" temperature="xx",humidity="xx"
我还制作了一个mysql数据库,根据device_Id存储每个设备的“位置”和“区域”。
deviceId | Location | Area
A | 101 | 1
B | 102 | 1
C | 102 | 2
然后我尝试使用 grafana 将这两个数据库“influxDB”和“mysql”结合起来,对每个位置和区域的数据进行分类,以便使用单独的仪表将它们可视化。
因为我无法做到这一点,现在我尝试在消息进入 influxDB 之前使用 telegraf 更改消息。我需要将 mysql 数据合并到消息中,然后才能像这样保存在 influxDB 中,
measurement,deviceId="A",location="101",area="1" temperature="xx",humidity="xx"
你们知道一个简单的方法吗?或者如果我的方法是正确的,请支持我这样做。我无法在任何地方找到此问题的解决方案。
请在下面找到一些重要信息。
Ubuntu : 20.04.6 LTS (Server)
mosquitto : 1.6.9
Telegraf : 1.27.2
InfluxDB : 1.8.10
Grafana : 10.0.2
mysql : 8.0.34-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))
有2种方法供您考虑,
如果位置信息可以通过 telegraf 级别定义(假设 telegraf 安装在集中器/网关设备上,并且通过该集中器收集的所有传感器数据将被视为来自同一位置),那么您可以在 telegraf 中使用 [global_tags]配置文件来定义每个设备的静态位置信息。
如果您想获得传感器级别的位置信息,那么您必须将这些信息包含在 MQTT 主题或消息中,因为每个传感器都有不同的位置。 Telegraf 可以使用 [[inputs.mqtt_consumer]] 或 [[processors.regex]] 动态处理 MQTT 消息以向指标添加标签。例如,下面的代码片段用于解析 MQTT 消息中的位置信息,
[[inputs.mqtt_consumer]]
servers = ...
username = ...
password = ...
...
tag_keys = [
"location",
"area"
]
因此,如果 MQTT 消息包含如下所示的位置信息,
{"deviceId"="A", "temperature"="xx", "humidity"="xx", "location"="101", "area"="1"}
测量结果将标有以下位置信息,
measurement,deviceId="A",location="101",area="1" temperature="xx",humidity="xx"