写点什么

Spring Boot Admin 2.1.0 全攻略

发布于: 2021 年 04 月 10 日
Spring Boot Admin 2.1.0 全攻略

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@EnableAdminServerpublic class AdminServerApplication {
public static void main(String[] args) { SpringApplication.run( AdminServerApplication.class, args ); }
}
复制代码

在工程的配置文件 application.yml 中配置程序名和程序的端口,代码如下:

spring:  application:    name: admin-serverserver:  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:8769server:  port: 8768
management: endpoints: web: exposure: include: '*' endpoint: health: show-details: ALWAYS
复制代码

在工程的启动文件如下:

@SpringBootApplicationpublic 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-serverserver:  port: 8761eureka:  client:    service-url:      defaultZone: http://localhost:8761/eureka    register-with-eureka: false    fetch-registry: falsemanagement:  endpoints:    web:      exposure:        include: "*"  endpoint:    health:      show-details: ALWAYS
复制代码


在工程的启动文件 EurekaServerApplication 加上 @EnableEurekaServer 注解开启 Eureka Server.


@SpringBootApplication@EnableEurekaServerpublic 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-serverserver: port: 8769eureka: 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@EnableDiscoveryClientpublic 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-clienteureka: 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: ALWAYSserver: port: 8762

复制代码


在启动类加上 @EnableDiscoveryClie 注解,开启 DiscoveryClient 的功能。

@SpringBootApplication@EnableDiscoveryClientpublic 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,配置如下:


@Configurationpublic 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.comspring.mail.username: miles02spring.mail.password:spring.boot.admin.notify.mail.to: 124746406@qq.com

复制代码


做完以上配置后,当我们已注册的客户端的状态从 UP 变为 OFFLINE 或其他状态,服务端就会自动将电子邮件发送到上面配置的地址。

原文链接:https://juejin.cn/post/6844903757721894920

发布于: 2021 年 04 月 10 日阅读数: 40
用户头像

领取文章中资料添加小助理vx:mxzFAFAFA 2021.02.05 加入

Java架构大数据每天分享干货!

评论

发布
暂无评论
Spring Boot Admin 2.1.0 全攻略