SpringBoot Admin服务监控与告警

在微服务大行其道的今天,在任何互联网公司,其项目中的服务都动辄几十上百,多则成千上万也是很常见的,比如,像阿里,京东这种国民级的应用,任何一个项目的服务数量都是我们难以想象的,即使为了便于管理和降低服务之间的耦合,将各种服务拆分之后,服务的量级,更是一般中小公司难比得上的。

 

那么问题就来了,那么多的服务万一有一天,哪个二货程序员手一抖,把哪个服务给关掉了,这可就麻烦大了,如果是有降级、容错或者集群的情况下,还好有应对方案,如果没有的话,那就可就等着卷铺盖走人吧,要知道,想阿里这种体量的公司,每秒的交易额不止千万级别啊,想想这可是要损失多少啊,当然阿里这种体量的公司也一般不会出现这种情况,即使哪一天真的发生了黑天鹅事件,阿里的技术大佬们也能及时收到告警发现问题,及时处理。

 

SpringBoot Admin服务监控与告警

 

偷偷告诉大家一个小秘密,在一些大的公司,很多技术人员的手机其实都是24h待机的,就是为了出现任何问题,都能及时收到报警,及时处理。

 

其实说了这么多,只有一个目的是要保证我们的服务可用,系统安全可靠,所以这就需要我们有个好的监控工具,可以监控我们的服务的状态,是不是正常,有没有挂掉。

 

监控服务端

 

今天我们就来学习一个SpringBoot自带的可以监控服务状态的工具,并且可视化做的非常简洁,它就是我们今天的主角SpringBoot Admin,既然主角登场了,我们就让它先来做个自我介绍吧!

 

SpringBoot Admin是一个开源社区项目,用于管理和监控SpringBoot应用程序。应用程序作为SpringBoot Admin Client向为SpringBoot Admin  Server注册(通过HTTP)或使用SpringCloud注册中心(例如Eureka,Consul)发现。

 

SpringBoot Admin服务监控与告警

 

好了自我介绍做完了,接下来就让我们的主角给我们露一手吧,开始吧...

 

依然遵循着宋丹丹老师,教我们把大象装冰箱的三步走策略,先来开始我们的第一步:搭建SpringBoot Admin监控管理端项目,这个管理端就是可以可视化的观察服务的状态等各种数据,一会我们会看下它的盛世容颜,首先,我们使用SpringInitializr初始化一个SpringBoot项目,然后加入SpringBoot Admin的服务端依赖。


<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.2.3</version>
</dependency>

 

接下来就是第二步,就是是主启动类上,添加注解,表示开启SpringBoot Admin 监控管理功能。

 

/**
* Spring Boot Admin 监控管理
*/
@SpringBootApplication
@EnableAdminServer // 开启监控管理
public class SpringBootManagerApplication {
  public static void main(String[] args) {
      SpringApplication.run(SpringBootManagerApplication.class, args);
  }
}

 

到此我们的监控管理端的代码,就写完了,是不是soeasy!!!接下来最后一步,启动项目,打开浏览器(把冰箱门盖上),等待奇迹的发生...

 

SpringBoot Admin服务监控与告警

 

此时是我们看到没有任何服务被监控。

 

好,到这里我们的监控管理端,就完成了,有了监控端,那它监控管理谁呢?管理哪些服务呢?总的有服务让它监控吧,领导之所以是领导,那是因为它手底下有很多小弟,是不是,所以我们的还要在创建一个客户端。

 

客户端

 

依然是老规矩,三步走战略。第一步依然是使用SpringInitializr初始化一个SpringBoot项目springboot-admin-client,加入SpringBoot Admin客户端依赖。

 

<dependencies>
      
      <dependency>
         <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      
      <dependency>
          <groupId>de.codecentric</groupId>
          <artifactId>spring-boot-admin-starter-client</artifactId>
          <version>2.2.3</version>
      </dependency>
</dependencies>

 

第二步我要添加一些配置,可以让监控服务端监控到自己,以及暴露哪些信息可以被监控到。

 

# 配置端口
server.port=8081
# 监控端端口
spring.boot.admin.client.url=http://127.0.0.1:8080
# 客户端的名称
spring.boot.admin.client.instance.name=client
# 配置客户端展示哪些信息,*表示展示全部信息
management.endpoints.web.exposure.include=*

 

第三步就是重新刷新监控端,就会发现有一个实例在了,就说明我们的客户端成功的被监控服务端,监测到了。

 

SpringBoot Admin服务监控与告警

 

点击应用墙可以看到有一个client实例。

 

SpringBoot Admin服务监控与告警

 

点击中这个大大的实例就可以看到很多关于这个实例的详细信息,因为我们上面配置的可以暴露所有信息,所以下面展示的信息是比较多的。

 

SpringBoot Admin服务监控与告警

 

到这里我们的SpringBootAdmin的监控服务端和客户端就都完成了,当然我们是可以有多个客户端的,这个大家可以在创建一个client,这样在监控服务端就会有两个实例了。

 

好奇的宝宝可能就会问了,如果我们的client挂了会怎样呢?接下来咱们就演示一下服务挂了的情况,我们把client停掉,过个两秒再来刷新一下浏览器的监控服务端。

 

SpringBoot Admin服务监控与告警

 

红色的警告表示我们的服务是离线状态,还有服务掉线的数量一目了然,如果接着去看下服务的详细信息,这个时候也是看不到了。

 

SpringBoot Admin服务监控与告警

 

如果我们看上面这种状况,就说明我的服务是出现了问题,我要及时处理。

 

自动报警

 

好奇的宝宝可能又要问了,我们不可能7*24小时盯着界面看哪个应用离线了啊,万一那个应用挂掉了,我们没有发现可怎么办呢,稍安勿躁,这些SpringBoot都替我们想好了!

 

SpringBoot Admin除了提供可视化监控手段外,也提供了自动报警的功能,项目离线时自动通知售后、运维等相关技术人员,Perfect!!!

 

比如,如果我们想要实现,当服务出现问题的时候,可以马上发邮件通知相关人员,那我们就可以在邮件的发送系统中添加一个配置就OK了。

 

# Spring Boot Admin 发件收件信息
[email protected]    # 从哪个邮箱发出邮件
[email protected]   # 邮件发送给谁
[email protected] # 邮件抄送给谁

 

只需要这么一点点的配置,就可以实现7*24不间断的,监控我们的服务了,是不是很简单呢?

 

小伙伴儿们有没有一种技术越学越简单的感觉呢!