微服务: 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实现服务监测,我们说到使用 Actuator
组件可以实现对服务的监测,但是这种方式没有管理界面体验很不友好。本篇继续学习关于 Admin 的知识,该组件不仅囊括了 Actuator
的功能,还提供了管理界面,使用起来比较方便。
本篇主要内容,如下:
通过 HTTP 方式集成和使用
spring-boot-admin-server
;如何安全的使用
spring-boot-admin
,这里又包含两个内容:- 如何将
spring-boot-admin-server
结合spring-boot-security
,实现安全管控以及如何配置; - 如何将
spring-boot-admin-client
结合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
,工程结构如下图:
ms-user
和 ms-admin-client
不同点在于:ms-user
使用了 spring-boot-security
模块,而 ms-admin-client
没有使用 spring-boot-security
模块,是一个相对比较简单的 SpringBoot 服务。
1、配置 ms-admin
在该 module 的 properties
文件中,配置如下:
1 | spring.application.name=Admin-Server |
注意:该服务的端口为 8087
。
该 module 的 pom 文件,使用了 spring-boot
版本为 2.2.6.RELEASE
,spring-boot-admin
版本为 2.2.1
,这里一定要注意版本的匹配,否则工程运行会存在各种奇葩问题。这里教大家一个方法,如果你不知道如何匹配版本,直接使用 spring initializr 创建工程,然后下载创建的工程,看一下里面的 pom文件中各个模块的版本号就可以了。
修改一下启动类,增加 @EnableAdminServer
注解,如下:
1 | import de.codecentric.boot.admin.server.config.EnableAdminServer; |
2、配置 ms-admin-client
在该 module 的 properties
文件中,配置如下:
1 | spring.application.name=Admin-Client |
注意:该服务的端口为 8083
。如果 admin-client 和 admin-server 没有部署在同一台服务器,这里的spring.boot.admin.client.url
一定要写上 admin-server 所在服务器的ip地址。
在该 module 的 pom
文件中,引入如下依赖即可,如下:
1 | <!-- springboot admin client --> |
其余的不需要修改任何东西。
3、启动验证
分别启动 ms-admin
、ms-admin-client
,启动成功后,在浏览器中打开 http://localhost:8087
就可以看到如下效果,可以看到 ms-admin-client
被发现了。
点进去,可以看到 ms-admin-client
的运行状况。大家可以自己试试,我就不截图了。
配置带 security 的 Admin-Client
上面我们说了,ms-user
也是一个 Admin-Client,我也希望他能被监控和管理,但是 ms-user
有点特殊它使用了 security 模块,那么如何让他被 Admin-Server 发现呢,我们接着往下看。
PS:ms-user
模块其实是我之前一直在 微服务相关文章 中使用的工程模块,这里只是重构了一下工程结构并且修改了一下名称而已。
因为 ms-user
包含了比较多的内容,其 pom 文件也相对复杂一些,这里粘贴一部分(MySQL和Swagger相关配置就不写了)。
1 | spring.application.name=User-Server |
这里要特别注意, ms-user
使用了security并且设置了用户名和密码,一定要告诉 Admin-Server,否则无法被监控到。也就是说如下的配置必须写:
1 | # 告诉admin-server用户名和密码,否则监控不到 |
紧接着我们启动 ms-user
这个服务,刷新一下浏览器,效果如下图:
可以看到 ms-user
这个服务被如愿以偿的发现了。
Admin-Server 使用 security
在 ms-admin
的 pom 文件中引入 security 模块,如下:
1 | <dependency> |
修改 properties 文件,增加用户名和密码的配置,完整配置如下:
1 | spring.application.name=Admin-Server |
配置完成后,我们分别重新启动一下 ms-admin
、ms-admin-client
这两个服务。
再次打开 localhost:8087
,会出现如下界面:
输入在 properties
文件中配置的用户名和密码,这里我配置的用户名和密码都是 admin
,你也可以配置其他的。
输入之后可以看到如下界面,再次输入上面的用户名和密码即可。
初次进入显示效果如下截图,居然没有发现 ms-admin-client
这个服务。
这是因为没有在客户端配置进入 Admin-Server 的密码,安排上。
在 ms-admin-client
的 properties 中配置,如下:
1 | # ------------------------------------------ |
同理,在 ms-user
的配置文件 properties 中也增加相关的配置即可。
记得继承自 WebSecurityConfigurerAdapter
写一个配置类,可以参考 SpringBootAdminServerApplication 示例代码,不然客户端有可能无法注册成功。
重新启动 ms-admin
服务然后登录进去再启动客户端,就可以看到如下界面:
另外,Admin-Server 还可以集成 spring-boot-starter-mail
模块再简单的配置一下,就可以实现发送邮件的功能,这样服务的运行状态可以及时通知到对应的收件人了。
面朝大海,春暖花开。尚拙能成才,你没有比别人聪明,你只是更加努力罢了~