Telegraf收集MQTT消息+Prometheus监控

0 阅读5分钟

Telegraf(MQTT消息采集)

  1. 安装 telegraf
wget https://dl.influxdata.com/telegraf/releases/telegraf-1.7.4-1.x86_64.rpm
yum localinstall telegraf-1.30.0-1.x86_64.rpm
  1. 配置
vim /etc/telegraf/telegraf.conf

找到Prometheus配置

改成如下:

# # Configuration for the Prometheus client to spawn
[[outputs.prometheus_client]]
#   ## Address to listen on
  listen = ":9273"
  path = "/metrics"
  expiration_interval = "60s"
  string_as_label = true

然后找到inputs.mqtt_consumer,修改采集的配置和根据自己的消息格式调整json_v2的内容,参考例子如下:

[[inputs.mqtt_consumer]]
  servers = ["tcp://10.2.209.102:1883"] ##emqx地址
  qos = 1
  connection_timeout = "30s"
  topics = ["sixin/zx/2945/erjidi/yiqu"] ##主题
  username = "test_client"            ##用户名
  password = "sqemqx123."                ##密码
  client_id = "telegraf_fjc_debug_v2"    ##client_id
  data_format = "json_v2"
  max_undelivered_messages = 100
  ##下面的部分需要根据自己的mqtt消息格式调整,可以通过AI生成
  [[inputs.mqtt_consumer.json_v2]]
    [[inputs.mqtt_consumer.json_v2.field]]
      path = "did"
      type = "string"
      optional = true

    [[inputs.mqtt_consumer.json_v2.field]]
      path = "utime"
      type = "string"
      optional = true

    [[inputs.mqtt_consumer.json_v2.object]]
      path = "content"
      tags = ["addr", "pid", "type"]
      [inputs.mqtt_consumer.json_v2.object.fields]
        addrv = "float"
      [inputs.mqtt_consumer.json_v2.object.tagpass]
        # 可选:过滤特定 addr
        # addr = ["data1", "data2"]

我的mqtt消息格式为

{"did":"FJC290231353","utime":"2026/05/06 13:28:28","content":[{"pid":"1","type":"0","addr":"data1","addrv":"3","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data2","addrv":"0","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data3","addrv":"0","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data4","addrv":"32","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data5","addrv":"0","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data6","addrv":"0","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data7","addrv":"0","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data8","addrv":"0","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data9","addrv":"0","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data10","addrv":"0","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data11","addrv":"2026","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data12","addrv":"5","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data13","addrv":"6","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data14","addrv":"13","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data15","addrv":"24","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data16","addrv":"30","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data17","addrv":"4","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data18","addrv":"2754","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data19","addrv":"2026","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data20","addrv":"5","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data21","addrv":"6","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data22","addrv":"11","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data23","addrv":"59","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data24","addrv":"47","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data25","addrv":"2008","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data26","addrv":"1","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data27","addrv":"5","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data28","addrv":"41","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data29","addrv":"35","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data30","addrv":"1","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data31","addrv":"2","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data32","addrv":"15","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data33","addrv":"34","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data34","addrv":"1","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data35","addrv":"0","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data36","addrv":"53","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data37","addrv":"19","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data38","addrv":"1","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data39","addrv":"5","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data40","addrv":"15","ctime":"2026/05/06 13:28:27"},{"pid":"1","type":"0","addr":"data41","addrv":"13","ctime":"2026/05/06 13:28:27"}]}
  1. 启动并验证
systemctl enable telegraf
systemctl start telegraf
systemctl status telegraf

访问 http://ip:9273/metrics

Prometheus抓取

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  # 已有的 job...

  # 新增:抓取 Telegraf 的指标
  - job_name: 'telegraf-mqtt'
    static_configs:
      - targets: ['10.2.209.147:9273']   #Telegraf 所在 IP 和端口
    metrics_path: '/metrics'
    scrape_interval: 15s