SpringBoot Admin (一)基本介绍与配置集成

SpringBoot Admin
placeholder image
admin 发布于:2023-01-28 16:25:16
阅读:loading

基本说明

SpringBoot Admin是对Spring Boot应用程序提供的管理UI界面集成,区分Server和Client端,使用Http接口对外提供监控参数输出。提供的管理功能丰富多样,如Insights、日志配置、JVM、映射、缓存等多个功能的接入,同时对于注册的服务状态可以适时的呈现,详细展示如下:

Insights

细节:信息、健康、元数据、进程、线程、垃圾回收、内存: Heap、内存: Non heap;

性能:给指定服务增加监控状态指标;

环境:输出application.yml和Jvm启动时包含的参数,如:java.home、user.dir等;

类:输出Spring Bean的实例名称和类型;

配置属性:spring.boot.admin、inetUtilsProperties、serviceInstanceConverter、management.endpoints、spring.resources等较多的内置属性;

计划任务:输出系统内部的定时任务(本站有定制改造);

日志配置

日志文件:动态滚动日志文件数据内容,可在线查看日志;

日志配置:展示系统的日志输出器,可筛选日志类和设置日志输出级别;

JVM

线程转储、内存转储,太高端,值得自行查看和深入求证;

缓存

在线查看使用的缓存组件和缓存数据,可清除缓存;

代码集成

maven坐标

需要依赖spring-boot-starter-web、spring-boot-admin-starter-server、spring-boot-starter-security。

application.yaml配置文件

server:
  port: 8010
  servlet:
    context-path: /admin

spring:
  #应用名称
  application:
    name: chendd-admin-server
  cloud:
    #nacos 客户端
    nacos:
      discovery:
        #是否启用
        enabled: true
        #服务端地址(集群化部署参数)
        server-addr: 192.168.244.134:8848,192.168.244.138:8848,192.168.244.139:8848
        #命名空间
        namespace: chendd-SpringCloud-Hello-World-NamespaceId
        group: DEFAULT_GROUP
        metadata:
          management:
            context-path: ${server.servlet.context-path}/actuator
          user.name: admin
          user.password: 123456

  security:
    user:
      name: admin
      password: 123456

  #thymeleaf 检查设置
  thymeleaf:
    check-template: false
    check-template-location: false

#监控地址
management:
  endpoints:
    web:
      base-path: /actuator
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always

关键参数说明

spring.cloud.nacos是集成Naocs注册中心,将当前服务注册值注册中心,可以从注册中心中得到其它注册过的服务,无需使被集成的应用与Admin Server直连;

spring.cloud.nacos.discovery.metadata是对外保留服务监控的接口地址,user信息则是Admin服务开启的登录账户;

spring.security是Spring Security 安全认证模块的用户名和密码,启用用户登录;

management是监控参数设置;

启动类

需要增加@SpringBootApplication、@EnableAdminServer;

访问授权

package cn.chendd;

import de.codecentric.boot.admin.server.config.AdminServerProperties;
import org.springframework.beans.factory.annotation.Autowired;
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;
import org.springframework.security.web.csrf.CookieCsrfTokenRepository;

/**
 * Spring Boot Admin 安全验证
 *
 * @author chendd
 * @date 2022/10/18 17:03
 */
@Configuration
public class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {

    private final AdminServerProperties serverProperties;

    public SecurityPermitAllConfig(@Autowired AdminServerProperties serverProperties) {
        this.serverProperties = serverProperties;
    }

    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        ///所有地址不需要权限访问,即不需要登录和登出
        /*httpSecurity.authorizeRequests().anyRequest().permitAll();*/
        SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
        successHandler.setTargetUrlParameter("redirectTo");
        successHandler.setDefaultTargetUrl(serverProperties.path("/"));

        httpSecurity.authorizeRequests()
                //配置所有的静态资源和登录地址运行免登陆访问
                .antMatchers(serverProperties.path("/assets/**")).permitAll()
                .antMatchers(serverProperties.path("/login")).permitAll()
                .antMatchers(serverProperties.path("/instances/**")).permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin().loginPage(serverProperties.path("/login")).successHandler(successHandler)
                .and().logout().logoutUrl(serverProperties.path("/logout"))
                .and().httpBasic().and().csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
                .ignoringAntMatchers(
                        serverProperties.path("/instances"),
                        serverProperties.path("/actuator/**")
                );
    }

}

效果预览

image.png

(登录界面)

image.png

(应用列表)

image.png

(细节预览)

image.png

(环境预览)

image.png

(计划任务)


特别说明

(1)SpringBoot Admin模块具备通知提醒的功能,比如某个服务的状态发生变化时,可以发送邮件提醒(起初并未配置此功能,此处先就略过吧);

(2)计划任务(上图有)列表的功能本站有修改增强,值得一看;

(3)日志配置模块有日志文件的功能,改功能可以滚动输出日志文件内容,本站同样进行了分析实现,值得一看;

(4)项目工程源码见:源码下载.zip; 

(5)在线gif图片近2M,不给出在线预览了,可以下载后本地查看:https://www.chendd.cn/file/ueditor/jsp/upload/image/20230128/1674914371771048276.gif

(6)若开启了密码模式,在敲地址访问需要登录的页面时也会弹出密码输入页面,参考如下:

image.png


 点赞


 发表评论

当前回复:作者

 评论列表


留言区