Skip to content

监控 (Monitoring)

启用 WebSocket 消息代理后,系统会自动收集关键组件的基础设施统计数据,协助你洞察应用的运行状态。

WebSocketMessageBrokerStats

Spring 定义了一个名为 WebSocketMessageBrokerStats 的 Bean。它汇集了所有的统计信息,默认情况下每 30 分钟INFO 级别记录一次日志。

你也可以通过 JMX(如使用 jconsole)来实时查看这些指标。

关键指标摘要

1. 客户端会话 (Client Sessions)

  • 当前连接数: 区分 WebSocket 还是 HTTP Streaming/Polling。
  • 异常关闭数:
    • 连接失败: 已建立但 60 秒内未收到消息的会话(通常是代理/网络问题)。
    • 超出发送限制: 因慢客户端超过发送超时或缓冲区限制而关闭的会话。
    • 传输错误: 读写失败导致的关闭。

2. STOMP 帧统计

  • 处理的 CONNECT、CONNECTED 和 DISCONNECT 帧的总数。如果 DISCONNECT 远低于 CONNECT,可能意味着客户端在异常断线时未能优雅退出。

3. 外部代理中继 (STOMP Broker Relay)

  • TCP 连接数: 至外部消息中间件(如 RabbitMQ)的连接总数。通常等于 客户端会话数 + 1(额外的 1 是系统连接)。

4. 线程池健康状况

  • 入站频道负载: 任务排队可能表示业务逻辑太慢。
  • 出站频道负载: 任务排队通常表示客户端消费消息太慢。

补充教学

1. “异常关闭”是排查问题的金钥匙

如果你发现“连接失败”指标激增,首先检查 Nginx 的配置,看是否正确设置了 Upgrade 标头。如果“超出发送限制”较多,说明你的业务推送量可能超过了客户端的接收能力。

2. 集成到 Grafana

虽然 Spring 默认只打日志,但由于这些信息在特定的 Bean 中,你可以轻松编写一个转换器,将这些指标暴露给 Micrometer,进而对接到 Prometheus 和 Grafana 进行美观的可视化监控。

3. 30 分钟日志太慢?

如果你在排查问题,可以通过配置文件修改日志级别或通过 JMX 手动触发拉取,甚至可以调整其内部线程的触发频率。

Based on Spring Framework.