來源:北大青鳥總部 2023年04月10日 11:04
在微服務(wù)大行其道的今天,在任何互聯(lián)網(wǎng)公司,其項(xiàng)目中的服務(wù)都動(dòng)輒幾十上百,多則成千上萬也是很常見的,比如,想阿里,京東這種國民級(jí)的應(yīng)用,任何一個(gè)項(xiàng)目的服務(wù)數(shù)量都是我們難以想象的,即使為了便于管理和降低服務(wù)之間的耦合,將各種服務(wù)拆分之后,服務(wù)的量級(jí),更是一般中小公司難比得上的。
那么問題就來了,那么多的服務(wù)萬一有一天,哪個(gè)二貨程序員手一抖,把哪個(gè)服務(wù)給關(guān)掉了,這可就麻煩大了,如果是有降級(jí)、容錯(cuò)或者集群的情況下,還好有應(yīng)對(duì)方案,如果沒有的話,那就可就等著卷鋪蓋走人吧,要知道,想阿里這種體量的公司,每秒的交易額不止千萬級(jí)別啊,想想這可是要損失多少啊,當(dāng)然阿里這種體量的公司也一般不會(huì)出現(xiàn)這種情況,即使哪一天真的發(fā)生了黑天鵝事件,阿里的技術(shù)大佬們也能及時(shí)收到告警發(fā)現(xiàn)問題,及時(shí)處理。
偷偷告訴大家一個(gè)小秘密,在一些大的公司,很多技術(shù)人員的手機(jī)其實(shí)都是24h待機(jī)的,就是為了出現(xiàn)任何問題,都能及時(shí)收到報(bào)警,及時(shí)處理。
其實(shí)說了這么多,只有一個(gè)目的是要保證我們的服務(wù)可用,系統(tǒng)安全可靠,所以這就需要我們有個(gè)好的監(jiān)控工具,可以監(jiān)控我們的服務(wù)的狀態(tài),是不是正常,有沒有掛掉。
今天我們就來學(xué)習(xí)一個(gè)SpringBoot自帶的可以監(jiān)控服務(wù)狀態(tài)的工具,并且可視化做的非常簡(jiǎn)潔,它就是我們今天的主角SpringBoot Admin,既然主角登場(chǎng)了,我們就讓它先來做個(gè)自我介紹吧!
SpringBoot Admin是一個(gè)開源社區(qū)項(xiàng)目,用于管理和監(jiān)控SpringBoot應(yīng)用程序。應(yīng)用程序作為SpringBoot Admin Client向?yàn)镾pringBoot Admin Server注冊(cè)(通過HTTP)或使用SpringCloud注冊(cè)中心(例如Eureka,Consul)發(fā)現(xiàn)。
好了自我介紹做完了,接下來就讓我們的主角給我們露一手吧,開始吧...
依然遵循著宋丹丹老師,教我們把大象裝冰箱的三步走策略,先來開始我們的第一步:搭建SpringBoot Admin監(jiān)控管理端項(xiàng)目,這個(gè)管理端就是可以可視化的觀察服務(wù)的狀態(tài)等各種數(shù)據(jù),一會(huì)我們會(huì)看下它的盛世容顏,首先,我們使用SpringInitializr初始化一個(gè)SpringBoot項(xiàng)目,讓后加入SpringBoot Admin的服務(wù)端依賴。
<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>
接下來就是第二步,就是是主啟動(dòng)類上,添加注解,表示開啟SpringBoot Admin 監(jiān)控管理功能。
/**
* Spring Boot Admin 監(jiān)控管理
*/
@SpringBootApplication
@EnableAdminServer // 開啟監(jiān)控管理
public class SpringBootManagerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootManagerApplication.class, args);
}
}
到此我們的監(jiān)控管理端的代碼,就寫完了,是不是soeasy?。。〗酉聛碜詈笠徊剑瑔?dòng)項(xiàng)目,打開瀏覽器(把冰箱門蓋上),等待奇跡的發(fā)生...
此時(shí)是我們看到?jīng)]有任何服務(wù)被監(jiān)控。
好,到這里我們的監(jiān)控管理端,就完成了,有了監(jiān)控端,那它監(jiān)控管理誰呢?管理那些服務(wù)呢?總的有服務(wù)讓它監(jiān)控吧,領(lǐng)導(dǎo)之所以是領(lǐng)導(dǎo),那是因?yàn)樗值紫掠泻芏嘈〉?,是不是,所以我們的還要在創(chuàng)建一個(gè)客戶端。
依然是老規(guī)矩,三步走戰(zhàn)略。第一步依然是使用SpringInitializr初始化一個(gè)SpringBoot項(xiàng)目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>
第二步我要添加一些配置,可以讓監(jiān)控服務(wù)端監(jiān)控到自己,以及暴露哪些信息可以被監(jiān)控到。
# 配置端口
server.port=8081
# 監(jiān)控端端口
spring.boot.admin.client.url=http://127.0.0.1:8080
# 客戶端的名稱
spring.boot.admin.client.instance.name=client
# 配置客戶端展示哪些信息,*表示展示全部信息
management.endpoints.web.exposure.include=*
第三步就是重新刷新監(jiān)控端,就會(huì)發(fā)祥有一個(gè)實(shí)例在了,就說明我們的客戶端成功的被監(jiān)控服務(wù)端,監(jiān)測(cè)到了。
點(diǎn)擊應(yīng)用墻可以看到有一個(gè)client實(shí)例。
點(diǎn)擊中這個(gè)大大的實(shí)例就可以看到很多關(guān)于這個(gè)實(shí)例的詳細(xì)信息,因?yàn)槲覀兩厦媾渲玫目梢员┞端行畔?,所以下面展示的信息是比較多的。
到這里我們的SpringBootAdmin的監(jiān)控服務(wù)端和客戶端就都完成了,當(dāng)然我們是可以有多個(gè)客戶端的,這個(gè)大家可以在創(chuàng)建一個(gè)client,這樣在監(jiān)控服務(wù)端就會(huì)有兩個(gè)實(shí)例了。
好奇的寶寶可能就會(huì)問了,如果我們的client掛了會(huì)怎樣呢?接下來咱么就演示一下服務(wù)掛了的情況,我們把client停掉,過個(gè)兩秒再來刷新一下瀏覽器的監(jiān)控服務(wù)端。
紅色的警告表示我們的服務(wù)是離線狀態(tài),還有服務(wù)掉線的數(shù)量一目了然,如果接著去看下服務(wù)的詳細(xì)信息,這個(gè)時(shí)候也是看不到了。
如果我們看上面這中狀況,就說明我的服務(wù)是出現(xiàn)了問題,我要及時(shí)處理。
好奇的寶寶可能又要問了,我們不可能7*24小時(shí)盯著界面看哪個(gè)應(yīng)用離線了啊,萬一那個(gè)應(yīng)用掛掉了,我們沒有發(fā)現(xiàn)課怎么辦呢,稍安勿躁,這些SpringBoot都替我們想好了!
SpringBoot Admin除了提供可視化監(jiān)控手段外,也提供了自動(dòng)報(bào)警的功能,項(xiàng)目離線時(shí)自動(dòng)通知售后、運(yùn)維等相關(guān)技術(shù)人員,Perfect?。?!
比如,如果我們想要實(shí)現(xiàn),當(dāng)服務(wù)出現(xiàn)問題的時(shí)候,可以馬上發(fā)郵件通知相關(guān)人員,那我們就可以在郵件的發(fā)送系統(tǒng)中添加一個(gè)配置就OK了。
# Spring Boot Admin 發(fā)件收件信息
spring.boot.admin.notify.mail.from=xxxx@163.com # 從哪個(gè)郵箱發(fā)出郵件
spring.boot.admin.notify.mail.to=xxxx@163.com # 郵件發(fā)送給誰
spring.boot.admin.notify.mail.cc=xxxx@163.com # 郵件抄送給誰
只需要這么一點(diǎn)點(diǎn)的配置,就可以實(shí)現(xiàn)7*24不間斷的,監(jiān)控我們的服務(wù)了,是不是很簡(jiǎn)單呢?
小伙伴兒們有沒有一種技術(shù)越學(xué)越簡(jiǎn)單的感覺呢!