如何修正Telegraf配置以解析两个MQTT主题的JSON负载?
正确的Telegraf MQTT配置方案
错误原因
配置加载失败的核心问题:
fields字段采用了数组嵌套对象的写法,不符合Telegraf json_v2的TOML语法规范,必须用表格数组([[...fields]])定义字段映射- 重复定义了
[[inputs.mqtt_consumer.json_v2]]块,应在同一个json_v2块下配置多个object解析规则 - 第二个object的
path设置错误:对应payload的根键是MKR1010-ENV而非Log,Log是MQTT主题名,需在topics参数中指定
完整正确配置
[[inputs.mqtt_consumer]] ## 替换为你的MQTT代理地址 servers = ["tcp://your-mqtt-broker:1883"] ## 订阅目标MQTT主题 topics = [ "Pool", "Log" ] ## 按需添加MQTT认证参数 # username = "your-username" # password = "your-password" ## 指定数据格式为json_v2 data_format = "json_v2" [[inputs.mqtt_consumer.json_v2]] ## 解析Pool主题的JSON payload [[inputs.mqtt_consumer.json_v2.object]] path = "Pool" ## 添加数据源标识标签 tags = { source = "Pool" } ## 定义字段映射规则 [[inputs.mqtt_consumer.json_v2.object.fields]] name = "Sequence" type = "int" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "Temp" type = "float" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "Humidity" type = "float" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "HeatIndex" type = "float" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "WiFiSignal" type = "float" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "Lux" type = "float" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "InFlow" type = "float" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "OutFlow" type = "float" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "Pressure" type = "float" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "Memory" type = "int" ## 解析Log主题的JSON payload [[inputs.mqtt_consumer.json_v2.object]] path = "MKR1010-ENV" ## 添加数据源标识标签 tags = { source = "MKR1010-ENV" } ## 定义字段映射规则 [[inputs.mqtt_consumer.json_v2.object.fields]] name = "Seq" type = "int" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "DHTf" type = "float" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "DHTc" type = "float" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "DHTHumid" type = "float" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "WiFiSignal" type = "float" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "ENVTemp" type = "float" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "ENVHumid" type = "float" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "kPa" type = "float" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "Sun" type = "float" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "UVa" type = "float" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "UVb" type = "float" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "UVIndex" type = "float" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "DPSc" type = "float" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "hPa" type = "float" [[inputs.mqtt_consumer.json_v2.object.fields]] name = "Mem" type = "int"
关键修正说明
- 把
fields的数组对象写法改为TOML表格数组([[...fields]]),这是Telegraf json_v2要求的标准语法 - 合并重复的
[[inputs.mqtt_consumer.json_v2]]块,在同一个json_v2配置下添加多个object解析规则 - 修正第二个object的
path为payload实际的根键MKR1010-ENV,同时在topics中明确订阅Pool和Log两个主题 - 调整
tags为键值对格式(tags = { source = "xxx" }),而非数组,确保正确添加数据源标识标签
内容的提问来源于stack exchange,提问作者john fowler
相关产品推荐
相关产品推荐

