【开发篇】二十二、SpringBoot Admin实现服务监控

Dear 丶 2024-02-24 08:10 127阅读 0赞

文章目录

  • 1、服务监控的实现思路
  • 2、SpringBoot Admin服务端
  • 3、SpringBoot Admin客户端
  • 4、实现原理—Actuator与端点
  • 5、关于端点

1、服务监控的实现思路

监控的意义:

  • 监控服务状态是否宕机
  • 监控服务运行指标:内存、虚拟机、线程、请求等
  • 监控日志
  • 管理服务:服务下线与启动

当要监控的服务很多时,一个个去查看很不方便,因此考虑引入一个显示所有服务监控信息的服务。这个服务如果只能等待被监控的服务上报数据,那就会有延迟(比如人5分钟一上报),因此需要既支持上报,也支持主动拉取。但从安全方面来想,你做一个监控服务,然后想监控谁就监控谁,不管别人是否同意,这也是不合理的,因此,需要被监控方配置了对应的监控地址,才能监控。如此就有这样一个效果:被监控方来决定,我受不受你监控,我的哪些数据可以被监控。而对于负责监控的服务,又可以主动拉取其他服务的监控数据。

在这里插入图片描述

  • 显示监控信息的服务:用于获取服务信息,并显示对应的信息
  • 运行的服务:启动时主动上报,告知监控服务器自己需要受到监控

而SpringBoot Admin就是这样的一个技术:

Spring Boot Admin,开源社区项目,用于管理和监控SpringBoot应用程序。 客户端注册到服务端后,通过HTTP请求方式,服务端定期从客户端获取对应的信息,并通过UI界面展示对应信息。

2、SpringBoot Admin服务端

先来做SpringBoot Admin的服务端,也就是上面思路里负责监控所有服务的那个服务。引入依赖:

  1. <dependency>
  2. <groupId>de.codecentric</groupId>
  3. <artifactId>spring-boot-admin-starter-server</artifactId>
  4. <version>2.5.4</version>
  5. </dependency>
  6. <!--这个版本不是SpringBoot维护的,
  7. 注意和SpringBoot的版本保持相近
  8. -->

当然一般来说,服务端都是新创建的模块,那直接勾选Ops里的Admin Server也行

在这里插入图片描述
另外,如果是新模块的话,也记得加入mvc的依赖,配成web服务,不然服务启动完又停了:

在这里插入图片描述

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>

新模块的话记得改下服务端口,别冲突了:

  1. server:
  2. port: 8080

启动类加@EnableAdminServer注解开启用Spring-Admin:

  1. @SpringBootApplication
  2. @EnableAdminServer
  3. public class SpringbootServerApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(SpringbootServerApplication.class, args);
  6. }
  7. }

访问IP:PORT即可进入服务端监控页面
在这里插入图片描述

3、SpringBoot Admin客户端

SpringBoot Admin即要被监控的服务,首先引入admin客户端依赖:

  1. <dependency>
  2. <groupId>de.codecentric</groupId>
  3. <artifactId>spring-boot-admin-starter-client</artifactId>
  4. <version>2.5.4</version>
  5. </dependency>
  6. <!--这个版本不是SpringBoot维护的,注意和SpringBoot的版本保持相近-->

待监控的客户端服务加配置,这些配置就是上面说的”受不受监控,哪些数据可以被监控”。

  1. spring:
  2. boot:
  3. admin:
  4. client:
  5. url: http://localhost:8080 # The admin server urls to register at
  6. management:
  7. endpoint:
  8. health:
  9. show-details: always # 服务的健康信息默认也是不开放的,默认never,改为always
  10. endpoints:
  11. web:
  12. exposure:
  13. include: "*" # 别直接写个*,记得加单引号或者双引号。默认值为health,所以没配这一项的时候可以看到健康状况

修改完成,重启客户端服务,查看服务端页面,可以看到监控成功:

在这里插入图片描述

在这里插入图片描述

如果配置中只写了允许监控服务监控状况,那服务端页面就长这样:

在这里插入图片描述

4、实现原理–Actuator与端点

看下客户端的依赖,里面有个actuator,Actuator提供了SpringBoot生产就绪功能,通过端点的配置与访问,获取端点信息。端点就是某一类监控信息,如health就是一个端点。SpringBoot提供了多个内置端点,也可以根据需要自定义端点信息。

在这里插入图片描述

访问当前应用所有端点信息:GET => 客户端ip:port/actuator

在这里插入图片描述

访问某个端点的详细信息:GET => 客户端ip:port/actuator/端点名称

在这里插入图片描述

5、关于端点

在这里插入图片描述
在这里插入图片描述

Web程序专用端点:

在这里插入图片描述

关于端点的启用,通过enabled来启用指定端点:

  1. management:
  2. endpoint:
  3. health: # 端点名称
  4. enabled: true # health必须开放,要不SpringBoot Admin启动就报错了
  5. show-details: always
  6. beans: # 端点名称
  7. enabled: true
  8. info:
  9. enabled: false
  10. # ......

要启用所有端点的话:

  1. management:
  2. endpoints:
  3. enabled-by-default: true

回顾下前面客户端SpringBoot Admin的部分配置,上面是决定是否对外开放这个数据,下面的只针对web方式:

  1. management:
  2. endpoint: # 这里配的是:是否对外开放
  3. health:
  4. show-details: always
  5. endpoints:
  6. web: # 这个是配能不能在web下看到
  7. exposure:
  8. include: "*"

端点中包含的信息存在敏感信息,需要对外暴露端点功能时手动设定指定端点信息,对于Jmx方式,默认都开启,没有排除的,如下表:

在这里插入图片描述

展开就是:

在这里插入图片描述
在这里插入图片描述

jmx的方式即jconsole,cmd打开DOS窗口输入jconsole,选择要查看的服务即可:

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,127人围观)

还没有评论,来说两句吧...

相关阅读