跟踪登录用户的数量作为千分尺指标?

Track no of logged in users as micrometer metric?

我有 spring 引导应用程序,我想使用一个指标(我正在使用 micrometer)跟踪登录用户的数量。我的想法是跟踪我们拥有的 /login rest 调用并增加一个 guage。但是,我没有随着用户过期而减少指标(仪表计数)的解决方案。如果我想在增加仪表后根据固定时间减少仪表,我该怎么做?我的服务也有两个实例,因此为了保持一致,我计划使用负载 平衡器会话粘性。我希望同一用户 ( IP ) 将登陆同一台机器。

以下是我的指标

  AtomicInteger noOfLoggedInUsers = registry.gauge("logged.user.count", new AtomicInteger(0));

这就是我增加仪表的方式

public int addUser(final String username) {
final String usernameVal = cache.get(username);
if (usernameVal == null) {
  cache.put(username, username);
  noOfLoggedInUsers.incrementAndGet();
}
return noOfLoggedInUsers.get();

}

我正在使用地图来存储唯一用户。 我也想知道是否有更好的方法来跟踪登录用户数。

您可以查看以下内容:

  1. Tomcat 发布了一个名为 activeSessions 的 JMX 计数器:see the docs Micromeer 对此有支持,在 Spring Boot.

    的情况下,您可以使用 server.tomcat.mbeanregistry.enabled=true 打开它
  2. 您可以使用 Reactor 安排延迟会话到期的操作: Mono.delay(ttl).subscribe(event -> noOfLoggedInUsers.decrementAndGet())
    Here's an example

  3. 因为你也在维护一个地图(我不太明白),你可以看一下Evictor,它在元素过期后从并发地图中删除元素(你也许能够重用这个项目中的东西)。