抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

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可以放在配置中心###############
#eureka注册地址
eureka.client.serviceUrl.defaultZone=http://admin:admin@192.168.136.128:8888/eureka
#开启Eureka的健康检测
eureka.client.healthcheck.enabled=true
# 续约更新时间间隔,一般设置比续约到期时间少,该配置表示,每隔30秒就向服务端发送心跳。
eureka.lease-renewal-interval-in-seconds=30
# 续约到期时间,可以单独给每个服务设置,如果在90秒(默认)内没有给服务发送心跳,则剔除该服务。
eureka.instance.lease-expiration-duration-in-seconds=90
# 每隔30秒就去注册中心拉取注册表信息。
eureka.client.registry-fetch-interval-seconds=30

#注册时使用ip而不是主机名
eureka.instance.prefer-ip-address=true
#指定此实例的ip
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
//开启AdminServer
@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 {
// @formatter:off
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()
//启用HTTP基本支持。这个是admin客户端注册所必须的配置
.httpBasic().and()
//使用cookie启用CRSF-Protection
.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.ignoringAntMatchers(
adminContextPath + "/instances", //禁用CRSF-Protection端点
adminContextPath + "/actuator/**" //禁用CRSF-Protection执行器端点
);
// @formatter:on
}
}

测试

启动访问 发现有了登录界面

集成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
# 当我们已注册的客户端的状态从 UP 变为 OFFLINE 或其他状态,

#从哪个邮箱发送的
spring.boot.admin.notify.mail.from=XXXX@qq.com
# 服务端就会自动将电子邮件发送到xxxx@126.com
spring.boot.admin.notify.mail.to=XXXXXX@126.com
# 为false将不会发送邮件
spring.boot.admin.notify.mail.enabled=true

测试

将一个应用下线就会收到邮件信息

评论