• 【开发篇】二十三、SpringBoot Admin端点指标控制以及自定义端点


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

    在这里插入图片描述

    1、info端点指标控制

    两种方式,首先可以在yaml配置文件中添加自定义指标:

    info:  
      appName: @project.artifactId@   # @@在pom.xml中取值
      version: @project.version@  
      author: code9527
    
    • 1
    • 2
    • 3
    • 4

    当配置信息较多,或者涉及到计算,在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);    
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    多条数据直接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);        
    		}    
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    注意,上面改端点显示状态用的常量:

    builder.status(Status.UP);
    
    • 1

    而不是:

    builder.up();
    
    • 1

    前者更优,后者虽能实现,但状态关键词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) ;    
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 在构造器中自动注入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;    
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    重启服务,定义成功:

    在这里插入图片描述

    调用一下:

    在这里插入图片描述

    • 定义端点的类上加@Endpoint(id=“pay”)注解,id即端点名称,enableByDefault即是否默认开启,默认为true。

    • 方法上加@ReadOperation注解,即读取我定义的这个端点时,就调用注解修饰的这个方法

    5、补充

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

  • 相关阅读:
    分布式锁的概念、应用场景、实现方式和优缺点对比
    pytorch中transform.Compose()用法
    Java后端面试精选45题
    JAVA面试之容器
    chrome插件:一个基于webpack + react的chrome 插件项目模板
    2.1 BIAS 正值/负值越大,回调/上涨的概率也就越大?
    【JavaEE进阶系列 | 从小白到工程师】 JavaEE中的final关键字使用
    主成分分析法(PCA)及其python实现
    网络安全中攻击溯源方法
    【CSH 入门基础 9 -- 输出 csh 脚本中每一句命令】
  • 原文地址:https://blog.csdn.net/llg___/article/details/133670933