一、概述

 开始阅读这篇文章之前,建议先阅读下《SpringBoot 之Actuator》,该篇文章提到 Spring Boot Actuator 提供了对单个Spring Boot的监控,信息包含:应用状态、内存、线程、堆栈等等,比较全面的监控了Spring Boot应用的整个生命周期。但是美中不足的是:

  1. 所有的监控都需要调用固定的接口来查看,如果全面查看应用状态需要调用很多接口,并且接口返回的 Json 信息不方便运营人员理解;
  2. 如果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.的更多相关文章

  1. Spring Boot 2.X(十七):应用监控之 Spring Boot Admin 使用及配置

    Admin 简介 Spring Boot Admin 是 Spring Boot 应用程序运行状态监控和管理的后台界面.最新UI使用vue.js重写里. Spring Boot Admin 为已注册的 ...

  2. 如何做自己的服务监控?spring boot 2.x服务监控揭秘

    Actuator是spring boot项目中非常强大一个功能,有助于对应用程序进行监视和管理,通过 restful api请求来监管.审计.收集应用的运行情况,针对微服务而言它是必不可少的一个环节. ...

  3. 微服务架构之spring boot admin

    Spring boot admin是可视化的监控组件,依赖spring boot actuator收集各个服务的运行信息,通过spring boot actuator可以非常方便的查看每个微服务的He ...

  4. 如何做自己的服务监控?spring boot 1.x服务监控揭秘

    1.准备 下载可运行程序:http://www.mkyong.com/spring-boot/spring-boot-hello-world-example-jsp/ 2.添加服务监控依赖 <d ...

  5. 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 ...

  6. SpringBoot | 第二十八章:监控管理之Spring Boot Admin使用

    前言 上一章节,我们介绍了Actuator的使用,知道了可通过访问不同的端点路径,获取相应的监控信息.但使用后也能发现,返回的监控数据都是以JSON串的形式进行返回的,对于实施或者其他人员来说,不是很 ...

  7. Spring Boot (十): Spring Boot Admin 监控 Spring Boot 应用

    Spring Boot (十): Spring Boot Admin 监控 Spring Boot 应用 1. 引言 在上一篇文章<Spring Boot (九): 微服务应用监控 Spring ...

  8. spring-boot-plus集成Spring Boot Admin管理和监控应用(十一)

    spring-boot-plus集成Spring Boot Admin管理和监控应用 spring boot admin Spring Boot Admin用来管理和监控Spring Boot应用程序 ...

  9. Spring Boot Admin 2.1.4最新实战教程

    环境的搭建 首先搭建eruka的注册中心 pom.xml <?xml version="1.0" encoding="UTF-8"?> <pr ...

随机推荐

  1. 【Java Web开发学习】Servlet、Filter、Listener

    [Java Web开发学习]Servlet 转发:https://www.cnblogs.com/yangchongxing/p/9274739.html 1.Servlet package cn.y ...

  2. var和let部分浅析

    ES6中新增了let命令,用于声明变量,但所声明的变量只在let命令的代码块内有效. 举个例子: var a = []; for(var i=0;i<10;i++){ a[i] = functi ...

  3. python基础知识第二篇(字符串)

    基本数据类型 数字                  整形 int                             ---int                            将字符串 ...

  4. vue中子组件直接修改父组件prop属性bug

    在有些时候,子组件直接修改父组件传来的 prop 对象的属性会出现不同步的问题. 比如,父组件传过来的一个对象 checkBoxObj: checkBoxObj:{ checked: false } ...

  5. c++-多态的练习

    多态的几个小练习 练习一 #include <iostream> #include <string> using namespace std; class Fu { publi ...

  6. JPA中实现双向一对一的关联关系

    场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...

  7. jQuery实现简单购物车页面

    功能描述: 当全选按钮被按下时,所有商品的小复选框(以及另外一个全选按钮)的选中状态跟按下的全选按钮保持一致: 当用户选中商品时,如果所有商品都被选中,就让全选按钮为选中状态: 用户可以点击 + - ...

  8. 阿里云ECS部署Redis主备哨兵集群遇到的问题

    一.部署 详细部署步骤:https://blog.csdn.net/lihongtai/article/details/82826809 Redis5.0版本需要注意的参数配置:https://www ...

  9. gdisk转fdisk

    分区测试的时候发现之前用gdisk分区之后,就无法用fdisk进行分区了,哪怕格式化了也不行,通过fdisk 查看硬盘,发现硬盘都变成了GPT分区,无法通过fdisk进行分区操作,所以要通过parte ...

  10. 编译安装基于 fastcgi 模式的多虚拟主机的wordpress和discuz的LAMP架构

    目录 实现CentOS 7 编译安装基于 fastcgi 模式的多虚拟主机的wordpress和discuz的LAMP架构 准备环境: 准备软件版本: 主机名修改用以区分 数据库服务器 实现数据库二进 ...