今天看一下SpringBoot的执行器-actuator。
SpringBoot Actuaor可以使用HTTP或者JMX endpoints来浏览应用操作信息,可以监控应用程序并与之交互。Spring Boot 包含许多内置端点,也允许添加自己的端点。例如,health端点提供基本的应用程序健康信息。
添加pom依赖:
<!--https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId><version>2.5.2</version></dependency>
一些常用的内置 endpoints Actuator:
auditevents:查看 audit 事件信息
env:查看 环境变量
health:查看应用程序健康信息
httptrace:展示 HTTP 路径信息
info:展示 arbitrary 应用信息
metrics:展示 metrics 信息
loggers:显示并修改应用程序中日志器的配置
mappings:展示所有 @RequestMapping 路径信息
scheduledtasks:展示应用程序中的定时任务信息
threaddump:执行 Thread Dump
默认情况下,所有 Web 端点都可以在形式为/actuatorURL的路径下使用/actuator/{id}。并且默认会自动配置所有启用的端点以通过 HTTP 公开。大多数应用程序都使用HTTP,作为endpoint的标识以及使用默认约定/actuator前缀作为 URL路径。例如,health暴露为/actuator/health.
更改默认/actuator的基本路径:
management.endpoints.web.base-path=/manage
以上application.properties示例将端点 URL 的形式从/actuator/{id}更改为/manage/{id}。例如,URLinfo端点将变为 /manage/info.
启用端点
默认情况下,启用除shutdown之外的所有端点。
要配置端点的启用,使用management.endpoint.<id>.enabled属性。以下示例启用shutdown端点:
management.endpoint.shutdown.enabled=truemanagement.endpoint.mappings.enabled=true
我们也可以关掉所有默认然后手动启用:
#关掉所有默认management.endpoints.enabled-by-default=false#单独手动启用management.endpoint.info.enabled=true
可以使用include和exclude属性批量配置:
management.endpoints.jmx.exposure.exclude=management.endpoints.jmx.exposure.include=*management.endpoints.web.exposure.exclude=management.endpoints.web.exposure.include=health#默认只暴露了健康检查端点
假如要通过 HTTP 公开除env和beans端点之外的所有内容:
management.endpoints.web.exposure.include=*management.endpoints.web.exposure.exclude=env,beans
假如要停止通过JMX公开所有端点而仅公开health和info端点:
management.endpoints.jmx.exposure.include=health,info
我觉得上述只配置了JMX的health和info,web应该是不影响的。
无需身份验证即可访问所有执行器端点:
management.endpoints.web.exposure.include=*
配置端点
默认情况下/actuator -发现页面可用。
如果要禁用 “发现页面”,也就是用/actuator不可访问:
management.endpoints.web.discovery.enabled=false
端点自动缓存对不带任何参数的读取操作的响应。使用cache.time-to-live属性配置端点缓存响应的时间量:
#将beans端点缓存的生存时间设置为10秒management.endpoint.beans.cache.time-to-live=10s
默认情况下禁用 CORS 支持,设置origins属性后启用:
#以下配置允许GET和POST来自example.com域的调用:management.endpoints.web.cors.allowed-origins=https://example.commanagement.endpoints.web.cors.allowed-methods=GET,POST
自定义管理端点路径,默认是/actuator
management.endpoints.web.base-path=/manage
management.endpoints.web.path-mapping属性将端点映射到不同的路径:
#以下示例重新映射/actuator/health到/healthcheckmanagement.endpoints.web.base-path=/management.endpoints.web.path-mapping.health=healthcheck
自定义管理服务器端口
使用默认 HTTP 端口公开管理端点是基于云的部署的明智选择。
management.server.port属性更改 HTTP 端口:
management.server.port=8081
自定义管理服务器地址
设置management.server.address属性来自定义管理端点可用的地址。如果您只想在内部或面向 ops 的网络上侦听或仅侦听来自localhost.
只有当端口与主服务器端口不同时,您才能侦听不同的地址。
以下示例application.properties不允许远程管理连接:
management.server.port=8081management.server.address=127.0.0.1
禁用 HTTP 端点
#如果不想通过HTTP公开端点,可以将管理端口设置为-1:management.server.port=-1#也可以使用management.endpoints.web.exposure.exclude属性来实现,如以下示例所示:management.endpoints.web.exposure.exclude=*
健康信息
可以使用健康信息来检查正在运行的应用程序的状态。当生产系统出现故障时,监控软件通常使用它来发出提醒。
health端点公开的信息取决于可以使用以下值之一配置:
management.endpoint.health.show-details
management.endpoint.health.show-components
默认值为never。
management.health.defaults.enabled=true
#编写自定义健康指标#要提供自定义健康信息,您可以注册实现该HealthIndicator接口的Springbean。您需要提供该health()方法的实现并返回Health响应。的Health响应应该包括一个状态,并且可以任选地包括另外的细节被显示。以下代码显示了一个示例HealthIndicator实现:importorg.springframework.boot.actuate.health.Health; importorg.springframework.boot.actuate.health.HealthIndicator; importorg.springframework.stereotype.Component; publicclassMyHealthIndicatorimplementsHealthIndicator { publicHealthhealth() { interrorCode=check(); if (errorCode!=0) { returnHealth.down().withDetail("Error Code", errorCode).build(); } returnHealth.up().build(); } privateintcheck() { // perform some specific health checkreturn ... } }
不想在指标的输出中包含路由数据源,请设置
management.health.db.ignore-routing-data-sources=true
总结:
直接上代码吧
#####################actuator配置######################auditevents:查看audit事件信息#env:查看环境变量#health:查看应用程序健康信息#httptrace:展示HTTP路径信息#info:展示arbitrary应用信息#metrics:展示metrics信息#loggers:显示并修改应用程序中日志器的配置#mappings:展示所有路径信息#scheduledtasks:展示应用程序中的定时任务信息#threaddump:执行ThreadDump#开启全部端点management.endpoints.web.exposure.include=*#禁用HTTP端点#management.server.port=-1#management.endpoints.web.exposure.exclude=*#自定义管理端点路径,默认是/actuatormanagement.endpoints.web.base-path=/actuator#不允许远程管理连接management.server.address=127.0.0.1#端口management.server.port=8081#healthmanagement.endpoint.health.show-components=alwaysmanagement.endpoint.health.show-details=always
END