• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Y-wee
博客园    首页    新随笔    联系   管理     

Spring Boot Admin 入门

Spring Boot Admin 入门

Spring Boot Admin 是一个社区项目,主要用于管理和监控 SpringBoot 应用程序

搭建 Spring Boot Admin 服务器

1、创建 springboot 项目,引入以下依赖:

<!--2.7.7版本没有 @EnableAdminServer 注解-->
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
    <version>2.6.1</version>
</dependency>

spring-boot-admin-starter-server 的版本建议和 spring-boot-starter-parent 的版本保持一致

2、启动类添加注解 @EnableAdminServer,eg:

package com.yl;

import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author YL
 */
@EnableAdminServer
@SpringBootApplication
public class SpringBootAdminTestApplication {

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

}

3、配置文件

server:
  port: 8071

spring:
  application:
    name: admin-server

至此,可以启动项目访问:http://127.0.0.1:8071 进入监控页面

注册 Spring Boot Admin 客户端

1、创建 springboot 项目,引入以下依赖:

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
    <version>2.6.1</version>
</dependency>

2、配置文件

server:
  port: 8091

spring:
  application:
    name: admin-client01
  boot:
    admin:
      client:
        # admin 服务端地址,不配置也可以监控,建议配置
        url: http://127.0.0.1:8071

management:
  endpoint:
    health:
      # 显示健康信息
      show-details: always
  endpoints:
    web:
      exposure:
        # 开放所有端点访问权限
        include: "*"

再次访问监控页面即可看到客户端相关数据

整合 spring security

1、服务端引入以下依赖:

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

2、创建 spring security 配置类

package com.yl.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;

/**
 * security config 配置
 *
 * @author YL
 */
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    private final String adminContextPath;

    public SecurityConfig(AdminServerProperties adminServerProperties) {
        this.adminContextPath = adminServerProperties.getContextPath();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
        successHandler.setTargetUrlParameter("redirectTo");

        http.authorizeRequests()
                .antMatchers(adminContextPath + "/assets/**").permitAll()
                .antMatchers(adminContextPath + "/login").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler)
                .and()
                .logout().logoutUrl(adminContextPath + "/logout")
                .and()
                .httpBasic()
                .and()
                .csrf().disable();
    }

}

3、服务端配置用户名和密码,在 application.yml 配置文件中添加以下配置:

spring:
  security:
    user:
      name: admin
      password: admin123

4、客户端配置用户名和密码,在 application.yml 配置文件中添加以下配置:

spring:
  boot:
    admin:
      client:
        # admin 服务端用户名
        username: admin
        # admin 服务端密码
        password: admin123

如果客户端不配置对应的用户名和密码将不会被服务端监控

再次访问,需要填写用户名和密码登录后才能看到监控数据

邮件配置

客户端离线,出现故障的时候,能发送邮件及时通知

1、服务端引入以下依赖:

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

2、服务端配置邮件相关信息,在 application.yml 配置文件中添加以下配置:

spring:
  boot:
    admin:
      notify:
        mail:
          enabled: true
          # 发件人
          from: 1903838739@qq.com
          # 收件人,多个中间用,分隔
          to: 1903838739@qq.com
  mail:
    # 发件人使用的 qq 邮箱服务
    host: smtp.qq.com
    username: 1903838739@qq.com
    # 授权码不是密码,在 qq 邮箱设置‐账号里面有生成授权码
    password: ghchqentbyzkdbfc

授权码在 qq 邮箱-设置-账户里边 点击按钮可以获取:

配置成功之后,启动服务端,再启动客户端,然后停掉客户端,等待片刻,看是否会有邮件发送,如果收到那么就是配置成功了

日志文件配置

在客户端配置文件添加以下配置:

logging:
  file:
    # 路径可自定义
    name: D:\IdeaProject\sample-boot-application.log
  pattern:
    file: "%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID}){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wEx"

重启客户端即可看到相关日志:

自定义 info 端点信息

info 端点描述了当前应用的基本信息,可以通过两种形式快速配置 info 端点的信息

  • 配置文件形式,在客户端 application.yml 添加如下配置:
management:
  info:
    env:
      # 打开 info 配置
      enabled: true

# info 配置信息
info:
  author: YL
  version: 1.0
  • 编程形式,在客户端增加如下配置类:
package com.yl.config;

import org.springframework.boot.actuate.info.Info;
import org.springframework.boot.actuate.info.InfoContributor;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * Spring Boot Admin info 配置
 *
 * @author YL
 */
@Component
public class InfoConfig implements InfoContributor {

    @Override
    public void contribute(Info.Builder builder) {
        // 添加单个信息
        builder.withDetail("runTime", new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(new Date()));

        Map infoMap = new HashMap(16);
        infoMap.put("buildTime", "2022-11-15");
        // 添加一组信息
        builder.withDetails(infoMap);
    }

}

配置完成后重启客户端,可以看到如下信息:

自定义 Health 端点指标

health 端点描述当前应用的运行健康指标,即应用的运行是否成功,通过编程的形式可以扩展指标信息,eg:

package com.yl.config;

import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.Status;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * Spring Boot Admin 健康信息配置
 *
 * @author YL
 */
@Component
public class HealthConfig extends AbstractHealthIndicator {

    /**
     * 健康检查
     *
     * @param builder
     */
    @Override
    protected void doHealthCheck(Health.Builder builder) {
        boolean condition = false;
        if (condition) {
            // 设置运行状态为启动状态
            builder.status(Status.UP);
            builder.withDetail("runTime", System.currentTimeMillis());

            Map infoMap = new HashMap(16);
            infoMap.put("buildTime", "2022");
            builder.withDetails(infoMap);
        } else {
            // 设置运行状态为不在服务状态
            builder.status(Status.OUT_OF_SERVICE);
            builder.withDetail("server status", "down");
        }
    }

}
  • 健康检查通过时:

  • 健康检查不通过时:

自定义端点

可以根据业务需要自定义端点,方便业务监控,eg:

package com.yl.endpoint;

import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * Spring Boot Admin 自定义端点
 *
 * @author YL
 */
@Component
@Endpoint(id = "myEndpoint", enableByDefault = true)
public class MyEndPoint {

    @ReadOperation
    public Object getMyEndpoint() {
        Map map = new HashMap(3);
        map.put("data1", "001");
        map.put("data2", "002");
        map.put("data3", "003");
        return map;
    }
}

因为自定义端点数据 spirng boot admin 无法预知该如何展示,所以通过界面无法看到此数据,通过HTTP请求路径可以获取到当前端点的信息,但是需要先开启当前端点对外功能,或者设置当前端点为默认开发的端点

postman 测试请求如下:

在应用列表显示版本号

在客户端 pom 文件引入 maven 插件:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>build-info</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

执行 package,生成 target 文件夹,在 target-classes-(META-INF) 下有一个 build-info.properties 文件,该文件记录了项目的版本信息,重启客户端服务,在应用列表可以看到版本号信息:

参考文档:

git 项目:https://github.com/codecentric/spring-boot-admin

官方文档:https://consolelog.gitee.io/docs-spring-boot-admin-docs-chinese/

https://blog.csdn.net/weixin_46666822/article/details/124483078

https://blog.csdn.net/zouliping123456/article/details/121977792

https://blog.csdn.net/qq_41971087/article/details/115623172

https://blog.csdn.net/weixin_54040016/article/details/127364978

记得快乐
posted @ 2022-11-15 10:37  Y-wee  阅读(2456)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3