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

360影视 欧美动漫 2025-06-03 15:11 2

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

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

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

@Bean

MeterRegistryCustomizer 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;

}

来源:大数据架构师

相关推荐