Actuator基本使用
1. 开启Actuator监控
Eureka的服务端
的依赖是默认集成了Actuator监控的, 所以不需要额外引入. Eureka的客户端
需要额外引入. 引入方式如下:
maven版:
<!-- Actuator监控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
gradle版
//Actuator监控
implementation 'org.springframework.boot:spring-boot-starter-actuator'
加入依赖后启动时会打印相关Actuator日志:
启动成功后我们访问/actuator
路径:
Spring Boot 2.0 的Actuator只暴露了health和info端点,提供的监控信息无法满足我们的需求
在1.x中有n多可供我们监控的节点,官方的回答是为了安全….
如果需要开始所有端点需要额外在配置文件application.properties
配置:
#开启Actuator所有端点
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默认不允许远程关闭节点. 如果需要的话需要手动配置:
#允许远程关闭当前微服务的节点
management.endpoint.shutdown.enabled=true
配置后重启服务, 再次访问http://{ip}:{端口}/actuator 会发现多了一个端点:
这个端口就是远程关闭节点的接口. 但是这个接口只允许post.
我们使用post发送请求后接收返回:
{
"message": "Shutting down, bye..."
}
此时, 微服务真正关闭. 是真正的物理性质的关闭. 而且控制台打印:
再去Eureka控制台去看客户端已消失.
Actuator进阶
1. 手动上报节点健康信息
application.properties
增加配置
#开启手动向Eureka服务端上报当前节点状态
eureka.client.healthcheck.enabled=true
实现类:
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Service;
/**
* @Author:壹心科技BCF项目组 wangfan
* @Date:Created in 2020/10/5 00:15
* @Project:epec
* @Description:向Eureka上报自己的状态
* @Modified By:wangfan
* @Version: V1.0
*/
@Service
public class HealthStatusServiceConfig implements HealthIndicator {
//节点状态 默认正常
private Boolean status = true;
@Override
public Health health() {
//TODO 各种判断以及逻辑处理
if (this.status){
return new Health.Builder().up().build(); //正常状态
}else {
return new Health.Builder().down().build(); //down机状态
}
}
public void setStatus(Boolean status){
this.status = status;
}
}
实现 HealthIndicator
类后每次客户端发送心跳时会调用health()
获取心跳信息, 不会走默认处理.