SpringBoot监控
1、Spring Boot Actuator 监控
Spring Boot Actuator 可以帮助监控和管理 Spring Boot 应用,比如健康检查、审计、统计和 HTTP 追踪等。所有的这些特性可以通过 JMX 或者 HTTP endpoints 来获得。
1、Actuator 监控应用程序
启用 Actuator 的端点,只要在项目中引入 Actuator 的依赖即可:
<!-- SpringBoot项目监控: Spring Boot Actuator -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
运行应用并且尝试进入默认暴露的 HTTP endpoints:
/actuator
/actuator/health
/actuator/info
应用默认使用 8080
端口,一旦应用启动,可以通过 localhost:8080/actuator 访问默认暴露的 HTTP endpoints:
此时打开 http://localhost:8080/actuator/health 便会显示如下内容:
{"status":"UP"}
2、Actuator Endpoints
Spring Boot Actuator 的关键特性是在应用程序里提供众多接口(即 Endpoints),通过它们了解运行时的内部状况。
Actuator Endpoints 允许监视应用程序并与之交互。Spring Boot 包括许多内置端点,并允许定制自己的端点。例如,health endpoint 提供基本应用程序运行状况信息。
2.1 端点列表
beans | 显示应用程序中所有 Spring Bean 的完整列表。 |
---|---|
caches | 暴露可用的缓存。 |
configprops | 显示所有 @ConfigurationProperties 。 |
env | 暴露 Spring 的属性 ConfigurableEnvironment |
health | 显示应用程序运行状况信息。 |
info | 显示任意的应用程序信息。 |
metrics | 显示当前应用程序的“指标”信息。 |
mappings | 显示所有 @RequestMapping 路径列表。 |
如果应用程序是 Web 应用程序(Spring MVC,Spring WebFlux 或 Jersey),还可以使用以下附加端点:
2.2 暴露所有 Endpoints
Web 默认仅开启几个 endpoints,若要暴露全部的 endpoints,那么需要在 application.yml 进行如下配置:
endpoints:web:exposure:include: '*'
2.3 默认开启所有监控端点
打开/关闭 Actuator Endpoint
management:endpoints:enabled-by-default: false # 默认开启所有监控端点:true(此处关闭)
此时,通过 Web 访问就只剩 /actuator:
关闭默认开启所有监控端点后,我们可以分别暴露选择的端点(同时关闭 management.endpoints.web.exposure.include=*):
management:endpoints:enabled-by-default: false # 默认开启所有监控端点:true(此处关闭)endpoint:health:enabled: trueloggers:enabled: truemappings:enabled: truemetrics:enabled: true
2.4 最常用的 Endpoint
Health:监控应用程序状况
/actuator/health
endpoint 提供了关于应用健康的基础信息,一般用于云平台,平台会定时检查应用的健康状况,我们就需要 Health Endpoint 为平台返回当前应用的一系列组件健康状况的集合。
{"status":"UP"}
详细信息
management:endpoint:health:show-details: always # 开启健康检查的完整信息
Metrics:运行时指标
/actuator/metrics/{name}
endpoint 展示了几个有用的度量信息,比如 JVM 内存使用情况、系统 CPU 使用情况、打开的文件等等。
访问 http://localhost:8080/actuator/metrics 可以看到监控指标列表如下:
想要获得某个度量的详细信息,你需要传递度量的名称到 URL 中,例如访问 localhost:8080/actuator/metrics/jvm.memory.used:
http://localhost:8080/actuator/metrics/jvm.memory.used
Loggers:日志记录
/actuator/loggers
endpoint 展示了应用的日志并且可以在运行时改变日志等级。
2、Spring Boot Admin管理平台
Spring Boot Admin 是一个开源社区项目,用于管理和监控 Spring Boot 应用程序,提供可视化的 UI 界面展示项目中 Actuator Endpoints 的一些监控信息。
Spring Boot Admin 有两个角色:
客户端 (Spring Boot Admin Client) 和服务端 (Spring Boot Admin Server) ;
应用程序作为 Spring Boot Admin Client 收集数据 Spring Boot Admin Server 展示数据 !
1、收集数据
在指定的项目中添加依赖:spring-boot-admin-starter-client
<!-- 客户端依赖 数据采集 -->
<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId><version>2.5.6</version>
</dependency>
添加配置:
spring: boot:admin:client:url: http://localhost:9090 # 收集监控数据 在哪里展示
2、展示数据
1、创建一个springboot项目
2、添加依赖
<!-- 服务端监控 收集client的数据进行展示 UI 展示 actuator 的监控的数据 -->
<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId><version>2.5.6</version>
</dependency>
启动类添加注解:@EnableAdminServer
@EnableAdminServer
@SpringBootApplication
public class AdminApplication {public static void main(String[] args) {SpringApplication.run(AdminApplication.class,args);}
}
3、修改端口
server:port: 9090
4、效果图
访问路劲: localhost:9090/applications
应用墙:
JVM 展示
3、JDK中自带的工具查看JVM 情况
JDK 自带了很多命令行甚至是图形界面工具,帮助查看 JVM 的一些信息。
1、jps
使用 jps 命令得到 Java 进程列表
2、jinfo
查看某个进程的详细信息
3、jvisualvm
1、查看 jvm 参数
2、监视面板可以看到JVM 的基本情况
4、jconsole
jconsole 也是一个综合性图形界面监控工具,比 jvisualvm 更方便的一点是,可以用曲线的形式监控各种数据
5、其他
命令行查看 :
jstat 工具允许以固定的监控频次输出 JVM 的各种监控指标,比如使用 -gcutil
输出 GC 和内存占用汇总信息,每隔 5 秒输出一次,输出 100 次:
参数说明:
S0 表示 Survivor0 区占用百分比
S1 表示 Survivor1 区占用百分比
E 表示 Eden 区占用百分比
O 表示老年代占用百分比
M 表示元数据区占用百分比
YGC 表示年轻代回收次数
YGCT 表示年轻代回收耗时
FGC 表示老年代回收次数
FGCT 表示老年代回收耗时
jstack
通过命令行工具 jstack,也可以实现抓取线程栈的操作