題目
監控是在產品生命周期的運維環節,能對產品的關鍵指標數據進行【實時跟蹤】并對異常數據進行【實時報警】。
一句話描述,監控系統可以幫我們【主動預防和發現】業務系統中的問題。
我們常說,監控系統是 “糧草”,業務系統是 “兵馬”,【兵馬未動,糧草先行】,其重要性可見一斑。
你都接觸過哪些監控系統或監控模式呢?能否抽象出監控系統的【架構模式】,并對架構模式中各個關鍵部分的職責進行分析?
解析
監控系統需要對指標數據進行【實時跟蹤】和【實時報警】,所以數據源非常關鍵;根據對數據源處理的方式,我們可以抽象出三類監控系統的【架構模式】,即:【輪詢計算模式】、【中心計算模式】和【邊緣計算模式】。
一、輪詢計算模式
在項目初創,業務和集群規模都非常小的時候,通常使用【輪詢計算模式】搭建監控系統,如下圖所示:
【輪詢計算模式】的監控系統主要包括這樣幾個關鍵部分:日志、腳本、中控機。
日志:服務在運行過程中會將日志打印在日志文件中,比如常見的錯誤日志;
腳本:針對特定的日志文件和特定的日志統計邏輯編寫特定的【腳本】,比如“ grep err error.log | wc -l ”;
中控機:中控機即是部署中控邏輯程序的服務器;中控機會定時發送指令到每臺業務服務器上,運行已經部署好的腳本來對日志進行統計,在中控機獲取到的統計結果超過預定的閾值時,進行報警。
輪詢模式的監控系統架構比較簡單,也非常容易落地實現。每臺服務器上的腳本在中控機指令的驅動下會輪詢對日志進行計算,不過這類計算比較簡單,以統計特定關鍵字的日志為主;每產生一類新的日志,需要根據邏輯編寫新的腳本,并需要對腳本進行部署。輪詢模式的監控系統適合小規模的集群系統。
二、中心計算模式
在上述【輪詢計算模式】的監控系統中,邏輯處理集中在 【腳本】單元,在部署和維護上很麻煩;【中心計算模式】的監控系統則將統計和分析邏輯進行中心化處理,如下圖所示:
【中心計算模式】的監控系統主要包括這樣幾個關鍵部分:日志、flume、kafka集群 和 大數據日志統計平臺。
日志:服務在運行過程中會將日志打印在日志文件中,在【中心計算模式】下,日志文件種類會很多,可以是錯誤日志,也可以各類業務信息日志;
flume:flume 是很常用的日志采集程序,它時刻監測日志文件,并讀取新增日志,然后將新增日志進行上報;常見的采集程序除了 flume外,還有 filebeat;
kafka集群:流處理平臺,對大量的采集程序客戶端生產的日志消息做數據緩沖,并與 消費端邏輯處理進行解耦;
大數據日志統計平臺:通過大數據實時數據處理技術,如:Spark/Storm/Flink,對日志根據指定關鍵字進行統計,在達到預設閾值時進行報警。
另外,ELK日志查詢平臺也可以從 kafka 集群中消費日志,然后對日志進行查詢。
所有服務節點打印的日志,都會被采集程序采集后上報到中心化的處理單元,即【大數據日志統計平臺】進行集中處理,而服務節點沒有任何的計算邏輯,所以這種模式叫做【中心計算模式】;業務開發同學有任何的統計和監控需求,直接將需求和日志格式提報給 “大數據”部門即可。【中心計算模式】的監控系統,可以對日志做非常靈活的統計和分析,但是 磁盤IO 和 網絡IO 非常大,而且中心計算單元機器成本非常高。
三、邊緣計算模式
上述兩種監控計算模式:【輪詢計算模式】和【中心計算模式】的處理對象都是服務程序打印的日志,這就決定了這兩種模式對資源的重量級消耗;【邊緣計算模式】的監控系統相對來說更輕量級,如下圖所示:
【邊緣計算模式】的監控系統主要包括SDK、agent、監控后臺系統 三部分。
SDK:SDK 是數據采集組件,嵌入在服務程序中運行;SDK提供函數供服務程序調用,常見函數如:Sum()、Avg()、Max()、Min()等;
agent:agent 是監控系統客戶端,作為獨立進程運行,在每臺服務器上會部署一個專門的 agent 進程;服務器上所有的服務程序調用 SDK 后采集到的數據,通過本機傳輸到 agent,由 agent 進行匯總后上報到 監控系統服務端;
監控后臺系統:監控后臺系統即監控系統服務端;后臺系統包括三大功能:接收 agent 上報的數據后,首先進行閾值告警判斷,如果超過閾值則要報警;上報的數據為了方便分析和展示需要進行持久性存儲(歷史久遠的數據意義不大,只存儲近期數據即可);最后需要一個管理平臺對閾值進行設定,對監控項數據進行圖形化展示。
【邊緣計算模式】的監控系統,采集程序 SDK 采集的是匯總過的一個數值,而非日志。舉個例子, 要統計消息發送接口(msg_send)的 QPS,則服務程序需要在接口的入口處添加一行 代碼:Sum("msg_send", 1);SDK會定時或定量將匯總過的一個數值傳輸給 agent,agent 會定時上報再次匯總過的數值到監控系統服務端,服務端也會對 agent 上報的數值進行聚合和統計。SDK 和 agent 基于業務服務器資源對監控的數據進行了計算,大大降低了服務端的壓力,所以稱為【邊緣計算模式】。?
下面對 【中心計算模式】和【邊緣計算模式】進行簡單對比:
三種模式的監控系統各有優劣,你是否都經歷過?!