转载请标明出处:https://www.fangzhipeng.com 本文出自方志朋的博客
Spring Boot Admin 简介
Spring Boot Admin 是一个开源社区项目,用于管理和监控 SpringBoot 应用程序。应用程序作为 Spring Boot Admin Client 向为 Spring Boot Admin Server 注册(通过 HTTP)或使用 SpringCloud 注册中心(例如 Eureka,Consul)发现。UI 是的 AngularJs 应用程序,展示 Spring Boot Admin Client 的 Actuator 端点上的一些监控。常见的功能或者监控如下:
显示健康状况
显示详细信息,例如
JVM 和内存指标
micrometer.io 指标
数据源指标
缓存指标
显示构建信息编号
关注并下载日志文件
查看 jvm 系统和环境属性
查看 Spring Boot 配置属性
支持 Spring Cloud 的 postable / env- 和 / refresh-endpoint
轻松的日志级管理
与 JMX-beans 交互
查看线程转储
查看 http 跟踪
查看 auditevents
查看 http-endpoints
查看计划任务
查看和删除活动会话(使用 spring-session)
查看 Flyway / Liquibase 数据库迁移
下载 heapdump
状态变更通知(通过电子邮件,Slack,Hipchat,……)
状态更改的事件日志(非持久性)
快速开始
创建 Spring Boot Admin Server
本文的所有工程的 Spring Boot 版本为 2.1.0、Spring Cloud 版本为 Finchley.SR2。案例采用 Maven 多 module 形式,父 pom 文件引入以下的依赖(完整的依赖见源码):
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<spring-cloud.version>Finchley.SR2</spring-cloud.version>
在工程 admin-server 引入 admin-server 的起来依赖和 web 的起步依赖,代码如下:
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
然后在工程的启动类 AdminServerApplication 加上 @EnableAdminServer 注解,开启 AdminServer 的功能,代码如下:
@SpringBootApplication
@EnableAdminServer
public class AdminServerApplication {
public static void main(String[] args) {
SpringApplication.run(AdminServerApplication.class, args);
}
}
在工程的配置文件 application.yml 中配置程序名和程序的端口,代码如下:
spring:
application:
name: admin-server
server:
port: 8769
这样 Admin Server 就创建好了。
创建 Spring Boot Admin Client
在 admin-client 工程的 pom 文件引入 admin-client 的起步依赖和 web 的起步依赖,代码如下:
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
在工程的配置文件 application.yml 中配置应用名和端口信息,以及向 admin-server 注册的地址为 http://localhost:8769,最后暴露自己的 actuator 的所有端口信息,具体配置如下:
spring:
application:
name: admin-client
boot:
admin:
client:
url: http://localhost:8769
server:
port: 8768
management:
endpoints:
web:
exposure:
include: ‘*’
endpoint:
health:
show-details: ALWAYS
在工程的启动文件如下:
@SpringBootApplication
public class AdminClientApplication {
public static void main(String[] args) {
SpringApplication.run(AdminClientApplication.class, args);
}
一次启动两个工程,在浏览器上输入 localhost:8769,浏览器显示的界面如下:
查看 wallboard:
点击 wallboard,可以查看 admin-client 具体的信息,比如内存状态信息:
也可以查看 spring bean 的情况:
更多监控信息,自己体验。
Spring boot Admin 结合 SC 注册中心使用
同上一个案例一样,本案例也是使用的是 Spring Boot 版本为 2.1.0、Spring Cloud 版本为 Finchley.SR2。案例采用 Maven 多 module 形式,父 pom 文件引入以下的依赖(完整的依赖见源码),此处省略。
搭建注册中心
注册中心使用 Eureka、使用 Consul 也是可以的,在 eureka-server 工程中的 pom 文件中引入:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
配置 eureka-server 的端口信息,以及 defaultZone 和防止自注册。最后系统暴露 eureka-server 的 actuator 的所有端口。
spring:
application:
name: eureka-server
server:
port: 8761
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
register-with-eureka: false
fetch-registry: false
management:
endpoints:
web:
exposure:
include: “*”
endpoint:
health:
show-details: ALWAYS
在工程的启动文件 EurekaServerApplication 加上 @EnableEurekaServer 注解开启 Eureka Server.
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
eureka-server 搭建完毕。
搭建 admin-server
在 admin-server 工程的 pom 文件引入 admin-server 的起步依赖、web 的起步依赖、eureka-client 的起步依赖,如下:
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
然后配置 admin-server,应用名、端口信息。并向注册中心注册,注册地址为 http://localhost:8761,最后将 actuator 的所有端口暴露出来,配置如下:
spring:
application:
name: admin-server
server:
port: 8769
eureka:
client:
registryFetchIntervalSeconds: 5
service-url:
defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/
instance:
leaseRenewalIntervalInSeconds: 10
health-check-url-path: /actuator/health
management:
endpoints:
web:
exposure:
include: “*”
endpoint:
health:
show-details: ALWAYS
在工程的启动类 AdminServerApplication 加上 @EnableAdminServer 注解,开启 admin server 的功能,加上 @EnableDiscoveryClient 注解开启 eurke client 的功能。
@SpringBootApplication
@EnableAdminServer
@EnableDiscoveryClient
public class AdminServerApplication {
public static void main(String[] args) {
SpringApplication.run(AdminServerApplication.class, args);
}
}
搭建 admin-client
在 admin-client 的 pom 文件引入以下的依赖,由于 2.1.0 采用 webflux,引入 webflux 的起步依赖,引入 eureka-client 的起步依赖,并引用 actuator 的起步依赖如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
在工程的配置文件配置应用名、端口、向注册中心注册的地址,以及暴露 actuator 的所有端口。
spring:
application:
name: admin-client
eureka:
instance:
leaseRenewalIntervalInSeconds: 10
health-check-url-path: /actuator/health
client:
registryFetchIntervalSeconds: 5
service-url:
defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/
management:
endpoints:
web:
exposure:
include: “*”
endpoint:
health:
show-details: ALWAYS
server:
port: 8762
在启动类加上 @EnableDiscoveryClie 注解,开启 DiscoveryClient 的功能。
@SpringBootApplication
@EnableDiscoveryClient
public class AdminClientApplication {
public static void main(String[] args) {
SpringApplication.run(AdminClientApplication.class, args);
}
}
一次启动三个工程,在浏览器上访问 localhost:8769,浏览器会显示和上一小节一样的界面。
集成 spring security
在 2.1.0 版本中去掉了 hystrix dashboard,登录界面默认集成到了 spring security 模块,只要加上 spring security 就集成了登录模块。
只需要改变下 admin-server 工程,需要在 admin-server 工程的 pom 文件引入以下的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
在 admin-server 工的配置文件 application.yml 中配置 spring security 的用户名和密码,这时需要在服务注册时带上 metadata-map 的信息,如下:
spring:
security:
user:
name: “admin”
password: “admin”
eureka:
instance:
metadata-map:
user.name: ${spring.security.user.name}
user.password: ${spring.security.user.password}
写一个配置类 SecuritySecureConfig 继承 WebSecurityConfigurerAdapter,配置如下:
@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 {
// @formatter:off
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();
// @formatter:on
}
}
重启启动工程,在浏览器上访问:http://localhost:8769/,会被重定向到登录界面,登录的用户名和密码为配置文件中配置的,分别为 admin 和 admin,界面显示如下:
集成邮箱报警功能
在 spring boot admin 中,也可以集成邮箱报警功能,比如服务不健康了、下线了,都可以给指定邮箱发送邮件。集成非常简单,只需要改造下 admin-server 即可:
在 admin-server 工程 Pom 文件,加上 mail 的起步依赖,代码如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
在配置文件 application.yml 文件中,需要配置邮件相关的配置,如下:
spring.mail.host: smtp.163.com
spring.mail.username: miles02
spring.mail.password:
spring.boot.admin.notify.mail.to: 124746406@qq.com
做完以上配置后,当我们已注册的客户端的状态从 UP 变为 OFFLINE 或其他状态,服务端就会自动将电子邮件发送到上面配置的地址。
源码下载
快速开始:https://github.com/forezp/Spr…
和 spring cloud 结合:https://github.com/forezp/Spr…
参考资料
http://codecentric.github.io/…
https://github.com/codecentri…
更多阅读
史上最简单的 SpringCloud 教程汇总
SpringBoot 教程汇总
Java 面试题系列汇总 <div>
<p align=”center”>
<img src=”https://www.fangzhipeng.com/img/avatar.jpg” width=”258″ height=”258″/>
<br>
扫一扫,支持下作者吧
</p>
<p align=”center” style=”margin-top: 15px; font-size: 11px;color: #cc0000;”>
<strong>(转载本站文章请注明作者和出处 <a href=”https://www.fangzhipeng.com”> 方志朋的博客 </a>)</strong>
</p>
</div>