如何在Mosquitto MQTT中获取丢包率?树莓派传感器消息监控场景
从Mosquitto获取传感器消息丢包率的方法
Mosquitto本身提供了几种方式获取统计数据,用来计算消息投递成功率和丢包率,具体如下:
1. 启用内置统计日志
在Mosquitto的配置文件(mosquitto.conf)中添加以下配置:
# 每10秒输出一次统计数据,可根据需求调整间隔 stats_interval 10 # 开启统计日志输出 log_type statistics
重启Mosquitto服务后,日志中会定期输出Broker的核心统计指标,包括:
messages_received:Broker收到的所有消息总数messages_sent:Broker发送给订阅者的消息总数- 针对单个客户端的统计(包含客户端ID):比如某传感器客户端发送的消息数
你可以通过过滤日志中的传感器客户端ID,统计该客户端发送的消息量,以及Broker成功转发的对应消息量,丢包率计算公式为:丢包率 = (传感器发送消息数 - Broker转发/订阅端接收消息数) / 传感器发送消息数 × 100%
2. 订阅$SYS监控主题
Mosquitto会通过$SYS前缀的MQTT主题发布自身运行状态和统计数据,你可以在树莓派上直接订阅这些主题获取实时数据:
$SYS/broker/messages/received:Broker累计收到的消息总数$SYS/broker/messages/sent:Broker累计发送的消息总数$SYS/broker/clients/<传感器客户端ID>/messages/received:指定传感器客户端发送给Broker的消息数
如果需要针对单个传感器的精准统计,订阅对应客户端ID的$SYS主题即可。定时采集这些数据后,结合传感器自身的发送计数(如果传感器能上报发送量),就能计算出丢包率。
3. 补充:精准单消息追踪
如果需要更细粒度的丢包排查(比如确认具体哪条消息丢失),Mosquitto本身没有内置消息ID级别的记录功能。这种情况下可以在传感器端给每条消息添加唯一标识(比如消息头里加msg_id),树莓派的订阅端记录收到的msg_id,对比传感器发送的ID列表,就能精准统计丢包情况。这种方式可以和Mosquitto的统计数据互相验证,结果更准确。
内容的提问来源于stack exchange,提问作者baeyeongbin
相关产品推荐
相关产品推荐

