EMQX5.8.4开源 dashboard当前连接数高于on_client_authenticate/on_client_connected日志统计值

从你贴的 /api/v5/stats 看,Broker 自己的连接统计基本是自洽的,先别把锅丢给 Dashboard。两个 core 节点的 live_connections.count 分别是 2404724035,合起来 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 日志数”的方向。