Telegraf inputs.mqtt_consumer订阅MQTT时无法正确解析JSON数据
问题原因
你配置失效的核心原因是搞错了topic_parsing的作用边界:
topic_parsing模块只负责拆分MQTT的主题路径,不会解析JSON消息体内的字段- 你当前的消息都发布在
test主题下,主题路径本身没有air/humidity/region/temperature/time的多层结构,你写的拆分规则完全匹配不到实际主题,根本不会执行 - 你需要提取的
region字段是存在JSON消息负载里的,靠拆主题路径本来就拿不到。
解决方法
删掉配置错误的topic_parsing块,直接通过JSON解析器的配置指定要提取为标签的字段即可,完全符合你不能使用指定禁用配置的约束,修正后的配置如下:
[[inputs.mqtt_consumer]] servers = ["tcp://127.0.0.1:1883"] topics = [ "test/#" ] data_format = "json" # 指定JSON中需要提取为标签的字段 json_tag_keys = ["region"] # 指定JSON中需要提取为指标字段的字段,不需要的字段可以不写 json_field_keys = ["temperature", "humidity"]
配置生效后,写入InfluxDB的数据就会自动携带region标签,和你预期的输出效果完全一致。
补充说明:如果后续你需要使用topic_parsing拆分主题路径,必须保证配置里的topic匹配模式和实际MQTT消息的主题层级完全对应,不能把JSON消息体里的字段名写到主题匹配规则里,否则规则不会生效。
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

