Springboot应用接入Prometheus监控

接入介绍

在使用 Spring Boot 作为开发框架时,需要监控应用的状态,例如 JVM/Spring MVC 等。
针对Spring Boot应用,社区提供了开箱即用的Spring Boot Actuator框架,方便Java开发者进行代码埋点和监测数据收集、输出。
从Spring Boot 2.0开始,Actuator将底层改为Micrometer,同时提供了更强、更灵活的监测能力。
Micrometer是一个监测门面,可以类比成监测界的Slf4j ,借助Micrometer,应用则能够对接各种监测系统。例如,AppOptics、Datadog、Elastic、InfluxDB以及Prometheus监控等。

Micrometer在将Prometheus监控指标对接到Java应用的指标时,支持应用开发者用三个类型的语义来映射:

Micrometer指标类型 Prometheus监控指标类型 典型用途
Counter Counter 计数器,单调递增场景。例如,统计PV和UV,接口调用次数等。
Gauge Gauge 持续波动的变量。例如,资源使用率、系统负载、请求队列长度等。
Timer Histogram 统计数据分布。例如,统计某接口调用延时的P50、P90、P99等。
DistributionSummary Summary 统计数据分布,与Histogram用途类似。
  • Micrometer中的Counter指标类型对应于Prometheus监控中的Counter指标类型,用来描述一个单调递增的变量。如某个接口的访问次数、缓存命中或者访问总次数等。Timer在逻辑上蕴含了Counter,即如果使用Timer采集每个接口的响应时间,必然也会采集访问次数。因此无需为某个接口同时指定Timer与Counter两个指标。
  • MicroMeter中的Gauge指标类型对应于Prometheus监控中的Gauge指标类型,用来描述在一个范围内持续波动的变量。如CPU使用率、线程池任务队列数等。
  • MicroMeter中的Timer指标类型对应于Prometheus监控中的Histogram,用来描述与时间相关的数据。如某个接口RT时间分布等。
  • Micrometer中的DistributionSummary指标类型对应Prometheus监控中的Summary指标类型 ,与Histogram类似,Summary也是用于统计数据分布的,但由于数据的分布情况是在客户端计算完成后再传入Prometheus监控进行存储,因此Summary的结果无法在多个机器之间进行数据聚合,无法统计全局视图的数据分布,使用起来有一定局限性。

操作步骤

SpringBoot为2.0+,可以直接选择 io.micrometer 的依赖包来实现;更低版本的不能使用这种方式,需要使用官方提供的client来实现,本篇博客未介绍。

修改应用的依赖及配置

步骤1:修改 pom 依赖

项目中已经引用 spring-boot-starter-web 的基础上,在 pom.xml 文件中添加 actuator/prometheus Maven 依赖项。
注意,spring-boot-dependencies-2.4.8.pom中已经添加了micrometer-bom的依赖,已经包含了micrometer.version的定义。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
  <groupId>io.micrometer</groupId>
  <artifactId>micrometer-registry-prometheus</artifactId>
  <version>${micrometer.version}</version>
</dependency>

步骤2:修改配置

编辑 resources 目录下的 application.yml 文件,修改 actuator 相关的配置来暴露 Prometheus 协议的指标数据。

management:
  endpoints:
    web:
      exposure:
        include: prometheus  # 打开 Prometheus 的 Web 访问 Path
  metrics:
    # 在 Prometheus 中添加特别的 Labels
    tags:
      # 必须加上对应的应用名,因为需要以应用的维度来查看对应的监控
      application: ${
    
    spring.application.name}

或者是 application.properties 文件:

# 以应用的维度来查看对应的监控
management.metrics.tags.application=${spring.application.name}
# 打开 Prometheus 的 Web 访问 Path
management.endpoints.web.exposure.include=prometheus

本地验证

本地启动项目后,可以通过 http://localhost:8080/actuator/prometheus 访问到 Prometheus 协议的指标数据,说明相关的依赖配置已经正确。

prometheus配置

prometheus安装,可以参考下面的博客:

Docker部署Prometheus

修改prometheus.yml文件,添加下面的内容:

 - job_name: application
    metrics_path: "/actuator/prometheus"
    static_configs:
      - targets: ["111.111.0.88:8080"]
        labels:
          instance: application

保存后,执行:curl -X POST http://localhost:9090/-/reload,打开Prometheus界面上的 Status -> Targets,就可以看到刚添加上去的job。

猜你喜欢

转载自blog.csdn.net/u014163312/article/details/129151307
今日推荐