如何查看MQTT服务器上有哪些客户端连接,有哪些命令?

查看MQTT服务器上有哪些客户端连接,最快的方式是通过Broker自带的监控主题或管理接口获取精确的客户端ID列表,其次是查看实时日志文件,不同Broker的命令略有差异,但原理一致。

先摸清你的Broker是哪种

MQTT服务器本身不提供统一的“在线列表”面板,但几乎每个Broker都预留了查看通道,行业内最常用的Broker无非三种:Mosquitto(开源轻量方案)、EMQX(高性能分布式方案)、qingcloud(轻量级嵌入式方案),先确认自己用的是哪一种,再对症下药。

mqtt 客户端,安卓版
加载中
mqtt 客户端,安卓版

怎么确认?看客户端连接时填的端口号就能猜个大概:1883是MQTT默认端口,8083或8084通常是WebSocket端口,18083往往是EMQX的Dashboard管理端口,如果你是在树莓派或者NAS上部署的智能家居网关,八成是Mosquitto;如果公司里跑着成千上万的设备连接,那大概率是EMQX。

Mosquitto:看主题、翻日志、查系统监控

Mosquitto是目前个人开发者和小型项目中最常见的Broker,它没有图形界面,但提供了足够多的信息渠道。

订阅$SYS开头的系统主题

Mosquitto从1.5版本开始,默认开启$SYS主题树,你只要用一个MQTT客户端订阅$SYS/#就能看到一堆Broker实时统计信息,具体操作如下:

mosquitto_sub -h 服务器IP -p 1883 -t ‘$SYS/#’ -v

然后会刷出一连串类似这样的内容:

  • $SYS/broker/clients/connected 当前已连接的客户端数量
  • $SYS/broker/clients/total 曾经连接过的客户端总数(含掉线的)
  • $SYS/broker/clients/disconnected 已断开但会话保持的客户端数量
  • $SYS/broker/clients/maximum 历史最大并发连接数
  • $SYS/broker/bytes/received Broker收到的总字节数

但这里有个坑:$SYS只给你数量和统计维度,不直接列出每个客户端的ID,如果你能接受只看数量,那这个方式最省事。

直接翻日志文件

要看到“有哪些客户端”这种具体清单,日志比$SYS更直观,在Linux上运行Mosquitto时,日志路径通常在/var/log/mosquitto/mosquitto.log,Windows上一般在C:mosquittomosquitto.log,用一条命令就能看到实时写入的连接记录:

tail -f /var/log/mosquitto/mosquitto.log

日志里会实时打印这样的行:

  • New client connected from 192.168.1.105 as device_001 (p2, c1, k60)
  • Client device_001 disconnected

    如何查看MQTT服务器上有哪些客户端连接,有哪些命令?

  • New client connected from 192.168.1.107 as sensor_temp_02 (p2, c1, k30)

通过跟踪New client connected from后面的IP和as后面的客户端ID,就能拼凑出到底有哪些设备连了上来,不过日志默认只记录“连接建立”和“连接断开”,不会保留一个持续的在线列表,你得自己通过监听日志变化来维护会话状态。

借助第三方工具做可视化

如果你不想手动翻日志,可以用MQTT Explorer这个开源桌面客户端,它连接Broker之后,左侧会有一个“Local”按钮,点开就能看到当前已连接的客户端列表,包含Client ID和IP地址,实际上它的原理也是订阅$SYS主题,但帮我们做了聚合展示。

EMQX:管理界面一打开,谁在线一目了然

如果你的MQTT服务器部署的是EMQX,那查看客户端连接就简单多了。

Dashboard图形界面

默认安装好EMQX之后,浏览器访问http://服务器IP:18083,账号密码默认为admin/public,登录后进入“客户端管理”页面,会看到一个表格,实时列出所有已连接的客户端,表头包含:

  • Client ID
  • 用户名
  • IP地址和端口
  • 协议版本(MQTT 3.1.1还是MQTT 5.0)
  • 连接状态(已连接/已断开)
  • 订阅的主题数量

在这个界面上还能直接踢掉异常连接,或者按Client ID搜索特定设备,非常实用,行业共识认为,EMQX在单节点支持百万级连接的情况下,Dashboard的响应速度依然能保持在毫秒级,这在同类开源产品中是比较突出的。

REST API拉取客户端清单

EMQX提供了完整的REST API,方便你写脚本或对接自建监控告警系统,查看在线客户端列表的接口是:

GET /api/v4/clients

返回的JSON里包含data数组,每一项就是一个客户端的详细信息,配合curl命令可以直接在服务器上测试:

curl -u admin:public http://127.0.0.1:8081/api/v4/clients

这样就能拿到当前所有连接到MQTT服务器上的客户端ID列表,并且可以按需解析出IP、用户名、连接时长等字段。

命令行工具emqx_ctl

对于不习惯图形界面的运维人员,EMQX自带的命令行工具也很方便,执行:

emqx ctl clients list

会以文本行格式输出所有在线客户端,配合grep、wc -l等Linux命令还能快速统计在线数量,如果只想看单个客户端的状态,比如设备device_123是否在线,可以执行:

emqx ctl client device_123
会显示这个客户端当前是否有会话、是否在线、从哪个IP连接、订阅了哪些主题。

如何查看MQTT服务器上有哪些客户端连接,有哪些命令?

qingcloud:轻量部署中的特殊查看方式

一些嵌入式设备或者智能网关里跑的是qingcloud这种轻量级Broker,它们的资源受限,通常不会提供HTTP API或web管理界面,查看客户端连接的方式往往依靠系统自带的订阅或发布工具。

qingcloud有个原生命令可以实时监控在线客户端状态:

qingcloud monitor

执行后会动态刷新当前所有连接,显示每个Client ID对应的IP地址和心跳间隔,这种方式适合开发阶段调试,但生产环境下使用较少。

另外有个小技巧:当客户端连接时,在qingcloud的启动终端(前台运行模式)会直接打印连接日志,但如果在后台运行,则日志重定向到了/var/log/mqtt.log,可以用tail -f查看。

这里需要提一个实际场景:不少开发者用docker容器来跑mosquitto时,容易漏看容器日志导致排查时一头雾水,如果你用的是docker方式部署,务必把日志挂载到宿主机上,否当容器被重建时历史连接记录就全部丢失了。

排查“mqtt客户端掉线频繁”的正确姿势

很多人搜“怎么查看mqtt服务器上有哪些客户端连接”,其实真正的问题背景是“既然连接断了,想确认设备到底有没有连上服务器”,这里有三个不同层面的排查路径:

看Broker侧统计实时连接数

  • 运行Mosquitto时订阅$SYS/broker/clients/connected,观察数值是否长期超过实际设备数,如果数值一直增长且高于设备总量,说明有连接未正确断开,多半是客户端没设置clean session(清理会话)标志位,导致MQTT服务器一直保存会话状态。
  • 用EMQX的Dashboard查看“连接数”和“会话数”两个指标,如果连接数远大于设备数,通常是设备侧反复重连导致的旧连接残留。

看网络层有没有VPC或防火墙拦截

得到IP地址后,在服务器上检查客户端IP是否可达:

ping 192.168.1.105

再用telnet检查1883端口通不通:

telnet 192.168.1.105 1883

如果网络层通了但MQTT连接还是不稳定,下一步就要看认证配置,确认是不是用户名密码或客户端证书校验不通过导致被踢下线。

看订阅关系维持的活跃度

在线不代表活跃。查看MQTT服务器上有哪些客户端连接只解决了“连没连上”的问题,要判断“是否健在”,还得看心跳包情况,大多数Broker默认的keepalive间隔是60秒,如果设备侧设置的心跳太短(比如5秒),在无线网络环境下很容易产生大量无效重连,导致Broker的连接列表像过山车一样起伏。

如何查看MQTT服务器上有哪些客户端连接,有哪些命令?

站在企业监控角度的进阶建议

如果管理的是几十台甚至上百台生产设备,光靠Shell命令临时查看属于应急手段,绝大多数MQTT服务器都支持Webhook或规则引擎,把连接事件转发到外部监控平台,比如EMQX可以配置“连接/断开事件”通过HTTP回调推送给企业微信或钉钉机器人,做到主动感知设备上下线,而不是被动地去服务器上查询。

对于需要长期记录分析的用户,推荐用简米云物联网平台或酷番云IoT平台中托管的MQTT实例,它们的控制台自带设备管理功能,直接以设备维度展示在线状态,不用自己折腾命令行,不过要留意一点,云厂商的MQTT实例通常按照连接数和消息数计费,查看实时连接数的入口一般在“设备管理”或“监控告警”菜单下。

查看MQTT服务器上有哪些客户端连接,本质上就是确认当前Broker的会话表里有哪些活跃条目,用$SYS主题看数量,用日志看明细,用管理API看结构化数据,三种方式任选其一都能达到目的,关键要记住的是:Broker看不到消息内容,但一定看得到每一个连接的来源IP和Client ID,这是MQTT协议中Broker天然具备的能力。

相关问答

Q:怎么查看mqtt服务器上有哪些客户端连接而不影响线上业务?
A:订阅$SYS或调用查询API均属于只读操作,不会对现有连接产生任何影响,但要注意mosquitto_sub -t '$SYS/#'会额外增加Broker的转发负载,连接数较大时建议过滤掉高频更新的字节统计主题,只订阅$SYS/broker/clients/connected这类低频指标。

Q:为什么我查看mqtt客户端连接列表时,发现一些Client ID重复出现?
A:同一个Client ID在同一时间只能维持一个有效连接,出现重复是因为旧的连接未完全释放,而新连接已建立,这通常由网络抖动导致ACK丢失触发,EMQX Dashboard中会显示“连接状态为旧连接”的条目,你可以手动踢掉旧连接释放资源。

Q:EMQX和Mosquitto查看客户端连接的方式能通用吗?
A:不能直接通用,Mosquitto没有内置REST API,只能通过$SYS主题或日志间接获取;EMQX则提供了完整的HTTP API和WebSocket API,如果要统一管理,建议通过MQTT协议订阅$SYS主题来实现跨Broker的连接数量统计。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/708276.html

赞 (0)
怎么进入戴尔服务器系统进行安装还原,操作步骤有哪些?
上一篇 2026年10月4日 17:54
成都定制服务器哪家性价比高,多少钱一台?
下一篇 2026年10月4日 17:55

相关推荐

  • 如何在ASP.NET运行环境II8和SQL2016上实现有效的安全优化策略?

    在ASP.NET运行环境(IIS + SQL Server 2016)中实现全面的安全优化,需要从服务器配置、应用程序防护、数据库加固及持续监控四个层面系统化实施,核心在于构建纵深防御体系,而非依赖单一措施, IIS服务器层安全加固IIS作为应用程序的宿主,其安全配置是第一道防线,最小化安装与权限约束移除不必要……

    2026年2月3日
    14210
  • AIoT智能产业是什么?AIoT智能产业发展前景如何

    AIoT智能产业的核心驱动力在于“智能”与“连接”的深度融合,其本质是人工智能(AI)与物联网(IoT)的双向赋能,最终实现万物互联向万物智联的跨越,这一产业不再是单纯的技术叠加,而是通过数据闭环,让物理世界的设备具备感知、思考与执行的能力,企业若想在未来的数字化竞争中占据高地,必须构建“端-边-云-用”一体化……

    2026年3月21日
    11700
  • 简米云OSS和服务器如何关闭,关闭步骤详解?

    阿里云开通的OSS和服务器根本是两套独立产品,关闭方式完全不同:OSS需要在控制台删除所有文件后手动关闭,服务器(ECS)则通过实例释放操作来退订,两者都需要先清理依赖资源再操作,否则会继续产生费用,先分清你买的是哪个“云”,别把OSS和ECS混为一谈很多人登录阿里云后台,看到“云服务器”和“对象存储OSS”两……

    2026年10月15日
    100
  • 南京商城促销期访问慢怎么办,独立服务器租用多少钱

    南京商城促销期访问慢,租独立服务器是最直接的解决方式——独享CPU、内存和带宽,能把瞬时流量稳稳接住,避免订单白白流失,促销期访问慢,问题大多出在资源共享南京商城做促销,流量经常是平时的好几倍,活动一开始,首页、商品详情页、购物车、支付接口同时被集中访问,如果商城还放在虚拟主机或者低配共享云服务器上,资源很快会……

    2026年9月23日
    200
  • 简米云服务器Linux密码怎么看?,服务器密码忘了怎么找回?

    阿里云Linux服务器上的登录密码无法直接“查看”明文,忘记密码应在ECS控制台重置实例密码,或改用密钥对登录,先别急着找“密码原文”,Linux系统的安全设计决定了它不会把登录密码以明文形式放在某个文件里,你在阿里云控制台能做的,通常是重置密码、确认登录方式、检查密码状态,而不是把原密码读出来,下面按实际操作……

    程序编程 2026年11月1日
    200
  • DayZ单人本地服务器如何设置管理员,管理员权限怎么开启?

    在DAYZ单人本地服务器中,当管理员的核心操作是把你的Steam64位ID写进server.cfg的admins列表,保存后重启服务器,进游戏自动获得管理员权限,然后通过聊天框输入开头的命令进行管理,下面具体拆解步骤,以及改错文件、Mod权限、命令清单这些你迟早会碰到的坑,dayz单人本地服务器怎么当管理员?先……

    2026年10月2日
    000
  • 什么是AIoT教育启蒙?AIoT教育启蒙是什么

    AIoT教育启蒙并非单纯学习编程,而是通过“感知-决策-执行”的闭环逻辑,让孩子在动手搭建智能硬件的过程中,理解人工智能与物联网如何协同解决现实问题,从而培养计算思维与工程素养,很多人对AIoT(人工智能物联网)存在误解,认为这是高深莫测的黑科技,只有程序员才能接触,它更像是给传统玩具装上“大脑”和“神经”,对……

    2026年6月11日
    4000
  • RepriseHosting西雅图独服$33/月配置如何?美国服务器租用推荐

    RepriseHosting西雅图独服凭借L5640处理器、16G内存及50TB大流量配置,以$33/月的极低门槛,成为追求高性价比与稳定性的建站及开发首选方案,在服务器租赁市场,价格与性能的平衡点往往难以捕捉,RepriseHosting推出的这款西雅图节点独立服务器,打破了传统独服高昂的入门壁垒,对于需要处……

    2026年7月5日
    11200
  • 我的世界空岛op怎么传送玩家,op传送指令有哪些?

    我的世界空岛服务器OP传人,核心就一句话:用 /tp 指令配合玩家ID即可完成传送,OP权限是前提, 无论你是自己飞过去还是把别人拉过来,掌握这几个指令和参数,空岛管理立刻上手,我的世界空岛服务器op传送指令详解很多空岛服主拿到OP权限后,第一件事就是琢磨怎么把人传来传去,传送这事儿在空岛玩法里特别重要——玩家……

    程序编程 2026年10月25日
    100
  • 如何搭建MySQL数据库服务器,如何优化数据库服务器?

    MySQL 数据库服务器管理与优化指南MySQL 是全球应用最广泛的开源关系型数据库管理系统(RDBMS),作为服务器端的核心组件,MySQL 的性能、稳定性和安全性直接决定了业务系统的整体表现,本指南旨在提供 MySQL 服务器从部署到维护的全方位建议,MySQL 服务器的核心特性高性能与可扩展性:MySQL……

    2026年7月13日
    500

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注