如何将 Micrometer 指标实现为动态地图

How to implement Micrometer metrics as a dynamic map

我有一个用例,我们想要捕获特定类别数据的指标。类别中的不同条目是动态的,不能硬编码。我们如何在 Micrometer 中定义此类指标?我使用过 DistributionSummary、Gauge 等,但它只对单个指标进行测量。

这个例子是这样的:假设如果有一个课程网站(如 Udemy、Coursera),我们可以在其中监控参加课程的人的详细信息。 table 是这样的:

| Name    | Country    | Course   | Duration | Active |
| ABC     | USA        | AWS 101  | 1.5      | true   |
| XYZ     | IND        | JPN 101  | 0.5      | false  |

我想绘制每个国家/地区活跃人数的指标,以便在 CloudWatch 或任何其他服务上显示。类似于:

Map<String,AtomicInteger> numberOfActiveUsersPerCountry;
....
....
public void incrementActiveUsersPerCountry(String country) {
    if(numberOfActiveUsersPerCountry.containsKey(country) {
         //increment existing count
    } else {
         //add the new country
    }

这应该可以通过 Micrometer 访问,并且可以在 Cloudwatch/ELK 等中访问。

带国家标签的counter正是你想要的:

meterReg.counter("users.active", Tags.of("counter", country)).increment()

计数器可让您计算其增加的速率以及一段时间内的总数。该计数器上的标签意味着它按国家/地区创建计数器以允许该标签上的 aggregation/querying。