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