此模块提供监控与采集功能,通过在pom中引用此依赖,可以方便地使用其功能
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
原生端点
- 应用配置类:获取应用程序中加载的应用配置,环境变量,自动化配置报告等与SpringBoot应用密切相关的配置类信息
- 度量指标类:获取应用程序运行过程中用户监控的度量指标,比如内存信息,线程池信息,HTTP请求统计等
- 操作控制类:提供了对应用的关闭操作类功能
应用配置类
-
/autoconfig:该端点用来获取应用的自动化配置报告.包括条件匹配成功以及不成功的配置
- positiveMatches中返回是条件匹配成功的自动化配置
- negativeMatches中返回的是条件匹配不成功的自动化配置
-
/beans:该端点用来获取应用上下文中创建的所有Bean
[ { "context":"application", "parent":null, "beans":[ { "bean":"helloApplication", "aliases":[ ], "scope":"singleton", "type":"com.jimersylee.hello.HelloApplication$$EnhancerBySpringCGLIB$$d3ebe421", "resource":"null", "dependencies":[ ] },
每个Bean中都包含了下面这些信息
- bean:Bean的名称
- scope:Bean的作用域
- type:Bean的Java类型
- resource:class文件的具体路径
- dependencies:依赖的Bean名称
-
/configprops:该端点用来获取应用中配置的属性信息报告,可以通过使用endpoints.configprops.enabled=false来关闭
-
env:该端点与/configprops不同,它用来获取应用所有可用的环境属性报告
{ "profiles":[ ], "server.ports":{ "local.server.port":8080 }, "servletContextInitParams":{ }, "systemProperties":{ "java.runtime.name":"Java(TM) SE Runtime Environment", "awt.useSystemAAFontSettings":"gasp", "sun.boot.library.path":"/opt/jdk1.8.0_144/jre/lib/amd64", "java.vm.version":"25.144-b01", "maven.multiModuleProjectDirectory":"/home/jimersylee/projects/java/spring-cloud-action/hello", ...
-
/mappings:该端点用来返回所有Spring MVC的控制器映射关系报告.
{ "/webjars/**":{ "bean":"resourceHandlerMapping" }, "/**":{ "bean":"resourceHandlerMapping" }, "/**/favicon.ico":{ "bean":"faviconHandlerMapping" }, "{[/hello]}":{ "bean":"requestMappingHandlerMapping", "method":"public java.lang.String com.jimersylee.hello.web.HelloController.index()" }, "{[/error],produces=[text/html]}":{ "bean":"requestMappingHandlerMapping", "method":"public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)" }, . . .
- /info:该端点用来返回一些应用自定义的信息.我们可以在application.properties中通过info前缀来设置一些属性,比如:
info.app.name=spring-boot-hello info.app.version=v1.0.0
再访问/info.获得下面的报告
{ "app":{ "name":"spring-boot-hello", "version":"v1.0.0" } }
度量指标类
-
/metrics:该端点用来返回当前应用的各类重要度量指标,比如内存信息,线程信息,垃圾回收信息等
{ "mem":565018, "mem.free":427032, "processors":4, "instance.uptime":1276647, "uptime":1287345, "systemload.average":1.98, "heap.committed":496128, "heap.init":176128, "heap.used":69095, "heap":2494464, "nonheap.committed":70608, "nonheap.init":2496, "nonheap.used":68891, "nonheap":0, ...
- 系统信息:处理器processors,运行时间uptime和instance.uptime,系统平均负载,systemload.average
- mem.*:内存概要信息
- heap.*:堆内存使用情况.
- nonheap.*:非堆内存使用情况.
- threads.*:线程使用情况,包括线程数,守护线程数(daemon),线程峰值(peak)
- classes.*:应用加载和卸载的类统计.
- gc.*:垃圾收集器的详细信息.包括垃圾回收次数gc.ps_scavenge.count,垃圾回收消耗时间gc.ps_scavenge.time,标记-清除算法的次数gc.ps_marksweep.count,标记-清除算法的消耗时间,gc.ps_marksweep.time
- httpsessions.*:Tomcat容器的会话使用情况.
- gauge.*:HTTP请求的性能指标之一,如gauge.response.hello: 5,它表示上一次hello请求的延迟时间为5毫秒
- counter.*:HTTP请求的性能指标之一,,它主要作为计数器来使用.如counter.status.200.hello:11代表hello请求返回的200状态的次数为11
我们还可以通过/metrics/{name}接口来更细粒度地获取度量信息,如果可以通过访问/metrics/mem.free来获取当前可用内存数量
-
/health:获取健康指标信息. 有时候我们还会用到Spring Boot封装的产品进行开发,比如RocketMQ.我们需要实现org.springframework.boot.actuate.health.HealthIndicator接口来实现一个对RocketMQ的检测器类
@Component public class RocketMQHealthIndicator implements HealthIndicator { @Override public Health health() { int errorCode=this._check(); if(errorCode!=0){ return Health.down().withDetail("Error Code",errorCode).build(); } return Health.up().build(); } private int _check() { //对监控对象的检测操作 return 0; } }
返回结果
{ "status": "UP", "rocketMQ": { "status": "UP" }, "diskSpace": { "status": "UP", "total": 125484777472, "free": 65173798912, "threshold": 10485760 } }
-
/dump:该端点用来暴露程序运行中的线程信息
- /trace:该端点用来返回基本的HTTP跟踪信息,始终保留最近的100条请求记录
操作类控制器
可以进行关键操作,需要通过属性来配置开启操作.在原生端点中,只提供了一个用来关闭应用的端点:/shutdown(后续引入Eureka之后,会引入更多控制端点).我们可以通过配置开启它
endpoint.shutdown.enable=true
由于开放关闭应用本身是一件非常危险的事,需要对其加入一定的保护机制,比如定制actuator的端口路径,整合Spring Security进行安全校验.