文章目录
- SpringBootAdmin服务端
- SpringBootAdmin安全配置
- SpringBootAdmin客户端接入
- 微服务离线警告
SpringBootAdmin服务端
SpringBoot之中所有的监控操作都是基于Actuator实现处理的,那么在最终实现监控的时候也全部都是通过监控数据来完成操作的,只不过SpringBootAdmin除了Actautor数据之外还可以对SpringCloud之中的具体应用进行一些管理的支持。
1、【microcloud项目】创建一个新的服务监控模块: “micocloud-admin-8000"
2、【microcloud 项目】SpringBootAdmin依然需要通过Nacos抓取所需要的配置项,同时也需要基于组件进行配置,那么修改build.gradle,引入相关的依赖。
denpendencies.gradle
ext.versions = [
admin : '2.3.0', // SpringBootAdmin依赖版本
]
ext.libraries = [
// 以下的配置为SpringBootAdmin服务整合
'spring-boot-admin-starter-server' : "de.codecentric:spring-boot-admin-starter-server:${versions.admin}"
]
build.gradle
project(":microcloud-admin-8000") { // 部门微服务
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
implementation(libraries.'spring-boot-admin-starter-server')
implementation('com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery') {
exclude group: 'com.alibaba.nacos', module: 'nacos-client' // 移除旧版本的Nacos依赖
}
implementation('com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config') {
exclude group: 'com.alibaba.nacos', module: 'nacos-client' // 移除旧版本的Nacos依赖
}
implementation(libraries.'nacos-client') // 引入与当前的Nacos匹配的依赖库
}
}
3、【micocloud-admin-8000子模块】配置application.yml以及 bootstrap.yml文件
application.yml (注意:register-enabled: false # 管理端不注册)
server: # 服务端配置
port: 8000 # 8000端口
spring:
application: # 配置应用信息
name: microcloud.admin # 是微服务的名称
nacos: # Nacos注册中心配置
discovery: # 发现服务
weight: 80
service: ${spring.application.name} # 使用微服务的名称作为注册的服务名称
server-addr: nacos-server:8848 # Nacos服务地址
namespace: 96c23d77-8d08-4648-b750-1217845607ee # 命名空间ID
group: MICROCLOUD_GROUP # 一般建议大写
cluster-name: MuyanCluster # 配置集群名称
register-enabled: false # 管理端不注册
metadata: # 根据自身的需要配置元数据
version: 1.0 # 自定义元数据项
yootk:
security:
config:
jwt:
sign: muyan
issuer: MuyanYootk
secret: www.yootk.com
expire: 100000 # 单位:秒
password:
encrypt:
repeat: 5
salt: www.yootk.com
bootstrap.yml
spring: # Spring配置项
cloud: # SpringCloud配置项
nacos: # Nacos注册中心的配置
config: # gRPC通讯配置
server-addr: nacos-server:8848 # Nacos地址
namespace: 96c23d77-8d08-4648-b750-1217845607ee # 命名空间ID
group: MICROCLOUD_GROUP # 一般建议大写
cluster-name: MuyanCluster # 配置集群名称
4、【microcloud-admin-8000子模块】创建一个应用的启动类
package com.yootk.admin;
import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
@EnableAdminServer // 启用管理服务端
public class StartSpringBootAdmin8000 {
public static void main(String[] args) {
SpringApplication.run(StartSpringBootAdmin8000.class, args);
}
}
5、【本地系统】为了便于服务调用,建议修改本地的 hosts主机配置文件:
127.0.0.1 microcloud-admin
6、【微服务管理控制台】服务启动之后就可以直接访问管理控制台页面: microcloud-admin:8000
此时就可以得到当前自己微服务的运行状态,其他微服务还需要进行一些接入上的处理。
SpringBootAdmin安全配置
在之前已经成功的启动SpringBootAdmin服务端,但是这个服务端现在是所有的使用者都可以进行服务注册操作,那么如果你非要考虑到这种安全机制的话,就可以通过SpringSecurity安全框架进行限制。
1、【microcloud项目】修改 build.gradle配置文件,追加SpringSecurity配置依赖。
project(":microcloud-admin-8000") { // 部门微服务
dependencies {
implementation('org.springframework.boot:spring-boot-starter-security')
implementation("org.springframework.boot:spring-boot-starter-web")
implementation(libraries.'spring-boot-admin-starter-server')
implementation('com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery') {
exclude group: 'com.alibaba.nacos', module: 'nacos-client' // 移除旧版本的Nacos依赖
}
implementation('com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config') {
exclude group: 'com.alibaba.nacos', module: 'nacos-client' // 移除旧版本的Nacos依赖
}
implementation(libraries.'nacos-client') // 引入与当前的Nacos匹配的依赖库
}
}
2、【microcloud-admin-8000子模块】追加SpringSecurity的相关配置类
package com.yootk.admin.config;
import de.codecentric.boot.admin.server.config.AdminServerProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
@Configuration
public class AdminSecurityConfig extends WebSecurityConfigurerAdapter {
private String adminContextPath;
public AdminSecurityConfig(AdminServerProperties adminServerProperties) {
this.adminContextPath = adminServerProperties.getContextPath(); // 上下文的处理路径
}
@Override
protected void configure(HttpSecurity http) throws Exception {
SavedRequestAwareAuthenticationSuccessHandler successHandler =
new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo");
http.authorizeRequests()
.antMatchers(this.adminContextPath + "/assets/**").permitAll()
.antMatchers(this.adminContextPath + "/login").permitAll()
.anyRequest().authenticated()
.and().formLogin().loginPage(this.adminContextPath + "/login")
.successHandler(successHandler)
.and().logout().logoutUrl(this.adminContextPath + "/logout")
.and().httpBasic().and().csrf().disable();
}
}
3、【microcloud-admin-8000子模块】在application.yml里面追加认证信息
spring:
security:
user:
name: muyan
password: yootk
4、【管理控制台】配置完成之后,如果再次访问SpringBootAdmin控制台你会发现需要提供认证信息。
SpringBootAdmin客户端接入
现在所有的服务端已经开发完成了,但是此时并没有客户端进行接入操作,那么下面就可以考虑修改已有微服务进行服务端统一管理注册,本次要修改的微服务︰部门微服务、网关微服务、消费端微服务、Token微服务。
1、【microcloud 项目】修改dependencies.gradle配置文件,添加新的依赖库:
ext.versions = [
admin : '2.3.0', // SpringBootAdmin依赖版本
]
ext.libraries = [
// 以下的配置为SpringBootAdmin服务整合
'spring-boot-admin-starter-server' : "de.codecentric:spring-boot-admin-starter-server:${versions.admin}",
'spring-boot-admin-starter-client' : "de.codecentric:spring-boot-admin-starter-client:${versions.admin}",
]
2、【microcloud项目】修改要接入微服务的依赖库配置:
build.gadle
implementation(libraries.'spring-boot-admin-starter-client')
implementation('org.springframework.boot:spring-boot-starter-actuator')
3、【接入微服务】修改需要接入到SpringBootAdmin中的微服务application.yml配置项,配置Actuator处理
网关微服务 (只有网关微服务有 management.server.port ,其他微服务没有)
server:
port: 9501 # 网关服务的端口
spring:
boot:
admin:
client:
username: muyan
password: yootk
url: http://microcloud-admin:8000/
management:
server:
port: 9090 # Actuator端口
endpoints:
web:
exposure:
include: "*" # 开启全部的监控终端
base-path: /actuator # 访问子路径
其它需要接入到SpringBootAdmin中的微服务
management:
endpoints:
web:
exposure:
include: "*" # 开启全部的监控终端
base-path: /actuator # 访问子路径
4、【接入微服务】需要注意的是,SpringBootAdmin在接入微服务的时候有些地方比较讨厌,例如:有些微服务明明是存活的而且是正常的,它非认为微服务有问题,从而给出了错误的处理
management:
health:
sentinel:
enabled: false # 关闭Sentinel健康检查
endpoints:
web:
exposure:
include: "*" # 开启全部的监控终端
base-path: /actuator # 访问子路径
endpoint:
health:
show-details: always
5、【管理控制台】此时已经开放了Actuator监控端口,所以所有的相关的JVM信息此时是可以直接获取到的。
微服务离线警告
SpringBootAdmin可以进行微服务状态的监控,但是一旦微服务状态发生了更改(例如:实例上线或下线)则应该立即将此状态告诉管理员,于是可以给管理员发送一封邮件。
1、 【microcloud项目】修改build.gradle配置文件,为“microcloud-admin-8000”子模块添加mail依赖库
implementation group: ‘org.springframework.boot’, name: ‘spring-boot-starter-mail’, version: ‘2.5.5’
project(":microcloud-admin-8000") { // 部门微服务
dependencies {
implementation(libraries.'spring-boot-admin-starter-client')
implementation('org.springframework.boot:spring-boot-starter-mail')
implementation('org.springframework.boot:spring-boot-starter-actuator')
implementation('org.springframework.boot:spring-boot-starter-security')
implementation("org.springframework.boot:spring-boot-starter-web")
implementation(libraries.'spring-boot-admin-starter-server')
implementation('com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery') {
exclude group: 'com.alibaba.nacos', module: 'nacos-client' // 移除旧版本的Nacos依赖
}
implementation('com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config') {
exclude group: 'com.alibaba.nacos', module: 'nacos-client' // 移除旧版本的Nacos依赖
}
implementation(libraries.'nacos-client') // 引入与当前的Nacos匹配的依赖库
}
}
2、【microcloud-admin-8000子模块】修改application.yml配置文件,添加mail 的相关配置项。
spring:
mail:
host: smtp.qq.com
username: 202041555@qq.com
password: wxxgmulpexcubcih
boot:
admin:
notify:
mail:
to: 202041666@qq.com
from: 202041555@qq.com
3、【microcloud-admin-8000子模块】创建一个配置类,这个类主要实现警报的通知
package com.yootk.admin.config;
import de.codecentric.boot.admin.server.domain.entities.InstanceRepository;
import de.codecentric.boot.admin.server.notify.CompositeNotifier;
import de.codecentric.boot.admin.server.notify.Notifier;
import de.codecentric.boot.admin.server.notify.RemindingNotifier;
import de.codecentric.boot.admin.server.notify.filter.FilteringNotifier;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import java.beans.BeanProperty;
import java.time.Duration;
import java.util.Collections;
import java.util.List;
@Configuration
public class MicroServiceNotificationConfiguration { // 定义一个警报发送配置
private InstanceRepository instanceRepository; // 存储实例
private ObjectProvider<List<Notifier>> provider; // 警报策略
public MicroServiceNotificationConfiguration(InstanceRepository instanceRepository,
ObjectProvider<List<Notifier>> provider) {
this.instanceRepository = instanceRepository;
this.provider = provider;
}
@Bean
public FilteringNotifier getFilterNotifier() {
CompositeNotifier com = new CompositeNotifier(this.provider.getIfAvailable(Collections::emptyList));
return new FilteringNotifier(com, this.instanceRepository);
}
@Bean
@Primary
public RemindingNotifier remindingNotifier() {
RemindingNotifier notifier = new RemindingNotifier(getFilterNotifier(), this.instanceRepository);
notifier.setReminderPeriod(Duration.ofMinutes(1)); // 每分钟提醒1次
notifier.setCheckReminderInverval(Duration.ofSeconds(10)); // 每10秒检查一次
return notifier;
}
}
所有微服务的实例的状态现在都是可以直接进行警报处理的,但是需要设置好周期。