从你贴的 /api/v5/stats 看,Broker 自己的连接统计基本是自洽的,先别把锅丢给 Dashboard。两个 core 节点的 live_connections.count 分别是 24047 和 24035,合起来 48082,和每个节点看到的 cluster_sessions.count = 48082/48083 基本对上。按文档定义,live_connections.count 是“当前在线连接数”,client.connected / client.connected hook 才是“成功建立的连接事件数/回调”。
现在真正冲突的是:Broker 统计在线 48082,但你插件里 on_client_connected 只记了 40777。从现象看,这更像是插件侧计数漏了,不是 Dashboard 多算。
先直接对内置指标,不要再拿文本日志条数做基准:
curl -su <app_id>:<app_secret> 'http://<host>:18083/api/v5/metrics?aggregate=true' \
| jq '."client.connected", ."client.disconnected", ."client.authenticate", ."session.created", ."session.resumed", ."session.takenover"'
curl -su <app_id>:<app_secret> 'http://<host>:18083/api/v5/stats' \
| jq '[.[]."live_connections.count"] | add'
看这两组数据怎么对:
- 如果
client.connexcted也只有4w左右,而在线连接还是4.8w,那就不是你插件日志的问题了,建议整理最小复现提 issue。 - 如果
client.connected接近4.8w,但你的插件日志还是4.0w,那就是插件里的日志链路在高并发下漏记。你现在是1000/s + TLS,别再用logger条数做最终统计,先把 hook 里的计数改成 ETS / counters / atomics 自增,压测结束后一次性读结果。
另外顺手看下压测的 clientid 是否完全唯一;如果存在会话接管,session.takenover会明显上来。但这通常会让client.connected变多,不会解释你现在这个“在线数 > connected 日志数”的方向。