想吃透監(jiān)控系統(tǒng),就這一篇夠不夠?

2021-02-13    分類(lèi): 網(wǎng)站建設(shè)

經(jīng)濟(jì)高速發(fā)展的今天,我們處于信息大爆炸的時(shí)代。隨著經(jīng)濟(jì)發(fā)展,信息借助互聯(lián)網(wǎng)的力量在全球自由地流動(dòng),于是就催生了各種各樣的服務(wù)平臺(tái)和軟件系統(tǒng)。

圖片來(lái)自 Pexels

由于業(yè)務(wù)的多樣性,這些平臺(tái)和系統(tǒng)也變得異常的復(fù)雜。如何對(duì)其進(jìn)行監(jiān)控和維護(hù)是我們 IT 人需要面對(duì)的重要問(wèn)題。就在這樣一個(gè)紛繁復(fù)雜地環(huán)境下,監(jiān)控系統(tǒng)粉墨登場(chǎng)了。

今天,我們會(huì)對(duì) IT 監(jiān)控系統(tǒng)進(jìn)行介紹,包括其功能,分類(lèi),分層;同時(shí)也會(huì)介紹幾款流行的監(jiān)控平臺(tái)。

監(jiān)控系統(tǒng)的功能

在 IT 運(yùn)維過(guò)程中,常遇到這樣的情況:

  • 某個(gè)業(yè)務(wù)模塊出現(xiàn)問(wèn)題,運(yùn)維人員并不知道,發(fā)現(xiàn)的時(shí)候問(wèn)題已經(jīng)很?chē)?yán)重了。
  • 系統(tǒng)出現(xiàn)瓶頸了,CPU 占用持續(xù)升高,內(nèi)存不足,磁盤(pán)被寫(xiě)滿(mǎn);網(wǎng)絡(luò)請(qǐng)求突增,超出網(wǎng)關(guān)承受的壓力。

以上這些問(wèn)題一旦發(fā)生,會(huì)對(duì)我們的業(yè)務(wù)產(chǎn)生巨大的影響。因此,每個(gè)公司或者 IT 團(tuán)隊(duì)都會(huì)針對(duì)此類(lèi)情況建立自己的 IT 監(jiān)控系統(tǒng)。

Java 代碼運(yùn)行原理圖

在介紹這種方式之前,我們先來(lái)復(fù)習(xí)一下 Java 代碼運(yùn)行的原理。通常我們會(huì)把 Java 源代碼,通過(guò)“Java 編譯器”編譯成 Class 文件。再把這個(gè) Class 的字節(jié)碼文件裝載到“類(lèi)裝載器”中進(jìn)行字節(jié)碼的驗(yàn)證。

最后,把驗(yàn)證過(guò)后的字節(jié)碼發(fā)送到“Java 解釋器”和“及時(shí)編譯器”交給“Java 運(yùn)行系統(tǒng)”運(yùn)行。

Java 探針,字節(jié)碼增強(qiáng)的方式就是利用 Java 代理,這個(gè)代理是運(yùn)行方法之前的攔截器。

在 JVM 加載 Class 二進(jìn)制文件的時(shí)候,利用 ASM 動(dòng)態(tài)的修改加載的 Class 文件,在監(jiān)控的方法前后添加需要監(jiān)控的內(nèi)容。

例如:添加計(jì)時(shí)語(yǔ)句,用于記錄方法耗時(shí)。將方法耗時(shí)存入處理器,利用棧先特性(先進(jìn)后出)處理方法調(diào)用順序。

每當(dāng)請(qǐng)求處理結(jié)束后,將耗時(shí)方法和入?yún)?map 輸出到文件中,然后根據(jù) map 中相應(yīng)參數(shù),區(qū)分出耗時(shí)業(yè)務(wù)。

最后將相應(yīng)耗時(shí)文件取下來(lái),轉(zhuǎn)化為 xml 格式并進(jìn)行解析,通過(guò)瀏覽器將代碼分層結(jié)構(gòu)展示出來(lái)。

時(shí)序數(shù)據(jù)庫(kù)數(shù)據(jù)模型圖例

時(shí)序數(shù)據(jù)庫(kù)的存儲(chǔ)原理,關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)采用的是 B tree,雖然降低了數(shù)據(jù)查詢(xún)的磁盤(pán)尋道時(shí)間,但是無(wú)法解決大量數(shù)據(jù)寫(xiě)入時(shí)的磁盤(pán)效率。

由于監(jiān)控系統(tǒng)的應(yīng)用場(chǎng)景,經(jīng)常會(huì)遇到大批量的數(shù)據(jù)寫(xiě)入,所以我們會(huì)選擇 LSMtree(Log Structured Merge Tree)存儲(chǔ)時(shí)序數(shù)據(jù)庫(kù)。

LSMtree(Log Structured Merge Tree),從字面意義上理解,記錄的數(shù)據(jù)按照日志結(jié)構(gòu)(Log Structured)追加到系統(tǒng)中,然后通過(guò)合并樹(shù)(Merge Tree)的方式將其合并。

來(lái)看一個(gè) LevelDB 的例子,方便我們理解,LSM-tree 被分成三種文件:

  • 接收寫(xiě)入請(qǐng)求的 memtable 文件(內(nèi)存中)
  • 不可修改的 immutable memtable 文件(內(nèi)存中)
  • 磁盤(pán)上的 SStable文件(Sorted String Table),有序字符串表,這個(gè)有序的字符串就是數(shù)據(jù)的key。SStable 一共有七層(L0 到 L6)。下一層的總大小限制是上一層的 10 倍。

LSMtree LevelDB 存儲(chǔ)示意圖

LSMtree 寫(xiě)入流程:

  • 將數(shù)據(jù)追加到日志 WAL(Write Ahead Log)中,寫(xiě)入日志的目的是為了防止內(nèi)存數(shù)據(jù)丟失,可以及時(shí)恢復(fù)。
  • 把數(shù)據(jù)寫(xiě)到 memtable 中。
  • 當(dāng) memtable 滿(mǎn)了(超過(guò)一定閥值),就將這個(gè) memtable 轉(zhuǎn)入 immutable memtable 中,用新的 memtable 接收新的數(shù)據(jù)請(qǐng)求。
  • immutablememtable 一旦寫(xiě)滿(mǎn)了, 就寫(xiě)入磁盤(pán)。并且先存儲(chǔ) L0 層的 SSTable 磁盤(pán)文件,此時(shí)還不需要做文件的合并。

每層的所有文件總大小是有限制的(8MB,10MB,100MB… 1TB)。從 L1 層往后,每下一層容量增大十倍。

  • 某一層的數(shù)據(jù)文件總量超過(guò)閾值,就在這一層中選擇一個(gè)文件和下一層的文件進(jìn)行合并。

如此這般上層的數(shù)據(jù)都是較新的數(shù)據(jù),查詢(xún)可以從上層開(kāi)始查找,依次往下,并且這些數(shù)據(jù)都是按照時(shí)間序列存放的。

監(jiān)控系統(tǒng)的分層

談完了監(jiān)控系統(tǒng)的分類(lèi),再來(lái)聊聊監(jiān)控系統(tǒng)的分層。用戶(hù)請(qǐng)求到數(shù)據(jù)返回,經(jīng)歷系統(tǒng)中的層層關(guān)卡。

監(jiān)控系統(tǒng)分層示意圖

一般我們將監(jiān)控系統(tǒng)分為五層來(lái)考慮,當(dāng)然也有人分成三層,大致的意思都差不多,僅供參考:

  • 客戶(hù)端監(jiān)控,用戶(hù)行為信息,業(yè)務(wù)返回碼,客戶(hù)端性能,運(yùn)營(yíng)商,版本,操作系統(tǒng)等。
  • 業(yè)務(wù)層監(jiān)控,核心業(yè)務(wù)的監(jiān)控,例如:登錄,注冊(cè),下單,支付等等。
  • 應(yīng)用層監(jiān)控,相關(guān)的技術(shù)參數(shù),例如:URL 請(qǐng)求次數(shù),Service 請(qǐng)求數(shù)量,SQL 執(zhí)行的結(jié)果,Cache 的利用率,QPS 等等。
  • 系統(tǒng)層監(jiān)控,物理
  • Zabbix 的部署模式

    Zabbix 的數(shù)據(jù)采集,主要有兩種模式:Server 主動(dòng)拉取數(shù)據(jù)和 Agent 主動(dòng)上報(bào)數(shù)據(jù)。

    以 Server 拉取數(shù)據(jù)為例,用戶(hù)在 Web-portal 中,設(shè)置需要監(jiān)控的機(jī)器,配置監(jiān)控項(xiàng),告警策略。Zabbix-Server 會(huì)根據(jù)策略主動(dòng)獲取 Agent 的數(shù)據(jù),然后存儲(chǔ)到 MySQL 中。

    同時(shí)根據(jù)用戶(hù)配置的策略,判定是否需要告警。用戶(hù)可以在 Web 端,以圖表的形式,查看各種指標(biāo)的歷史趨勢(shì)。

    在 Zabbix 中,將 Server 主動(dòng)拉取數(shù)據(jù)的方式稱(chēng)之為 Active Check。這種方式配置起來(lái)較為方便,但是會(huì)對(duì) Zabbix-Server 的性能存在影響。

    所以在生產(chǎn)環(huán)境中,一般會(huì)選擇主動(dòng)推送數(shù)據(jù)到 Zabbix-Server 的方式,稱(chēng)之為 Trapper。

    即用戶(hù)可以定時(shí)生成數(shù)據(jù),再按照 Zabbix 定義的數(shù)據(jù)格式,批量發(fā)送給 Zabbix-Server,這樣可以大大提高 Server 的處理能力。

    Proxy,作為可選項(xiàng),起到收集 Agent 數(shù)據(jù)并且轉(zhuǎn)發(fā)到 Server 的作用。

    當(dāng) Server 和 Agent 不在一個(gè)網(wǎng)絡(luò)內(nèi),就需要使用 Proxy 做遠(yuǎn)程監(jiān)控,特別是遠(yuǎn)程網(wǎng)絡(luò)有防火墻的時(shí)候。同時(shí)它也可以分擔(dān) Server 的壓力,降低 Server 處理連接數(shù)的開(kāi)銷(xiāo)。

    Prometheus(普羅米修斯)

    隨著這幾年云環(huán)境的發(fā)展,Prometheus 被廣泛地認(rèn)可。它的本質(zhì)是時(shí)間序列數(shù)據(jù)庫(kù),而 Zabbix 采用 MySQL 進(jìn)行數(shù)據(jù)存儲(chǔ)。

    從上面我們對(duì)時(shí)間序列數(shù)據(jù)庫(kù)的分析來(lái)看,Prometheus 能夠很好地支持大量數(shù)據(jù)的寫(xiě)入。

    它采用拉的模式(Pull)從應(yīng)用中拉取數(shù)據(jù),并通過(guò) Alert 模塊實(shí)現(xiàn)監(jiān)控預(yù)警。據(jù)說(shuō)單機(jī)可以消費(fèi)百萬(wàn)級(jí)時(shí)間序列。

    一起來(lái)看看 Prometheus 的幾大組件:

    • Prometheus Server,用于收集和存儲(chǔ)時(shí)間序列數(shù)據(jù),負(fù)責(zé)監(jiān)控?cái)?shù)據(jù)的獲取,存儲(chǔ)以及查詢(xún)。
    • 監(jiān)控目標(biāo)配置,Prometheus Server 可以通過(guò)靜態(tài)配置管理監(jiān)控目標(biāo),也可以配合 Service Discovery(K8s,DNS,Consul)實(shí)現(xiàn)動(dòng)態(tài)管理監(jiān)控目標(biāo)。
    • 監(jiān)控目標(biāo)存儲(chǔ),Prometheus Server 本身就是一個(gè)時(shí)序數(shù)據(jù)庫(kù),將采集到的監(jiān)控?cái)?shù)據(jù)按照時(shí)間序列存儲(chǔ)在本地磁盤(pán)中。
    • 監(jiān)控?cái)?shù)據(jù)查詢(xún),Prometheus Server 對(duì)外提供了自定義的 PromQL 語(yǔ)言,實(shí)現(xiàn)對(duì)數(shù)據(jù)的查詢(xún)以及分析。
    • Client Library,客戶(hù)端庫(kù)。為需要監(jiān)控的服務(wù)生成相應(yīng)的 Metrics 并暴露給 Prometheus Server。
    • 當(dāng) Prometheus Server 來(lái) Pull 時(shí),直接返回實(shí)時(shí)狀態(tài)的 Metrics。通常會(huì)和 Job 一起合作。
    • Push Gateway,主要用于短期的 Jobs。由于這類(lèi) Jobs 存在時(shí)間較短,可能在 Prometheus 來(lái) Pull 之前就消失了。為此,這些 Jobs 可以直接向 Prometheus Server 端推送它們的 Metrics。
    • Exporters,第三方服務(wù)接口。將 Metrics(數(shù)據(jù)集合)發(fā)送給 Prometheus。
    • Exporter 將監(jiān)控?cái)?shù)據(jù)采集的端點(diǎn),通過(guò) HTTP 的形式暴露給 Prometheus Server,使其通過(guò) Endpoint 端點(diǎn)獲取監(jiān)控?cái)?shù)據(jù)。
    • Alertmanager,從 Prometheus Server 端接收到 Alerts 后,會(huì)對(duì)數(shù)據(jù)進(jìn)行處理。例如:去重,分組,然后根據(jù)規(guī)則,發(fā)出報(bào)警。
    • Web UI,Prometheus Server 內(nèi)置的 Express Browser UI,通過(guò) PromQL 實(shí)現(xiàn)數(shù)據(jù)的查詢(xún)以及可視化。

    Prometheus 架構(gòu)圖

    說(shuō)完了 Prometheus 的組件,再來(lái)看看 Prometheus 的架構(gòu):

    • Prometheus Server 定期從 Jobs/Exporters 中拉 Metrics。同時(shí)也可以接收來(lái)自 Pushgateway 發(fā)過(guò)來(lái)的 Metrics。
    • Prometheus Server 將接受到的數(shù)據(jù)存儲(chǔ)在本地時(shí)序數(shù)據(jù)庫(kù),并運(yùn)行已定義好的 alert.rules(告警規(guī)則),一旦滿(mǎn)足告警規(guī)則就會(huì)向 Alertmanager 推送警報(bào)。
    • Alertmanager 根據(jù)配置文件,對(duì)接收到的警報(bào)進(jìn)行處理,例如:發(fā)出郵件告警,或者借助第三方組件進(jìn)行告警。
    • WebUI/Grafana/APIclients,可以借助 PromQL 對(duì)監(jiān)控?cái)?shù)據(jù)進(jìn)行查詢(xún)。

    最后將兩個(gè)工具進(jìn)行比較如下:

    Zabbix 和 Prometheus 比較圖

    從上面的比較可以看出:

    • Zabbix 的成熟度更高,上手更快。高集成度導(dǎo)致靈活性較差,在監(jiān)控復(fù)雜度增加后,定制難度會(huì)升高。而且使用的關(guān)系型數(shù)據(jù)庫(kù),對(duì)于大規(guī)模的監(jiān)控?cái)?shù)據(jù)插入和查詢(xún)是個(gè)問(wèn)題。
    • Prometheus 上手難度大,定制靈活度高,有較多數(shù)據(jù)聚合的可能,而且有時(shí)序數(shù)據(jù)庫(kù)的加持。
    • 對(duì)于監(jiān)控物理機(jī)或者監(jiān)控環(huán)境相對(duì)穩(wěn)定的情況,Zabbix 有明顯優(yōu)勢(shì)。如果監(jiān)控場(chǎng)景多是云環(huán)境的話(huà),推薦使用 Prometheus。

    總結(jié)

    監(jiān)控系統(tǒng)思維導(dǎo)圖

    監(jiān)控系統(tǒng)對(duì) IT 系統(tǒng)運(yùn)維意義重大,從狀態(tài)監(jiān)控到收集/分析數(shù)據(jù),到故障報(bào)警,以及問(wèn)題解決,最后歸檔報(bào)表,協(xié)助運(yùn)維復(fù)盤(pán)。

    監(jiān)控系統(tǒng)分為三大類(lèi),日志類(lèi),調(diào)用鏈類(lèi),度量類(lèi),他們有各自的特點(diǎn),且應(yīng)用場(chǎng)景各不相同。

    因?yàn)橐獙?duì)整個(gè) IT 系統(tǒng)進(jìn)行監(jiān)控,所以將其分為五層,分別是,客戶(hù)端,業(yè)務(wù)層,應(yīng)用層,系統(tǒng)層,網(wǎng)絡(luò)層。

    Zabbix 和 Prometheus 是當(dāng)下流行的監(jiān)控系統(tǒng),可以根據(jù)他們的特點(diǎn)選擇使用。

    網(wǎng)站名稱(chēng):想吃透監(jiān)控系統(tǒng),就這一篇夠不夠?
    鏈接地址:http://www.bm7419.com/news46/100696.html

    成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、App設(shè)計(jì)、面包屑導(dǎo)航、服務(wù)器托管、移動(dòng)網(wǎng)站建設(shè)小程序開(kāi)發(fā)

    廣告

    聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

    網(wǎng)站優(yōu)化排名