Spring Cloud Admin 服务监控
简介
Spring Boot Admin是一个开源社区项目,用于管理和监控SpringBoot应用程序。 应用程序作为Spring Boot Admin Client向为Spring Boot Admin Server注册(通过HTTP)或使用SpringCloud注册中心(例如Eureka,Consul)发现。 UI是的AngularJs应用程序,展示Spring Boot Admin Client的Actuator端点上的一些监控。
Spring Boot Admin 是一个管理和监控Spring Boot 应用程序的开源软件。Spring Boot Admin 分为 Server 端和 Client 端,Spring Boot Admin UI部分使用AngularJs将数据展示在前端。
Spring Boot Admin在 Spring Boot Actuator 的基础上提供简洁的可视化 WEB UI。Spring Boot Admin 提供了很多功能,如显示 name、id 和 version,显示在线状态,Loggers 的日志级别管理,Threads 线程管理,Environment 管理等。
常见的功能
- 显示健康状况
- 显示详细信息,例如
- 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 项目中,Spring Boot Admin 作为 Server 端,其他的要被监控的应用作为 Client 端,基于这种的配置如下步骤:
服务端配置
创建admin-server项目
导入POM依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> <version>LATEST</version> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>
|
配置文件配置
application.properties
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| server.port=8000 spring.application.name=admin-server
eureka.client.serviceUrl.defaultZone=http://admin:admin@192.168.136.128:8888/eureka
eureka.client.healthcheck.enabled=true
eureka.lease-renewal-interval-in-seconds=30
eureka.instance.lease-expiration-duration-in-seconds=90
eureka.client.registry-fetch-interval-seconds=30
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
|
bootstrap.properties
配置中心配置
1 2 3 4 5 6 7 8 9 10
| spring.cloud.config.uri=http://192.168.136.128:8899
spring.cloud.config.label=master
spring.cloud.config.name=application
spring.cloud.config.profile=dev
spring.cloud.config.fail-fast=true
|
创建启动类
1 2 3 4 5 6 7 8 9 10
| @SpringBootApplication @EnableEurekaClient
@EnableAdminServer public class AdminApplication {
public static void main(String[] args) { SpringApplication.run(AdminApplication.class); } }
|
启动测试
出现如下界面说明启动成功
客户端配置
因为 spring cloud admin 是基于健康检查的,客户端只需要开放健康检查即可
1 2 3
| management.endpoints.web.exposure.include=* management.endpoint.health.show-details=ALWAYS
|
启动客户端,就会发现服务已经可以在spring cloud admin 中看到我们的页面
集成spring security
在2.1.0版本中去掉了hystrix dashboard,登录界面默认集成到了spring security模块,只要加上spring security就集成了登录模块。
POM依赖
在服务端添加POM依赖
1 2 3 4
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
|
添加安全配置
在application.properties 添加配置
1 2 3 4 5
| spring.security.user.name=admin spring.security.user.password=admin eureka.instance.metadata-map.user.name=${spring.security.user.name} eureka.instance.metadata-map.user.password=${spring.security.user.password}
|
添加配置类
注意:该配置类需要 spring-boot-starter-web 的支持
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| @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 { SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler(); successHandler.setTargetUrlParameter("redirectTo"); successHandler.setDefaultTargetUrl(adminContextPath + "/");
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().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) .ignoringAntMatchers( adminContextPath + "/instances", adminContextPath + "/actuator/**" ); } }
|
测试
启动访问 发现有了登录界面
集成Email
在spring boot admin中,也可以集成邮箱报警功能,比如服务不健康了、下线了,都可以给指定邮箱发送邮件。集成非常简单,只需要改造下admin-server即可
POM依赖
在服务端添加POM依赖
1 2 3 4
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
|
配置邮箱
在application.properties 配置发件信息
1 2 3 4 5 6 7 8 9 10 11 12
| spring.mail.host=smtp.qq.com spring.mail.username=XXXX@qq.com spring.mail.password=XXXXXX
spring.boot.admin.notify.mail.from=XXXX@qq.com
spring.boot.admin.notify.mail.to=XXXXXX@126.com
spring.boot.admin.notify.mail.enabled=true
|
测试
将一个应用下线就会收到邮件信息