跳到主要内容

注册表

DeepSeek V3 中英对照 Registry

Micrometer 中的 Meter 是从 MeterRegistry 创建并持有的。每个支持的监控系统都有一个 MeterRegistry 的实现。每个实现的注册表的创建方式各不相同。

Micrometer 包含一个 SimpleMeterRegistry,它在内存中保存每个仪表的最新值,并且不会将数据导出到任何地方。如果你还没有首选的监控系统,可以通过使用简单的注册表来开始使用指标:

MeterRegistry registry = new SimpleMeterRegistry();
java
备注

在基于 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
java
  1. 在组合注册表中没有注册之前,增量操作是无效的。此时计数器的计数结果仍为 0。

  2. 一个名为 counter 的计数器被注册到简单注册表。

  3. 简单注册表中的计数器被递增,同时组合注册表中其他注册表的计数器也会被递增。

全局注册表

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
}
}
java
  1. 尽可能(尤其是在仪器性能至关重要的情况下),将 Meter 实例存储在字段中,以避免每次使用时通过名称或标签进行查找。

  2. 当需要从本地上下文中确定标签时,你别无选择,只能在方法体内构造或查找 Meter。查找成本只是一个哈希查找,因此对于大多数用例来说是可以接受的。

  3. 在使用诸如 Metrics.counter(…​) 这样的代码创建仪表之后,再添加注册表是可以的。这些仪表会被添加到每个注册表中,因为它绑定到了全局组合中。