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: [email protected]
# 收件人,多个中间用,分隔
to: [email protected]
mail:
# 发件人使用的 qq 邮箱服务
host: smtp.qq.com
username: [email protected]
# 授权码不是密码,在 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 测试请求如下:
参考文档:
git 项目:https://github.com/codecentric/spring-boot-admin
官方文档:https://codecentric.github.io/spring-boot-admin/current/#_what_is_spring_boot_admin
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
标签:spring,Admin,Spring,boot,springframework,admin,Boot,org,import From: https://www.cnblogs.com/Y-wee/p/16891599.html