返回顶部
首页 > 资讯 > 精选 >SpringBoot服务监控机制的原理是什么
  • 701
分享到

SpringBoot服务监控机制的原理是什么

2023-06-14 11:06:36 701人浏览 薄情痞子
摘要

这期内容当中小编将会给大家带来有关SpringBoot服务监控机制的原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。springBoot 监控SpringBoot 中的监控可以分为 Http 端点

这期内容当中小编将会给大家带来有关SpringBoot服务监控机制的原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

springBoot 监控

SpringBoot 中的监控可以分为 Http 端点和 JMX 两种方式来监控当前应用的运行状况和指标收集

HTTP Endpoints 监控

执行器端点允许您监视应用程序并与之交互。SpringBoot 包括许多内置的端点,并允许我们添加自己的端点。可以通过 HTTPJMX 启用或禁用每个端点,并公开(使其可以远程访问)。每个端点都有一个唯一的 id,访问时可以通过如下地址进行访问:http:ip:port/{id}(SpringBoot 1.x ),而在 SpringBoot 2.x 版本中,默认新增了一个 /actuator 作为基本路,访问地址则对应为 :http:ip:port/actuator/{id}

使用 HTTP 监控非常简单,在 SpringBoot 项目中,引入如下依赖:

<dependencies>  <dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-actuator</artifactId>  </dependency></dependencies>

默认就可以通过地址 http:localhost:8080/actuator/health,访问之后得到如下结果:

SpringBoot服务监控机制的原理是什么

SpringBoot 中提供了非常多的默认端点监控,但是出于安全考虑,默认情况下有些端点并不是开启状态,如 shutdown 端点就是默认关闭的。

内置端点

SpringBoot 中默认提供的常用内置端点如下:

端点 id描述
auditevents公开当前应用程序的审计事件信息,需要 AuditEventRepository Bean。
beans展示程序中所有的 Bean。
caches公开可用的缓存
conditions展示配置类或者自动装配类中的条件,以及它们匹配或者不匹配的原因。
configprops显示所有 @ConfigurationProperties 中的配置属性。
env显示 ConfigurableEnvironment 中的所有环境。
health显示应用程序运行状况信息。
httptrace显示 HTTP 跟踪信息(默认情况下统计最近 100 次请求),需要 HttpTraceRepository Bean。
info显示任意程序信息。
integrationgraph显示 Spring 集成图,需要依赖 spring-integration-core。
loggers展示和修改应用中的 loggers 配置。
metrics展示当前应用监控指标的度量。
mappings展示所有 @RequestMapping 路径。
scheduledtasks展示应用中的所有定时任务信息。
sessions允许从 Spring 会话支持的会话存储中检索和删除用户会话。需要使用基于 Spring Session WEB应用程序。
shutdown优雅的关闭程序,默认禁止了该端点的访问。

虽然说这里的大部分端点都是默认开启的,但是默认暴露(允许对外访问)的只有 healthinfo 端点,所以如果需要允许端点对外暴露,可以通过如下配置(如果想要暴露所有的端点,则可以直接配置 "*" ):

management: endpoints:  web:   exposure:    include: [health,info,mappings] //或者直接配置 "*"

另外,开启或禁用某一个端点,也可以通过通过如下配置进行动态控制:

management.endpoint.<id>.enabled=true

接下来我们挑选几个重点的端点来介绍一下。

health 端点

health 断点默认只是展示当前应用健康信息,但是我们可以通过另一个配置打开详细信息,这样不仅仅会监控当前应用,还会监控与当前应用相关的其他第三方应用,如 Redis

management: endpoint:  health:   show-details: always

这个配置打开之后,我们连接上 Redis 之后再次访问 health 端点,就可以展示 Redis 服务的健康信息了:

SpringBoot服务监控机制的原理是什么

loggers 端点

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

SpringBoot服务监控机制的原理是什么

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

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

SpringBoot服务监控机制的原理是什么

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

SpringBoot服务监控机制的原理是什么

metrics 端点

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

SpringBoot服务监控机制的原理是什么

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

SpringBoot服务监控机制的原理是什么

自定义监控端点

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

自定义监控端点常用注解

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

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

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

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

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

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

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

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

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

来,一起写一个自己的监控端点

定义一个类,并使用 @Endpoint 注解标注标识,同时定义几个方法用 @ReadOperation@WriteOperation 注解来标注:

@Endpoint(id="myEndpoint")@Componentpublic 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;      }    }  }}

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

@ReadOperation 方法可以返回 String 或者 JSONObject 或者 Map 集合等。参数上加了 @Selector 注解则表示访问断端点的时候可以直接访问子节点。

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

SpringBoot服务监控机制的原理是什么

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

SpringBoot服务监控机制的原理是什么

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

SpringBoot服务监控机制的原理是什么

JMX 监控

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

打开 jdk 下提供的工具 jConsole

SpringBoot服务监控机制的原理是什么

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

SpringBoot服务监控机制的原理是什么

如何手动注册一个 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

SpringBoot服务监控机制的原理是什么

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

其他监控

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

<dependency>  <groupId>io.micrometer</groupId>  <artifactId>micrometer-registry-prometheus</artifactId></dependency>

上述就是小编为大家分享的SpringBoot服务监控机制的原理是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: SpringBoot服务监控机制的原理是什么

本文链接: https://lsjlt.com/news/270091.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringBoot服务监控机制的原理是什么
    这期内容当中小编将会给大家带来有关SpringBoot服务监控机制的原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。SpringBoot 监控SpringBoot 中的监控可以分为 HTTP 端点...
    99+
    2023-06-14
  • SpringBoot服务监控机制原理解析(面试官常问)
    目录前言SpringBoot 监控HTTP Endpoints 监控内置端点自定义监控端点JMX 监控如何手动注册一个 JMX MBean其他监控总结前言 任何一个服务如果没有监控,...
    99+
    2024-04-02
  • 聊一聊SpringBoot服务监控机制
    前言 任何一个服务如果没有监控,那就是两眼一抹黑,无法知道当前服务的运行情况,也就无法对可能出现的异常状况进行很好的处理,所以对任意一个服务来说,监控都是必不可少的。 就目前而言,大...
    99+
    2024-04-02
  • SpringBoot断言机制的原理是什么
    这篇文章主要介绍“SpringBoot断言机制的原理是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot断言机制的原理是什么”文章能帮助大家解决问题。JUnit 5 内置的断言可...
    99+
    2023-07-02
  • Spring/SpringBoot 事件监听机制是什么
    本篇文章给大家分享的是有关Spring/SpringBoot 事件监听机制是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。事件监听机制可以理解为是一种观察者模式,有数据发布...
    99+
    2023-06-17
  • 使用DataAnt监控Apache APISIX的原理是什么
    这篇文章主要介绍“使用DataAnt监控Apache APISIX的原理是什么”,在日常操作中,相信很多人在使用DataAnt监控Apache APISIX的原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的...
    99+
    2023-07-02
  • Hibernate flush机制的原理是什么
    本篇内容介绍了“Hibernate flush机制的原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!针对昨天同事遇到的hiberna...
    99+
    2023-06-17
  • Java RMI机制的原理是什么
    本篇内容主要讲解“Java RMI机制的原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java RMI机制的原理是什么”吧!Java RMIJava RMI之HelloWorld篇Ja...
    99+
    2023-06-20
  • android Handler机制的原理是什么
    Android中的Handler机制是用来实现线程之间的通信的一种机制。它的原理是基于消息队列和消息循环。每个线程都有自己的消息队列...
    99+
    2023-09-20
    android
  • jwt的token机制原理是什么
    JWT(JSON Web Token)是一种用于身份验证和授权的开放标准(RFC 7519),它是一种轻量级的无状态身份验证机制,用...
    99+
    2023-10-07
    jwt
  • golang pprof监控goroutine thread统计的原理是什么
    本篇内容介绍了“golang pprof监控goroutine thread统计的原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅...
    99+
    2023-07-05
  • MySQL中复制机制的原理是什么
    MySQL中复制机制的原理是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。背景介绍复制,就是对数据的完整拷贝,说到为什么要...
    99+
    2024-04-02
  • mysql中并发控制的原理是什么
    mysql中并发控制的原理是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、mysql的逻辑框架mysql逻辑框架图如下:最上层是处...
    99+
    2024-04-02
  • MySQL监控组复制是什么
    MySQL监控组复制是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1. 监控组复制假设MySQL已经在启用了性能模式的情况下编译,使...
    99+
    2024-04-02
  • MySQL锁机制原理是什么
    这篇文章主要介绍“MySQL锁机制原理是什么”,在日常操作中,相信很多人在MySQL锁机制原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL锁机制原理是什么”...
    99+
    2024-04-02
  • android binder机制原理是什么
    Android Binder机制是Android系统中用于进程间通信(IPC)的核心机制,它基于进程间通信的原理,实现了高效、安全、...
    99+
    2023-09-20
    android
  • MySQL锁定机制的原理是什么
    这篇文章给大家介绍MySQL锁定机制的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。  数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变...
    99+
    2024-04-02
  • React的调度机制原理是什么
    这篇文章主要介绍“React的调度机制原理是什么”,在日常操作中,相信很多人在React的调度机制原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”React的调度机制...
    99+
    2024-04-02
  • Node.js中Require机制的原理是什么
    这篇文章给大家介绍Node.js中Require机制的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。什么是 CommonJS每一个文件就是一个模块,拥有自己独立的作用域,变量...
    99+
    2024-04-02
  • Java中 CAS机制的原理是什么
    Java中 CAS机制的原理是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。多线程实践public class test { &nb...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作