Skip to content

1.认识 SpringBoot Admin 组件

介绍:Spring Boot 有一个非常好用的监控和管理的源软件,这个软件就是 Spring Boot Admin。

该软件能够将 Actuator 中的信息进行界面化的展示,也可以监控所有 Spring Boot 应用的健康状况,提供实时警报功能。

主要的功能点有

  • 显示应用程序的监控状态
  • 应用程序上下线监控
  • 查看 JVM,线程信息
  • 可视化的查看日志以及下载日志文件
  • 动态切换日志级别
  • Http 请求信息跟踪
  • 其他功能点击 https://github.com/codecentric/spring-boot-admin 更多了解 Spring-boot-admin。

单体 or 分布式服务集成

SpringBoot Admin 分为服务端(spring-boot-admin-server)和客户端(spring-boot-admin-client),服务端

和客户端之间采用 http 通讯方式实现数据交互;

单体项目中需要整合 spring-boot-admin-client 才能让应用被监控。

在 SpringCloud 项目中,spring-boot-admin-server 是直接从注册中心抓取应用信息不需要每个微服务应用整合 spring-boot-admin-client就可以实现应用的管理和监控。

搭建服务流程说明

  • admin-server admin 监控服务
  • admin-order amdin 客户端服务

2.实战案例:SpringCloud 项目集成 SpringBoot Admin

2.1、分布式下监控图示

在分布式中,我们需要单独创建一个 admin-server 服务,若是其想要获取到所有的服务实例信息,那么我们就需要将其注册到注册中心中即可获取到所有的服务信息。

那么此时 admin 服务如何检测各个实例呢?

  • 那么在针对想要被监控的服务中引入依赖 spring-boot-starter-actuator,并且添加 management 的 yaml 配置。

img

2.2、搭建 admin-server 服务

当前服务环境:SpringBoot:2.3.12.RELEASE、spring-cloud:Hoxton.SR12、spring-boot-admin:2.3.0

img

添加 spring-boot-admin-starter-server 依赖以及对应 eureka client 依赖:

xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.changlu</groupId>
    <artifactId>admin-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>admin-server</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
        <spring-boot-admin.version>2.3.0</spring-boot-admin.version>
        <spring-cloud.version>Hoxton.SR12</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--    admin-server依赖    -->
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-server</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>de.codecentric</groupId>
                <artifactId>spring-boot-admin-dependencies</artifactId>
                <version>${spring-boot-admin.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

配置文件 application.yaml:

yml
server:
  port: 10086

spring:
  application:
    name: admin-server

eureka:
  client:
    service-url:
      defaultZone: localhost:8761/eureka
  instance:
    hostname: localhost
    instance-id: ${
   eureka.instance.hostname}:${
   spring.application.name}:${
   server.port}

# 管理配置
management:
  endpoints:
    web:
      exposure:
        include: '*'  # 暴露所有的监控端点 # 如果一个服务需要被监控 那么就要将自身的一些情况(一些信息接口)暴露出去

img

  • 默认是 health 以及 info 级别,*表示暴露所有的监控信息。

在启动中添加一个 eureka client 注册、admin-server 服务开启:

java
@SpringBootApplication
@EnableEurekaClient
@EnableAdminServer  //开启admin服务
public class AdminServerApplication {


    public static void main(String[] args) {

        SpringApplication.run(AdminServerApplication.class, args);
    }

}

测试管理服务

我们运行一个 eureka 注册中心、两个服务以及一个 admin 管理服务(也就是 admin-server):

img

额外说明:对于 eureka 以及 user、order 都是使用的之前章节案例如下:

img

接着我来访问监控平台:localhost:10086/applications

可以看到此时我们能够查看到 eureka 注册中心中的服务信息:打 x 的表示该服务并没有配置 admin-client,自然就无法令 server 与 client 进行交互以及查看信息了。

img

如何查看当前 admin-server 服务的一系列运行状态及信息呢?

点击应用墙:

img

亮着的表示我们能够查看的实例:

img

我们来点击``admin-server`服务来进行查看:在面板中我们可以查看对应的线程、内存相关信息,包括左边的性能、环境、配置属性等等,还有 jvm 等。

img

2.3、实现 admin-server 监控 User 服务

在 2.2 中我们可以看到目前只能够查看 admin-server 本身自己的服务信息,对于其他如订单 order、user 服务都是不行的,那么我们如何能够对其进行监控呢?

  • 我们之前 admin-server 注册到 eureka 中,可以拿到所有的服务实例信息,那么现在需要做的就是如何让 admin-server 与各个服务之间进行交互。

方案:自己搭建的服务来集成 spring-boot-starter-actuator,然后配置下即可。

操作如下

img

可以看到当前服务包含有 user 以及 order,那么如何让 admin-server 来进行监控呢?

我们来对 user 服务进行监控!其实很简单,只需要两个步骤:

① 引入依赖。

② 进行配置。

img

① 引入依赖

xml
<!--  暴露自身检查端点 endPoints 一个依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

② 配置文件:application.yaml 来添加管理配置

yml
# 添加监控
management:
  endpoints:
    web:
      exposure:
        include: "*"

接着我们来重启 user 服务。

接着我们回到 admin-server 服务监控大屏,可以看到此时 USER-SERVICE 实例已经亮了:

img

此时我们也来查看一下,果然也可以监控其相应的信息。

额外:集成 spring-boot-starter-actuator 的好处

上面案例中对 user 服务进行了监控,集成了对应的依赖,还有一个好处就是我们能够看到当前服务中所有对外提供的服务接口

img

好处对于一些引入进来的依赖包,若是通过文件去查看暴露的一些接口会很麻烦,集成 actuator 可以将所有引入依赖 jar 包中的一些接口都给你暴露,弥补了原本只能进行全局搜索的问题。

注意点:

如何将某个应用服务被 admin 来进行监控?引入 actuator 依赖,然后进行配置,即可在 admin 中也进行获取!

推荐文章:

[1]. Spring Boot Admin 介绍及使用

[2]. SpringBoot Admin 的简单使用 包含 admin-client 端的安全配置,集成 springSecurity