SpringCloud架构:1-Springboot的Actuator监控

575 阅读5分钟

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 的别名、类型、是否单例、类的地址、依赖等信息。
在这里插入图片描述
包含的信息:

属性名含义
beanBean的名称
scopeBean的作用域
typeBean的Java类型
resourceclass文件的具体路径
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.maxJVM最大内存
jvm.memory.committedJVM可用内存
jvm.memory.usedJVM已用内存
jvm.buffer.memory.usedJVM缓冲区已用内存
jvm.buffer.count当前缓冲区数
jvm.threads.daemonJVM守护线程数
jvm.threads.liveJVM当前活跃线程数
jvm.threads.peakJVM峰值线程数
jvm.classes.loaded加载classes数
jvm.classes.unloaded未加载的classes数
jvm.gc.memory.allocatedGC时,年轻代分配的内存空间
jvm.gc.memory.promotedGC时,老年代分配的内存空间
jvm.gc.max.data.sizeGC时,老年代的最大内存空间
jvm.gc.live.data.sizeFullGC时,老年代的内存空间
jvm.gc.pauseGC耗时
tomcat.sessions.createdtomcat已创建session数
tomcat.sessions.expiredtomcat已过期session数
tomcat.sessions.active.currenttomcat活跃session数
tomcat.sessions.active.maxtomcat最多活跃session数
tomcat.sessions.alive.max.secondtomcat最多活跃session数持续时间
tomcat.sessions.rejected超过session最大配置后,拒绝的session个数
tomcat.global.error错误总数
tomcat.global.sent发送的字节数
tomcat.global.request.maxrequest最长时间
tomcat.global.request全局request次数和时间
tomcat.global.received全局received次数和时间
tomcat.servlet.requestservlet的请求次数和时间
tomcat.servlet.errorservlet发生错误总数
tomcat.servlet.request.maxservlet请求最长时间
tomcat.threads.busytomcat繁忙线程
tomcat.threads.currenttomcat当前线程数(包括守护线程)
tomcat.threads.config.maxtomcat配置的线程最大数
tomcat.cache.accesstomcat读取缓存次数
tomcat.cache.hittomcat缓存命中次数
system.cpu.countCPU数量
system.load.average.1mload average
system.cpu.usage系统CPU使用率
process.cpu.usage当前进程CPU使用率
http.server.requestshttp请求调用情况
process.uptime应用已运行时间
process.files.max允许最大句柄数
process.start.time应用启动时间点
process.files.open当前打开句柄数

(12) /shutdown 端点

用于关闭应用
在配置文件中加入启用该端点的配置

management.endpoint.shutdown.enabled=true

POST该端点即可发现应用被关闭了,注意该端点只支持POST请求。
在这里插入图片描述