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

news2024/9/24 11:23:08

文章目录

  • 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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1074872.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于ffmpeg给视频添加时间字幕

FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序&#xff0c;我们可以基于ffmpeg对视频进行各种操作。本文主要介绍基于ffmpeg给视频添加字幕&#xff0c;字幕的内容为视频所播放的时间&#xff08;故需要安装ffmpeg&#xff0c;具…

【配置vscode编写python代码并输出到外部控制台】

配置vscode编写python代码并输出到外部控制台 1、扩展中添加python插件 2、打开一个文件夹&#xff0c;在里面新建一个.py文件&#xff0c;粘贴print(‘你好啊&#xff01;’)并运行 运行结果如下: 3、点击调试点击如下图 生成launch.json&#xff0c;将console后面改成exte…

如何搭建接口自动化测试框架

接口自动化测试框架搭建 一、原理及特点 参数放在XML文件中进行管理 用httpClient简单封装一个httpUtils工具类 测试用例管理使用了testNg管理&#xff0c;使用了TestNG参数化测试&#xff0c;通过xml文件来执行case。 测试报告这里用到第三方的包ReportNG 项目组织用Maven 二、…

在MySQL中使用!=还能走索引吗?

在MySQL中使用!还能走索引吗&#xff1f; 一般情况下&#xff0c;我们会在一个索引上较多的使用等值查询或者范围查询&#xff0c;此时索引大多可以帮助我们极快的查询出我们需要的数据。 那当我们在where条件中对索引列使用!查询&#xff0c;索引还能发挥他的作用吗&#xf…

基于SSM的网上宠物店商城交易系统

基于SSM的网上宠物店商城交易系统~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 前台界面 详情界面 登录界面 管理员界面 摘要 基于SSM框架的网上宠物店商城交易系统…

Vue-1.8生命周期

Vue生命周期 一个Vue实例从创建到销毁的整个过程。 生命周期&#xff1a; 1&#xff09;创建&#xff1a;响应式数据 ->发送初始化渲染请求 2&#xff09;挂载&#xff1a;渲染数据->操作dom 3&#xff09;更新&#xff1a;数据修改&#xff0c;更新视图 4&#xf…

M4Singer CUDA error: no kernel image is available for execution on the device

操作系统Ubuntu 22.04 2060 上整合好的M4Singer&#xff0c;拷贝到Ubuntu 22.04 4060ti16G上运行报错 Traceback (most recent call last): File "data_gen/tts/bin/binarize.py", line 20, in <module> binarize() File "data_gen/tts/bin/bi…

UDP协议(UDP协议特点 UDP的报文格式 UDP的服务端和客户端代码(简单的步骤))

目录 端口号 UDP协议 UDP协议特点 UDP 无连接 UDP 面向数据报 UDP 全双工 UDP 的报文格式 什么是校验和&#xff1f; 如何基于校验和来完成数据校验呢&#xff1f; CRC算法&#xff08;循环冗余算法&#xff09; MD5算法/SHA算法&#xff08;这里只介绍MD5算…

智能AI创作系统ChatGPT详细搭建教程/AI绘画系统/支持GPT联网提问/支持Prompt应用/支持国内AI模型

一、智能AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统&#xff0c;支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作…

JavaScript Web APIs第五天笔记

Web APIs - 第5天笔记 目标&#xff1a; 能够利用JS操作浏览器,具备利用本地存储实现学生就业表的能力 BOM操作综合案例 js组成 JavaScript的组成 ECMAScript: 规定了js基础语法核心知识。比如&#xff1a;变量、分支语句、循环语句、对象等等 Web APIs : DOM 文档对象模型&…

ElementUI--数据表格增删改查与表单验证

一、CRUD实现 1.1 后台CRUD编写 package com.zking.ssm.controller;import com.zking.ssm.model.Book; import com.zking.ssm.service.IBookService; import com.zking.ssm.util.JsonResponseBody; import com.zking.ssm.util.PageBean; import com.zking.ssm.vo.BookFileVo;…

arm 点灯实验代码以及现象(c语言版本)

.led.h #ifndef __LED_H__ #define __LED_H__ //构建寄存器组织结构体 typedef struct {unsigned int moder; unsigned int otyper; unsigned int ospeedr;unsigned int pupdr;unsigned int idr;unsigned int odr; }gpio_t;#define GPIOE (*(gpio_t*)0x50006000) #define G…

全图化在线系统设计

Pillars是什么 Pillars是一个Serverless全图化业务托管平台。Pillars应用全图化开发模型,提供丰富的运行时组件,支持CI/CD全生命周期项目管理,具备主动式资源优化能力。 Pillars解决什么问题 当前广告系统架构采用分布式微服务的设计理念,通过服务分治实现各组织间开发、…

java基础 API Calendar类

Calendar日历类 &#xff1a; package daysreplace;import com.sun.jdi.IntegerValue;import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Calendar; import java.util.Date;public class Test {public static v…

关于AAPT2 error: check logs for details 的问题分析定位与排查解决方法

关于AAPT2 error: check logs for details 的问题分析定位与排查解决方法 现象描述1、排查2、定位3、解决 现象描述 在android studio的项目开发过程中&#xff0c;经常会遇到关于AAPT2 error: check logs for details 这种类似的问题。一般都是jar包冲突导致的&#xff0c;尤其…

无声的世界,精神科用药并结合临床的一些分析及笔记(四)

目录 关于镇静催眠药 第二代与第三代药物的主要区别 第二代镇静催眠药物 如何简单的识别 适用性 第三代镇静催眠药物 如何简单的识别 适用性 关于成瘾性 为什么会变胖&#xff1f; “开源” “节流” 哪种催眠药“劲儿”大? 第二代 BZDs 第三代 non-BZDs 用药…

【数据结构】算法效率的度量方法

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 &#x1f38f;事后统计方法 &#x1f38f;事前分析估算方法 &#x1f38f;函数的渐进式增长 结语 在上篇文章中我们提到了算法的设计要求中我们要尽量满足时间效率高…

Zabbix第二部分:基于Proxy分布式部署实现Web监控和Zabbix HA集群的搭建

代理和高可用 一、基于zabbix-proxy的分布式监控1.1 分布式监控的作用1.2 数据流向1.3 构成组件 二、部署zabbix代理服务器Step1 前置准备Step2 设置 zabbix 的下载源&#xff0c;安装 zabbix-proxyStep3 部署数据库并将zabbix相关文件导入Step4 修改zabbix-proxy的配置文件&am…

【NLTK系列01】:nltk库介绍

一、说明 NLTK是个啥&#xff1f;它是个复杂的应用库&#xff0c;可以实现基本预料库操作&#xff0c;比如&#xff0c;、将文章分词成独立token&#xff0c;等操作。从词统计、标记化、词干提取、词性标记&#xff0c;停用词收集&#xff0c;包括语义索引和依赖关系解析等。 …

ntlm哈希传递

哈希传递就是ntlm哈希 概念 早期SMB协议铭⽂在⽹络上传输数据&#xff0c;后来诞⽣了LM验证机制&#xff0c;LM机制由于过于简 单&#xff0c;微软提出了WindowsNT挑战/响应机制&#xff0c;这就是NTLM LM NTLM 哈希传递攻击是针对相同密码的用户认证直接发起攻击&#xff0c…