一、引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
二、监控配置
management:
endpoints:
enabled-by-default: false # 用于开关监控端点,默认为true暴露所有端点信息
web:
exposure:
include: '*' # 表示以web方式暴露所有监控端点
endpoint: # 可以先禁用所有的监控端点,再打开单个端点,自定义的端点是默认打开的
health:
enabled: true # 表示开关单个监控端点
show-details: always # 展示详细信息
info:
enabled: true
metrics:
enabled: true
支持的暴露方式:
- HTTP:默认只暴露health和info的端点
- JMX:默认暴露所有端点
- 除过health和info,剩下的端点都应该进行保护访问。如果引入SpringSecurity,则会默认配置安全访问规则
三、查看
访问 http://localhost:8080/actuator/**查看所有端点监控信息
四、自定义健康信息
继承AbstractHealthIndicator类,重写doHealthCheck方法
/**
* 定制检查健康信息
* @author cwj
* @date 2021/9/10
*/
@Component
public class MyComHealthIndicator extends AbstractHealthIndicator{
/**
* 真实的检查方法
* @param builder
* @throws Exception
*/
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
//获取连接进行测试
Map<String,Object> map = new HashMap<>();
if(1 == 1){
builder.up();
map.put("count",1);
map.put("ms",100);
}else{
builder.status(Status.OUT_OF_SERVICE);
map.put("err","连接超时");
map.put("ms",3000);
}
//withDetail方法用于携带返回数据,可将数据写入端口信息中
builder.withDetail("code",100).withDetails(map);
}
}
五、自定义端点
使用@Endpoin注解表示该类是端点类
@Component
@Endpoint(id = "container") //container表示端点名
public class DockerEndpoint {
//DockerInfo表示属性,所有方法不允许有参数
@ReadOperation //表示端点的读操作
public Map getDockerInfo(){
return Collections.singletonMap("info","docker started.......");
}
@WriteOperation //表示端点的写操作
public void writerDockerInfo(){
System.out.println("docker restarted.....");
}
}
测试: 端点自定义成功
六、监控的可视化工具
https://github.com/codecentric/spring-boot-admin
服务端
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>
在启动类上加入@EnableAdminServer注解即可
访问服务端:http://localhost:9000/wallboard
客户端
导入依赖
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.4.3</version>
</dependency>
将客户端注册到服务端中
boot:
admin:
client:
url: http://localhost:9000 # 服务端的端口号
instance:
prefer-ip: true # 使用ip名注册
application:
name: springboot-thymeleaf # 设置客服端名称
展示