Skip to content

监控与日志

TMQTT 内置完善的监控和日志系统,帮助你实时了解 Broker 运行状态、排查问题和设置告警。


Prometheus 指标

TMQTT 默认在 9090 端口暴露 Prometheus Exporter 接口,开箱即用,无需额外配置。

采集方式

在 Prometheus 配置文件中添加 TMQTT 节点作为 scrape target:

yaml
scrape_configs:
  - job_name: 'tmqtt'
    static_configs:
      - targets: ['tmqtt-host:9090']

核心指标

指标名称类型说明
tmqtt_connections_totalGauge当前连接总数
tmqtt_connections_activeGauge活跃连接数
tmqtt_messages_received_totalCounter累计接收消息数
tmqtt_messages_sent_totalCounter累计发送消息数
tmqtt_messages_dropped_totalCounter丢弃的消息数(如队列满时)
tmqtt_subscribe_totalCounter累计订阅次数
tmqtt_unsubscribe_totalCounter累计取消订阅次数
tmqtt_auth_success_totalCounter认证成功次数
tmqtt_auth_failure_totalCounter认证失败次数
tmqtt_bridge_sink_sent_totalCounter桥接 Sink 成功发送消息数(按 Sink 名分维度)
tmqtt_bridge_sink_failed_totalCounter桥接 Sink 发送失败消息数
tmqtt_bridge_dlq_totalCounter进入死信队列的消息数

Grafana 可视化

配合 Grafana 的 Prometheus 数据源,可以快速搭建监控仪表盘。常用面板:

  • 连接数变化趋势
  • 消息吞吐率(messages_received_total 的 rate)
  • 认证失败率(auth_failure_total 的 rate,可检测攻击)
  • 桥接 Sink 健康度(sent vs failed 对比)

系统主题($SYS/)

TMQTT 定期将运行状态发布到 $SYS/ 前缀的主题上。客户端订阅 $SYS/# 即可实时获取以下信息:

主题内容
$SYS/broker/versionBroker 版本号
$SYS/broker/uptime运行时间(秒)
$SYS/broker/clients/total总连接数
$SYS/broker/clients/connected当前活跃连接数
$SYS/broker/messages/received累计接收消息数
$SYS/broker/messages/sent累计发送消息数
$SYS/broker/messages/dropped丢弃的消息数

发布间隔:默认每 60 秒更新一次。

提示:$SYS/ 主题属于特殊内部主题,客户端只能订阅,不能发布。


日志配置

日志级别

级别输出内容使用场景
error仅错误信息生产环境,减少日志量
warn错误和警告关注异常但不需要详细信息
info运行状态信息(默认)生产环境推荐
debug详细调试信息开发和问题排查
trace最详细的信息,包括每条消息流转仅在排查疑难问题时临时使用

日志格式

格式说明使用场景
text人类可读的文本格式(默认)直接查看、调试
jsonJSON 结构化格式日志采集系统(如 ELK、Loki)

运行时调整日志级别

无需重启,通过热重载即可修改日志级别:

  1. 修改 config.toml 中的 log.level
  2. TMQTT 自动检测文件变更并应用

慢消费者监控

当客户端接收消息速度明显落后于发送速度时,TMQTT 的慢消费者检测机制会自动介入:

  • 发送队列容量占比超过阈值(默认 80%)时记录告警日志
  • 持续超过设定时间(默认 30 秒)后自动断开该客户端连接,防止拖累整体性能
  • 断开事件会记录在日志中,可通过日志或管理 API 查看

健康检查

/healthz 接口无需鉴权,返回简单的 HTTP 200 响应,适合用于负载均衡器或 Kubernetes 的健康探针:

bash
curl http://localhost:8080/healthz
# 响应:HTTP 200 OK

Copyright (c) 2026 桃子 TaoZi.Pub https://taozi.pub | MIT License