面试官:聊一聊SpringBoot服务监控机制,程序员java面试宝典下载百度云

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

loggers 端点

访问 http://localhost:8080/actuator/loggers 可以查看当前应用的日志级别等信息:

在这里插入图片描述

这里面本身并不特别,但是有一个功能却非常有用,比如我们生产环境日志级别一般都是 info,但是现在有一个 bug 通过 info 级别无法排查,那么我们就可以临时修改 log 级别。

比如上图中的 ROOT 节点是 info 级别,那么我们可以通过 postman 等工具来发一个 post 请求修改日志级别。

在这里插入图片描述

修改之后就会发现,日志由原来的 info 变成了 debug

在这里插入图片描述

metrics 端点

metrics 是一个非常重要的监控端点,其监控内容覆盖了 JVM 内存、堆、类加载、处理器和 tomcat 容器等一些重要指标:

在这里插入图片描述

可以看到这里面包含了非常多的指标,任意访问一个指标就可以查看对应的指标信息:

在这里插入图片描述

自定义监控端点

通过上面的介绍,可以看到 SpringBoot 提供的监控非常强大,但是就算再全面的监控也不可能满足所有人的需求,所以 SpringBoot 也支持自定义监控端点。

自定义监控端点常用注解

自定义一个监控端点主要有如下常用注解:

  • @Endpoint:定义一个监控端点,同时支持 HTTPJMX 两种方式。

  • @WebEndpoint:定义一个监控端点,只支持 HTTP 方式。

  • @JmxEndpoint:定义一个监控端点,只支持 JMX 方式。

以上三个注解作用在类上,表示当前类是一个监控端点,另外还有一些注解会用在方法和参数上:

  • @ReadOperation:作用在方法上,可用来返回端点展示的信息(通过 Get 方法请求)。

  • @WriteOperation:作用在方法上,可用来修改端点展示的信息(通过 Post 方法请求)。

  • @DeleteOperation:作用在方法上,可用来删除对应端点信息(通过 Delete 方法请求)。

  • @Selector:作用在参数上,用来定位一个端点的具体指标路由。

来,一起写一个自己的监控端点
  • 定义一个类,并使用 @Endpoint 注解标注标识,同时定义几个方法用 @ReadOperation@WriteOperation 注解来标注:

@Endpoint(id=“myEndpoint”)

@Component

public class MyEndpoint {

private String STATUS = “up”;

private String DETAIL = “一切正常”;

// @ReadOperation

// public String test1(){

// return “wolf”;

// }

// @ReadOperation

// public Map<String,String> test2(){

// Map<String,String> map = new HashMap();

// map.put(“status”,“up”);

// return map;

// }

@ReadOperation

public JSONObject test3(){

JSONObject jsonObject= new JSONObject();

jsonObject.put(“status”,STATUS);

jsonObject.put(“detail”,DETAIL);

return jsonObject;

}

@ReadOperation

public JSONObject test3_1(@Selector String name){

JSONObject jsonObject= new JSONObject();

if (“status”.equals(name)){

jsonObject.put(“status”,STATUS);

}else if (“detail”.equals(name)){

jsonObject.put(“detail”,DETAIL);

}

return jsonObject;

}

@WriteOperation//动态修改指标

public void test4(@Selector String name,@Nullable String value){

if (!StringUtils.isEmpty(value)){

if (“status”.equals(name)){

STATUS = value;

}else if (“detail”.equals(name)){

DETAIL = value;

}

}

}

}

  1. @Component 注解表示将该类交给 Spring 进行管理,或者也可以再定义一个 Configuration 类来加载该 Bean 也可以,当然,如果我们需要提供给第三方使用,如果无法保证当前包名被扫描,则需要使用 SpringBoot 的自动装配机制将该类进行管理。

  2. @ReadOperation 方法可以返回 String 或者 JSONObject 或者 Map 集合等。

  3. 参数上加了 @Selector 注解则表示访问断端点的时候可以直接访问子节点。

完成了上面的类,启动 SpringBoot 应用,接下来就可以直接通过 http://localhost:8080/actuator/myEndpoint 进行访问了:

在这里插入图片描述

同时,因为 test3_1 方法使用了 @Selector 注解,所以我们可以通过这个方法每一个指标的明细:

在这里插入图片描述

而带有 @WriteOperation 注解的方法可以用来修改指标,这个方法需要用 post 进行访问,访问的参数可以直接使用字符串传参,也可以直接使用 json 进行传参,修改之后再次查看就可以发现指标已经被动态修改:

在这里插入图片描述

JMX 监控


JMX 全称为 Java Management Extensions,即 Java 管理扩展。它提供了对 Java 应用程序和 JVM 的监控管理。通过JMX 我们可以监控服务器中各种资源的使用情况以及线程,内存和 CPU 等使用情况。

打开 jdk 下提供的工具 jConsole

在这里插入图片描述

打开之后这里会监控到我们已经启动的应用,双击进入:

在这里插入图片描述

如何手动注册一个 JMX MBean

  • 定义一个接口 SystemInfoMBean(注意名字必须要用 MBean 结尾):

public interface SystemInfoMBean {

int getCpuCore();

long getTotalMemory();

void shutdown();

}

  • 再定义一个类实现 SystemInfoMBean 接口,实现类的明明方式为接口名去掉 MBean

public class SystemInfo implements SystemInfoMBean {

@Override

public int getCpuCore() {

return Runtime.getRuntime().availableProcessors();

}

@Override

public long getTotalMemory() {

return Runtime.getRuntime().totalMemory();

}

@Override

public void shutdown() {

System.exit(0);

}

}

  • 最后就是需要将该实现类进行注册:

public class JmxRegisterMain {

public static void main(String[] args) throws NotCompliantMBeanException, InstanceAlreadyExistsException, MBeanRegistrationException, MalformedObjectNameException, IOException {

MBeanServer mBeanServer= ManagementFactory.getPlatformMBeanServer();

ObjectName objectName=new ObjectName(“com.lonely.wolf.note.springboot.actuator.jmx:type=SystemInfo”);

SystemInfo SystemInfo =new SystemInfo();

mBeanServer.registerMBean(SystemInfo,objectName);//注册

System.in.read();//防止程序结束

}

}

运行该 main 方法,再打开 jConsole 就可以看到成功注册了一个 MBean

在这里插入图片描述

同样的,Spring 当中只要我们使用了 @@Endpoint 或者 @JmxEndpoint 注解,就会自动帮我们注册一个 MBean,其原理也是利用了自动装配机制。

其他监控

=================================================================

除了 SpringBoot 自带的监控之外,也有其他第三方开源的强大监控系统,如 Prometheus,而且 SpringBoot 也将其进行了集成,使用 Prometheus 时只需要引入如下 jar 包即可:

最后

由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!

小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
的内容!

[外链图片转存中…(img-iRiW6voN-1713386947684)]

小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》

[外链图片转存中…(img-MisUeAwQ-1713386947685)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-hZ31fQyX-1713386947685)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 26
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值