如何使用telegraf在mqtt到influxDB点期间修改influxdb线路协议数据

问题描述 投票:0回答:1

我是 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))
grafana influxdb mosquitto telegraf
1个回答
0
投票

有2种方法供您考虑,

#1 Telegraf 配置定义的静态位置信息

如果位置信息可以通过 telegraf 级别定义(假设 telegraf 安装在集中器/网关设备上,并且通过该集中器收集的所有传感器数据将被视为来自同一位置),那么您可以在 telegraf 中使用 [global_tags]配置文件来定义每个设备的静态位置信息。

#2 数据源提供的动态位置信息(通过 MQTT)

如果您想获得传感器级别的位置信息,那么您必须将这些信息包含在 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"
© www.soinside.com 2019 - 2024. All rights reserved.