Spring Boot之Admin监控服务
Spring Boot Admin监控服务
Spring Boot Admin(SBA)是一款基于Actuator开发的开源软件:https://github.com/codecentric/spring-boot-admin
,以图形化界面的方式展示Spring Boot应用的配置信息、Beans信息、环境属性、线程信息、JVM状况等。
Spring Boot Admin文档: https://codecentric.github.io/spring-boot-admin/2.3.1/
搭建SBA服务端
搭建一个SBA服务端(Server),其他被监控的Spring Boot应用作为客户端(Client),客户端通过HTTP的方式将自己注册到服务端,以供服务端进行监控服务。
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui</artifactId>
<version>2.3.1</version>
</dependency>
开启Admin监控
在Spring Boot入口类中加入@EnableAdminServer注解开启监控功能
@SpringBootApplication
@EnableAdminServer
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
配置
server:
port: 8888
spring:
application:
name: admin-server
访问控制台
http://localhost:8888/
搭建客户端
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.3.1</version>
</dependency>
配置
# 打开客户端的监控
management:
endpoints:
web:
exposure:
include: '*'
server:
port: 9999
spring:
application:
name: admin-client
boot:
admin:
client:
url: http://localhost:8888 #admin server的地址列表
instance:
service-url: http://127.0.0.1:9999 #当前系统地址
查看控制台
Admin 服务端会自动检查到客户端的变化
页面会展示被监控的服务列表,点击详项目名称会进入此应用的详细监控信息 , 这些信息大多都来自于 Spring Boot Actuator 提供的接口。
提醒功能
SBA提供了强大的提醒功能,能够在发生服务状态变更的时候发出告警。
添加邮件预警
默认情况下对于被检测的应用启动或者停止的时候会触发预警。
添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
配置
spring:
application:
name: admin-server
mail:
# 配置 SMTP 服务器地址
host: smtp.163.com
# 发送者邮箱
username: XXX@163.com
# 配置密码,注意不是真正的密码,而是刚刚申请到的授权码
password: JIZDE33434KZSVOTZ
# 端口号:465或者994
port: 465
protocol: smtps
properties:
mail:
# 表示开启 DEBUG 模式
debug: true
smtp:
socketFactoryClass: javax.net.ssl.SSLSocketFactory
auth: true
starttls:
enable: true
required: true
boot:
admin:
notify:
mail:
from: XXX@163.com
to: XXX@onmicrosoft.com
查看邮件内容
安全保护
admin-server安全保护
添加Spring Security依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
配置用户和密码
spring:
security:
user:
name: admin
password: admin
此时 , 由于admin-server进行了安全认证 , 因此admin-client端也需要配置下 admin-server的账号和密码。
客户端配置
spring:
boot:
admin:
client:
url: http://localhost:8888 #admin server 的地址列表
instance:
service-url: http://127.0.0.1:9999 #当前系统地址
name: client
# admin-server若开启安全保护,则客户端注册到admin-server,需配置 admin-server的账号和密码
password: admin
username: admin
重启客户端,发现控制台有日志警告
WARN 28024 --- [gistrationTask1] d.c.b.a.c.r.ApplicationRegistrator : Failed to register application as Application(name=client, managementUrl=http://127.0.0.1:9999/actuator, healthUrl=http://127.0.0.1:9999/actuator/health, serviceUrl=http://127.0.0.1:9999) at spring-boot-admin ([http://localhost:8888/instances]): 401 : [no body]. Further attempts are logged on DEBUG level
由于admin-client 注册到 admin-server时,admin-server端有个http Basic认证,通过了认证后 admin-client才能注册到 admin-server上。
admin-server禁用安全性
@Configuration
public static class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().permitAll()
.and().csrf().disable();
}
}
admin-client安全保护
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
spring:
application:
name: admin-client
# admin-client 的用户名和密码
security:
user:
name: admin123
password: admin123
boot:
admin:
client:
url: http://localhost:8888 #admin server 的地址列表
# 配置 admin-server的账号和密码
username: admin
password: admin
instance:
service-url: http://127.0.0.1:9999 #当前系统地址
name: client
metadata:
# 这里配置admin-client的账号和密码
user.name: ${spring.security.user.name}
user.password: ${spring.security.user.password}