如何将 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。
我有一个用例,我们想要捕获特定类别数据的指标。类别中的不同条目是动态的,不能硬编码。我们如何在 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。