Springboot应用接入Prometheus监控

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路Springboot应用接入Prometheus监控,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

接入介绍

在使用 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。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/155598.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!