文章目录

  • Pre
  • 引入 Spring Boot Admin 组件
  • 基于独立服务构建 Admin Server
  • 基于注册中心构建 Admin Server
  • 使用 Admin Server 监控系统
    • 监控系统运行时关键指标
  • 控制访问安全性


Pre

通过引入 Actuator 组件,我们为 Spring Boot 应用程序添加了系统监控功能。基于 Actuator 暴露的各种 HTTP 端点,开发人员可以获取系统的运行时状态。而端点是一种底层的监控技术,这就要求我们对 HTTP 协议和 Spring Boot 应用程序的构建方式有一定的了解。

那么,有没有更简单的、基于可视化的方式获取这些端点背后的信息呢? 我们将要介绍 Spring Boot Admin 组件。

  <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent>

引入 Spring Boot Admin 组件

Spring Boot Admin 是一个用于监控 Spring Boot 的应用程序,它的基本原理是通过统计、集成 Spring Boot Actuator 中提供的各种 HTTP 端点,从而提供简洁的可视化 WEB UI,如下图所示

从上图中,我们不难看出,Spring Boot Admin 的整体架构中存在两大角色,即服务器端组件 Admin Server 和客户端组件 Admin Client。其中,Admin Client 实际上是一个普通的 Spring Boot 应用程序,而 Admin Server 则是一个独立服务,需要进行专门构建。

接下来,我们先介绍构建 Admin Server 的两种实现方式:

  • 一种是简单的基于独立的 Admin 服务;
  • 另一种则相对复杂,需要依赖服务注册中心的服务注册和发现机制。

基于独立服务构建 Admin Server

无论使用哪种方式实现 Admin Server,首先我们都需要创建一个 Spring Boot 应用程序,并在 pom 文件中添加如下所示的依赖项:

     <dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-server</artifactId><version>2.2.3</version></dependency><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-server-ui</artifactId><version>2.2.3</version></dependency>

请注意: Spring Boot Admin 组件并不是 Spring 家族官方提供的组件,而是来自一个 codecentric AG 团队。

如果我们想将普通的 Spring Boot 应用程序转变为 Spring Boot Admin Server,只需要在 Bootstrap 类上添加一个 @EnableAdminServer 注解即可,添加完该注解的 BootStrap 类如下代码所示:

@SpringBootApplication
@EnableAdminServer
public class AdminApplication {public static void main(String[] args) {SpringApplication.run(AdminApplication.class, args);}
}

从图中我们可以看到,目前还没有一个应用程序与 Admin Server 有关联。如果想将应用程序与 Admin Server 进行关联,我们还需要对原有的 Spring Boot 应用程序做一定的改造。

首先,我们在 Maven 依赖中引入对 Spring Boot Admin Client 组件的依赖,如下代码所示:

<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>

然后,我们在配置文件中添加如下配置信息,以便该应用程序能够与 Admin Server 进行关联。

spring:boot:admin:client:url: http://localhost:9000

注意:这里的 9000 就是 Admin Server 的服务器端口。

现在我们启动这个应用程序,就会发现 Admin Server 中已经出现了这个应用的名称和地址了


基于注册中心构建 Admin Server

虽然基于独立服务构建 Admin Server 和 Admin Client 非常简单,但是需要我们在每个应用程序中添加对 Spring Boot Admin 的 Maven 依赖,并指定 Admin Server 地址。这实际上是一种代码侵入,意味着应用程序与 Admin Server 之间有一种强耦合。

那么,有没有更好的办法分离或转嫁这种耦合呢?

联想到 Admin Server 和 Admin Client 之间需要建立类似服务注册的关联关系,我们可以认为这是服务注册和发现机制的一种表现形式。

在 Spring 家族中,存在一个用于构建微服务架构的 Spring Cloud 框架,而该框架中恰好存在一款专门实现服务注册和发现的组件——服务注册中心 Spring Cloud Netflix Eureka ,且 Spring Boot Admin 内置了与这款注册中心实现工具的无缝集成。

基于注册中心,Admin Server 与各个 Admin Client 之间的交互方式如下图所示:


使用 Eureka 构建注册中心的过程也很简单,首先我们创建一个独立的 Spring Boot 应用程序,并在 pom 文件中添加如下所示的用于提供 Eureka 服务端功能的 Maven 依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

引入 Maven 依赖后,我们就可以创建 Spring Boot 的启动类。在示例代码中,我们把该启动类命名为 EurekaServerApplication,如下代码所示:

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}

注意:在上面的代码中,我们在启动类上加了一个@EnableEurekaServer 注解。在 SpringCloud 中,包含 @EnableEurekaServer 注解的服务也就是一个 Eureka 服务器组件。这样,Eureka 服务就构建完毕了。

同样,Eureka 服务还为我们提供了一个可视化的 UI 界面,它可以用来观察当前注册到 Eureka 中的应用程序信息,如下图所示:
接下来,我们需要 Admin Server 也做相应调整。首先,我们在 pom 文件中添加一个对 spring-cloud-starter-netflix-eureka-client 这个 Eureka 客户端组件的依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

这时 Admin Server 相当于 Eureka 的客户端,因此,我们需要在它的 BootStrap 类上添加 @EnableEurekaClient 注解,以便将 Admin Server 注册到 Eureka 上。

重构 Admin Server 的最后一步是调整配置信息,此时我们需要在配置文件中添加如下所示的配置项来指定 Eureka 服务器地址。

eureka:client:registerWithEureka: truefetchRegistry: trueserviceUrl:defaultZone: http://localhost:8761/eureka/

好了,现在 Admin Server 已经重构完毕,接下来我们一起看看 Admin Client。

引入注册中心的目的是降低 Admin Client 与 Admin Server 之间的耦合度,关于这点我们从 Maven 依赖上就可以得到印证。有了注册中心后,Admin Client 就不再依赖 spring-boot-admin-starter-client 组件了,而是直接使用如下所示的 Eureka 客户端组件。

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

在配置文件中,我们需要去掉对 Admin Server 地址的引用,直接使用 Eureka 服务端地址即可,且无须对 Admin Client 中的 Bootstrap 类做任何修改。

通过以上调整,各个 Admin Client 就能通过 Eureka 注册中心完成与 Admin Server 的关联了。


使用 Admin Server 监控系统

根据 Spring Boot Admin 官方 Github 上的介绍,Admin Server 监控系统提供了一套完整的可视化方案。基于 Admin Server,健康状态、JVM、内存、Micrometer 的度量、线程、HTTP 跟踪等核心功能都可以通过可视化的 UI 界面进行展示。

监控系统运行时关键指标

注意到 Admin Server 菜单中有一个“Wallboard”,点击该菜单,我们就可以看到一面应用墙,如下图所示:

点击应用墙中的某个应用,我们就能进入针对该应用的监控信息主界面。在该界面的左侧,包含了监控功能的各级目录,如下图所示:

咩有的话,看看你是否

management:endpoints:web:exposure:include: "*"

在图中,我们看到了最重要的“Health”信息,显然,这一信息来自 Spring Boot Actuator 组件的 Health 端点,

在这个界面上继续往下滑动,我们将看到一些与 JVM 相关的监控信息,比如非常有用的线程、垃圾回收、内存状态等数据,如下图所示:


这些 JVM 数据都是通过可视化的方式进行展现,并随着运行时状态的变化而实时更新。

Spring Boot Actuator 中的度量指标 ,而在 Admin Server 中,同样存在一个“Metrics”菜单,展示效果如下图所示:


在“Metrics”菜单中,开发人员可以通过对各种条件进行筛选,然后添加对应的度量指标。比如上图中,我们针对 HTTP 请求中 /actuator/health 端点进行了过滤,从而得到了度量结果。

接着我们一起看看系统环境方面的属性,因为这方面的属性非常之多,所以 Admin Server 也提供了一个过滤器,如下图所示:
在上图中,通过输入“spring.”参数,我们就能获取一系列与该参数相关的环境属性。

日志也是我们监控系统的一个重要途径,在 Admin Server 的“Loggers”菜单中,可以看到该应用程序的所有日志信息,如下图所示:
通过”springcss”关键词对这些日志进行过滤,我们就可以获取 SpringCSS中的日志详细了,图中也显示了每个日志记录器对应的日志级别。

最后,我们来看一下 Admin Server 中的“JVM”菜单,该菜单下存在两个子菜单:“Thread Dump”和“Heap Dump”。

以“Thread Dump”为例,尽管 Actuator 提供了 /threaddump 端点,但开发人员只能获取触发该端点时的 Dump 信息,而 Admin Server 则提供了一个连续性的可视化监控界面,如下图所示:


点击图中的色条,我们就可以获取每一个线程的详细信息了,这里你可以尝试做一些分析。


控制访问安全性

讲到这里,我们会发现 Admin Server 的功能非常强大,而这些功能显然也不应该暴露给所有的开发人员。因此,我们需要控制 Admin Server 的访问安全性。

想做到这一点也非常简单,我们只需要集成 Spring Security 即可。我们在 Spring Boot 应用程序中添加一个对 spring-boot-starter-security 的 Maven 依赖:

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

然后,我们在配置文件中添加如下配置项:

spring:security:user:name: "artisan"password: "artisan123"

重启 Admin Server 后,再次访问 Web 界面时,就需要我们输入用户名和密码了,如下图所示:

SpringBoot - 构建监控体系03_使用 Admin Server 管理 Spring 应用程序相关推荐

  1. SpringBoot - 构建监控体系02_定义度量指标和 Actuator 端点

    文章目录 Pre Actuator 中的度量指标 Micrometer 度量库 Meter接口 计量器类型 如何创建这些计量器 扩展 Metrics 端点 自定义 Metrics 指标 使用 Mete ...

  2. SpringBoot - 构建监控体系01_使用 Actuator 组件实现及扩展系统监控

    文章目录 Pre 引入 Spring Boot Actuator 组件 原生端点 应用更详细的健康状态 如何在现有的监控端点上添加定制化功能 扩展 Actuator 端点 扩展 Info端点 (Inf ...

  3. 2场直播丨从零快速搭建一整套监控体系、Oracle Database Server经典体系结构

    1. 触类旁通– Oracle Database Server经典体系结构 2. 如何从零快速搭建一整套监控体系(日志采集+主机+数据库) 墨天轮直播地址:http://www.modb.pro/ev ...

  4. 三场直播丨达梦DM8数据库体系结构、从零快速搭建一整套监控体系、Oracle Database Server经典体系结构...

    1.  达梦DM8数据库的体系结构介绍 2. 触类旁通– Oracle Database Server经典体系结构 3. 如何从零快速搭建一整套监控体系(日志采集+主机+数据库)

  5. Spring Boot Admin –用于管理Spring Boot应用程序的Admin UI

    作为微服务开发的一部分,我们许多人都将Spring Boot与Spring Cloud功能一起使用. 在微服务领域,我们将有许多Spring Boot应用程序将在相同/不同的主机上运行. 如果将Spr ...

  6. Springboot 系列(十七)迅速使用 Spring Boot Admin 监控你的 Spring Boot 程序,支持异常邮件通知

    点赞再看,动力无限.Hello world : ) 微信搜「 程序猿阿朗 」. 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章. 1. ...

  7. Springboot 系列(十七)迅速使用 Spring Boot Admin 监控你的 Spring Boot 程序

    1. Spring Boot Admin 是什么 Spring Boot Admin 是由 codecentric 组织开发的开源项目,使用 Spring Boot Admin 可以管理和监控你的 S ...

  8. 中小企业监控体系构建实战

    2019独角兽企业重金招聘Python工程师标准>>> 中小企业监控体系构建实战 2015-10-28 赵舜东 高效运维 本文根据高效运维系列微信群「运维讲坛」线上嘉宾分享整理而成. ...

  9. Kubernetes 【监控】1. Metrics Server、Aggregator APIServer和Prometheus监控体系

    文章目录 1. 背景 2. 简介 3. 监控对象类型 4. Metrics Server简介 5. Metrics Server部署 5.1 下载并解压Metrics-Server 5.2 修改Met ...

最新文章

  1. matlab 回退到上一行,对乒乓球回滚的分析与MATLAB模拟
  2. Linux服务器架设笔记-Squid服务器配置
  3. 各种存储分配算法java代码实现_Java实现操作系统中四种动态内存分配算法:BF+NF+WF+FF...
  4. 【二分法】剑指offer:二维数组中的查找
  5. python内存分配失败_关于python:如何避免[Errno 12]无法分配使用子进程模块导致的内存错误...
  6. 搭建迁移训练Slim框架环境
  7. 速读-A3基于注意力机制的神经网络处理器
  8. 被裁的第50天,我终于拿到心仪公司Offer
  9. C语言SM2算法实现(基于GMSSL)
  10. 每个人都应该具备点批判性思维
  11. Android 自定义锁屏(带页面切换)
  12. 百度地图API V2.0 离线版本
  13. kubeadm部署k8s多master节点的高可用集群
  14. solr入门之拼音加汉字方式的搜索建议自动补全的不高效实现
  15. 【高质量编程指南笔记】
  16. poi版本冲突导致连续报错NoSuchMethodError、VerticalAlignment无法转换为short和ClassNotFoundException的解决办法及兼容性问题解决
  17. 人脸识别与美颜算法实战-基于机器学习的人脸识别
  18. 【python】解决给文件写入汉字,中文字符乱码问题
  19. ChatGPT真的会取代程序员吗?
  20. 数据库系统结构、数据库系统的组成

热门文章

  1. android 之使用多线程中的AsyncTask实现下载网络图片资源
  2. 创建自己的内容提供器
  3. 土木工程真的这么可怕吗?
  4. ubuntu百度网盘下载大文件
  5. 文计笔记 4 字符编码与数制
  6. 文巾解题 26. 删除有序数组中的重复项
  7. Java 应用线上问题排查思路、常用工具小结
  8. 高考特长计算机2017,2017年北京理工大学计算机学院申请竞赛获奖与特长生推荐.PDF...
  9. Python3--批量爬取数据之调用有道api进行翻译
  10. QT中使用QSettings保存应用程序配置信息