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

Telegraf多主题MQTT消费插件适配不同JSON结构方案咨询

Telegraf多MQTT主题不同JSON结构的处理方案

你不需要必须配置多个mqtt_consumer实例,有两种实用方案可以适配不同JSON结构的MQTT主题:

方案一:单个实例结合json_v2格式做条件解析

Telegraf的json_v2数据格式支持基于MQTT主题或字段的条件解析规则,能在单个mqtt_consumer实例中同时处理多个不同结构的JSON数据。这种方式配置更集中,适合结构差异不是极端大的场景。

示例配置:

[[inputs.mqtt_consumer]]
  name_override = "devices"
  topics = [
    "devices/+/control",
    "devices/+/status",
    "sensors/+/reading"
  ]
  servers = ["${MQTT_SERVER_URL}"]
  tagexclude = ["host"]
  data_format = "json_v2"

  # 匹配devices/+/control主题的解析规则
  [[inputs.mqtt_consumer.json_v2]]
    measurement_name = "device_control"
    topic = "devices/+/control"
    timestamp_key = "ts"
    timestamp_format = "unix_ms"
    tag_keys = ["site"]
    string_fields = ["mode", "is_online"]

  # 匹配devices/+/status主题的解析规则
  [[inputs.mqtt_consumer.json_v2]]
    measurement_name = "device_status"
    topic = "devices/+/status"
    timestamp_key = "timestamp"
    timestamp_format = "unix"
    tag_keys = ["device_id", "site"]
    float_fields = ["temperature", "battery"]

  # 匹配sensors/+/reading主题的解析规则
  [[inputs.mqtt_consumer.json_v2]]
    measurement_name = "sensor_reading"
    topic = "sensors/+/reading"
    timestamp_key = "ts"
    timestamp_format = "unix_ms"
    tag_keys = ["sensor_type"]
    float_fields = ["value"]

方案二:多个独立的mqtt_consumer实例

如果不同主题的JSON结构差异极大,或者需要单独配置认证、服务器、过滤规则等参数,直接创建多个mqtt_consumer实例会更清晰,每个实例只处理特定主题,独立配置解析规则。

示例配置:

# 专门处理devices/+/control主题的实例
[[inputs.mqtt_consumer]]
  name_override = "device_control"
  topics = ["devices/+/control"]
  servers = ["${MQTT_SERVER_URL}"]
  tagexclude = ["host", "topic"]
  data_format = "json"
  json_time_key = "ts"
  json_time_format = "unix_ms"
  tag_keys = ["site"]
  json_string_fields = ["mode", "is_online"]

# 专门处理devices/+/status主题的实例
[[inputs.mqtt_consumer]]
  name_override = "device_status"
  topics = ["devices/+/status"]
  servers = ["${MQTT_SERVER_URL}"]
  tagexclude = ["host", "topic"]
  data_format = "json"
  json_time_key = "timestamp"
  json_time_format = "unix"
  tag_keys = ["device_id", "site"]
  json_float_fields = ["temperature", "battery"]

总结

  • 若结构差异可通过条件解析覆盖,优先用方案一,配置更简洁;
  • 若结构差异过大或需要独立配置项,选择方案二,维护更方便。

内容的提问来源于stack exchange,提问作者Patrick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:10:44