我们都知道Spring Boot是一个用于快速开发Java Web的框架,不需要太多的配置即可使用Spring的大量功能。Spring Boot遵循着“约定大于配置”的原则,许多功能使用默认的配置即可。这样的做法好处在于我们不需要像使用Spring那样编写一大堆的XML配置代码,但过于简单的配置过程会让我们在了解各种依赖,配置之间的关系过程上带来一些困难。不过没关系,在Spring Boot中,我们可以使用Actuator来监控应用,Actuator提供了一系列的RESTful API让我们可以更为细致的了解各种信息。
引入Actuator
1 | <dependency> |
配置Actuator
1 | server: |
配置中关闭了安全认证的功能,如果需要开启这个功能的话还需引入spring-boot-starter-security
依赖。除了使用Spring Security来开启监控路径安全认证外,还可以使用Shiro对监控路径进行权限控制。
监控的端口和应用一致,配置context-path
为/monitor
,这样可以避免和自己应用的路径映射地址重复。
endpoints.shutdown.enabled: true
提供了使用post请求来关闭Spring Boot应用的功能。
Actuator接口列表
Actuator提供了13个接口,可以分为三大类:配置接口、度量接口和其它接口,具体如下表所示:
HTTP 方法 | 路径 | 描述 |
---|---|---|
GET | /autoconfig | 提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过 |
GET | /configprops | 描述配置属性(包含默认值)如何注入Bean |
GET | /beans | 描述应用程序上下文里全部的Bean,以及它们的关系 |
GET | /dump | 获取线程活动的快照 |
GET | /env | 获取全部环境属性 |
GET | /env/{name} | 根据名称获取特定的环境属性值 |
GET | /health | 报告应用程序的健康指标,这些值由HealthIndicator的实现类提供 |
GET | /info | 获取应用程序的定制信息,这些信息由info打头的属性提供 |
GET | /mappings | 描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系 |
GET | /metrics | 报告各种应用程序度量信息,比如内存用量和HTTP请求计数 |
GET | /metrics/{name} | 报告指定名称的应用程序度量值 |
POST | /shutdown | 关闭应用程序,要求endpoints.shutdown.enabled设置为true |
GET | /trace | 提供基本的HTTP请求跟踪信息(时间戳、HTTP头等) |
接口使用示例
autoconfig
显示所有自动装配类的报告,以及是什么原因导致自动装配成功或者不成功。在浏览器输入:http://localhost/monitor/autoconfig,输出如下(截取部分):
1 | { |
beans
查看Spring 容器管理的Bean,访问http://localhost/monitor/beans,输出如下(截取部分):
1 | [{ |
configprops
所有@ConfigurationProperties
注解的配置信息,如文件上传的最大允许配置等。访问http://localhost/monitor/configprops,输出如下:
1 | { |
trace
/trace
接口能查看最近的HTTP 请求和响应,在浏览器输入:http://localhost/monitor/trace,输出如下:
1 | [{ |
dump
获取某一时刻虚拟机线程栈信息。线程栈表示某一时刻虚拟机正在做的事情,访问http://localhost/monitor/dump,输出如下(截取部分):
1 | [{ |
env
显示Spring Boot环境变量,如使用的JDK版本、加载的jar包、配置文件信息、日志文件信息。访问,输出如下:
1 | { |
health
查看所在应用的健康状态, 如磁盘、数据源、Redis 、Elasticsearch等。健康状态分为UP(正常)和DOWN(故障)状态。访问http://localhost/monitor/health,显示如下:
1 | { |
mappings
输出所有通过注解@RequestMapping
设置的URL映射,可以通过此来查看URL对应的Controller。访问http://localhost/monitor/mappings,显示如下:
1 | { |
metrics
显示Spring Boot的性能指标,如己有内存、未占用内存、垃圾回收次数、类信息等。访问http://localhost/monitor/metrics,输出如下:
1 | { |
对/metrics
接口提供的信息进行简单分类如下表:
分类 | 前缀 | 报告内容 |
---|---|---|
垃圾收集器 | gc. | 已经发生过的垃圾收集次数,以及垃圾收集所耗费的时间,适用于标记-清理垃圾收集器和并行垃圾收集器(数据源自java.lang.management. GarbageCollectorMXBean) |
内存 | mem. | 分配给应用程序的内存数量和空闲的内存数量(数据源自java.lang. Runtime) |
堆 | heap. | 当前内存用量(数据源自java.lang.management.MemoryUsage) |
类加载器 | classes. | JVM类加载器加载与卸载的类的数量(数据源自java.lang. management.ClassLoadingMXBean) |
系统 | processors、instance.uptime、uptime、systemload.average | 系统信息,例如处理器数量(数据源自java.lang.Runtime)、运行时间(数据源自java.lang.management.RuntimeMXBean)、平均负载(数据源自java.lang.management.OperatingSystemMXBean) |
线程池 | thread. | 线程、守护线程的数量,以及JVM启动后的线程数量峰值(数据源自 java.lang .management.ThreadMXBean) |
数据源 | datasource. | 数据源连接的数量(源自数据源的元数据,仅当Spring应用程序上下文里存在 DataSource Bean 的时候才会有这个信息) |
Tomcat 会话 | httpsessions.* | Tomcat的活跃会话数和最大会话数(数据源自嵌入式Tomcat的Bean,仅在使用嵌入式Tomcat服务器运行应用程序时才有这个信息) |
HTTP | counter.status.、gauge.response. | 多种应用程序服务HTTP请求的度量值与计数器 |
HTTP的计数器和度量值需要做一点说明。counter.status
后的值是HTTP状态码,随后是所请求的路径。举个例子,counter.status.200.metrics
表明/metrics
端点返回 200(OK) 状态码的次数。
HTTP的度量信息在结构上也差不多,却在报告另一类信息。它们全部以gauge.response
开头,表明这是HTTP响应的度量信息。前缀后是对应的路径。度量值是以毫秒为单位的时间,反映了最近处理该路径请求的耗时。
这里还有几个特殊的值需要注意。root路径指向的是根路径或/
。star-star
代表了那些Spring认为是静态资源的路径,包括图片、JavaScript和样式表,其中还包含了那些找不到的资源。这就是为什么你经常会看到counter.status.404.star-star
,这是返回了HTTP 404 (NOT FOUND)
状态的请求数。
/metrics
接口会返回所有的可用度量值,但你也可能只对某个值感兴趣。要获取单个值,请求时可以在URL后加上对应的键名。例如,要查看空闲内存大小,可以向/metrics/mem.free
发一个GET请求。
定制Actuator
修改接口ID
每个Actuator接口都有一个ID用来决定接口的路径,比方说,/beans
接口的默认ID就是beans。比如要修改/beans
为 /instances
,则设置如下:
1 | endpoints: |
启用和禁用接口
虽然Actuator的接口都很有用,但你不一定需要全部这些接口。默认情况下,所有接口(除了/shutdown
)都启用。比如要禁用 /metrics
接口,则可以设置如下:
1 | endpoints: |
如果你只想打开一两个接口,那就先禁用全部接口,然后启用那几个你要的,这样更方便。
1 | endpoints: |
参考文章:https://www.jianshu.com/p/af9738634a21。
源码链接:https://github.com/wuyouzhuguli/Spring-Boot-Demos/tree/master/21.Spring-Boot-Actuator。