Actuator是什么?
Spring Boot Actuator 模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP 跟踪等,帮助我们监控和管理Spring Boot 应用。这个模块是一个采集应用内部信息暴露给外部的模块,上述的功能都可以通过HTTP 和 JMX 访问。
因为暴露内部信息的特性,Actuator 也可以和一些外部的应用监控系统整合(Prometheus, Graphite, DataDog, Influx, Wavefront, New Relic等)。这些监控系统提供了出色的仪表板,图形,分析和警报,可帮助你通过一个统一友好的界面,监视和管理你的应用程序。
Actuator使用Micrometer与这些外部应用程序监视系统集成。这样一来,只需很少的配置即可轻松集成外部的监控系统。
Actuator 使用 引入依赖我们新建一个项目:jlw-actuator
引入 spring-boot-starter-actuator 的Maven依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
启动项目,访问:/actuator/health,理论上页面会输出以下成功的信息。
{ "status": "UP" } EndpointsSpring Boot 提供了所谓的 endpoints (端点)给外部来与应用程序进行访问和交互,允许添加自己的端点。可以启用或禁用每个端点,并通过HTTP或JMX公开(可远程访问)。默认暴露的两个端点为/actuator/health和 /actuator/info。
暴露端点端点可能包含敏感信息,所以应该仔细考虑何时公开它们。
下面的是默认暴露配置:
management.endpoints.jmx.exposure.exclude = * management.endpoints.jmx.exposure.include = * management.endpoints.web.exposure.exclude = * management.endpoints.web.exposure.include = info, health暴露除/env,/beans之外的端点:
management: endpoints: web: exposure: include: "*" exclude: "env,beans" 禁用默认其他节点下面的意思是默认不启用所有端点,仅启用/info端点
management: endpoints: enabled-by-default: false endpoint: info: enabled: true 修改前缀/actuator
在配置文件添加以下配置,自定义base-path属性
management: endpoints: web: base-path: /jinglingwang #https://jinglingwang.cn/archives/actuator
访问地址更改为:/jinglingwang/health
健康信息/health端点会聚合程序的健康指标来检查程序的健康情况,默认配置值是never,不会显示详细信息,还有when-authorized和always两个选项值可配置。
management: endpoint: health: show-details: always配置成always后访问/jinglingwang/health 会展示更多的信息,效果图如下:
禁用组件自动配置Spring Boot会自动配置key为couchbase、datasource、diskspace、elasticsearch、hazelcast、influxdb、jms、ldap、mail、mongo、neo4j、ping、rabbit、redis、solr等运行状况指示器,可以通过management.health.key.enabled来配置启用/禁用指示器。
比如,禁用redis健康监测:
management: health: redis: enabled: false重启之后,再访问/jinglingwang/health端点,里面就不会再有redis相关的信息了。
特殊的 shutdown 端点
默认情况下,除shutdown之外的所有端点都处于启用状态。
management: endpoint: shutdown: enabled: true注意是endpoint,不是endpoints
生产环境使用需慎重!
然后Post访问:9000/jinglingwang/shutdown 就可以实现停机操作。
自定义健康指标定制运行状况信息,可以注册实现 HealthIndicator 接口的springbean。需要提供health()方法的实现并返回一个健康响应。运行状况响应应该包括状态,并且可以选择包括要显示的其他详细信息。
@Component public class MyHealthIndicator implements HealthIndicator{ @Override public Health health() { //int errorCode = checkError(); //自定义逻辑 https://jinglingwang.cn/archives/actuator int errorCode = 1; if (errorCode != 1) { return Health.down().withDetail("Error Code", "https://jinglingwang.cn/ not found").build(); } return Health.up() .withDetail("code","200") .withDetail("message","http://jinglingwang.cn/") .build(); } } 端点安全校验默认暴露的端点是没有任何安全校验的,敏感信息很容易就暴露了,如果把生产环境的全部端点都暴露在外网环境下,是非常可怕的一件事,这时候我们就可以结合Spring Security来做安全校验。
引入Security相关依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-security</artifactId> </dependency>
配置好用户名密码
spring: security: user: name: jinglingwang password: jinglingwang.cn roles: ENDPOINT_ADMIN