文章目录

  • 1、info端点指标控制
  • 2、health端点指标控制
  • 3、metrics端点指标控制
  • 4、自定义端点
  • 5、补充


接上篇,整合完SpringBoot Admin的客户端和服务端后,在监控页面看到信息栏是空的,但info端点是开放的,这就涉及到端点指标控制。

springboot druid监控设置密码_spring boot

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,两种方法皆可链式编程。

springboot druid监控设置密码_spring boot_02

2、health端点指标控制

健康状态实际展示的是服务内部整合的各个组件的状态,比如整合了Redis,但Redis连不通,那就显示down。一个组件down,那整个实例Instance就是down

springboot druid监控设置密码_后端_03


想自定义health展示信息,可以实现HealthContributor接口,也可以直接继承它的实现类AbstractHealthIndicator,重写其中的抽象方法doHealthCheck:

springboot druid监控设置密码_后端_04

应用场景就是:给某个组件或业务做健康检查,编写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容易淹没在代码里,可读性不如前者。

springboot druid监控设置密码_SpringBootAdmin_05

最后,这个状态有四种:

  • up
  • down
  • out_of_service
  • unknown

3、metrics端点指标控制

关于SpringBoot Admin中的metrics:

springboot druid监控设置密码_spring boot_06


springboot druid监控设置密码_spring boot_07

除了这些默认指标,下面自定义一个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

springboot druid监控设置密码_spring boot_08

调用相关接口:

springboot druid监控设置密码_后端_09

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;    
	}
}

重启服务,定义成功:

springboot druid监控设置密码_自定义_10

调用一下:

springboot druid监控设置密码_SpringBootAdmin_11

  • 定义端点的类上加@Endpoint(id=“pay”)注解,id即端点名称,enableByDefault即是否默认开启,默认为true。
  • 方法上加@ReadOperation注解,即读取我定义的这个端点时,就调用注解修饰的这个方法

5、补充

最后,SpringBoot Admin完结,但它的侧重点应该是做性能监控,至于业务监控,比如什么支付总额、浏览量等,一般都用其他专门的业务监控系统,而非SpringBoot Admin。