文章目录
- 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。



















