我们本节要实现的是Java服务级监控用于对每个应用占用的内存、线程池的线程数量、restful调用数量和响应时间、JVM状态、GC信息等进行监控,并可将指标信息同步至Prometheus中集中展示和报警。
首先我们先了解下什么是actuator?
Spring Boot Actuator 模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP 跟踪等,帮助我们监控和管理Spring Boot 应用。
Spring Boot Actuator 做度量统计收集,使用Prometheus进行数据收集,Grafana进行数据展示,用于监控生成环境机器的性能指标和业务数据指标。一般,我们叫这样的操作为”埋点”。SpringBoot中的依赖spring-actuator中集成的度量统计API使用的框架是Micrometer,官网是Micrometer.io。在实践中发现了业务开发者滥用了Micrometer的度量类型Counter,导致无论什么情况下都只使用计数统计的功能。这篇文章就是基于Micrometer分析其他的度量类型API的作用和适用场景。
OK,如果要使用 SpringBoot Actuator提供的监控功能,首先我们要先在Spring Boot程序中加入依赖。我们这里采用Spring Boot2.X的版本。
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
只要加上了这个依赖,SpringBoot 在运行时就会自动放开/actuator/health和/actuator/info这两个endpoint,我们就可以通过这两个 endpoint 查看当前 SpringBoot 运行的情况。
我这里用一个之前我做测试的SpringBoot项目。
浏览器访问 http://localhost:8080/actuator
,这里由于我是本地启动的8080的服务,大家可以根据你们自己的服务的IP地址➕端口进行访问。
默认只暴露 health 端点,如果想要看到更多,可以配置更多端点。application.yml或者application.properties中进行配置。
#暴露指定端点
management.endpoints.web.exposure.include=env,info,config,health
#暴露全部
management.endpoints.web.exposure.include=*
拼上health我们来看下服务的运行情况,http://localhost:8080/actuator/health
health 端点中常见的状态值及其含义:
当我们有自研组件的不满足的情况下,需要自定义,参考实现 DataSourceHealthIndicator
。
/**
* @author lixiang
* @date 2023/7/17 17:52
*/
@Component
public class CustomHealthIndicator extends AbstractHealthIndicator {
/**
* 这个方法写检测的逻辑,测试中间件服务是否正常启动
* @param builder
* @throws Exception
*/
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
//builder.down().withDetail("custom","自定义中间件");
builder.up().withDetail("custom","自定义中间件");
}
}
OK。关于SpringBoot整合Actuator我们先介绍到这里,主要是我们用health端点去查看服务的运行情况,下面我们来将服务整合到Promethus上。
首先,加入依赖包。
<dependency>
<groupId>io.micrometergroupId>
<artifactId>micrometer-registry-prometheusartifactId>
dependency>
重启服务,访问接口: http://localhost:8080/actuator
,会发现prometheus的端点。
访问: http://localhost:8080/actuator/prometheus
,我们会看到prometheus的格式数据。
然后将SpringBoot程序打包,上传到linux服务器启动。
mvn clean package
守护进程启动 nohup java -jar xxxx.jar &
prometheus整合配置,编辑文件 prometheus.yml
- job_name: "order-service"
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['192.168.140.134:8080']
热更新配置 curl -X POST http://localhost:9090/-/reload
好啦,关于Promethus监控SpringBoot微服务应用配置实战,就到这里啦,记得三连➕关注哦!