Spring Cloud 之actuator模块简介

Jimmy Lee

学习思考|Apr 29, 2017|Last edited: 2022-7-21|
icon
Update time
Jul 21, 2022 02:59 AM
Internal status
password
此模块提供监控与采集功能,通过在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 publicclassRocketMQHealthIndicatorimplementsHealthIndicator { @Override public Healthhealth() { int errorCode=this._check(); if(errorCode!=0){ return Health.down().withDetail("Error Code",errorCode).build(); } return Health.up().build(); } privateint_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进行安全校验.

开始订阅我的关于终生学习, 生产力以及知识管理的文章. 订阅后, 您将收到我的精选文章.

©2014-2024 Jimmy Lee. All rights reserved. 公众号: 技术管理方法论
Powered By My Lovely Children