Telegraf json_v2插件解析JSON数组出现重复值,求正确配置
问题描述
现有JSON数据:
{ "inc_code": "I1", "sensors": [ { "n": 1, "aX": 12 }, { "n": 2, "aX": 50 } ] }
期望Telegraf输出结果:
I1, n=1 aX=12 I1, n=2 aX=50
尝试的配置:
[[inputs.mqtt_consumer.json_v2]] measurement_name_path = "inc_code" [[inputs.mqtt_consumer.json_v2.tag]] path = "sensors.#.n" [[inputs.mqtt_consumer.json_v2.field]] path = "sensors.#.aX" type = "float"
得到的错误结果(存在值重复):
I1,n=1 aX=12 1690565287967408422 I1,n=1 aX=50 1690565287967408422 I1,n=2 aX=12 1690565287967408422 I1,n=2 aX=50 1690565287967408422
正确配置写法
问题出在直接使用sensors.#通配符会导致所有匹配的tag和field值做笛卡尔积,从而生成重复组合的数据。需要改用json_v2的array块来遍历sensors数组,每个数组元素单独生成一条数据:
[[inputs.mqtt_consumer]] # 此处保留你的MQTT连接配置(如servers、topics等) [[inputs.mqtt_consumer.json_v2]] measurement_name_path = "inc_code" # 遍历sensors数组,每个元素生成一条数据 [[inputs.mqtt_consumer.json_v2.array]] path = "sensors" # 将数组元素中的n设为tag [[inputs.mqtt_consumer.json_v2.array.tag]] path = "n" # 将数组元素中的aX设为浮点型field [[inputs.mqtt_consumer.json_v2.array.field]] path = "aX" type = "float"
配置说明:
array块指定遍历sensors数组,每个数组元素独立处理- 数组内部的
tag和field仅作用于当前数组元素,避免了笛卡尔积导致的重复数据 measurement_name_path依然使用inc_code的值作为测量名称,符合期望输出格式
内容的提问来源于stack exchange,提问作者Ricardo Santos
相关产品推荐
相关产品推荐

