文章目录
- 1、info端点指标控制
- 2、health端点指标控制
- 3、metrics端点指标控制
- 4、自定义端点
- 5、补充
接上篇,整合完SpringBoot Admin的客户端和服务端后,在监控页面看到信息栏是空的,但info端点是开放的,这就涉及到端点指标控制。
1、info端点指标控制
两种方式,首先可以在yaml配置文件中添加自定义指标:
info:
appName: @project.artifactId@ # @@在pom.xml中取值
version: @project.version@
author: code9527
当配置信息较多,或者涉及到计算,在yaml中无法完成时,可加配置类来实现:实现InfoContributor接口
@Component
public class AppInfoContributor implements InfoContributor {
@Override
public void contribute(Info.Builder builder) {
Map<String,Object> infoMap = new HashMap<>();
infoMap.put("buildTime",LocalDateTime.now());
builder.withDetail("runTime",System.currentTimeMillis())
.withDetail("company","啦啦啦");
builder.withDetails(infoMap);
}
}
多条数据直接withDetails,传一个Map,一条则withDetail,两种方法皆可链式编程。
2、health端点指标控制
健康状态实际展示的是服务内部整合的各个组件的状态,比如整合了Redis,但Redis连不通,那就显示down。一个组件down,那整个实例Instance就是down
想自定义health展示信息,可以实现HealthContributor接口,也可以直接继承它的实现类AbstractHealthIndicator,重写其中的抽象方法doHealthCheck:
应用场景就是:给某个组件或业务做健康检查,编写condition条件,为true,就展示health端点信息,状态为up,否则为down或者unknown
@Component
public class ServerHealthConfig extends AbstractHealthIndicator {
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
//判断逻辑,自己完善,这里直接挂个true
boolean condition = true;
if(condition){
builder.withDetail("runTime",System.currentTimeMillis());
builder.status(Status.UP);
}else{
builder.withDetail("error","xx组件启动失败");
builder.status(Status.DOWN);
}
}
}
注意,上面改端点显示状态用的常量:
builder.status(Status.UP);
而不是:
builder.up();
前者更优,后者虽能实现,但状态关键词up容易淹没在代码里,可读性不如前者。
最后,这个状态有四种:
- up
- down
- out_of_service
- unknown
3、metrics端点指标控制
关于SpringBoot Admin中的metrics:
除了这些默认指标,下面自定义一个metrics指标:
@Service
public class TestServiceImpl implements TestService {
private Counter counter; //!!!
public TestServiceImpl(MeterRegistry meterRegistry){ //!!!
counter = meterRegistry.counter("用户浏览产品A的次数");
}
@Override
public Vo scan(Integer id) {
if( id == A.id){ //伪代码
counter.increment(); //次数+1
}
return mapper.getById(id) ;
}
}
- 在构造器中自动注入MeterRegistry对象,定义自定义指标名称
- 业务代码里完成指标统计,如每访问一次产品数据,浏览次数就+1
调用相关接口:
4、自定义端点
@Component
@Endpoint(id="pay")
public class PayEndPoint {
@ReadOperation
public Object getPay(){
//调用业务操作,获取支付相关信息结果,最终return出去
Map payMap = new HashMap();
//业务逻辑自定义
payMap.put("level 1",103);
payMap.put("level 2",315);
payMap.put("level 3",666);
return payMap;
}
}
重启服务,定义成功:
调用一下:
-
定义端点的类上加
@Endpoint
(id=“pay”)注解,id即端点名称,enableByDefault即是否默认开启,默认为true。 -
方法上加
@ReadOperation
注解,即读取我定义的这个端点时,就调用注解修饰的这个方法
5、补充
最后,SpringBoot Admin完结,但它的侧重点应该是做性能监控,至于业务监控,比如什么支付总额、浏览量等,一般都用其他专门的业务监控系统,而非SpringBoot Admin。