- 深入理解Zabbix監控系統
- 鮑光亞
- 3115字
- 2021-04-25 17:53:46
前 言
寫作目的
Zabbix是一個開源監控系統(監控軟件),在我國信息技術企業和金融企業中被廣泛應用。但是,大部分Zabbix用戶只是熟悉如何使用該軟件,對該軟件內部的工作機制卻了解不多,無法靈活而深入地應用該軟件。對于用戶來說,要想充分發揮Zabbix本身的強大功能,一個基本前提就是全面、深入地理解該軟件。
雖然Zabbix是一種開源軟件,但是較少有圖書系統性地介紹該軟件的工作原理和內部結構。作者曾為多家不同規模的企業部署和維護Zabbix監控系統,在Zabbix的使用過程中發現,如果不理解底層工作機制,那么很多運維問題的解決都是臨時性的,治標不治本。當Zabbix變成一個神秘的黑盒時,每一個運維人員在它面前都會很被動。
基于以上認識,作者決定總結自己多年來對Zabbix開源監控系統的理解和認知,編撰成書,目標是幫助讀者不僅知其然,更知其所以然,希望對讀者有所幫助。
內容結構
本書依據Zabbix的系統架構進行分解講述。總體上,Zabbix由多個組件構成,主要有Zabbix服務器、Zabbix客戶端和Zabbix Web應用。每個組件內部主要采用多進程架構,以實現并行和并發。本書共19章,分為4部分。第一部分包括第1章至第6章,主要講述Zabbix服務器端內部實現多進程架構所依賴的總體工作機制;第二部分包括第7章至第14章,主要講述Zabbix 服務器端和Zabbix 代理端各種進程的詳細工作過程,以及各進程如何處理監控數據;第三部分包括第15章至第17章,主要講述Zabbix客戶端的詳細工作機制,以及Zabbix源碼的編譯和構建過程;第四部分包括第18章和第19章,主要講述Zabbix Web API和Zabbix Web應用。
具體到每一章,其主要內容如下。
第一部分 Zabbix的基礎工作機制
第1章講述Zabbix的多進程特征以及不同Zabbix版本的系統架構演變,以幫助讀者從技術演進的角度了解Zabbix的過去和現在。
第2章講述Zabbix服務器端進程的分類以及多進程之間的通信與協調。Zabbix的每種進程所完成的任務是相對獨立的,因此進程的分類在一定程度上說明了Zabbix如何對總體任務進行分解,以及如何解決進程之間的協作問題。
第3章講述Zabbix中最常用的7種數據結構設計。數據結構在軟件設計中總是處于核心地位,Zabbix對數據結構的設計決定了其處理數據的效率,同時決定了各個進程應該以何種方式和次序處理數據。
第4章講述緩存的結構以及各進程如何使用緩存。Zabbix使用的緩存位于共享內存中,幾乎所有進程都需要訪問緩存才能正常工作,這就使緩存成為整個監控系統的數據核心,如果緩存出現問題,那么整個監控系統都將崩潰。
第5章講述Zabbix本地進程和遠程主機進程之間的套接字通信過程和通信協議,以及基于套接字通信的加密機制。
第6章講述各進程如何通過日志跟蹤自身的工作進度,以及如何使用Zabbix日志。
第二部分 Zabbix服務器端的各個進程
第7章講述Zabbix服務器端的trapper類進程和poller類進程如何大規模地收集監控數據。Zabbix可以處理多種類型的監控數據,相應地,trapper進程和poller進程也分為多種類型,每種類型負責收集不同的監控數據,所使用的數據采集方式也有所不同。
第8章講述預處理進程和LLD進程。這兩種進程使用trapper進程和poller進程所收集的原始監控數據作為輸入,對原始數據進行預處理,或者根據原始數據更新配置信息。
第9章講述history syncer進程如何將預處理之后的數據存儲到數據庫中,并對監控數據進行快速計算,以生成事件并處理事件。history syncer進程是Zabbix服務器端最核心的進程,如果沒有該進程的存在,Zabbix將無法保存監控數據,無法生成事件,也無法進行告警。
第10章講述在history syncer進程生成事件之后,escalator進程、alert進程族和task manager進程如何處理事件以及如何發送告警。
第11章講述Zabbix如何通過各種渠道獲取自身狀態信息,包括進程繁忙率、數據量和緩存負載等。
第12章講述Zabbix代理在Zabbix的整體架構中所承擔的角色,以及Zabbix代理端所特有的一些進程是如何工作的。
第13章講述Zabbix服務器端的各種進程如何訪問數據庫以及具體訪問數據庫中的哪些表。本章內容可以幫助讀者有針對性地分析數據與進程之間的對應關系。
第14章主要講述Zabbix java gateway的作用、內部工作機制以及該進程與java poller進程之間的交互。
第三部分 Zabbix客戶端及源碼構建
第15章講述Zabbix客戶端的3種進程,即collector進程、listener進程和active checks進程的內部工作機制,以及用于擴展Zabbix客戶端功能的可加載模塊如何實現加載。
第16章講述Zabbix客戶端各種進程如何處理每一種監控項,從而實現監控數據的收集和上傳。Zabbix客戶端原生支持多種監控項,深入了解這些監控項的具體采集方式可以解決用戶使用過程中的很多困惑。
第17章講述Zabbix使用的C語言源碼的編譯和構建過程,并簡要介紹在修改源碼后應如何自定義編譯和構建過程。當用戶試圖自己修改源碼來擴展Zabbix功能時,對構建過程進行修改是必不可少的。
第四部分 Zabbix Web
第18章講述Zabbix Web API如何使用面向對象編程的方式實現其功能,包括各個類的職責與關系、所采用的設計模式、如何調用API以及如何擴展API。很多用戶都通過API實現Zabbix與外部系統的集成,對該模塊進行深入了解有助于提高監控系統的集成質量和效率。
第19章主要講述Zabbix Web應用的MVC框架,并簡要介紹了如何實現Zabbix Web應用的擴展。Zabbix Web應用是最近幾個版本的Zabbix中變動最為顯著和頻繁的部分。
寫作說明
雖然作者在工作中經常需要分析Zabbix源碼,但是在編寫本書的過程中,仍然發現有些知識在之前并未涉獵。適逢Zabbix發布了最新的5.0版本,系統架構發生了一些變化。Zabbix服務器端增加了與底層發現、告警和同步相關的3種進程,而Zabbix中此前只有Zabbix服務器端具備的預處理能力也得到了進一步加強。此外,Web前端的功能更加豐富,Web后端也進行了大量調整。面對這些變化,作者接受出版社編輯的建議,決定基于最新的Zabbix 5.0進行寫作。為了保障內容的準確性,作者對Zabbix 5.0的所有源碼重新進行了梳理和再閱讀。這一任務的工作量雖然不及全新閱讀一遍源碼,但是仍然需要逐一確認有哪些源碼發生了變更以及新增了哪些源碼和功能。
本書所引用的Zabbix源碼以及對Zabbix源碼的修改均遵從GPL-2.0協議。
致謝
本書萌芽于作者在民生銀行的工作經歷,在此要特別感謝民生銀行的張帆先生。在很多研究領域中,提出問題比解決問題更重要。對本書而言,張帆先生就是那個不可或缺的提出問題的人,而本書是對張帆先生所提問題的部分解答和延伸。張帆先生勇敢嘗試對Zabbix的全方位應用,他對民生銀行Zabbix監控項目的有效把控以及對Zabbix的不懈探究,都激勵作者對Zabbix進行更全面、更深入的了解,其沉穩嚴謹的工作作風亦令人欽佩。張帆先生也從整體寫作邏輯的角度為本書提出了寶貴建議。
特別感謝美國Apple公司的陳源博士對本書的慷慨推薦和細致建議。陳博士在京東美國硅谷研發中心工作期間,作者曾有幸輔助陳博士帶領的項目團隊完成大規模容器集群資源利用效率的優化工作。雖然該項目只是陳博士所負責的眾多項目之一,于作者而言卻是非常重要的經歷。陳博士對作者的鼓勵彌足珍貴,讓作者有更大的勇氣前進。
非常感謝宏時數據為本書提供的支持和幫助。作者曾參加宏時數據組織的Zabbix峰會,受益良多。宏時數據的工作人員和社區認證專家就本書的寫作提出了重要意見,并不吝推薦本書。本書有幸得到Zabbix社區簽約專家張世宏先生的肯定,同時感謝海爾智家的Zabbix資深專家田川先生應宏時數據之邀對本書進行了全面細致的評閱并作序,田川先生對本書評價頗高,這令作者倍感榮幸。
由衷感謝京東物流技術發展部運維專家史季強先生。史季強先生是作者曾經的同事,他在運維方面的經驗和專業水平一直令作者仰望。作者向史季強先生提出為本書寫幾句評語的請求后,他慷慨應允。最后史季強先生不但大力推薦本書,還圍繞本書提出了重要建議,這些建議也是作者今后新的努力方向。
更要感謝Zabbix,本書能夠成書全然地基于Zabbix本身近乎完美的設計和實現,以及其持續、快速的成長。
技術類圖書的寫作應以嚴謹為第一要務。在本書寫作過程中,對于任何內容,作者均不敢妄下結論,總是力求多角度驗證和多次確認,唯恐做出錯誤判斷。在此也感謝人民郵電出版社劉雅思編輯在本書寫作過程中所提供的大量意見和建議。
感謝所有為本書的構思和寫作提供過幫助的人,這本書也屬于你們。
- SQL Server 從入門到項目實踐(超值版)
- ReSharper Essentials
- ASP.NET Core 5.0開發入門與實戰
- 樂學Web編程:網站制作不神秘
- Python Deep Learning
- Learning Laravel 4 Application Development
- Microsoft System Center Orchestrator 2012 R2 Essentials
- H5頁面設計:Mugeda版(微課版)
- Python從入門到精通
- Rust游戲開發實戰
- JavaScript動態網頁編程
- INSTANT Apache ServiceMix How-to
- SQL Server on Linux
- 例解Python:Python編程快速入門踐行指南
- 少年小魚的魔法之旅:神奇的Python