springboot-微服务监控管理-Micrometer工具!

Micrometer工具

一个健壮的应用程序需要实时采集应用的性能指标,开发人员或运维人员关注这些指标可以掌握程序运行的情况,以便出现问题的时候及时报警。目前市场上出现了很多监控系统,这些监控系统由不同的语言开发,安装方式不同,使用起来也比较复杂。Micrometer工具提供了抽象接口和脱离底层的第三方监控依赖,类似于SLF4J在Java日志中的作用。

Micrometer工具简介

Micrometer是一个基于JVM的应用程序指标收集工具包,其为收集Java应用的性能指标提供了通用的API。Java应用只需要使用这些通用的API收集性能指标即可,Micrometer会适配各种不同的监控系统。

在Micrometer中有两个最基本的概念:Meter计量器和MeterRegistry计量器注册表。Meter计量器可以创建多种类型的数据指标,包括COUNTER、GAUGE、LONG_ TASK_TIMER、TIMER和DISTRIBUTION_SUMMARY等。MeterRegistry是计量器注册表,负责创建和维护Meter计量器。Micrometer中提供了核心包micrometer-core,对所使用的监控系统只需要添加对应的模块即可。如果使用Prometheus监控系统,则需要添加模块micrometer-registryprometheus。

Micrometer核心库中提供了两个类,其中SimpleMeterRegistry类是一个基于内存的计量器注册表,其不支持将数据导入监控系统中,CompositeMeterRegistry类是一个组合计量器注册表,其可以把多个计量器注册表组合起来,并允许同时在多个监控系统中发布数据。

不同的Meter命名规则建议以句号分隔,创建时需要指定标签(Tag),并且标签以键值对的形式出现,后续可以通过标签对数据进行过滤或者分维度统计。除了特有标签之外,还可以统一设置通用的标签。例如:

SimpleMeterRegistry registry = new SimpleMeterRegistry();

registry.config().commonTags("application", "micrometerApp");

Counter counter = registry.counter("biz.code.total", "code",

"C000");

counter.increment(); //计数统计

下面主要讲解一些类型数据指标。

1. Counter

Counter(计数器)允许以固定的数值进行累加,该数值必须为正数。有两种创建方式,具体如下:

MeterRegistry registry = new SimpleMeterRegistry();

//写法一

Counter counter1 = registry.counter("counter");

counter1.increment(1.0);

//写法二

Counter counter2 = Counter

.builder("code.counter")

.description("a counter simple", "code",

"C000") //描述

.tags("code", "S000")

//状态码

.register(registry);

counter2.increment(5.0);

2. Timer

Timer(计时器)一般用来记录一段代码的执行时间,如一次请求接口的时间。Timer提供了record()方法用来记录代码块的执行时间,并且还可以对执行时间进行统计分析,如最长时间、平均时间及百分比等。LongTaskTimer可以统计一个任务的执行时间。创建Timer的例子如下:

Timer timer = Timer

.builder("api.timer")

.description("a timer simple")

//描述

.tags("apiRequest", "userQuery")

//Tag定义

.register(registry);

3. Gauge

Gauge(测量器)用于测量一个指标的瞬时值,如CPU使用率和内存使用率等。示例如下:

AtomicInteger atomicInteger = new AtomicInteger(0);

Gauge passCaseGuage = Gauge

.builder("pass.guage", atomicInteger,

AtomicInteger::get)

.tag("pass", "demo")

//Tag定义

.description("a gauge simple")

//描述

.register(registry);

Spring Boot集成

Spring Boot Actuator提供了对Micrometer的依赖管理和自动配置,同时支持多种类型的监控系统。Spring Boot Actuator会自动配置一个组合的MeterRegistry注册表,将所有支持的Meter都添加进去,这些Meter对象也会被自动添加到全局注册表对象中。可以通过MeterRegistryCustomizer对象来配置MeterRegistry。例如下面的例子中配置了通用的Tag,代码如下:

@Bean

MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {

//通用的Tag定义

return registry ->

registry.config().commonTags("application",

"userApp");

}

还可以通过配置来指定开启某个MeterRegistry。例如下面的例子可以开启Prometheus并暴露prometheus端点,配置如下:

management:

server:

port: 8081

endpoint:

metrics:

enabled: true

prometheus:

enabled: true

endpoints:

web:

exposure:

include: metrics,Prometheus

base-path: /

metrics:

export:

prometheus:

enabled: true

Spring Boot Actuator还提供了一些核心指标,包括JVM指标信息、CPU指标信息、Tomcat指标信息和Kafka指标信息。

配置完成后,可以编写自己需要的Meter,然后统计相关的业务指标。下面的例子是按业务状态码统计数量,代码如下:

private void increment(String code, String operation) {

//定义Tag

Tags tags = Tags.of(

Tag.of("code", code),

Tag.of("handler", operation));

//定义Counter

Counter counter =

Search.in(this.meterRegistry).name(BUSINESS_

CODE_METRIC).tags(tags).counter();

if (counter == null) {

counter =

this.meterRegistry.counter(BUSINESS_CODE_METRIC,

tags);

}

//Counter计数加1

counter.increment();

}

配置好之后,访问
http://localhost:8081/prometheus即可看到采集数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值