SpringBoot Actuator监控组件
SpringBoot Actuator监控组件
https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints
Actuator模块可以采集应用内部运行信息暴露给外部,帮助我们监控和管理Spring Boot 应用,功能例如健康检查,运行指标收集,HTTP 跟踪,日志级别等
# 开放所有端点
management.endpoints.web.exposure.include=*
# 开放指定端点
management.endpoints.web.exposure.include=beans
或者
management.endpoint.beans.enabled=true
# 开放所有 && 关闭某个
management.endpoints.web.exposure.exclude=beans
management.endpoints.web.exposure.include=*
默认情况下所有端点都暴露在“/actuator”路径下,可以自定义
# /actuator/xxx路徑,都变成/manage/xxx
management.endpoints.web.base-path=/manage
# 管理端口调整
management.server.port=9999
一、spring boot metrics是什么?
针对应用监控指标暴露,spring boot有一套完整的解决方案,并且内置了好很多的指标收集器,如tomcat、jvm、cpu、kafka、DataSource、spring mvc(缺少直方图的数据)等。基于micrometer技术,几乎支持所有主流的监控服务的指标数据收集,这其中就包含了我们线上使用的Prometheus,这份指南旨在最快速接入boot的metrics功能,暴露prometheus的数据监控指标服务。
1、引入依赖
implementation ('org.springframework.boot:spring-boot-starter-actuator')
implementation ('io.micrometer:micrometer-registry-prometheus:1.6.1')
implementation ('io.micrometer:micrometer-core:1.6.1')
actuator是spring boot中负责运维功能的包,这里主要是通过它来暴露和管理metrics接口的。其他两个依赖是为了包兼容引入的,在sprinr boot2.x中,actuator中默认引入的prometheus支持包存在兼容性问题,如果你的环境不存在兼容性问题,可以不用引入下面两个依赖。
2、配置启用
通过如下的配置,来开启prometheus的端点接口服务
management.endpoints.web.exposure.include=prometheus
开启服务后,会暴露/actuator/prometheus 端点接口服务。在浏览器中,输入http://localhost:8080/actuator/prometheus 。可以看到内置的指标收集器收集到的监控指标
3、独立的web服务
默认情况下,/actuator/prometheus端点服务跟随应用的web容器一起发布,但是当我们的web服务面向公网需要授权认证时,可以使用如下配置启用独立的容器暴露服务
management.server.port=8081
4、全局标签设置
在metrics监控系统设计中,tag用来标记区分一组指标集。比如我们在监控grpc时,servicename就是是监控指标的其中一个tag。有的时候为了区分环境和应用,我们会设置一些全局的tag:
management.metrics.tags.application = ${spring.application.name} management.metrics.tags.region = bj
如上配置,我们添加了一个应用的名字和一个区域的tag。这种配置是全局的。虽然grpc的组件可能只记录了servicename,但是最终数据呈现时,也会带上全局配置的tag
5、自定义指标收集
spring boot所有的指标最终都是通过MeterRegistry来注册的,这个实例被spring托管,所以你可以在spring的上下文中注入这个实例,结合micrometer指标定义(点我),自定义自己的监控指标
6、推送or拉取指标
目前,我们线上是通过k8s的monitoring.coreos.com/v1 api定义指定prometheus主动拉取应用pod的监控指标信息,主要是因为之前的metrics系统是基于prometheus client模式暴露的。在基于spring boot的metrics系统中,主动推送数据的模式非常容易实现,这里需要prometheus-gateway支持
引用依赖
implementation("io.prometheus:simpleclient_pushgateway")