注册表
Micrometer 中的 Meter 是从 MeterRegistry
创建并持有的。每个支持的监控系统都有一个 MeterRegistry
的实现。每个实现的注册表的创建方式各不相同。
Micrometer 包含一个 SimpleMeterRegistry
,它在内存中保存每个仪表的最新值,并且不会将数据导出到任何地方。如果你还没有首选的监控系统,可以通过使用简单的注册表来开始使用指标:
MeterRegistry registry = new SimpleMeterRegistry();
备注
在基于 Spring 的应用中,SimpleMeterRegistry
会自动装配给你。
复合注册表
Micrometer 提供了一个 CompositeMeterRegistry
,你可以向其添加多个注册表,从而让你能够同时将指标发布到多个监控系统中:
CompositeMeterRegistry composite = new CompositeMeterRegistry();
Counter compositeCounter = composite.counter("counter");
compositeCounter.increment(); 1
SimpleMeterRegistry simple = new SimpleMeterRegistry();
composite.add(simple); 2
compositeCounter.increment(); 3
-
在组合注册表中没有注册之前,增量操作是无效的。此时计数器的计数结果仍为 0。
-
一个名为
counter
的计数器被注册到简单注册表。 -
简单注册表中的计数器被递增,同时组合注册表中其他注册表的计数器也会被递增。
全局注册表
Micrometer 提供了一个名为 Metrics.globalRegistry
的静态全局注册表,以及一组基于此注册表生成计量器的静态构建器(请注意,globalRegistry
是一个复合注册表):
class MyComponent {
Counter featureCounter = Metrics.counter("feature", "region", "test"); 1
void feature() {
featureCounter.increment();
}
void feature2(String type) {
Metrics.counter("feature.2", "type", type).increment(); 2
}
}
class MyApplication {
void start() {
// wire your monitoring system to global static state
Metrics.addRegistry(new SimpleMeterRegistry()); 3
}
}
-
尽可能(尤其是在仪器性能至关重要的情况下),将
Meter
实例存储在字段中,以避免每次使用时通过名称或标签进行查找。 -
当需要从本地上下文中确定标签时,你别无选择,只能在方法体内构造或查找 Meter。查找成本只是一个哈希查找,因此对于大多数用例来说是可以接受的。
-
在使用诸如
Metrics.counter(…)
这样的代码创建仪表之后,再添加注册表是可以的。这些仪表会被添加到每个注册表中,因为它绑定到了全局组合中。