20《Spring Boot 入门教程》Spring Boot 监控与报警

1. 前言

因为公司开发的项目多、为客户部署的项目实例多。工作中我们都会经常遇到,由于某个客户的项目突然无法访问,一堆研发、售后部门的同事火急火燎处理问题的场景。

所以我非常希望能够实现这样的功能:

  • 能够有一个界面,监控所有关注的项目实例运行状态。
  • 对于某个项目实例来说,可以监控该实例的各项运行参数,例如内存占用情况、磁盘使用情况、数据库连接情况。
  • 项目实例因各种原因关闭时,可以自动报警。

在很长一段时间内,我感觉要实现这些功能比较复杂。后来我稍微研究了下,在 Spring Boot 中实现这种监控和报警的功能非常简单,那还等什么呢, Let’s Go !

2. 可视化监控

可以直接利用 Spring Boot Admin 实现可视化监控,此时至少需要两个项目实例,一个是监控的管理端,一个是被监控的客户端。

2.1 构建监控管理端项目

打开 Spring Initializr , Spring Boot 版本选择 2.2.5 ,Group 为 com.imooc , Artifact 为 spring-boot-monitor-manager,生成项目后导入 Eclipse 开发环境。

2.2 引入管理端项目依赖

监控管理端需要使用网页展示监控信息,所以引入 Web 依赖,另外添加 Spring Boot Admin 管理端依赖项。

实例:

        <!-- Web 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Spring Boot Admin 管理端依赖项 -->
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-server</artifactId>
            <version>2.2.3</version>
        </dependency>

2.3 开启监控管理端

在启动类上添加 @EnableAdminServer 注解开启 Spring Boot Admin 监控管理功能,代码如下:

实例:

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

然后运行启动类,访问 http://127.0.0.1:8080 会发现界面上已经显示监控信息了。

5ec511da09d41ffd09820261.jpg

Spring Boot Admin 监控管理页面

2.4 构建监控客户端项目

打开 Spring Initializr , Spring Boot 版本选择 2.2.5 ,Group 为 com.imooc , Artifact 为 spring-boot-monitor-client,生成项目后导入 Eclipse 开发环境。

2.5 引入客户端项目依赖

直接引入 Web 依赖和监控客户端依赖。

实例:

        <!-- Web 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Spring Boot Admin监控客户端依赖 -->
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-client</artifactId>
            <version>2.2.3</version>
        </dependency>

2.6 修改客户端配置

修改客户端的配置文件 application.properties ,以便指定客户端指向的服务端的地址。由于刚刚服务端已经占用了 8080 端口,所以将客户端的端口设置为 8091 。

还有一个必要设置是客户端的名称,当我们监控的项目实例比较多时,需要通过客户端名称来区分。

实例:

# 配置端口
server.port=8091
# 配置监控管理端地址
spring.boot.admin.client.url=http://127.0.0.1:8080
# 客户端的名称,用于区分不同的客户端
spring.boot.admin.client.instance.name=CLIENT1

TIps:此处指定监控管理端地址使用的是 spring.boot.admin.client.url ,我个人认为应使用 spring.boot.admin.server.url 更加合理。当然大家不用纠结于此,此处只是特别提示。

2.7 测试监控效果

启动客户端程序,然后刷新服务端网页,会发现监控管理页面已经显示了客户端信息。

5ec5162a0963cd4009840334.jpg

监控页面展示客户端信息

此时我们关闭客户端程序,然后稍等一会刷新下监控管理页面(注意服务端发现客户端离线是需要一定时间的),会发现监控管理页已经显示了离线项目实例信息。

5ec516db096812a009850335.jpg

监控页面展示离线客户端信息

3. 监控实例运行参数

使用 Spring Boot Admin 后,默认显示的项目实例信息比较少。

5ec53ae309b684da09190390.jpg

CLIENT1 实例默认显示信息

默认设置主要是为了保证项目实例的安全性,只展示了非常少的信息,我们可以通过配置文件指定展示哪些信息,如下。

实例:

# 配置客户端展示哪些信息,*表示展示全部信息
management.endpoints.web.exposure.include=*

此时刷新监控管理页,会发现已经展示各类运行参数信息。

5ec53f7e09ddde3f09360810.jpg

全面展示项目实例运行参数信息

Tips:不同项目需要展示的信息不同,可以通过 management.endpoints.web.exposure.include 配置项进行设置,感兴趣的同学可以自行查阅相关资料。

4. 自动报警

可视化监控提供了全面了解项目运行状况的手段,但是我们不可能 7*24 小时盯着界面看哪个应用离线了。

最妙的效果是,项目离线时自动通知售后、运维等相关技术人员。

Spring Boot Admin 也提供了自动报警的功能,简直太完美了,接下来我们来实现下。

4.1 引入依赖项

为监控服务端项目引入邮件依赖。

实例:

        <!-- 邮件依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

4.2 配置邮件发送所需信息

只需要配置常规的邮件收发信息即可。

实例:

# 网易邮箱发件服务器
spring.mail.host=smtp.163.com
# 网易邮箱发件端口
spring.mail.prot=25
# 发件人账号
spring.mail.username=taqsxxkj@163.com
# 发件授权密码,注意授权码是用于登录第三方邮件客户端的专用密码
spring.mail.password=123456
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
# Spring Boot Admin 发件收件信息
spring.boot.admin.notify.mail.from=taqsxxkj@163.com
spring.boot.admin.notify.mail.to=taqsxxkj@163.com
spring.boot.admin.notify.mail.cc=taqsxxkj@163.com

此处特别注意发件授权密码不是普通邮箱的登录密码,而是授权密码,以网易邮箱为例在下图位置设置。

5ec547bd0973b8ca07420684.jpg

网易邮箱授权密码设置

4.3 项目实例离线邮件报警

启动监控服务端和客户端,然后关闭客户端,稍等一会检查指定的报警接收邮箱,就会发现已收到报警邮件了。

5ec5489a09e257b207520294.jpg

项目实例离线邮件报警内容

5. 小结

报警和监控机制可以为上线运行的项目提供额外的保障机制。

  • 可视化监控可以提供一种总揽全局的监控视角,众多项目运行状况一目了然,做到心里有底。
  • 对于重点项目,可以定期监控项目实例的详细运行参数。通过分析参数信息,预测性能瓶颈发生的时间节点,提前采取扩容等措施,防患于未然。
  • 当发生严重错误,或者由于人为误操作导致项目离线时,指定邮箱能够及时收到报警信息。技术人员及时排查处理,作为项目运维方心里更有底
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,776评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,527评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,361评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,430评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,511评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,544评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,561评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,315评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,763评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,070评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,235评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,911评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,554评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,173评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,424评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,106评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,103评论 2 352

推荐阅读更多精彩内容