被監(jiān)控轟炸了,不得不使出絕招
點(diǎn)擊上方藍(lán)色字體,選擇“設(shè)為星標(biāo)”

監(jiān)控這個(gè)話題永遠(yuǎn)都不會(huì)過(guò)時(shí),之前也有跟大家聊過(guò)監(jiān)控的內(nèi)容,以及如何快速實(shí)現(xiàn)監(jiān)控滿足日常需求。比如基于日志告警,基于全局異常處理器告警,基于 Cat,Prometheus,Sentry 等告警。
無(wú)論公司是什么規(guī)模,創(chuàng)業(yè)小公司,穩(wěn)定大公司,你都需要做監(jiān)控的呀。特別是大公司的監(jiān)控做的更全,也更在意監(jiān)控這件事情。小公司相對(duì)來(lái)說(shuō)會(huì)好點(diǎn),因?yàn)闃I(yè)務(wù)可能還不是很穩(wěn)定,用戶(hù)少,出故障就出唄,能修復(fù)就行。
監(jiān)控的痛點(diǎn)
有監(jiān)控總比沒(méi)監(jiān)控要強(qiáng)吧,但是監(jiān)控多了也不見(jiàn)得是件好事。此處的監(jiān)控多了有兩層含義。
含義一:監(jiān)控體系多或者說(shuō)監(jiān)控的框架多
很多時(shí)候,公司里的監(jiān)控五花八門(mén),有 Sentry 做異常告警,又有日志異常告警。有 Cat 又有 SkyWalking,弄的你懷疑人生,到底用哪個(gè),異常信息各種重復(fù)。

唯一的好處就是一有問(wèn)題,你就慌的不行,怎么這么多異常告警。馬上去排查問(wèn)題了,導(dǎo)致自驅(qū)力非常好。
含義二:監(jiān)控告警量多
監(jiān)控框架多了,告警的數(shù)量自然是翻倍的,這點(diǎn)毋庸置疑。其實(shí)更為重要的一點(diǎn)是告警沒(méi)有做等級(jí)劃分,一頓亂報(bào),導(dǎo)致告警群里一直有告警信息。有點(diǎn)像狼來(lái)了的意思,后面你就懶得去看了,因?yàn)樘嗔恕?/p>

如何解決痛點(diǎn)
監(jiān)控體系統(tǒng)一
首先,監(jiān)控體系要進(jìn)行整理,采用統(tǒng)一的監(jiān)控框架。a 但很多時(shí)候往往某一個(gè)框架無(wú)法滿足所有需求,這種場(chǎng)景下就出現(xiàn)了混合使用,控制的不好就跟前面提的一樣,五花八門(mén)了。
在某一個(gè)監(jiān)控層面能夠覆蓋大部分的場(chǎng)景即可。如果不行,可能需要基于已有的開(kāi)源監(jiān)控體系進(jìn)行自研擴(kuò)展功能了。
告警定級(jí)
監(jiān)控體系統(tǒng)一后,最大的問(wèn)題就是異常的告警。是否所有的異常需要告警?告警能不能分類(lèi)定級(jí)?
異常分為兩種,運(yùn)行時(shí)異常,比如 NPE 之類(lèi)的。另一種非常多的就是業(yè)務(wù)異常,比如庫(kù)存不足,商品已下架等。
對(duì)于運(yùn)行時(shí)異常,一定是第一優(yōu)先級(jí),因?yàn)檫@就是 Bug,需要馬上關(guān)注并且處理。這類(lèi)異常往往不會(huì)很多,如果非常多,那就是你的代碼真的寫(xiě)的不咋的。
告警分類(lèi)細(xì)化
對(duì)于業(yè)務(wù)異常,告警級(jí)別可以下降。這類(lèi)異常雖然不能反饋系統(tǒng)有問(wèn)題,但是能反饋業(yè)務(wù)的狀態(tài),還是需要稍微關(guān)注下。比如電商中最核心的下單接口,1 分鐘內(nèi)下單失敗 100 次,這種情況能不關(guān)注嗎?必須得關(guān)注。
業(yè)務(wù)異常除了降級(jí)之外還得分類(lèi),這個(gè)就需要在拋出業(yè)務(wù)異常的時(shí)候聲明對(duì)應(yīng)的 code 碼才行。這樣在告警的時(shí)候直接帶上對(duì)應(yīng)的 code 碼,一看便知什么問(wèn)題。比如前面將的下單頻繁失敗,如果你只是告警說(shuō)下單失敗了多少,那么此時(shí)你一定很慌,因?yàn)槟銐焊筒恢罏槭裁矗?/p>
還得屁顛屁顛的去看日志之類(lèi)的,排查報(bào)錯(cuò)的真正原因。如果告警時(shí)就已經(jīng)帶上了 code 碼 1001,你一看就知道,庫(kù)存不足了,肯定是某個(gè)商品在搶購(gòu)。code 碼 1002 風(fēng)控校驗(yàn)超時(shí)了,馬上聯(lián)系風(fēng)控的同學(xué)進(jìn)行排查。這樣的告警才符合標(biāo)準(zhǔn),否則太累了。
最重要的是保留好現(xiàn)場(chǎng)數(shù)據(jù),也就是出參和響應(yīng)以及 traceId,否則談何去解決這個(gè)告警問(wèn)題。
總結(jié)
改造完后,只有運(yùn)行時(shí)異常或者某分鐘內(nèi)大量報(bào)錯(cuò)才會(huì)短信或者電話緊急告警,減少騷擾。其他業(yè)務(wù)異常等直接走釘釘啊,飛書(shū)啊這種告警群即可。告警群也可以細(xì)化,劃分為需要關(guān)注的 code 和不需要關(guān)注的 code, 分開(kāi)不同的群,提高信息的精準(zhǔn)度觸達(dá)和消費(fèi)。
本文主要講的還是項(xiàng)目?jī)?nèi)的異常告警,其他的像一些中間件啊,數(shù)據(jù)庫(kù)之類(lèi)的告警就不用這么分了,這些一旦告警,無(wú)論是 cpu 飆高還是內(nèi)存飆高都是很?chē)?yán)重的問(wèn)題,都需要關(guān)注以及做預(yù)案處理。
關(guān)于作者:尹吉?dú)g,簡(jiǎn)單的技術(shù)愛(ài)好者,《Spring Cloud 微服務(wù)-全棧技術(shù)與案例解析》, 《Spring Cloud 微服務(wù) 入門(mén) 實(shí)戰(zhàn)與進(jìn)階》作者, 公眾號(hào)猿天地發(fā)起人。
后臺(tái)回復(fù) 學(xué)習(xí)資料 領(lǐng)取學(xué)習(xí)視頻
如有收獲,點(diǎn)個(gè)在看,誠(chéng)摯感謝
