转载

微服务: Admin与服务监测和管理

Spring Boot Admin 并不是 Spring Boot 官方出品的,开源地址 SpringBoot Admin ,伴随着 SpringBoot 的更新, Spring Boot Admin 也做了相对应的更新。Spring Boot 推出 2.X 版本时, Spring Boot Admin 也及时进行了更新。本篇使用的就是 Spring Boot Admin 2.2.1版本,最新版本是 2.2.2 。 Spring Boot Admin 分为 client 和 server 端, server 端一般独立为一个服务, client 可以是你已经开发完成的服务,也可以是你即将要开发的服务。

对 Spring Boot Admin 2.x 版本的具体的更新内容和变化感兴趣的朋友,可以参考 changes-2.x.adoc 文档,这里不再赘述。

继上一篇 微服务-Actuator实现服务监测 ,本篇继续学习微服务的管理知识。本篇主要内容,如下:

  • 通过 HTTP 方式集成和使用 spring-boot-admin-server ;
  • 结合 spring-boot-admin-client 和 spring-boot-security 如何配置且被注册到 spring-boot-admin-server ;
  • 如何将 spring-boot-admin-server 结合 spring-boot-security ,实现安全管控;

完整工程代码,请移步 Github 下载。后续会结合 spring-cloud 中的 Eureka 组件再次学习和分享使用 spring-boot-admin 。

配置 Admin Server

为了学习和验证 Spring Boot Admin 的使用,我创建了一个 Admin-Server 工程即 ms-admin ,创建了两个 Admin-Client 工程即 ms-user 和 ms-admin-client ,工程结构如下图:

微服务: Admin与服务监测和管理

ms-user 和 ms-admin-client 不同点在于: ms-user 使用了 spring-boot-security 模块,而 ms-admin-client 没有使用 spring-boot-security 模块,是一个相对比较简单的 SpringBoot 服务。

1、配置 ms-admin

在该 module 的 properties 文件中,配置如下:

spring.application.name=Admin-Server
# ---------------------------------
# 配置该服务的独立端口
# ---------------------------------
server.port=8087

注意:该服务的端口为 8087 。

该 module 的 pom 文件,使用了 spring-boot 版本为 2.2.6.RELEASE , spring-boot-admin 版本为 2.2.1 ,这里一定要注意版本的匹配,否则工程运行会存在各种奇葩问题。这里教大家一个方法,如果你不知道如何匹配版本,直接使用 spring initializr 创建工程,然后下载创建的工程,看一下里面的 pom文件中各个模块的版本号就可以了。

修改一下启动类,增加 @EnableAdminServer 注解,如下:

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

@EnableAdminServer
@SpringBootApplication
public class MZAdminApplication{

    public static void main(String[] args){
        SpringApplication.run(MZAdminApplication.class, args);
    }
}

2、配置 ms-admin-client

在该 module 的 properties 文件中,配置如下:

spring.application.name=Admin-Client
server.port=8083

# ------------------------
# Actuator config
# ------------------------
# 可以访问任意控制点
management.endpoints.web.exposure.include=*

# ------------------------------------------
# 配置 spring boot admin
# ------------------------------------------
spring.boot.admin.client.url=http://localhost:8087
management.endpoint.health.show-details=always

注意:该服务的端口为 8083 。如果 admin-client 和 admin-server 没有部署在同一台服务器,这里的 spring.boot.admin.client.url 一定要写上 admin-server 所在服务器的ip地址。

在该 module 的 pom 文件中,引入如下依赖即可,如下:

<!-- springboot admin client -->
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-client</artifactId>
    <version>2.2.1</version>
</dependency>

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

其余的不需要修改任何东西。

3、启动验证

分别启动 ms-admin 、 ms-admin-client ,启动成功后,在浏览器中打开 http://localhost:8087 就可以看到如下效果,可以看到 ms-admin-client 被发现了。

微服务: Admin与服务监测和管理

点进去,可以看到 ms-admin-client 的运行状况。大家可以自己试试,我就不截图了。

配置带 security 的 Admin-Client

上面我们说了, ms-user 也是一个 Admin-Client,我也希望他能被监控和管理,但是 ms-user 有点特殊它使用了 security 模块,那么如何让他被 Admin-Server 发现呢,我们接着往下看。

PS: ms-user 模块其实是我之前一直在微服务相关文章 中使用的工程模块,这里只是重构了一下工程结构并且修改了一下名称而已。

因为 ms-user 包含了比较多的内容,其 pom 文件也相对复杂一些,这里粘贴一部分(MySQL和Swagger相关配置就不写了)。

spring.application.name=User-Server

# ------------------------
# Actuator config
# ------------------------
# 可以访问任意控制点
management.endpoints.web.exposure.include=*
# 配置独立的端口
management.server.port=1012
# 自定义访问控制点的路径
management.endpoints.web.base-path=/monitor
management.endpoint.shutdown.enabled=true

# -----------------------------------------------
# Spring Security Default user name and password
# -----------------------------------------------
spring.security.user.name=admin
spring.security.user.password=admin
spring.security.user.roles=ACTUATOR_ADMIN

# ------------------------------------------
# 配置 spring boot admin
# ------------------------------------------
spring.boot.admin.client.url=http://localhost:8087
management.endpoint.health.show-details=always
# 告诉admin-server用户名和密码,否则监控不到
spring.boot.admin.client.instance.metadata.user.name=${spring.security.user.name}
spring.boot.admin.client.instance.metadata.user.password=${spring.security.user.password}

这里要特别注意, ms-user 使用了security并且设置了用户名和密码,一定要告诉 Admin-Server,否则无法被监控到。也就是说如下的配置必须写:

# 告诉admin-server用户名和密码,否则监控不到
spring.boot.admin.client.instance.metadata.user.name=${spring.security.user.name}
spring.boot.admin.client.instance.metadata.user.password=${spring.security.user.password}

紧接着我们启动 ms-user 这个服务,刷新一下浏览器,效果如下图:

微服务: Admin与服务监测和管理

可以看到 ms-user 这个服务被如愿以偿的发现了。

Admin-Server 使用 security

在 ms-admin 的 pom 文件中引入 security 模块,如下:

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

修改 properties 文件,增加用户名和密码的配置,完整配置如下:

spring.application.name=Admin-Server
# ---------------------------------
# 配置该服务的独立端口
# ---------------------------------
server.port=8087

# ---------------------------------
# security 配置
# ---------------------------------
spring.security.user.name=admin
spring.security.user.password=admin

配置完成后,我们分别重新启动一下 ms-admin 、 ms-admin-client 这两个服务。

再次打开 localhost:8087 ,会出现如下界面:

微服务: Admin与服务监测和管理

输入在 properties 文件中配置的用户名和密码,这里我配置的用户名和密码都是 admin ,你也可以配置其他的。

输入之后可以看到如下界面,再次输入上面的用户名和密码即可。

微服务: Admin与服务监测和管理

初次进入显示效果如下截图,居然没有发现 ms-admin-client 这个服务。

微服务: Admin与服务监测和管理

这是因为没有在客户端配置进入 Admin-Server 的密码,安排上。

在 ms-admin-client 的 properties 中配置,如下:

# ------------------------------------------
# 配置 spring boot admin
# ------------------------------------------
spring.boot.admin.client.url=http://localhost:8087
management.endpoint.health.show-details=always
# 配置 admin server 的用户名和密码,否则注册不上
spring.boot.admin.client.username=admin
spring.boot.admin.client.password=admin

同理,在 ms-user 的配置文件 properties 中也增加相关的配置即可。

重新启动服务,就可以看到如下界面:

微服务: Admin与服务监测和管理

另外,Admin-Server 还可以集成 spring-boot-starter-mail 模块再简单的配置一下,就可以实现发送邮件的功能,这样服务的运行状态可以及时通知到对应的收件人了。

面朝大海,春暖花开。尚拙能成才,你没有比别人聪明,你只是更加努力罢了~

微服务: Admin与服务监测和管理

原文  http://www.veryitman.com/2020/05/03/微服务-Admin与服务监测和管理/
正文到此结束
Loading...