乐趣区

Java-Spring-Cloud-实战之路添加一个SpringBootAdmin监控

0. 前言

在之前的几章中,我们先搭建了一个项目骨架,又搭建了一个使用 nacos 的 gateway 网关项目,网关项目中并没有配置太多的东西。现在我们就接着搭建在 Spring Cloud 微服务中另一个重要的项目 – Spring boot admin.

1. Spring Boot Admin 介绍

Spring Boot Admin 用来监控基于 Spring Boot 的应用,在 Spring Boot Actuator 的基础上提供了简洁的可视化 Web UI。Spring Boot Admin 提供了以下功能:

  • 显示应用的健康状态
  • 显示应用的细节内容:JVM 和内存信息,micrometer 信息,数据源信息,缓存信息等
  • 显示 编译版本
  • 查看和下载日志
  • 查看 jvm 参数和环境变量值
  • 查看 Spring Boot 项目配置
  • 显示 thread dump
  • 显示 http-traces

……

等一系列内容。

2. 创建一个 Spring Boot Admin 项目

那么,我们就来创建一个 Spring Boot Admin 项目吧。

2.1 创建 Spring Boot Admin 服务端

在 manager 目录下,创建一个 monitor 目录,并在 monitor 目录下创建一个 pom.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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <artifactId>monitor</artifactId>
    <version>${revision}</version>
    <packaging>jar</packaging>
    <parent>
        <artifactId>manager</artifactId>
        <groupId>club.attachie</groupId>
        <version>${revision}</version>
    </parent>

</project>

在 manager/pom.xml 注册我们新建的项目模块:

<modules>
    <module>gateway</module>
    <module>monitor</module>
</modules>

在 monitor 创建如下目录:

.
├── pom.xml
└── src
    └── main
        ├── java
        └── resources

在根目录的 pom.xml 添加 Spring Boot Admin 依赖:

先添加 spring-boot-admin 版本号变量:

<spring-boot-admin.version>2.2.3</spring-boot-admin.version>

并在 dependencyManagement > dependencies 下添加:

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
    <version>${spring-boot-admin.version}</version>
</dependency>

在 monitor/pom.xml 文件中添加:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-server</artifactId>
    </dependency>
</dependencies>

运行

mvn clean install

检查并刷 mvn 引用缓存。

创建 MonitorApplication 类:

package club.attachie.nature.monitor;

import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

启动后能看到如下界面:

3 与网关服务进行互通

在上一篇中,我们添加了 Spring Cloud Gateway 项目,到目前为止两个项目之间完全割裂没有关联。在这一节,我们在两者之间建立关联。也就是说,将 gateway 项目引入 Spring Admin Boot 监听。

在 manager/gateway 的 pom.xml 文件中加入如下引用:

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

然后修改 gateway 项目的启动端口,在 resources/bootstrap.yml 添加:

server:
  port: 8070

在 monitor 中加入 nacos 引用:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>      
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

修改 MonitorApplication 为:

package club.attachie.nature.monitor;

import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.context.config.annotation.RefreshScope;

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

创建 monitor 项目的 bootsrap.yml:

spring:
  application:
    name: monitor
  
  cloud:
      nacos:
      discovery:
        server-addr: 127.0.0.1:8848

关于这里的配置 在上一篇 中有个错误,应该是 discovery > server-addr,不是 config > server-addr。两者有区别,discovery 表示设置 nacos 为服务发现中心,config 表示 nacos 为配置中心。

启动 gateway 项目和 monitor 项目查看效果,访问 8080 端口:

可以看到两个应用可以被发现,如果没有设置 monitor 项目把 nacos 当做服务发现中心,将无法获取到具体在线的应用。点击 gateway 进去后可以查看到:

4. 总结

我们搭建了一个 Spring Boot Admin 项目作为一个监控系统,后续会在这里添加更多的内容。

更多内容烦请关注我的博客《高先生小屋》

退出移动版