db", "users"); // 数据库调用次数
2 registry.counter("http.requests", "uri", "/api/users"); // HTTP请求数
2.3.2. Common tags
Common tags可以被定义在registry级别,并且会被添加到每个监控系统的报告中
预定义的Tags有host , instance , region , stack等
1 registry.config().commonTags("stack", "prod", "region", "us-east-1");
2 registry.config().commonTags(Arrays.asList(Tag.of("stack", "prod"), Tag.of("region", "us-east-1"))); // 二者等价
2.3.4. Tag values
Tag values must be non-null
2.4. Meter filters
每个registry都可以配置指标过滤器,它有3个方法:
Deny (or accept) meters from being registered
Transform meter IDs
Configure distribution statistics for some meter types.
实现MeterFilter就可以加到registry中
1 registry.config()
2 .meterFilter(MeterFilter.ignoreTags("too.much.information"))
3 .meterFilter(MeterFilter.denyNameStartsWith("jvm"));
过滤器按顺序应用,所有的过滤器形成一个过滤器链(chain)
2.4.1. Deny/accept meters
接受或拒绝指标
1 new MeterFilter() {
2 @Override
3 public MeterFilterReply accept(Meter.Id id) {
4 if(id.getName().contains("test")) {
5 return MeterFilterReply.DENY;
6 }
7 return MeterFilterReply.NEUTRAL;
8 }
9 }
MeterFilter还提供了许多方便的静态方法用于接受或拒绝指标
2.4.2. Transforming metrics
一个转换过滤器可能是这样的:
1 new MeterFilter() {
2 @Override
3 public Meter.Id map(Meter.Id id) {
4 if(id.getName().startsWith("test")) {
5 return id.withName("extra." + id.getName()).withTag("extra.tag", "value");
6 }
7 return id;
8 }
9 }
2.5. Counters(计数器)
Counter接口允许以固定的数值递增,该数值必须为正数。
1 MeterRegistry registry = new SimpleMeterRegistry();
2
3 // 写法一
4 Counter counter = registry.counter("counter");
5
6 // 写法二
7 Counter counter = Counter
8 .builder("counter")
9 .baseUnit("beans") // optional
10 .description("a description of what this counter does") // optional
11 .tags("region", "test") // optional
12 .register(registry);
2.5.1. Function-tracking counters
跟踪单调递增函数的计数器
1 Cache cache = ...; // suppose we have a Guava cache with stats recording on
2 registry.more().counter("evictions", tags, cache, c -> c.stats().evictionCount()); // evictionCount()是一个单调递增函数,用于记录缓存被剔除的次数
2.6. Gauges
gauge是获取当前值的句柄。典型的例子是,获取集合、map、或运行中的线程数等。
MeterRegistry接口包含了用于构建gauges的方法,用于观察数字值、函数、集合和map。
1 List<String> list = registry.gauge("listGauge", Collections.emptyList(), new ArrayList<>(), List::size); //监视非数值对象
2 List<String> list2 = registry.gaugeCollectionSize("listSize2", Tags.empty(), new ArrayList<>()); //监视集合大小
3 Map<String, Integer> map = registry.gaugeMapSize("mapGauge", Tags.empty(), new HashMap<>());
还可以手动加减Gauge
1 AtomicInteger n = registry.gauge("numberGauge", new AtomicInteger(0));
2 n.set(1);
3 n.set(2);
2.7. Timers(计时器)
Timer用于测量短时间延迟和此类事件的频率。所有Timer实现至少将总时间和事件次数报告为单独的时间序列。
例如,可以考虑用一个图表来显示一个典型的web服务器的请求延迟情况。服务器可以快速响