架構(gòu)師面試:怎樣規(guī)劃公司的監(jiān)控架構(gòu)?
大家好,我是君哥。
監(jiān)控系統(tǒng)在科技公司非常重要,它可以讓運(yùn)維人員和研發(fā)人員提前發(fā)現(xiàn)問(wèn)題、定位問(wèn)題,進(jìn)而解決問(wèn)題。
在我們實(shí)際工作中,使用的監(jiān)控往往五花八門(mén),比較混亂,今天來(lái)聊一聊怎么規(guī)劃公司的監(jiān)控架構(gòu)。
1.指標(biāo)采集
監(jiān)控指標(biāo)采集為監(jiān)控提供原始數(shù)據(jù),是監(jiān)控系統(tǒng)的基礎(chǔ)。
1.1 系統(tǒng)指標(biāo)
當(dāng)我們使用 Prometheus 做監(jiān)控時(shí),我們可以使用 Node Exporter 收集系統(tǒng)指標(biāo)進(jìn)行監(jiān)控,比如內(nèi)存、CPU、磁盤(pán)、文件描述符等信息。
1.2 數(shù)據(jù)庫(kù)/中間件
數(shù)據(jù)庫(kù)和中間件故障對(duì)業(yè)務(wù)影響會(huì)非常大,極端情況下可能讓業(yè)務(wù)停擺。因此必須有配套的數(shù)據(jù)庫(kù)中間件監(jiān)控。
對(duì)于數(shù)據(jù)庫(kù)和中間件,采集數(shù)據(jù)庫(kù)所在機(jī)器的系統(tǒng)信息如內(nèi)存、CPU、磁盤(pán)是必須的。
對(duì)于數(shù)據(jù)庫(kù),也需要采集 SQL 執(zhí)行時(shí)長(zhǎng)、數(shù)據(jù)庫(kù)日志等作為監(jiān)控指標(biāo)。
對(duì)于中間件,可以采集吞吐量、平均響應(yīng)時(shí)長(zhǎng),以及中間件自己的一些指標(biāo)。比如 kafka 的 ISRShrink/ISRExpand。
JVM 相關(guān)指標(biāo),比如堆內(nèi)存、FULL GC 頻率和時(shí)長(zhǎng)、線(xiàn)程使用情況。
1.3 業(yè)務(wù)指標(biāo)
業(yè)務(wù)系統(tǒng)的監(jiān)控指標(biāo)因?yàn)闃I(yè)務(wù)的復(fù)雜性,會(huì)非常復(fù)雜和龐大。
接口請(qǐng)求數(shù)量、平均響應(yīng)時(shí)間、成功率。這部分指標(biāo)可以使用網(wǎng)絡(luò)抓包來(lái)獲取。
業(yè)務(wù)整體運(yùn)行情況,這部分指標(biāo)有兩種方式,一個(gè)是通過(guò)采集業(yè)務(wù)日志來(lái)獲取,第二個(gè)業(yè)務(wù)代碼主動(dòng)推送執(zhí)行,比如把運(yùn)行情況抽象成指標(biāo)保存數(shù)據(jù)庫(kù),或者通過(guò)消息隊(duì)列發(fā)送給采集系統(tǒng)。
2.指標(biāo)保存
收集到監(jiān)控指標(biāo)后,要想把這些指標(biāo)展示給運(yùn)維人員,就需要先把指標(biāo)保存下來(lái)。Prometheus 將監(jiān)控?cái)?shù)據(jù)保存在 TSDB,一些公司選擇引入外部時(shí)序數(shù)據(jù)庫(kù),比如 VictoriaMetrics 這款時(shí)序數(shù)據(jù)庫(kù)就被很多公司采納。
有些指標(biāo)采集的量比較小,也可以采用關(guān)系數(shù)據(jù)庫(kù)做存儲(chǔ),對(duì)研發(fā)運(yùn)維人員來(lái)說(shuō)學(xué)習(xí)成本比較低。
小公司一般使用開(kāi)源的工具就可以滿(mǎn)足指標(biāo)保存的需求。在大公司,業(yè)務(wù)類(lèi)型廣泛,指標(biāo)數(shù)據(jù)量較大,需要規(guī)劃指標(biāo)保存方案,引入多種保存方式。
3.指標(biāo)加工
對(duì)于僅僅監(jiān)控一些特定指標(biāo)的情況下,只要采集到數(shù)據(jù),正常展示出來(lái),就可以實(shí)現(xiàn)監(jiān)控目標(biāo)。但這只能用于較簡(jiǎn)單的監(jiān)控指標(biāo),比如一個(gè)接口的請(qǐng)求次數(shù)。
從宏觀角度看,業(yè)務(wù)側(cè)更關(guān)注的是總體數(shù)據(jù),比如昨天交易成功的業(yè)務(wù)數(shù)量,失敗的業(yè)務(wù)數(shù)量。他們只會(huì)花時(shí)間看監(jiān)控大盤(pán)。這個(gè)時(shí)候就需要進(jìn)行一些數(shù)據(jù)加工、匯總。
因此,指標(biāo)加工也是非常重要的。這個(gè)工作也可以交給公司的大數(shù)據(jù)團(tuán)隊(duì)來(lái)承接。
4.指標(biāo)展示
完成指標(biāo)采集和加工后,怎樣清晰優(yōu)雅地展示給用戶(hù),是監(jiān)控設(shè)計(jì)中的一個(gè)重要環(huán)節(jié)。
知名的監(jiān)控工具比如 Prometheus、Zabbix 都有成熟的可視化界面,可以清晰地展示給用戶(hù)。但要滿(mǎn)足更復(fù)雜、更高要求的監(jiān)控場(chǎng)景,這些工具很難滿(mǎn)足需求。
這時(shí)候就需要技術(shù)團(tuán)隊(duì)自己開(kāi)發(fā)指標(biāo)可視化工具,這里不僅包括監(jiān)控大盤(pán),還包括給不同人員看的監(jiān)控頁(yè)面,比如給業(yè)務(wù)看的,給運(yùn)維看的,給研發(fā)看的。
5.監(jiān)控告警
有了指標(biāo)采集、加工和展示,其實(shí)只完成了監(jiān)控系統(tǒng)的準(zhǔn)備工作,監(jiān)控告警是我們規(guī)劃監(jiān)控系統(tǒng)的重要目標(biāo)。
監(jiān)控告警的目標(biāo)是讓相關(guān)人員能夠提前感知到問(wèn)題,及時(shí)采取措施,防止問(wèn)題擴(kuò)大。
為了節(jié)省系統(tǒng)資源,監(jiān)控告警也是需要分級(jí)別的,根據(jù)問(wèn)題嚴(yán)重程度、業(yè)務(wù)影響范圍來(lái)規(guī)劃告警級(jí)別。這就要求業(yè)務(wù)系統(tǒng)在需求階段就要明確業(yè)務(wù)的重要性,輔助確定監(jiān)控級(jí)別。
比如涉及金錢(qián)的交易系統(tǒng)、支付系統(tǒng)、賬務(wù)系統(tǒng),對(duì)于公司來(lái)說(shuō)非常重要,可以把他們定義成嚴(yán)重級(jí)別,監(jiān)控到問(wèn)題后,通過(guò)短信、OA 消息通知到值班運(yùn)維人員,這樣值班運(yùn)維人員可以根據(jù)問(wèn)題情況及時(shí)通知到相關(guān)研發(fā)人員,即使問(wèn)題發(fā)生在半夜也能很快地采取措施。
對(duì)于影響較小的業(yè)務(wù)系統(tǒng)、批量交易,可以定義成主要級(jí)別,發(fā)生問(wèn)題后,短信或 OA 實(shí)時(shí)通知到系統(tǒng)負(fù)責(zé)人就可以。
對(duì)于沒(méi)有業(yè)務(wù)影響的交易,可以定義成次要級(jí)別,問(wèn)題發(fā)生后,只需要郵件通知到開(kāi)發(fā)人員,而且不用實(shí)時(shí)通知,每天集中一次或者幾次就可以。
6.應(yīng)急方案
應(yīng)急方案需要提前進(jìn)行設(shè)計(jì)、演練,這樣可以防患于未然。假如一個(gè)嚴(yán)重級(jí)別的告警半夜 2 點(diǎn)觸發(fā)了,研發(fā)人員睡夢(mèng)中被叫醒,如果沒(méi)有應(yīng)急方案,勢(shì)必會(huì)非常慌亂。
應(yīng)急方案可以根據(jù)系統(tǒng)的實(shí)際情況進(jìn)行設(shè)計(jì),比如重啟服務(wù)、接口限流、熔斷、集群擴(kuò)容、故障節(jié)點(diǎn)摘除等。
7.總結(jié)
監(jiān)控系統(tǒng)對(duì)于科技公司來(lái)說(shuō),非常重要。我們可以從指標(biāo)采集、指標(biāo)保存、指標(biāo)加工、指標(biāo)展示、監(jiān)控告警、應(yīng)急方案這些方面來(lái)進(jìn)行設(shè)計(jì)。希望本文對(duì)你設(shè)計(jì)監(jiān)控架構(gòu)有所幫助。