上QQ阅读APP看书,第一时间看更新
3.2.3 通过MeterBinder接口采集和注册指标
通过io.micrometer.core.instrument.binder.MeterBinder接口实现bind方法,并将要采集的指标注册到MeterRegistry。
在这个案例中,我们通过注解的形式创建了一个Spring Boot中的Component组件DemoMetrics,这个组件内置了一个计数器,用于对有计数需求的业务场景进行工具封装。该组件内部代码的示例如下所示。
package com.example.demo.metrics; import io.micrometer.core.instrument.Counter; import io.micrometer.core.instrument.Gauge; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.binder.MeterBinder; import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.Map; @Component public class DemoMetrics implements MeterBinder { public Counter counter; public Map<String,Double> map; // Map对象,用于对该组件进行扩展 // demoMetrics.map.put("x", counter1) // demoMetrics.map.put("y", counter2) // demoMetrics.map.put("z", counter3) // DemoMetrics根据Map的Key的名称x\y\z取出业务端埋点值 DemoMetrics() { map = new HashMap<>(); } @Override public void bindTo(MeterRegistry meterRegistry) { // 定义并注册一个名称为prometheus.demo.counter的计数器,标签是name:counter1 this.counter = Counter.builder("prometheus.demo.counter").tags(new String[]{"name", "counter1"}).description("demo counter").register(meterRegistry); // 从业务端传递的Map中取出与Key对应的值放入注册的Gauge仪表盘中,标签是name:gauge1 // Gauge.builder("prometheus.demo.gauge",map,x->x.get("x")).tags("name", // "gauge1").description("This is Gauge").register(meterRegistry); } }
Counter是一个只增不减的计数器,可以用来记录请求或者错误的总量,比如http_requests_total等。
Gauge属于可增可减的仪表盘,更多用来反映应用当前的状态,比如主机当前空闲的内存node_memory_MemFree或者其他属性。
以上指标在上述代码中都进行了定义以及设置了标签。标签组合可以更好地标识应用及应用中的监控项,特别是在集群当中。本节后文中的效果展示部分会展示这些指标的数据。