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;
    }
}

在这里插入图片描述
所有微服务的实例的状态现在都是可以直接进行警报处理的,但是需要设置好周期。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AloneDrifters

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值