SpringBoot Actuator监控相关知识

291 阅读3分钟

SpringBoot 的监控机制

在 Spring 2.x 之前,SpringBoot 使用 Actuator 模块进行监控,而在 Spring 2.x 之后,SpringBoot 使用了 Micrometer 进行监控。actuator 是真正去采集数据的模块,而 Micrometer 更像是一个适配器,将 actuator 采集到的数据通过提供通用的API暴露给各种监控工具。

启用Spring Boot Actuator

  • 添加依赖
<!-- actuator -->  
<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-actuator</artifactId>  
</dependency>  
  • 配置端点 (application.yml)

我们可以通过management.endpoints.web.exposure.include选择暴露哪些监控点

management.endpoints.web.exposure.include=* 暴露所有监控点 management.endpoints.web.exposure.include=health,prometheus,metrics 仅暴露health,prometheus,metrics监控点

management:  
  endpoints:  
    web:  
      exposure:  
        include"health,metrics,info"  
  endpoint:  
    health:  
      show-details: always
  • 测试
    Actuator 默认所有的监控点路径都在 /actuator/*
curl http://localhost:8080/actuator/health

{  
  "status""UP",  
  "components": {  
    "db": { "status""UP" },  
    "diskSpace": { "status""UP" }  
  }  
}

集成Prometheus

我们知道actuator是采集数据模块,那采集的数据metrcis就需要暴露出来提供给监控使用,所以需要有监控系统负责统一收集和处理这些数据,还要有可视化UI工具去展示数据。我们可以使用Prometheus作为系统监控来采集数据,使用Grafana来展示图表。所以actuator需要提供能给Prometheus调用的接口。
如何集成Prometheus?

  • 多引入一个Maven依赖
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
    <scope>runtime</scope>
</dependency>
  • 配置文件添加配置

management.endpoints.enabled-by-default=false: 默认情况下,所有 Actuator 端点都被禁用。需要显式启用特定端点才能访问

management.endpoints.web.exposure.include=health,prometheus,metrics: 显式列出可通过 Web 访问的 Actuator 端点,包括健康检查 (/health) , Prometheus (/prometheus),指标(/metrics)
management.endpoint.prometheus.enabled=true management.endpoint.health.enabled=true management.endpoint.metrics.enabled=true

  • 启动服务

需要注意的是有两种metrics。一种是actuator的metrics,主要是jvm相关指标,另一种才是给Prometheus的metrics。这两种metrics接口默认URL路径如下:

  1. 获取服务acutor metrics:curl localhost:8162/actuator/metrics

image.png 2. 获取给prometheus采集的metrics:curl localhost:8162/actuator/prometheus

image.png

  1. 健康检查:curl localhost:8162/actuator/health

image.png

有时我们为了规范,希望将接口URL做更改,想将Actuator 端点进行路径映射:

  • 暴露给prometheus采集metrics: ”/actuator/prometheus“ ——> "/metrics"
  • Actuator采集的metrics: ”/actuator/metrics“ ——> "/actuator/metrics"(相当于不变)
  • 健康检查: ”/actuator/health“ ——> "/ping"
  • 配置更改如下:
management:
  endpoints:
    web:
      exposure:
        include: health,prometheus //端点打开
      base-path: "/"
      path-mapping:
        health: "/ping"  //路径重写
        prometheus: "/metrics" 
        metrics: "/actuator/metrics"

展示效果:

  1. Actuator采集的metrics:curl localhost:8162/actuator/metrics

image.png

  1. 暴露给prometheus采集metrics:curl localhost:8162/metrics

image.png

  1. 健康检查:curl localhost:8162/ping

image.png

在这里给出

自定义指标监控

如何自定义指标让Prometheus采集可以参考下面链接,这个在日常工作是挺好用的。举几个例子:比如下单总次数;比如我要做线程池监控,想要在Grafana DashBoard面板上看到关于线程池参数的变化;比如我想要知道某个调某个第三方接口的请求耗时,可以统计耗时然后定义成metrics让Prometheus采集;
【留待以后实践时补充】

引用参考