運(yùn)維監(jiān)控做成這樣,就達(dá)到 BATJ 的水準(zhǔn)了
一、 導(dǎo)語(yǔ)
我們知道監(jiān)控系統(tǒng)的目標(biāo)是:為保障業(yè)務(wù) SLA,幫忙我們更全面、細(xì)致的了解業(yè)務(wù)系統(tǒng)的運(yùn)行狀態(tài),更及時(shí)的發(fā)現(xiàn)系統(tǒng)風(fēng)險(xiǎn),同時(shí)給技術(shù)運(yùn)營(yíng)的同學(xué)爭(zhēng)取更多化解風(fēng)險(xiǎn)的時(shí)間和解決問題的方向。
為此有使用開源監(jiān)控系統(tǒng)(例如 Nagios、Zabbix、Prometheus、Grafana等),也有為了滿足自己的業(yè)務(wù)需求,會(huì)使用自己開發(fā)的監(jiān)控系統(tǒng)(例如小米的open falcon,騰訊內(nèi)部的監(jiān)控系統(tǒng) tnm2【基礎(chǔ)監(jiān)控】、cms【日志監(jiān)控】等)。
隨著業(yè)務(wù)系統(tǒng)對(duì)監(jiān)控系統(tǒng)的依賴,我們對(duì)監(jiān)控系統(tǒng)的高可用性、擴(kuò)展性等能力都會(huì)有更高的要求,那我們應(yīng)該如何來全面的、系統(tǒng)的看待和提高自身監(jiān)控系統(tǒng)的要求呢?
二、 能力提升方法
如何進(jìn)行全面、系統(tǒng)的進(jìn)行看待監(jiān)控系統(tǒng)的要求,有很多辦法,遇到問題的時(shí)候?qū)φ找恍╉敿?jí)公司的優(yōu)秀監(jiān)控系統(tǒng),找出提升點(diǎn)。
也可以對(duì)照由 中國(guó)信息通信研究院牽頭 及 BATJ 等各大互聯(lián)網(wǎng)巨頭參與的專家《研發(fā)運(yùn)營(yíng)一體化(DevOps)能力成熟度模型》中關(guān)于 “監(jiān)控管理” 能力評(píng)估內(nèi)容,根據(jù)標(biāo)準(zhǔn)的評(píng)估內(nèi)容我們可以看到 BATJ 公司是如何定義一個(gè)先進(jìn)的監(jiān)控系統(tǒng)的能力,下面我們來一起看看:
三、 提升點(diǎn):能力項(xiàng)
我們發(fā)現(xiàn)整個(gè)關(guān)于“監(jiān)控管理”的能力項(xiàng)分成三個(gè)能力項(xiàng),分別是“監(jiān)控采集”、“數(shù)據(jù)管理” 和 “數(shù)據(jù)應(yīng)用” 三個(gè),能力項(xiàng)內(nèi)又包括了相關(guān)的子能力項(xiàng),我摘取一些我自己覺得很有代表性的點(diǎn)來進(jìn)行分析:
a)【能力項(xiàng)1:監(jiān)控采集】
1.能力點(diǎn):“支持提供開放式、自定義的數(shù)據(jù)內(nèi)容采集上報(bào)方案”
疑問:為什么需要對(duì)上報(bào)方案有要求呢?
解讀:比如騰訊內(nèi)部的自研日志監(jiān)控系統(tǒng)CMS,對(duì)擁有多種采集方案“Agent、SDK、Kafka、ES等”,各種不同的采集方案應(yīng)對(duì)不同的場(chǎng)景
Agent:類似filebeat,指定服務(wù)器的具體路徑,對(duì)文件的inode節(jié)點(diǎn)進(jìn)行偵聽,發(fā)現(xiàn)新增立即進(jìn)行上報(bào)數(shù)據(jù);
SDK:可以嵌入到業(yè)務(wù)代碼邏輯里面,應(yīng)對(duì)一些敏感數(shù)據(jù)不落地但是又需要上報(bào)的場(chǎng)景,可以在業(yè)務(wù)邏輯中對(duì)敏感數(shù)據(jù)進(jìn)行脫敏(染色),然后再進(jìn)行上報(bào),也可以應(yīng)對(duì)一些日志量太大,不想經(jīng)過日志落盤這個(gè)中間消耗性能環(huán)節(jié)的場(chǎng)景;
例如:金融交易場(chǎng)景,要對(duì)交易數(shù)據(jù)做監(jiān)控,但是又有一些敏感數(shù)據(jù)不想進(jìn)入監(jiān)控系統(tǒng),這個(gè)時(shí)候就需要使用SDK在產(chǎn)生日志的時(shí)候進(jìn)行脫敏,將用戶信息隱藏掉,再上報(bào)到監(jiān)控系統(tǒng)內(nèi)部;
Kafka:可以應(yīng)對(duì)一份日志多份消費(fèi)者的場(chǎng)景,可以讓業(yè)務(wù)將日志放入Kafka后,多個(gè)消費(fèi)者進(jìn)行自行提取即可;
例如:還是金融交易場(chǎng)景,一份日志可以做安全審計(jì),同時(shí)也可以做監(jiān)控系統(tǒng),這時(shí)候就可以安全審計(jì)系統(tǒng)和監(jiān)控系統(tǒng)同時(shí)拉取一份Kafka的主題數(shù)據(jù),不用打印多份;
2.能力點(diǎn):“支持多種傳輸方案 ,如同時(shí)具備推與拉數(shù)據(jù)”
疑問:為什么需要具備推與拉數(shù)據(jù)呢?具備一種不可以嗎?
解讀:正常的監(jiān)控系統(tǒng)一般都是采用拉數(shù)據(jù)的方案,因?yàn)橛煞?wù)器端發(fā)起,順序和過程可控,但是為什么需要拉數(shù)據(jù)呢?
原因是在幾種場(chǎng)景下需要這種能力:網(wǎng)絡(luò)限制,當(dāng)出現(xiàn)網(wǎng)絡(luò)限制時(shí),如安全等保中規(guī)定,高安全等級(jí)區(qū)域可以發(fā)起對(duì)低安全等級(jí)區(qū)域的鏈接,反之則不可以,所以需要從高安全等級(jí)區(qū)域推送數(shù)據(jù)至監(jiān)控服務(wù);性能要求,如同 Zabbix 的 active模式 和 passive模式;服務(wù)特性,部分服務(wù)并么有對(duì)外提供請(qǐng)求接口,則需要內(nèi)部邏輯對(duì)外進(jìn)行主動(dòng) Push 監(jiān)控?cái)?shù)據(jù)。為了保證對(duì)業(yè)務(wù)系統(tǒng)和流程全面的監(jiān)控,我們需要有多種能力的滿足;
例如:某個(gè)業(yè)務(wù)中有個(gè)定時(shí)任務(wù)將離線數(shù)據(jù)統(tǒng)計(jì)并更新至數(shù)據(jù)庫(kù),該定時(shí)任務(wù)并無(wú)任何請(qǐng)求訪問接口,我們?nèi)绾文鼙O(jiān)控它的運(yùn)行狀態(tài)呢?可以在定時(shí)任務(wù)邏輯內(nèi)部加入一個(gè)心跳機(jī)制,定期向監(jiān)控系統(tǒng)push自身的監(jiān)控狀況,所以推的傳輸能力也是監(jiān)控必不可少的;
b)【能力項(xiàng)2:數(shù)據(jù)管理】
1.能力點(diǎn):“具備對(duì)原始數(shù)據(jù)進(jìn)行規(guī)則化處理的能力”
疑問:為什么在接收數(shù)據(jù)的時(shí)候需要有規(guī)則化的處理呢,落地之后進(jìn)行規(guī)則化處理不行嗎?
解讀:基于性能高效及數(shù)據(jù)完整性的考慮,需要在接收過程具備這個(gè)能力,我們還是以騰訊自研日志監(jiān)控系統(tǒng)為例,當(dāng)我們接收大量的日志Agent上報(bào)的時(shí)候,可能日志不一定是按照我們的規(guī)則進(jìn)行上報(bào),如果一旦有日志格式錯(cuò)誤,會(huì)導(dǎo)致大量的入庫(kù)數(shù)據(jù)異常,還會(huì)導(dǎo)致數(shù)據(jù)污染,這個(gè)時(shí)候需要一個(gè)規(guī)則化處理的能力,將不滿足規(guī)則的數(shù)據(jù)進(jìn)行清洗。同時(shí)如果大量的日志異常,落地之后進(jìn)行清洗和處理將會(huì)消耗大量的算力,對(duì)于后來也是很大的壓力,所以具備這個(gè)能力是非常有必要的。
2.能力點(diǎn):“對(duì)異構(gòu)數(shù)據(jù)源的關(guān)聯(lián)分析處理能力”
疑問:異構(gòu)數(shù)據(jù)源關(guān)聯(lián)分析處理能力具體是指什么?
解讀:異構(gòu)數(shù)據(jù)源廣義上是指“數(shù)據(jù)結(jié)構(gòu)、存取方式、形式不一樣的多個(gè)數(shù)據(jù)源”,我們還是以騰訊內(nèi)部的 自研日志監(jiān)控系統(tǒng)CMS 為例,當(dāng) 某個(gè)服務(wù)上報(bào)日志里面有 源IP地址 和 業(yè)務(wù)關(guān)鍵數(shù)據(jù),我們簡(jiǎn)單排重和排序就可以知道哪個(gè)源IP地址訪問最多,但是如果我們想知道某個(gè)城市、省份、甚至是運(yùn)營(yíng)商(電信、移動(dòng)、聯(lián)通),那就需要這個(gè)關(guān)聯(lián)分析能力,我們知道有一種數(shù)據(jù)是IP地址對(duì)應(yīng)城市、省份 和 運(yùn)營(yíng)商(由于不斷在更新,所以需要獨(dú)立維護(hù)),通過這個(gè)數(shù)據(jù)和日志數(shù)據(jù)一關(guān)聯(lián)就可以清楚地看到我們要的結(jié)果;
3.能力點(diǎn):“具備數(shù)據(jù)一致性、完整性和可用性等管理特性”
疑問:數(shù)據(jù)一致性、完整性和可用性好理解,但是管理特性是什么?
解讀:我們還是以騰訊內(nèi)部的 自研日志監(jiān)控系統(tǒng)CMS 為例,日志監(jiān)控系統(tǒng)是由用戶數(shù)據(jù)上報(bào)、數(shù)據(jù)格式化、處理、聚合(統(tǒng)計(jì)、維度分析)、入庫(kù)/投遞、寫入時(shí)序數(shù)據(jù)庫(kù)等多個(gè)環(huán)節(jié)組成,當(dāng)用戶看到最終結(jié)果異常如何能快速知道哪里出了問題呢?這個(gè)就需要有相關(guān)的管理特性來實(shí)現(xiàn)了,在每個(gè)環(huán)節(jié)都增加自監(jiān)控的能力,清晰看到數(shù)據(jù)流和曲線圖,可以快速發(fā)現(xiàn)異常點(diǎn);
c)【能力項(xiàng)3:數(shù)據(jù)應(yīng)用】
1.能力點(diǎn):“具備告警風(fēng)暴管控的能力, 如抑制、收斂等”
疑問:告警收斂能力常用的方式都有哪些呢?
解讀:一般在告警收斂中常用的規(guī)則有“基于時(shí)間收斂”、“基于事件收斂” 和 “基于級(jí)別收斂”等,根據(jù)不同的業(yè)務(wù)需求可以有不同的收斂方式?;跁r(shí)間是最常用的,Nagios 和 Zabbix 的基礎(chǔ)配置。基于事件,一般是需要有主動(dòng)和被動(dòng)調(diào)用關(guān)系的告警,比如Zabbix 的 trigger-Dependencies 的功能?;诩?jí)別的收斂更是在開源和自研的系統(tǒng)中被使用。
四、結(jié)尾
如何看待和提高監(jiān)控系統(tǒng)的能力,不管是參照開源監(jiān)控系統(tǒng)對(duì)比學(xué)習(xí),還是從《研發(fā)運(yùn)營(yíng)一體化(DevOps)能力成熟度模型》中對(duì)比學(xué)習(xí),都是一個(gè)不錯(cuò)的方向,當(dāng)然里面的知識(shí)點(diǎn)是集合了多數(shù)大牛的智慧結(jié)晶,本文只是摘取了少量的點(diǎn)進(jìn)行解讀。