You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修正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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 02:54:56