服务监控之 Spring Boot Admin.
一、概述
开始阅读这篇文章之前,建议先阅读下《SpringBoot 之Actuator》,该篇文章提到 Spring Boot Actuator 提供了对单个Spring Boot的监控,信息包含:应用状态、内存、线程、堆栈等等,比较全面的监控了Spring Boot应用的整个生命周期。但是美中不足的是:
- 所有的监控都需要调用固定的接口来查看,如果全面查看应用状态需要调用很多接口,并且接口返回的 Json 信息不方便运营人员理解;
- 如果Spring Boot 应用集群非常大,每个应用都需要调用不同的接口来查看监控信息,操作非常繁琐低效。
在这样的背景下,就诞生了另外一个开源软件:Spring Boot Admin。那么什么是 Spring Boot Admin 呢?Spring Boot Admin 是一个针对 Spring Boot Actuator 进行UI美化封装的监控工具。集群的每个应用都认为是一个客户端(或者说实例),通过HTTP或者使用 Eureka 注册到 Spring Boot Admin Server中进行展示,Spring Boot Admin UI 使用AngularJs将数据展示在前端。
下面将给大家介绍如何使用Spring Boot Admin对Spring Boot应用进行监控。
二、spring-boot-admin-starter-server
下面介绍 spring-boot-admin-server 的构建,要监控的每个客户端(或者说实例),都可以把 Actuator 数据注册到 server 中进行 UI 渲染展示。
1. pom.xml
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.1.5</version>
</dependency>
2. application.yml
server:
port: 3333
spring:
application:
name: monitor
3. Application.java
@SpringBootApplication
@EnableAdminServer
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
做完以上动作,我们一个 spring-boot-admin-server 项目就搭建好了。以下是一些附加的功能:权限认证和邮件预警。
4. 配置 spring-security 权限验证
- pom.xml
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui-login</artifactId>
<version>1.5.7</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
- application.yml
security:
user:
name: ${monitor.user}
password: ${monitor.password}
- SecurityConfig.java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// Page with login form is served as /login.html and does a POST on /login
http.formLogin().loginPage("/login.html").loginProcessingUrl("/login").permitAll();
// The UI does a POST on /logout on logout
http.logout().logoutUrl("/logout");
// The ui currently doesn't support csrf
http.csrf().disable();
// Requests for the login page and the static assets are allowed
//允许登录页面和静态资源的请求
http.authorizeRequests().antMatchers("/login.html", "/**/*.css", "/img/**", "/third-party/**")
.permitAll();
// ... and any other request needs to be authorized
//这点重要:所有请求都需要认证
http.authorizeRequests().antMatchers("/**").authenticated();
// Enable so that the clients can authenticate via HTTP basic for registering
http.httpBasic();
}
}
- 效果

5、邮件预警
- pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>1.5.12.RELEASE</version>
</dependency>
- application.yml
spring:
mail:
host: smtp.exmail.qq.com
port: 465
username: xxx
password: xxx
properties:
mail:
smtp:
auth: true
debug: true
timeout: 0
socketFactory:
port: 465
class: javax.net.ssl.SSLSocketFactory
- NotifierConfig.java
/**
* 重新配置消息通知
*
* @author : cuixiuyin
*/
@Configuration
@EnableScheduling
public class NotifierConfig {
private static final Logger log = LoggerFactory.getLogger(NotifierConfig.class);
@Autowired
private JavaMailSender javaMailSender;
@Autowired
private RemindingNotifier remindingNotifier;
@Bean
@Primary
public RemindingNotifier remindingNotifier() {
RemindingNotifier remindingNotifier = new RemindingNotifier(new AbstractEventNotifier() {
@Override
protected void doNotify(ClientApplicationEvent event) throws Exception {
if (event instanceof ClientApplicationStatusChangedEvent) {
ClientApplicationStatusChangedEvent changedEvent = (ClientApplicationStatusChangedEvent) event;
log.info("Application {} ({}) is {}", event.getApplication().getName(), event.getApplication().getId(), changedEvent.getTo().getStatus());
String text = String.format("应用:%s 服务ID:%s,服务ip:%s 状态改变为:[%s ---> %s],时间:%s"
, event.getApplication().getName()
, event.getApplication().getId()
, event.getApplication().getHealthUrl()
, changedEvent.getFrom().getStatus()
, changedEvent.getTo().getStatus()
, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(changedEvent.getTimestamp())));
log.warn(text);
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom("xxx@qq.com");
message.setTo("xxx@163.com");
message.setSubject(event.getApplication().getName() + "服务状态改变");
message.setText(text);
javaMailSender.send(message);
} else {
log.info("Application {} ({}) {}", event.getApplication().getName(), event.getApplication().getId(), event.getType());
}
}
});
// 每5分钟就需要提醒一次,并不一定会提醒,有 RemindingNotifier 里面的状态进行决定
remindingNotifier.setReminderPeriod(TimeUnit.MINUTES.toMillis(5));
return remindingNotifier;
}
/**
* 每隔一分钟检查还有那些需要进行提醒
*/
@Scheduled(fixedRate = 1_000L)
public void remind() {
remindingNotifier.sendReminders();
}
}
- 效果

三、spring-boot-admin-starter-client
我们已经有了一个 spring-boot-admin-server,现在要做的就是如何把客户端(或者说实例)的 Actuator 数据注册到 Server 中。
1. pom.xml
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.1.5</version>
</dependency>
2. application.yml
spring:
application:
name: dubbo-provider
boot:
admin:
enabled: true
client:
instance:
name: ${spring.application.name}
prefer-ip: true
url: http://127.0.0.1:3333
management:
endpoints:
web:
exposure:
include: '*'
如此,我们就把客户端(或者说实例)的 Actuator 数据注册到 Server 中了。
附录
1. 效果图


2.源代码地址
Github 演示代码地址:https://github.com/JMCuixy/dubbo-demo
服务监控之 Spring Boot Admin.的更多相关文章
- Spring Boot 2.X(十七):应用监控之 Spring Boot Admin 使用及配置
Admin 简介 Spring Boot Admin 是 Spring Boot 应用程序运行状态监控和管理的后台界面.最新UI使用vue.js重写里. Spring Boot Admin 为已注册的 ...
- 如何做自己的服务监控?spring boot 2.x服务监控揭秘
Actuator是spring boot项目中非常强大一个功能,有助于对应用程序进行监视和管理,通过 restful api请求来监管.审计.收集应用的运行情况,针对微服务而言它是必不可少的一个环节. ...
- 微服务架构之spring boot admin
Spring boot admin是可视化的监控组件,依赖spring boot actuator收集各个服务的运行信息,通过spring boot actuator可以非常方便的查看每个微服务的He ...
- 如何做自己的服务监控?spring boot 1.x服务监控揭秘
1.准备 下载可运行程序:http://www.mkyong.com/spring-boot/spring-boot-hello-world-example-jsp/ 2.添加服务监控依赖 <d ...
- Spring Boot,Spring Cloud,Eureka,Actuator,Spring Boot Admin,Stream,Hystrix
Spring Boot,Spring Cloud,Eureka,Actuator,Spring Boot Admin,Stream,Hystrix 一.Spring Cloud 之 Eureka. 1 ...
- SpringBoot | 第二十八章:监控管理之Spring Boot Admin使用
前言 上一章节,我们介绍了Actuator的使用,知道了可通过访问不同的端点路径,获取相应的监控信息.但使用后也能发现,返回的监控数据都是以JSON串的形式进行返回的,对于实施或者其他人员来说,不是很 ...
- Spring Boot (十): Spring Boot Admin 监控 Spring Boot 应用
Spring Boot (十): Spring Boot Admin 监控 Spring Boot 应用 1. 引言 在上一篇文章<Spring Boot (九): 微服务应用监控 Spring ...
- spring-boot-plus集成Spring Boot Admin管理和监控应用(十一)
spring-boot-plus集成Spring Boot Admin管理和监控应用 spring boot admin Spring Boot Admin用来管理和监控Spring Boot应用程序 ...
- Spring Boot Admin 2.1.4最新实战教程
环境的搭建 首先搭建eruka的注册中心 pom.xml <?xml version="1.0" encoding="UTF-8"?> <pr ...
随机推荐
- 【Flutter】348- 写给前端工程师的 Flutter 教程
点击上方"前端自习课"关注,学习起来~ | 导语 最爱折腾的就是前端工程师了,从 jQuery 折腾到 AngularJs,再折腾到 Vue.React.最爱跨屏的也是前端工程师, ...
- 【RabbitMQ】显示耗时处理进度
[RabbitMQ]显示耗时处理进度 通过网页提交一个耗时的请求,然后启动处理线程,请求返回.处理线程每完成一部分就给前台推送完成的数量,前端显示进度. 依赖jar <?xml version= ...
- 搞了一次IE浏览器兼容,我有点奔溃....
浏览器兼容问题(主要时IE上遇到的坑坑坑) caniuse 工具(基本参考作用,实际还是需要测试) (1)安装babel-polyfill基本操作了,IE浏览器没有内置Promise对象,不仅如此,几 ...
- JS---案例:点击按钮设置div背景色渐变
案例:点击按钮设置div背景色渐变 背景色渐变:设置透明度 <div id="dv"></div> <input type="button& ...
- Charles抓包iPhone注意点以及SSL Proxying enabled for this host
0.介绍Charles 抓包 Charles是一款很强大的抓包工具,现在记录下来分享给大家.常用的有以下几款功能: 1.支持配置抓取定向地址的网络请求 打开charles,打开Proxy->Re ...
- Linux CentOS 7 搭建 Tomcat 8 服务器
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.对于一个初学者来说,可以这样 ...
- DUBBO: xml文件无法解析
xml是: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http:/ ...
- jquery.i18n 网站呈现各国语言
在做网站的时候可能会遇到不同语言切换的问题,实现的方法有很多种,本篇文章按照 js 加载的方法的来实现. 应用到的 js 文件: jquery.i18n.properties.js jquery.js ...
- GO基础之异常处理
一.异常 1. 错误指程序中出现不正常的情况,从而导致程序无法正常执行.•大多语言中使用try... catch... finally语句执行.假设我们正在尝试打开一个文件,文件系统中不存在这个文件. ...
- Springboot vue.js html 跨域 前后分离 Activiti6 工作流 集成代码生成器 shiro 权限
官网:www.fhadmin.org 特别注意: Springboot 工作流 前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot2.1.2+ activiti6.0 ...