针对应用监控指标暴露,spring boot有一套完整的解决方案,而且内置了好不少的指标收集器,如tomcat、jvm、cpu、kafka、DataSource、spring mvc(缺乏直方图的数据)等。基于micrometer技术,几乎支持全部主流的监控服务的指标数据收集,这其中就包含了咱们线上使用的Prometheus,这份指南旨在最快速接入boot的metrics功能,暴露prometheus的数据监控指标服务。web
micrometer地址:https://micrometer.io/spring
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支持包存在兼容性问题,若是你的环境不存在兼容性问题,能够不用引入下面两个依赖。api
经过以下的配置,来开启prometheus的端点接口服务浏览器
management.endpoints.web.exposure.include=prometheus
开启服务后,会暴露/actuator/prometheus 端点接口服务。在浏览器中,输入http://localhost:8080/actuator/prometheus 。能够看到内置的指标收集器收集到的监控指标tomcat
默认状况下,/actuator/prometheus端点服务跟随应用的web容器一块儿发布,可是当咱们的web服务面向公网须要受权认证时,可使用以下配置启用独立的容器暴露服务mvc
management.server.port=8081
在metrics监控系统设计中,tag用来标记区分一组指标集。好比咱们在监控grpc时,servicename就是是监控指标的其中一个tag。有的时候为了区分环境和应用,咱们会设置一些全局的tag:app
management.metrics.tags.application = ${spring.application.name} management.metrics.tags.region = bj
如上配置,咱们添加了一个应用的名字和一个区域的tag。这种配置是全局的。虽然grpc的组件可能只记录了servicename,可是最终数据呈现时,也会带上全局配置的tag运维
spring boot全部的指标最终都是经过MeterRegistry来注册的,这个实例被spring托管,因此你能够在spring的上下文中注入这个实例,结合micrometer指标定义(点我),自定义本身的监控指标jvm
目前,咱们线上是经过k8s的monitoring.coreos.com/v1 api定义指定prometheus主动拉取应用pod的监控指标信息,主要是由于以前的metrics系统是基于prometheus client模式暴露的。在基于spring boot的metrics系统中,主动推送数据的模式很是容易实现,这里须要prometheus-gateway支持spring-boot
引入依赖
implementation("io.prometheus:simpleclient_pushgateway")
启用push模式
#开启prometheus的数据推送模式 management.metrics.export.prometheus.pushgateway.enabled=true #prometheus服务端地址 management.metrics.export.prometheus.pushgateway.base-url=localhost:9091 #推送数据的频率,默认1m(单位分钟) management.metrics.export.prometheus.pushgateway.push-rate=1m #在jvm关闭以前将数据推送出去 management.metrics.export.prometheus.pushgateway.shutdown-operation=push