对于任何一个应用系统来说,监控都是至关重要的一个组成部分。如果应用系统在运行过程当中出现故障(如网络中断、内存溢出、磁盘空间不足、软件自身Bug),任何一个方面出现问题都有可能影响到整个系统的正常运行,甚至给企业带来资损,因此监控必不可少。那么SpringBoot项目如何实现一套完整、成熟的监控系统呢?
首先,SpringBoot是一个可以快速创建独立、可运行的、生产级别的Spring应用的项目框架,Prometheus是一个开源的监控和告警工具,广泛应用于微服务架构的监控。将SpringBoot应用与Prometheus整合,可以实现应用的实时监控和性能分析,帮助开发人员快速定位和解决问题。下面我们来实现SpringBoot整合prometheus。
1、SpringBoot项目添加相关的依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--prometheus-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
</dependencies>
2、SpringBoot项目添加yml配置
server:
port: 8081
spring:
application:
name: prometheus-demo
#prometheus
management:
endpoints:
web:
exposure:
include: '*'
在Springboot整合Prometheus的时候,项目启动后会开启Actuator服务,SpringBoot Actuator会自动配置一个URL为 /actuator/Pprometheus的http服务来供prometheus抓取数据。
3、添加测试controller
@RestController
@RequestMapping("/test")
public class OrderController {
@GetMapping("/test1")
public String test1(){
return "success";
}
@GetMapping("/test2")
public String test2(){
List<byte[]> byteList = new ArrayList<>();
while (true){
byteList.add(new byte[1024*1024*2]);
try {
Thread.sleep(2000);
} catch (InterruptedException e){
}
}
}
}
4、启动Prometheus后检查springBoot项目是否正常
在SpringBoot配置好Prometheus配置文件后,启动SpringBoot项目,我们需要检查项目在Prometheus上的状态是否正常,如下图Springboot项目的启动图:
待Springboot项目启动完成后,在Prometheus中查询Springboot项目的监控状态,如下图所示的正常监控状态:
图片
项目在Prometheus上的状态是绿色表示是正常的状态。
5、prometheus的配置文件中添加SpringBoot监控任务
图片
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["Prometheus_ip:9090"]
- job_name: 'springboot-prometheus'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ["springboot项目的ip:8081"]
6、Grafana配置prometheus数据源
6.1 添加prometheus
图片
6.2 配置prometheus
图片
点击Save&Test可以看到如下的提示就是表示添加Prometheus数据源成功:
图片
6.3 挑选可视化的dashborad
通过访问https://grafana.com/grafana/dashboards这个链接去挑选可视化的dashborad,下图是一个典型的SpringBoot项目的监控可视化的dashborad:
图片
然后获取dashborad的编号:
图片
图片
6.4 添加dashborad到Grafana中
在Grafana中添加dashborad,如下图所示:
图片
输入dashborad编号
图片
然后选择prometheus数据源
图片
配置好之后可以就看到Granafa的监控面板
图片
7、测试监控
图片
请求执行死循环的代码,我们可以发现请求正在被执行,如下图所示:
图片
执行一段时间后,再观察Granafa监控面板的效果:
图片
通过监控我们发现内消耗一直不断增加,代码出现问题我们可以第一时间快速的发现,然后定位解决。
总结:
(1)SpringBoot整合Prometheus的原理是SpringBoot应用将metrics数据上报给Prometheus,数据上报有基于Pushgateway方式和直接上报方式。
(2)基于Pushgateway方式适用于短期运行的应用,将metrics数据推送到Pushgateway中,由Pushgateway统一推送至Prometheus。
(3)直接上报方式适用于长期运行的应用,将metrics数据直接上报给Prometheus中。直接上报方式是通过配置文件的配置,将SpringBoot应用会把metrics数据暴露在/actuator/prometheus路径下,Prometheus通过抓取该路径的数据即可获取应用的metrics数据。