Actuator基本使用

1. 开启Actuator监控

Eureka的服务端的依赖是默认集成了Actuator监控的, 所以不需要额外引入. Eureka的客户端需要额外引入. 引入方式如下:
maven版:

  1. <!-- Actuator监控 -->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-actuator</artifactId>
  5. </dependency>

gradle版

  1. //Actuator监控
  2. implementation 'org.springframework.boot:spring-boot-starter-actuator'

加入依赖后启动时会打印相关Actuator日志:
图片.png
启动成功后我们访问/actuator路径:
图片.png

Spring Boot 2.0 的Actuator只暴露了health和info端点,提供的监控信息无法满足我们的需求
在1.x中有n多可供我们监控的节点,官方的回答是为了安全….

如果需要开始所有端点需要额外在配置文件application.properties配置:

  1. #开启Actuator所有端点
  2. management.endpoints.web.exposure.include=*

2. 比较常用端点功能

http://localhost:10000/actuator/**configprops** 获取应用的自动化配置报告
http://localhost:10000/actuator/beans 获取应用上下文中创建的所有bean
http://localhost:10000/actuator/env/{toMatch} 获取应用所有可用的环境属性报告
http://localhost:10000/actuator/env
http://localhost:10000/actuator/mappings 获取应用所有Spring Web的控制器映射关系报告
http://localhost:10000/actuator/info 获取应用自定义的信息
http://localhost:10000/actuator/metrics 返回应用的各类重要度量指标信息
Metrics节点并没有返回全量信息,我们可以通过不同的key去加载我们想要的值
http://localhost:10000/actuator/metrics/{requiredMetricName}
http://localhost:10000/actuator/threaddump 返回程序运行中的线程信息
1.x中为dump

3. Actuator特殊端点

Actuator默认不允许远程关闭节点. 如果需要的话需要手动配置:

  1. #允许远程关闭当前微服务的节点
  2. management.endpoint.shutdown.enabled=true

配置后重启服务, 再次访问http://{ip}:{端口}/actuator 会发现多了一个端点:
图片.png
这个端口就是远程关闭节点的接口. 但是这个接口只允许post.
我们使用post发送请求后接收返回:

  1. {
  2. "message": "Shutting down, bye..."
  3. }

此时, 微服务真正关闭. 是真正的物理性质的关闭. 而且控制台打印:
图片.png
再去Eureka控制台去看客户端已消失.

Actuator进阶

1. 手动上报节点健康信息

application.properties增加配置

  1. #开启手动向Eureka服务端上报当前节点状态
  2. eureka.client.healthcheck.enabled=true

实现类:

  1. import org.springframework.boot.actuate.health.Health;
  2. import org.springframework.boot.actuate.health.HealthIndicator;
  3. import org.springframework.stereotype.Service;
  4. /**
  5. * @Author:壹心科技BCF项目组 wangfan
  6. * @Date:Created in 2020/10/5 00:15
  7. * @Project:epec
  8. * @Description:向Eureka上报自己的状态
  9. * @Modified By:wangfan
  10. * @Version: V1.0
  11. */
  12. @Service
  13. public class HealthStatusServiceConfig implements HealthIndicator {
  14. //节点状态 默认正常
  15. private Boolean status = true;
  16. @Override
  17. public Health health() {
  18. //TODO 各种判断以及逻辑处理
  19. if (this.status){
  20. return new Health.Builder().up().build(); //正常状态
  21. }else {
  22. return new Health.Builder().down().build(); //down机状态
  23. }
  24. }
  25. public void setStatus(Boolean status){
  26. this.status = status;
  27. }
  28. }

实现 HealthIndicator 类后每次客户端发送心跳时会调用health()获取心跳信息, 不会走默认处理.