Spring Boot Admin监控搭建-nacos版本

Posted 大道坦荡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot Admin监控搭建-nacos版本相关的知识,希望对你有一定的参考价值。

Spring Boot Admin介绍

Spring Boot Admin 是github上一款用于Spring Boot 的监控管理的开源项目,通过http直接注册或者通过注册中心注册的方式,实现了Spring Boot应用上的一些常见监控项,具体功能点如下:

  • 显示应用程序的监控状态
  • 应用程序上下线监控
  • 查看 JVM,线程信息
  • 可视化的查看日志以及下载日志文件
  • 动态切换日志级别
  • Http 请求信息跟踪
  • 其他监控点

详细监控项可到githup上去查看

地址:https://github.com/codecentric/spring-boot-admin

快速搭建

本文是基于nacos注册中心配置实现,在开始前需要安装好nacos服务端。

搭建服务:

  1. admin-server 监控服务端
  2. admin-client 被监控的客户端

创建Admin-server应用

添加pom依赖:

<properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <maven.deploy.skip>true</maven.deploy.skip>
    <nacos.version>2.2.4.RELEASE</nacos.version>
    <spring-boot.version>2.2.5.RELEASE</spring-boot.version>
    <spring-boot.admin.version>2.2.2</spring-boot.admin.version>
    <spring-boot-starter-actuator.version>2.2.5.RELEASE</spring-boot-starter-actuator.version>
</properties>

<dependencies>
    <!--监控服务端 -->
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-server</artifactId>
        <version>$spring-boot.admin.version</version>
    </dependency>

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

    <!--nacos注册中心-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>$nacos.version</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
        <version>$spring-boot-starter-actuator.version</version>
    </dependency>
</dependencies>

添加配置

server:
  port: 8012

spring:
  application:
    name: admin-server
  #配置中心
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        service:  $spring.application.name


# 暴露监控端点
management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always
# 日志      
logging:
  file: /application/applogs/admin.log

启动类增加注解

@EnableAdminServer 注解,开启监控服务端的功能

@EnableAdminServer
@SpringBootApplication
public class AdminServerApp 

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


启动后,我们就可以看到

创建Admin-client应用

添加pom依赖

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <maven.deploy.skip>true</maven.deploy.skip>
        <nacos.version>2.2.4.RELEASE</nacos.version>
        <spring-boot.version>2.2.5.RELEASE</spring-boot.version>
        <spring-boot.admin.version>2.3.0</spring-boot.admin.version>
        <spring-boot-starter-actuator.version>2.2.5.RELEASE</spring-boot-starter-actuator.version>
    </properties>


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

        <!--nacos注册中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>$nacos.version</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <version>$spring-boot-starter-actuator.version</version>
        </dependency>
    </dependencies>

client是通过nacos向admin注册的,所以只需要开启nacos注册服务和actuator监控点的服务就可以了,

配置文件

server:
  port: 8013

spring:
  application:
    name: admin-client
  #配置中心
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        service:  $spring.application.name


# 暴露监控端点
management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always

logging:
  file: /application/applogs/admin.log

启动类

@SpringBootApplication
public class ClientApp 

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

最普通的一个springboot应用,启动之后

至此,监控应用已经搭建完成。

设置登录信息

admin默认启动时随机生成秘钥进行验证登录的,我们添加spring security 提供登录验证

admin-server添加依赖

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

增加配置文件

server:
  port: 8012

spring:
  application:
    name: admin-server
  #配置中心
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        service:  $spring.application.name
        metadata:
          user.name: admin
          user.password: 654321
  security:
    user:
      name: admin
      password:  654321

# 暴露监控端点
management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always

logging:
  file: /application/applogs/admin.log

metadata 是向nacos注册时携带用户米密码,以防注册时被权限限制无法获取到数据,增加 security 配置,配置用户名 admin,密码654321

添加拦截配置

@Configuration
public class SecuritySecureConfig extends WebSecurityConfigurerAdapter 

    private final String adminContextPath;

    public SecuritySecureConfig(AdminServerProperties adminServerProperties)
    
        this.adminContextPath = adminServerProperties.getContextPath();
    

    @Override
    protected void configure(HttpSecurity http) throws Exception 

        // 登录成功处理类
        SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
        successHandler.setTargetUrlParameter("redirectTo");
        successHandler.setDefaultTargetUrl(adminContextPath + "/");

        http.authorizeRequests()
                //静态文件允许访问
                .antMatchers(adminContextPath + "/assets/**").permitAll()
                //登录页面允许访问
                .antMatchers(adminContextPath + "/login", "/css/**", "/js/**", "/image/*").permitAll()
                //其他所有请求需要登录
                .anyRequest().authenticated()
                .and()
                //登录页面配置,用于替换security默认页面
                .formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and()
                //登出页面配置,用于替换security默认页面
                .logout().logoutUrl(adminContextPath + "/logout").and()
                .httpBasic().and()
                .csrf()
                .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
                .ignoringAntMatchers(
                        "/instances",
                        "/actuator/**"
                );
    

然后启动admin-server,输入用户名密码登录


以上是关于Spring Boot Admin监控搭建-nacos版本的主要内容,如果未能解决你的问题,请参考以下文章

使用SpringBoot Admin监控SpringCloud微服务

Spring Boot Admin 添加报警提醒和登录验证功能!

SpringBoot技术专题「开发实战系列」一起搭建属于自己的SpringBoot Admin的技术要素

Spring Boot利用 Spring Boot Admin 进行项目监控管理

十springboot 优雅集成spring-boot-admin 实现程序监控

springboot(二十):使用spring-boot-admin对spring-boot服务进行监控