Spring Boot应用监控的实战教程

时间:2021-07-28 04:38:47

概述

spring boot 监控核心是 spring-boot-starter-actuator 依赖,增加依赖后, spring boot 会默认配置一些通用的监控,比如 jvm 监控、类加载、健康监控等。

我们之前讲过docker容器的可视化监控,即监控容器的运行情况,包括 cpu使用率、内存占用、网络状况以及磁盘空间等等一系列信息。同样利用springboot作为微服务单元的实例化技术选型时,我们不可避免的要面对的一个问题就是如何实时监控应用的运行状况数据,比如:健康度、运行指标、日志信息、线程状况等等。本文就该问题做一点探索并记录试验过程。

入门使用:actuator插件

actuator插件是springboot原生提供的一个服务,可以通过暴露端点路由,用来输出应用中的诸多 端点信息。实战一下!

pom.xml中添加依赖:

?
1
2
3
4
<dependency>
 <groupid>org.springframework.boot</groupid>
 <artifactid>spring-boot-starter-actuator</artifactid>
</dependency>

启动spring boot应用程序之后,只要在浏览器中输入端点信息就能获得应用的一些状态信息。

常用端点列举如下,可以一个个详细试一下:

  • /info        应用基本信息
  • /health       健康度信息
  • /metrics      运行指标
  • /env        环境变量信息
  • /loggers      日志相关
  • /dump       线程相关信息
  • /trace       请求调用轨迹

当然此时只能使用/health 和 /info端点,其他因为权限问题无法访问。想访问指定端点的话可以在yml配置中添加相关的配置项,比如/metrics端点则需要配置:

?
1
2
3
endpoints:
 metrics:
 sensitive: false

此时浏览器访问/metrics端点就能得到诸如下面所示的信息:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
 "mem": 71529,
 "mem.free": 15073,
 "processors": 4,
 "instance.uptime": 6376,
 "uptime": 9447,
 "systemload.average": -1.0,
 "heap.committed": 48024,
 "heap.init": 16384,
 "heap.used": 32950,
 "heap": 506816,
 "nonheap.committed": 23840,
 "nonheap.init": 160,
 "nonheap.used": 23506,
 "nonheap": 0,
 "threads.peak": 25,
 "threads.daemon": 23,
 "threads.totalstarted": 28,
 "threads": 25,
 "classes": 6129,
 "classes.loaded": 6129,
 "classes.unloaded": 0,
 "gc.copy.count": 74,
 "gc.copy.time": 173,
 "gc.marksweepcompact.count": 3,
 "gc.marksweepcompact.time": 88,
 "httpsessions.max": -1,
 "httpsessions.active": 0
}

当然也可以开启全部端点权限,只需如下配置即可:

?
1
2
endpoints:
 sensitive: false

由于actuator插件提供的监控能力毕竟有限,而且ui比较简陋,因此需要一个更加成熟一点的工具

spring boot admin监控系统

sba则是基于actuator更加进化了一步,其是一个针对actuator接口进行ui美化封装的监控工具。我们来实验一下。

首先来创建一个spring boot admin server工程作为服务端
pom.xml中加入如下依赖:

?
1
2
3
4
5
6
7
8
9
10
11
<dependency>
 <groupid>de.codecentric</groupid>
 <artifactid>spring-boot-admin-server</artifactid>
 <version>1.5.7</version>
</dependency>
 
<dependency>
 <groupid>de.codecentric</groupid>
 <artifactid>spring-boot-admin-server-ui</artifactid>
 <version>1.5.7</version>
</dependency>

然后在应用主类上通过加注解来启用spring boot admin

?
1
2
3
4
5
6
7
8
@enableadminserver
@springbootapplication
public class springbtadminserverapplication {
 
 public static void main(string[] args) {
 springapplication.run(springbtadminserverapplication.class, args);
 }
}

启动程序,浏览器打开 localhost:8081 查看spring boot admin主页面:

Spring Boot应用监控的实战教程

spring boot admin主页面

此时application一栏空空如也,等待待监控的应用加入

创建要监控的spring boot应用

pom.xml中加入以下依赖

?
1
2
3
4
5
<dependency>
 <groupid>de.codecentric</groupid>
 <artifactid>spring-boot-admin-starter-client</artifactid>
 <version>1.5.7</version>
</dependency>

然后在yml配置中添加如下配置,将应用注册到admin服务端去:

?
1
2
3
4
5
6
spring:
 boot:
 admin:
  url: http://localhost:8081
  client:
  name: admintest

client应用一启动,admin服务立马推送来了消息,告诉你admintest上线了:

Spring Boot应用监控的实战教程

应用上线推送消息

此时去admin主界面上查看,发现client应用确实已经注册上来了:

Spring Boot应用监控的实战教程

client应用已注册上来

查看detail

Spring Boot应用监控的实战教程

detail信息

查看 metrics

Spring Boot应用监控的实战教程

metrics信息

查看 enviroment

Spring Boot应用监控的实战教程

enviroment信息

查看jmx

Spring Boot应用监控的实战教程

jmx信息

查看threads

Spring Boot应用监控的实战教程

threads信息

查看trace与详情

Spring Boot应用监控的实战教程

trace信息

点击最上方journal,会看到被监控应用程序的事件变化:

Spring Boot应用监控的实战教程

应用程序的事件变化信息

图中可以清晰地看到,应用从 registration → unknown → up 的状态跳转。

这样就将actuator插件提供的所有端点信息在sba中全部尝试了一遍。

参考文献

http://codecentric.github.io/spring-boot-admin/1.5.7/

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。

原文链接:https://www.jianshu.com/p/e9ce05b44150