1.Springboot之Actuator监控的使用
SpringCloud架构系列:github地址:github.com/hellozhaoxu…
(1) Actuator是什么
Actuator 是 Spring Boot 提供的对应用系统的自省和监控的集成功能,可以查看应用配置的详细信息,例如自动化配置信息、创建的 Spring beans 以及一些环境属性等。
它提供了很多监控和管理你的spring boot应用的HTTP或者JMX端点,并且你可以有选择地开启和关闭部分功能。当你的spring boot应用中引入下面的依赖之后,将自动的拥有审计、健康检查、Metrics监控功能。
简单来说,Actuator提供了很多Http接口供我们访问,我们可以通过这些接口,获取应用的信息,包含应用是否正常运行,环境信息等等,甚至通过Actuator提供的接口去直接关闭应用。
(2) 引入Actuator模块
pom文件中新增
<!--actuator模块为SpringBoot提供一系列用于监控的端点-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
(3) 启动项目
可以看到启动日志提示:暴露两个端点在根路径/actuator下。
其中“端点”即可理解为restful api接口即可,即暴露了两个restful api接口可用于获取项目健康信息。
两个接口分别是:
(4) Actuator配置
在application.yml文件中新增关于actuator的配置,以启用更多的端点和自定义配置。
# actuator监控模块配置
management:
endpoints:
web:
base-path: /api/actuator # 配置所有端点的根路径(默认在/actuator)
exposure:
include: "*" # 开放所有的监控端点(默认只开启/actuator/health、/actuator/info)
endpoint:
health:
show-details: always # 展示详细的健康信息
(5) 启动项目
可以看到,配置完后,有15个端点暴露出来了。
接下来介绍一下常用的端点。
(6) /health 端点
health 主要用来检查应用的运行状态。
通常使用此接口提醒我们应用实例的运行状态,以及应用不”健康“的原因,比如数据库连接、磁盘空间不够等。
- 这些健康信息是从哪里收集来的?
从ApplicationContext中的各种HealthIndicator
Beans中收集到的,Spring boot框架中包含了大量的HealthIndicators的实现类,目前Springboot中实现的HealthIndicators有:
| Springboot自带的HealthIndicators |
|---|
| CassandraHealthIndicator |
| DiskSpaceHealthIndicator |
| ElasticsearchHealthIndicator |
| InfluxDbHealthIndicator |
| JmsHealthIndicator |
| MailHealthIndicator |
| MongoHealthIndicator |
| Neo4jHealthIndicator |
| RabbitHealthIndicator |
| RedisHealthIndicator |
| SolrHealthIndicator |
- 禁用
全部禁用: management.health.defaults.enabled
局部禁用:management.health.redise.enabled=false
- 拓展
我们可以自定义HealthIndicator,具体方法下篇博客介绍。
(7) /info 端点
展示应用信息,具体为展示配置文件中配置的info标识下的信息。
在配置文件中加入info配置信息
info:
app:
name: Spring Boot Actuator
version: v1.0.0
zxd: zxd
访问/info端点即可展示配置文件中info下的信息。
(7) /beans 端点
展示应用上下文中创建的所有Bean的信息,包括 bean 的别名、类型、是否单例、类的地址、依赖等信息。
包含的信息:
| 属性名 | 含义 |
|---|---|
| bean | Bean的名称 |
| scope | Bean的作用域 |
| type | Bean的Java类型 |
| resource | class文件的具体路径 |
| dependencies | 依赖的Bean名称 |
(8) /configprops 端点
展示应用中配置的属性信息。
里面包含非常多的配置信息,不仅仅展示我们手动配置的,springboot自动配置的信息也会展示。
(9) /env 端点
展示应用的环境信息,包括环境变量、JVM属性、应用的配置的属性等等。
展示的信息相比/configprops更加丰富
(10) /mappings 端点
展示Spring MVC控制器映射关系信息,通俗点,就是展示我们写的restful api接口是哪个bean处理的,是哪个方法处理的。
例如我们写了一个api/actuator/hello接口,端点展示的信息:
(11) /metrics 端点
展示应用当前的重要指标,比如内存信息、线程信息、垃圾回收信息等。
在springboot1.x版本中,/metrics直接展示了这个指标信息,但是到了springboot2.x版本中,就成了这个鬼样子:
返回了一堆names,比如第一个"jvm.memory.max"表示“JVM最大内存”,在springboot2.x中,怎样获取“JVM最大内存”呢?直接在/metrics后面拼接name即可获取详细的内容(实际上springboot1.x中拼接name也可获取详细内容):
想获取其他指标信息,同理将name拼接上即可,这个name的具体含义:
| 属性名 | 含义 |
|---|---|
| jvm.memory.max | JVM最大内存 |
| jvm.memory.committed | JVM可用内存 |
| jvm.memory.used | JVM已用内存 |
| jvm.buffer.memory.used | JVM缓冲区已用内存 |
| jvm.buffer.count | 当前缓冲区数 |
| jvm.threads.daemon | JVM守护线程数 |
| jvm.threads.live | JVM当前活跃线程数 |
| jvm.threads.peak | JVM峰值线程数 |
| jvm.classes.loaded | 加载classes数 |
| jvm.classes.unloaded | 未加载的classes数 |
| jvm.gc.memory.allocated | GC时,年轻代分配的内存空间 |
| jvm.gc.memory.promoted | GC时,老年代分配的内存空间 |
| jvm.gc.max.data.size | GC时,老年代的最大内存空间 |
| jvm.gc.live.data.size | FullGC时,老年代的内存空间 |
| jvm.gc.pause | GC耗时 |
| tomcat.sessions.created | tomcat已创建session数 |
| tomcat.sessions.expired | tomcat已过期session数 |
| tomcat.sessions.active.current | tomcat活跃session数 |
| tomcat.sessions.active.max | tomcat最多活跃session数 |
| tomcat.sessions.alive.max.second | tomcat最多活跃session数持续时间 |
| tomcat.sessions.rejected | 超过session最大配置后,拒绝的session个数 |
| tomcat.global.error | 错误总数 |
| tomcat.global.sent | 发送的字节数 |
| tomcat.global.request.max | request最长时间 |
| tomcat.global.request | 全局request次数和时间 |
| tomcat.global.received | 全局received次数和时间 |
| tomcat.servlet.request | servlet的请求次数和时间 |
| tomcat.servlet.error | servlet发生错误总数 |
| tomcat.servlet.request.max | servlet请求最长时间 |
| tomcat.threads.busy | tomcat繁忙线程 |
| tomcat.threads.current | tomcat当前线程数(包括守护线程) |
| tomcat.threads.config.max | tomcat配置的线程最大数 |
| tomcat.cache.access | tomcat读取缓存次数 |
| tomcat.cache.hit | tomcat缓存命中次数 |
| system.cpu.count | CPU数量 |
| system.load.average.1m | load average |
| system.cpu.usage | 系统CPU使用率 |
| process.cpu.usage | 当前进程CPU使用率 |
| http.server.requests | http请求调用情况 |
| process.uptime | 应用已运行时间 |
| process.files.max | 允许最大句柄数 |
| process.start.time | 应用启动时间点 |
| process.files.open | 当前打开句柄数 |
(12) /shutdown 端点
用于关闭应用
在配置文件中加入启用该端点的配置
management.endpoint.shutdown.enabled=true
POST该端点即可发现应用被关闭了,注意该端点只支持POST请求。