Prometheus自定义监控SpringBoot项目

Prometheus自定义监控SpringBoot项目


一、关于Prometheus

Prometheus是一套开源的监控系统,它将所有信息都存储为时间序列数据;因此实现一种Profiling监控方式,实时分析系统运行的状态、执行时间、调用次数等,以找到系统的热点,为性能优化提供依据。

Prometheus提供了4中不同的Metrics类型: Counter, Gauge, Histogram, Summary。

Counter:只增不减的计数器

计数器可以用于记录只会增加不会减少的指标类型,比如记录应用请求的总量,cpu使用时间等。

对于Counter类型的指标,只包含一个inc()方法,用于计数器+1。

一般而言,Counter类型的metrics指标在命名中我们使用_total结束,如http_requests_total。

Gauge: 可增可减的仪表盘

对于这类可增可减的指标,可以用于反应应用的当前状态。

例如在监控主机时,主机当前空闲的内存大小,可用内存大小。或者容器当前的cpu使用率,内存使用率。

对于Gauge指标的对象则包含两个主要的方法inc()以及dec(),用户添加或者减少计数。

Histogram:自带buckets区间用于统计分布统计图

主要用于在指定分布范围内(Buckets)记录大小或者事件发生的次数。

Summary: 客户端定义的数据分布统计图

Summary和Histogram非常类型相似,都可以统计事件发生的次数或者大小,以及其分布情况。

Summary和Histogram都提供了对于事件的计数_count以及值的汇总_sum。 因此使用_count,和_sum时间序列可以计算出相同的内容,例如http每秒的平均响应时间:rate(basename_sum[5m]) / rate(basename_count[5m])。

同时Summary和Histogram都可以计算和统计样本的分布情况,比如中位数,9分位数等等。其中 0.0<= 分位数Quantiles <= 1.0。

不同在于Histogram可以通过histogram_quantile函数在服务器端计算分位数。 而Sumamry的分位数则是直接在客户端进行定义。因此对于分位数的计算。 Summary在通过PromQL进行查询时有更好的性能表现,而Histogram则会消耗更多的资源。相对的对于客户端而言Histogram消耗的资源更少。

二、配置步骤

1.引入依赖

<!-- prometheus -->
<dependency>
    <groupId>io.prometheus</groupId>
    <artifactId>simpleclient</artifactId>
    <version>0.3.0</version>
</dependency>
<dependency>
    <groupId>io.prometheus</groupId>
    <artifactId>simpleclient_hotspot</artifactId>
    <version>0.3.0</version>
</dependency>
<dependency>
    <groupId>io.prometheus</groupId>
    <artifactId>simpleclient_servlet</artifactId>
    <version>0.3.0</version>
</dependency>

2.配置bean

import io.prometheus.client.exporter.MetricsServlet;
import io.prometheus.client.hotspot.DefaultExports;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class AppConfig {
    @Bean
    public ServletRegistrationBean servletRegistrationBean(){
        DefaultExports.initialize();
        return new ServletRegistrationBean(new MetricsServlet(),"/prometheus");
    }
}

3.自定义监控指标

name方法定义指标名
help方法定义指标描述

import io.prometheus.client.Counter;
import io.prometheus.client.Gauge;

//Counter
static final Counter counter = Counter.build()
            .name("my_counter_total")
            .help("A counter used to describe the debt")
            .register();
counter.inc();


//Gauge
static final Gauge gauge = Gauge.build()
            .name("my_gauge")
            .help("A gauge to describe the rest of the money")
            .register();
gauge.inc();
gauge.dec();

4.prometheus.yml

metrics_path的值对应第二步中的”/prometheus”参数,默认为”/metrics”
targets对应需要被监控的项目的地址

- job_name: 'MyMetrics'
  metrics_path: '/prometheus'
  static_configs:
    - targets: 
      - 'localhost:8080'

三、参考

http://www.cnblogs.com/smallSevens/p/7905596.html

小白所学尚浅,文章内容是根据参考+实践理解所得,如果有错误的地方欢迎指正!

猜你喜欢

转载自blog.csdn.net/qq_37843943/article/details/80510976