本文主要科普一些監(jiān)控系統(tǒng)相關(guān)入門知識傅物。
基礎(chǔ)概念
監(jiān)控的定義
監(jiān)控是收集和分析數(shù)據(jù)以確定業(yè)務(wù)應(yīng)用程序的性能夯辖,運(yùn)行狀況和可用性及其依賴的資源的行為。 有效的監(jiān)控策略可幫助用戶了解應(yīng)用程序組件的詳細(xì)進(jìn)程董饰,還可以通過主動通知關(guān)鍵問題來避免錯(cuò)誤發(fā)生蒿褂,以便在問題發(fā)生之前解決問題。
監(jiān)控的核心價(jià)值
下面簡單梳理一下監(jiān)控系統(tǒng)的核心價(jià)值:
- 實(shí)時(shí)的數(shù)據(jù)查看
- 歷史狀態(tài)回顧
- 資源使用數(shù)據(jù)報(bào)表訂閱
- 異常告警
時(shí)間序列
監(jiān)控面向的對象是時(shí)間序列的數(shù)據(jù)卒暂,那么時(shí)間序列的數(shù)據(jù)有什么樣的特征呢啄栓?
- 嚴(yán)格按時(shí)間順序進(jìn)行排序的一組隨機(jī)變量
- 每個(gè)變量都包含有時(shí)間戳及值
- 常見的時(shí)間序列,包括服務(wù)器cpu利用率也祠、服務(wù)請求速率等
- 非常有用昙楚,能夠反映服務(wù)的當(dāng)前狀態(tài)、在合理分析后能夠?qū)ξ磥淼内厔葸M(jìn)行預(yù)測
時(shí)間序列數(shù)據(jù)庫
大數(shù)據(jù)時(shí)代诈嘿,各種軟硬件設(shè)備聯(lián)網(wǎng)堪旧,需要連續(xù)監(jiān)控削葱,將會產(chǎn)生大量的時(shí)間序列的數(shù)據(jù),針對這一類的數(shù)據(jù)如何針對性地進(jìn)行存儲和聚合查詢呢淳梦?作為這一類數(shù)據(jù)存儲的基礎(chǔ)設(shè)施的時(shí)間序列數(shù)據(jù)庫誕生了析砸。
時(shí)間序列數(shù)據(jù)庫是一種針對時(shí)間序列特點(diǎn)進(jìn)行優(yōu)化,專用于處理時(shí)間序列數(shù)據(jù)的軟件系統(tǒng)爆袍。 從2000年左右出現(xiàn)首繁,在2014年被DB-Engine列為獨(dú)立的數(shù)據(jù)類型進(jìn)行排名。 典型實(shí)現(xiàn):InfluxDB\OpenTSDB\TimescaleDB\Prometheus等螃宙。
從下圖我們可以看到蛮瞄,自2018年以來,時(shí)間序列數(shù)據(jù)庫的受歡迎程度突飛猛進(jìn)谆扎,這也是當(dāng)前大數(shù)據(jù)時(shí)代發(fā)展的必然要求挂捅。
下圖是來自DB-Engine關(guān)于當(dāng)前流行的時(shí)間序列數(shù)據(jù)庫的排名,比較值得我們重點(diǎn)關(guān)注的是InfluxDB\OpenTSDB\Prometheus堂湖,后續(xù)我也會寫專門的文章介紹這三個(gè)時(shí)間序列數(shù)據(jù)庫闲先。
監(jiān)控系統(tǒng)的分類
根據(jù)Peter Bourgon.2017年分布式追蹤峰會上提出的Metrics, Tracing 和 Logging 的關(guān)系,他將業(yè)界所有監(jiān)控系統(tǒng)劃分為如下三類:
- Logging:即日志監(jiān)控 无蜂。
記錄系統(tǒng)發(fā)生的離散事件伺糠。如:
- 用戶的某次特殊操作
- 實(shí)例異常離線
- Metrics:即指標(biāo)監(jiān)控 。
反映系統(tǒng)狀態(tài)的聚合型數(shù)據(jù)斥季,從形式上來看训桶,指標(biāo)為時(shí)間序列。如:
- cpu利用率
- 磁盤讀速率
- Tracing:即分布式追蹤酣倾。
請求處理鏈相關(guān)的監(jiān)控?cái)?shù)據(jù)舵揭,也是離散型。
- 每個(gè)請求的處理狀態(tài)
- 哪些節(jié)點(diǎn)在處理特定請求時(shí)失敗
- 哪些節(jié)點(diǎn)在處理特定請求時(shí)響應(yīng)慢
宏觀上看躁锡,指標(biāo)監(jiān)控的內(nèi)容主要包括的內(nèi)容如下:
- 主機(jī)狀態(tài)監(jiān)控:監(jiān)控計(jì)算機(jī)的 CPU午绳、內(nèi)存狀態(tài)等
- 應(yīng)用狀態(tài)監(jiān)控:監(jiān)控系統(tǒng)中的應(yīng)用程序的狀態(tài),如資源占用情況映之、失敗重啟情況等
- 網(wǎng)絡(luò)與連接監(jiān)控:監(jiān)控網(wǎng)絡(luò)的帶寬使用情況拦焚、延遲與丟包情況等
- 集群狀態(tài)監(jiān)控:監(jiān)控集群中節(jié)點(diǎn)的生命周期、節(jié)點(diǎn)的選舉情況等
- 外部依賴監(jiān)控:監(jiān)控外部依賴的可用性等
指標(biāo)監(jiān)控系統(tǒng)的兩類實(shí)現(xiàn)模型
指標(biāo)Metrics類別的監(jiān)控系統(tǒng)有兩大類典型的實(shí)現(xiàn)模型杠输,分別是推模型和拉模型赎败。
拉模型
- 服務(wù)端感知客戶端并決定從哪些客戶端拉取數(shù)據(jù)
- 服務(wù)端決定數(shù)據(jù)采集頻率
- 服務(wù)端和客戶端必須保證在同一網(wǎng)絡(luò)平面里
推模型
- 服務(wù)端不感知客戶端,客戶端主動感知服務(wù)端
- 客戶端決定數(shù)據(jù)的采集頻率
- 服務(wù)端和客戶端可以不在同一網(wǎng)絡(luò)平面里蠢甲,如客戶端在
NAT設(shè)備之后
監(jiān)控系統(tǒng)一般架構(gòu)
監(jiān)控系統(tǒng)的話題很大僵刮,隨著業(yè)務(wù)的復(fù)雜,也會衍生出各種各樣不同的形態(tài)。但總體上繞不開三個(gè)部分:
- 采集
- 存儲
- 報(bào)警
更加細(xì)節(jié)一點(diǎn)妓笙,監(jiān)控系統(tǒng)所要回答的基本問題包括:
- 監(jiān)控?cái)?shù)據(jù)由誰采集?怎么采集能岩?怎么上報(bào)寞宫?
- 監(jiān)控?cái)?shù)據(jù)如何處理?例如拉鹃,怎么做固定閾值的報(bào)警判斷辈赋?動態(tài)閾值的報(bào)警判斷?未來擴(kuò)容需求的預(yù)測膏燕?
- 監(jiān)控?cái)?shù)據(jù)是如何被存儲的钥屈?
- 監(jiān)控?cái)?shù)據(jù)是如何聚合和展示的?
因此坝辫,在設(shè)計(jì)一般的監(jiān)控系統(tǒng)時(shí)篷就,會包括如下的組件:
- 采集: 獲取來自包括操作系統(tǒng),傳感器近忙、隊(duì)列竭业、數(shù)據(jù)庫和網(wǎng)絡(luò)等任何地方的一切數(shù)據(jù),包括metrics, events, logs還是traces及舍,并且將他們存儲在一個(gè)高性能的未辆、每秒能夠處理上百萬條數(shù)據(jù)服務(wù)器上。
- 處理: 對數(shù)據(jù)進(jìn)行高效地分析锯玛、聚合咐柜、處理,包括機(jī)器學(xué)習(xí)攘残。
- 動作: 實(shí)現(xiàn)自動化拙友。只需單擊即可設(shè)置警報(bào)或根據(jù)機(jī)器學(xué)習(xí)算法執(zhí)行復(fù)雜的異常檢測。發(fā)送警報(bào)給Slack肯腕,SMS和PagerDuty等熱門服務(wù)献宫。創(chuàng)建自定義觸發(fā)器以執(zhí)行任何操作。