Telegraf未处理MQTT数据问题排查求助
问题:MQTT数据无法写入InfluxDB(InfluxDB/Telegraf/Mosquitto环境)
已搭建InfluxDB / Telegraf / Mosquitto环境,MQTT消息可正常发布,但MQTT生成的数据无法写入InfluxDB。其他Telegraf输入插件(如cpu、disk)可正常写入数据库,说明数据库配置本身无问题。
Telegraf的MQTT Consumer配置
[[inputs.mqtt_consumer]] ## Broker URLs for the MQTT server or cluster. To connect to multiple ## clusters or standalone servers, use a separate plugin instance. ## example: servers = ["tcp://localhost:1883"] ## servers = ["ssl://localhost:1883"] ## servers = ["ws://localhost:1883"] servers = ["tcp://192.168.x.x1883"] username = "xx" password = "xx" ## Topics that will be subscribed to. topics = [ "Bosch/#" ] ]
相关日志信息
Telegraf连接日志
[inputs.mqtt_consumer] Connected [tcp://192.168.x.x:1883]
Mosquitto调试日志
8110927: Sending PUBLISH to Telegraf-Consumer-M0uQg (d0, q0, r0, m0, 'Bosch/CAM137/onvif-ej/RuleEngine/CountAggregation/Counter/&1/xx', ... (116 bytes)) 1688110972: Received PINGREQ from Telegraf-Consumer-M0uQg 1688110972: Sending PINGRESP to Telegraf-Consumer-M0uQg 1688111032: Received PINGREQ from Telegraf-Consumer-M0uQg 1688111032: Sending PINGRESP to Telegraf-Consumer-M0uQg
Telegraf输出缓冲区日志
2023-06-30T07:43:02Z D! [outputs.influxdb_v2] Buffer fullness: 0 / 10000 metrics 2023-06-30T07:43:12Z D! [outputs.influxdb_v2] Buffer fullness: 0 / 10000 metrics 2023-06-30T07:43:12Z D! [outputs.file] Buffer fullness: 0 / 10000 metrics 2023-06-30T07:43:22Z D! [outputs.influxdb_v2] Buffer fullness: 0 / 10000 metrics 2023-06-30T07:43:22Z D! [outputs.file] Buffer fullness: 0 / 10000 metrics 2023-06-30T07:43:32Z D! [outputs.influxdb_v2] Buffer fullness: 0 / 10000 metrics 2023-06-30T07:43:32Z D! [outputs.file] Buffer fullness: 0 / 10000 metrics 2023-06-30T07:43:42Z D! [outputs.influxdb_v2] Buffer fullness: 0 / 10000 metrics 2023-06-30T07:43:42Z D! [outputs.file] Buffer fullness: 0 / 10000 metrics 2023-06-30T07:43:52Z D! [outputs.influxdb_v2] Buffer fullness: 0 / 10000 metrics 2023-06-30T07:43:52Z D! [outputs.file] Buffer fullness: 0 / 10000 metrics
排查与解决步骤
- 修复MQTT服务器地址语法错误:配置中的
servers = ["tcp://192.168.x.x1883"]缺少端口分隔符冒号,应改为servers = ["tcp://192.168.x.x:1883"]。虽然日志显示连接成功,但地址格式错误可能导致订阅逻辑异常。 - 指定MQTT消息的Data Format:Telegraf的mqtt_consumer默认仅解析InfluxDB Line Protocol格式的payload。如果你的MQTT消息是JSON或其他格式,必须在配置中添加对应的数据格式声明,例如:
[[inputs.mqtt_consumer]] # 其他配置... data_format = "json" # 如果payload是JSON格式 # 若需提取字段或标签,可额外配置json_tag_keys、json_string_fields等参数 - 启用Telegraf详细调试日志:启动Telegraf时添加
--debug参数,查看是否有payload解析失败的日志信息。例如:
若存在解析错误,日志会明确提示telegraf --config /etc/telegraf/telegraf.conf --debug[inputs.mqtt_consumer] Error parsing payload及具体原因。 - 验证MQTT消息内容:使用
mosquitto_sub工具订阅对应主题,确认payload的格式和内容是否符合Telegraf的解析要求:mosquitto_sub -h 192.168.x.x -p 1883 -u "xx" -P "xx" -t "Bosch/#"
内容的提问来源于stack exchange,提问作者Mario Verhaeg
相关产品推荐
相关产品推荐

