简介
Spring Boot Admin 用于管理和监控一个或者多个Spring Boot 程序。 Spring Boot Admin 分
为 Server 端和 Client 端, Client 端可以通过 Http 向 Server 端注册,也可以结合 Spring Cloud
的服务注册组件 Eureka 进行注册。 Spring Boot Admin 提供了用 AngularJs 编写的 Ul 界面,用
于管理和监控。其中监控内容包括 Spring Boot 的监控组件 Actuator 的各个 Http 节点,也支持
更高级的功能,包括 Turbine 、 Jmx 、 Loglevel 等。
本文以案例的形式来讲解 Spring Boot Admin , 主要包括以下的内容。
- 使用 Spring Boot Admin 监控 Spring Cloud 微服务 。
- Spring Boot Adm in 集成 Turbine,聚合监控微服务系统中熔断器的状况。
- Spring Boot Admin 集成 Security 安全登录界面。
使用SpringBootAdmin来监控SpringCloud微服务
本案例需要使用 3 个工程,分别为服务注册中心 Eureka Server、服务客户端 Eureka Client和 Spring Boot Admin Server。本案例是一个 Maven 多 Module 的工程,需要创建一个主 Maven工程,主 Maven 工程指定了 Spring Boot 版本为 2.0.3.RELEASE, Spring Cloud 版本为 Finchley.RELEASE。其中 Eureka Server 的端口号为 8761
构建maven聚合工程
- 创建父工程
- 修改pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tinckay</groupId>
<artifactId>sc-f-chapter14</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>sc-f-chapter14</name>
<description>Demo project for Spring Boot Security</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<modules>
<module>eureka-server</module>
<module>admin-server</module>
<module>admin-client</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
构建Eureka Server
- 在父工程下面创建一个maven project命名为eureka-server,创建完成后修改pom.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tinckay</groupId>
<artifactId>eureka-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>eureka-server</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.tinckay</groupId>
<artifactId>sc-f-chapter14</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
</project>
- 修改properties.yml文件
server:
port: 8761
spring:
application:
name: eurka-server
eureka:
server:
# 测试时关闭自我保护机制,保证不可用服务及时踢出,默认为true,建议生产环境启动,测试环境关闭
#enable-self-preservation: false
# 启用主动失效,并且每次主动失效检测间隔为5s
eviction-interval-timer-in-ms: 5000
#eureka server刷新readCacheMap的时间,注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上,默认30s
response-cache-update-interval-ms: 10000
#eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。
#由于启用了evict其实就用不太上改这个配置了,默认180s
response-cache-auto-expiration-in-seconds: 180
instance:
hostname: 127.0.0.1
client:
registerWithEureka: false
fetch-registry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
- 在Application启动类上加上@EnableEurekaServer注解
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
构建Admin Server
- 创建admin-server工程
然后Next,Finish创建好工程。
在主 Maven 工程下创建一个 Module 工程,取名为 admin-server。程作为 Spring Boot Admin
Server 工程 ,用 于对微服务系统进行监控和管理。首先 , 在 admin-server 工程的 porn 文件引入
相关的依赖,包捐继承了主 Maven 的 porn 文件、 Spring Boot Admin Server 功能的两个依赖
spring-boot-admin-server 和 spring-boot-admin-server-ui 、 ureka Client 的起步依赖 spring-cloudstarter-eureka 、 Actuator 的起步依赖 spring-boot-starter-actuator。最后,在管理界面中需要与JMX-Beans 进行交互,在 porn 文件中引入 Jolokia 的依赖 。 porn 件的依赖代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<name>admin-server</name>
<description>Demo project for Spring Boot</description>
<groupId>com.tinckay</groupId>
<artifactId>admin-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>com.tinckay</groupId>
<artifactId>sc-f-chapter14</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui</artifactId>
<version>2.0.3</version>
</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>
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-core</artifactId>
</dependency>
</dependencies>
</project>
在 admin-server 工程的配置文件 application.yml 服务注册地址为http://localhost:876l/eureka/,服务的端口号为 5000 。 由于 Spring Boot 在 1.5 版本之后, Actuator 的所有 API 接口默认开启了安全验证。为了讲解方便,在本案例中关闭安全验证,即将 management.security.enabled改为 false 。日志的输出路径为“ logs/boot-admin-sample.log ”。 Spring Boot Admin 默认开启env , metrics ,dump,jolokia 和 info 等节点。配置代码如下,更多配置可以查阅官方文档http://codecentric.github.io/spring-boot-admin/1.5 .1/