使用Spring公开有关当前Websocket连接的指标

时间:2018-04-06 07:25:34

标签: java spring spring-boot metrics spring-websocket

对于我的仪表板应用程序,我想使用内部Spring指标监视基于Spring Boot的应用程序。因此,我使用了spring-boot-actuator依赖关系,它暴露了许多内部指标。有许多基于HTTP的指标和Tomcat指标,如当前会话,状态X的HTTP调用量等等。我找不到有关我的Websocket连接的任何信息。

是否存在开箱即用的内置指标暴露当前使用Spring的Websockets的工具,或者我是否必须创建自己的指标(例如,使用Prometheus在Grafana中显示数据)并且必须手动注册例如a我收到SessionConnectEventSessionConnectEvent时会更新的计数器?

提前致谢!

3 个答案:

答案 0 :(得分:2)

如果您在WebSocket上使用STOMP,Spring会在WebSocketMessageBrokerStats中聚合有关设置的关键基础架构组件的内部状态和计数器的信息,默认情况下每30秒记录一次。它是作为Spring bean创建的,可以轻松自动装配。这是您将获得的信息示例:WebSocketMessageBrokerStats output

目前没有执行器端点,但我已将其创建为Spring WebSocket Chat示例的一部分:

答案 1 :(得分:2)

找到了非常简单的方法。

如果要通过WebSocket使用STOMP,则在控制器类中只需自动装配WebSocketMessageBrokerStats类并使用其方法即可。

@Autowired
WebSocketMessageBrokerStats webSocketMessageBrokerStats;

System.out.println("Session Stats info " +webSocketMessageBrokerStats.getWebSocketSessionStatsInfo());

无需创建任何单独的类。

阅读https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#websocket-stomp-stats了解更多信息。

答案 2 :(得分:1)

此外,还有一种方法。如果您想获得有关活动会话的更多详细信息,则它包含在 person1 is a : Person person2 is a : HASH Undefined name attribute at ./p2.pl line 28. Use of uninitialized value in say at ./p2.pl line 43. The name of person1 is: The age of person1 is: 20 中。这个 bean 处理活动会话并有一个方法 SubProtocolWebSocketHandler。 Stats 对象有方法:

getStats

实际上 int getTotalSessions(); int getWebSocketSessions(); int getHttpStreamingSessions(); int getHttpPollingSessions(); int getLimitExceededSessions(); int getNoMessagesReceivedSessions(); int getTransportErrorSessions(); 使用方法 WebSocketMessageBrokerStats,它在 Stats 对象上调用 #SubProtocolWebSocketHandler.getStatsInfo

因此,可能的代码如下:

toSting