实战,Spring Boot整合Prometheus实现应用监控

本文介绍了如何使用Micrometer作为Java性能数据收集API,与Spring Boot Actuator结合实现应用监控。通过MeterRegistry和不同类型的Meter(如Counter、Gauge、Timer和Summary)收集指标,重点讲解了如何配置和使用PrometheusMeterRegistry,以及如何自定义Metric。通过Spring Boot Actuator,可以轻松查看和导出监控数据。
摘要由CSDN通过智能技术生成

Micrometer简介

Micrometer 为 Java 平台上的性能数据收集提供了一个通用的 API,应用程序只需要使用 Micrometer 的通用 API 来收集性能指标即可。Micrometer 会负责完成与不同监控系统的适配工作。这就使得切换监控系统变得很容易。Micrometer 还支持推送数据到多个不同的监控系统。Micrometer类似日志系统中SLF4J。

Micrometer目前支持的监控系统有:

https://micrometer.io/docs

Micrometer中有两个最核心的概念,分别是是计量器(Meter)和计量器注册表(MeterRegistry),下面来分别看下这两个概念。

计量器(Meter)

Meter用来收集性能指标数据(Metris),总共有四种类型的Meter,分别是Counter,Gauge,Timer,Summary。

每个Meter都有自己的名称,同时Meter可以指定一系列的tag。tag是以key-value的形式出现,这样我们就可以根据tag对指标进行过滤。除了每个Meter独有的标签外,也可以通过MeterRegistry添加通用的tag。

MeterRegistry.Config config = simpleMeterRegistry.config();
    config.commonTags("tag1","value1","tag2","value2");

Counter

Counter只允许增加值,Counter所表示的计数值是double类型,默认情况下增加的值是1.0

@Autowired
private SimpleMeterRegistry simpleMeterRegistry;

@Bean
public Counter counter1(){
    return Counter.builder("test.count1").register(simpleMeterRegistry);
}

@Bean
public Counter counter2(){
    return simpleMeterRegistry.counter("test.count2");
}

@Test
public void test(){
    counter1.increment();
}

Gauge

Cauge是表示单个的变化的值,例如温度,气压。与Counter的区别在于,Gauge的值不总是增加的

public void guage(){
    Gauge.builder("guaua1", this::getValue).register(simpleMeterRegistry);
}

public double getValue(){
    return ThreadLocalRandom.current().nextDouble();
}

Gauge对象一旦被创建,就不能手动对其中的值进行修改 。在每次取样时,Gauge 会返回当前值

Timer

Timer通常用来记录事件的持续时间。Timer会记录两类的数据,事件的数量和总的持续时间。Timer提供了不同方式来记录持续时间。第一种方式是使用record()方法来记录Runnable和Callable对象的运行时间,第二种方式是使用Timer.Sample来保存计时状态

public void record(){
    Timer timer = simpleMeterRegistry.timer("record");
    timer.record(() -> {
        try {
            Thread.sleep(3000);
        }catch (Exception e){
            e.printStackTrace();
        }
    });
}

public void sample(){
    Timer.Sample sample = Timer.start();
    new Thread(()->{
        try {
            Thread.sleep(3000);
        }catch (Exception e){
            e.printStackTrace();
        }
        sample.stop(simpleMeterRegistry.timer("sample"));
    });
}

summary

summary用来记录指标的分布,summary根据每个指标的值,把值分配到对应的bucket中。Micrometer默认的bucket的值从1到Long.MAX_VALUE,可以通过minimumExpectedValue和maximumExpectedValue来控制bucket的范围,如果指标的值较小,还可以通过scale来设置一个值对数值进行放大

public void summary(){
    DistributionSummary summ
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值