深入理解 Zabbix 監控系統
鮑光亞
買這商品的人也買了...
-
$709Zabbix 企業級分佈式監控系統, 2/e
-
$680$537 -
$408$388 -
$740高性能 Linux 服務器運維實戰:shell 編程、監控告警、性能優化與實戰案例
-
$880$695 -
$294$279 -
$454Graphite 監控
-
$534$507 -
$500$395 -
$880$748 -
$534$507 -
$600$468 -
$534$507 -
$500$395 -
$1,019$968 -
$556LAMP + LNMP 網站架構與運維實戰
-
$520大型網站運維:從系統管理到 SRE
-
$620$484 -
$1,648Zabbix 6 IT Infrastructure Monitoring Cookbook: Explore the new features of Zabbix 6 for designing, building, and maintaining your Zabbix setup, 2/e (Paperback)
-
$774$735 -
$505從零開始 Linux 運維實踐
-
$880$748 -
$640$480 -
$534$507 -
$680$530
相關主題
商品描述
Zabbix是一個開源監控系統,在我國各類信息技術企業和金融企業中被廣泛應用。本書主要從源碼和功能兩個角度,分析Zabbix監控系統的底層工作機制。本書首先講述跨進程的總體工作機制,然後按照監控數據的處理流程依次講解Zabbix服務器端和Zabbix客戶端各類進程的內部工作機制,最後講述Zabbix Web應用的工作機制。本書能夠幫助讀者深入理解Zabbix系統的核心原理,有助於在運維工作中快速定位和解決問題。
本書適合具有一定Zabbix應用經驗並想要進一步理解Zabbix工作機制的讀者閱讀,包括相關企業的運維人員、技術主管、架構師、產品經理和決策者等。
作者簡介
鮑光亞,本科畢業於山東大學,精通Zabbix和Prometheus監控軟件,對IT系統和服務監控軟件有深入研究。他在2014年至2019年就職於京東,從事Zabbix監控系統的運維和相關開發工作,對分佈式、並行軟件開發和項目管理具有濃厚興趣。
他在工作期間始終踐行終身學習理念,不斷充實、提高自己,在2012年獲得了中國社會科學院研究生院MBA學位。
作者個人郵箱:bgy.cn@outlook.com。
目錄大綱
第一部分Zabbix的基礎工作機制
第1章Zabbix總體架構及演變2
1.1監控系統概述2
1.2 Zabbix的總體架構3
1.2.1 Zabbix服務器4
1.2.2 Zabbix代理6
1.2 .3 Zabbix java gateway 7
1.2.4 Zabbix客戶端7
1.3 Zabbix服務器的技術演進7
1.3.1 Zabbix 2.2版本的Zabbix服務器7
1.3.2 Zabbix 3.0版本的Zabbix服務器8
1.3.3 Zabbix 4.0版本的Zabbix服務器8
1.3.4 Zabbix 5.0版本的Zabbix服務器9
1.4小結9
第2章Zabbix進程間通信與協調10
2.1主進程和子進程的創建10
2.1.1主進程的啟動和值守化11
2.1.2子進程的分類和創建13
2.1.3子進程從主進程繼承的內容17
2.1.4進程的回收20
2.2信號捕捉與處理21
2.2.1 Zabbix進程處理的信號類型21
2.2.2信號處理函數22
2.2.3信號的觸發與接收24
2.2.4用日誌跟踪信號24
2.3 Zabbix的共享內存25
2.3.1共享內存結構——內存池25
2.3.2共享內存的分配與釋放28
2.3.3共享內存狀態的獲取30
2.3.4 Zabbix共享內存舉例31
2.4 TCP/IP套接字32
2.4.1 zbx_socket_t結構體32
2.4.2作為服務器端的套接字33
2.4.3作為客戶端的套接字33
2.5基於Unix域套接字的進程間通信服務34
2.5.1 Libevent庫在進程間通信服務中的應用34
2.5.2進程間通信服務的數據結構及其工作過程35
2.5.3進程間通信服務的初始化37
2.5.4進程間通信服務的通信協議37
2.5.5從日誌查看進程間通信服務消息37
2.6鎖與信號量38
2.6.1互斥鎖的應用38
2.6.2讀寫鎖的應用40
2.6.3信號量的應用40
2.7小結41
第3章數據結構設計42
3.1向量42
3.1.1向量的數據結構定義42
3.1.2向量支持的操作43
3.1.3向量的應用場景45
3.2哈希集45
3.2.1哈希集的數據結構定義45
3.2.2哈希集支持的操作47
3.2.3哈希函數及關鍵字48
3.2.4哈希集的應用場景49
3 .3哈希映射50
3.3.1哈希映射的數據結構定義50
3.3.2哈希映射支持的操作51
3.4二叉堆51
3.4.1二叉堆的數據結構定義51
3.4.2二叉堆支持的操作52
3.4.3二叉堆的應用場景54
3.5隊列54
3.5.1隊列的數據結構定義55
3.5.2隊列支持的操作55
3.5.3隊列的應用場景56
3.6鍊錶56
3.6.1鍊錶的數據結構定義56
3.6.2鍊錶支持的操作57
3.6.3鍊錶的應用場景57
3.7 zbx_ json和zbx_ json_ parse結構57
3.7.1 zbx_ json和zbx_ json_ parse結構的數據結構定義58
3.7.2 zbx_ json和zbx_ json_ parse結構支持的操作58
3.7.3 zbx_ json和zbx_ parse結構的應用場景61
3.8小結62
第4章數據緩存63
4.1 ConfigCache和configuration syncer進程63
4.1.1 ConfigCache的數據結構定義64
4.1.2 ConfigCache的初始化和首次加載70
4.1.3 configuration syncer進程71
4.1.4實時導出ConfigCache數據74
4.2 HistoryCache和HistoryIndexCache 74
4.2.1數據結構與共享內存的區別75
4.2.2 HistoryCache和HistoryIndexCache的數據結構定義75
4.2.3將監控值寫入緩存77
4.2. 4 HistoryCache數據的讀取78
4.2.5 ids變量79
4.3 TrendCache 79
4.3.1 TrendCache的數據結構定義79
4.3.2 TrendCache數據的寫入和讀取80
4.4 ValueCache 81
4.4.1 ValueCache的數據結構定義81
4.4.2 ValueCache數據的寫入84
4.4.3 ValueCache數據的淘汰87
4.4.4 ValueCache數據的讀取89
4.5小結89
第5章套接字通信與加密90
5.1 TCP/IP套接字通信的過程90
5.1.1多路復用與接受連接過程91
5.1.2接收緩存與發送緩存92
5.1.3超時機制92
5.1.4關閉連接93
5.2 ZBXP 93
5.2. 1 ZBXP通信測試工具94
5.2.2服務器-代理的ZBXP 94
5.2.3客戶端-服務器的通信協議98
5.2.4 Web應用-服務器的通信協議100
5.3 TCP/IP套接字通信的加密104
5.4小結105
第6章Zabbix日誌及其應用106
6.1日誌輸出106
6.1.1日誌輸出函數106
6.1.2日誌記錄格式107
6.1.3日誌鎖108
6.2日誌級別109
6.2.1日誌級別的劃分109
6.2.2在日誌記錄中添加日誌級別110
6.2.3日誌相關代碼的統計111
6.3小結112
第二部分Zabbix服務器端的各個進程
第7章trapper類和poller類進程——監控數據的收集114
7.1 trapper類進程114
7.1.1 trapper進程115
7.1.2 snmp trapper進程120
7.2 poller類進程120
7.2.1 poller類進程的工作過程121
7.2.2 poller進程123
7.2.3 unreachable poller進程130
7.2.4 ipmi manager進程和ipmi poller進程130
7.2.5 icmp pinger進程133
7.2.6 java poller進程133
7.2.7 proxy poller進程134
7.2.8 http poller進程134
7.3小結135
第8章預處理進程和LLD進程136
8.1進程間通信服務消息格式137
8.2預處理進程138
8.2.1預處理工作總體框架138
8.2.2 preprocessing manager進程140
8.2.3 preprocessing worker進程143
8.3 LLD進程145
8.3.1進程間通信服務中的LLD消息145
8.3.2 LLD原始數據的採集和預處理146
8.3.3 lld manager進程146
8.3.4 lld worker進程149
8.4小結150
第9章history syncer進程——監控數據的計算與入庫151
9.1 history syncer進程的工作機制151
9.1.1監控值的同步過程152
9.1.2趨勢數據的同步過程154
9.1.3事件的生成與處理155
9.1.4動作的處理160
9.1.5 history syncer進程之間的協作161
9.2觸發器的計算過程162
9.2.1觸發器表達式的表示法162
9.2.2表達式函數的計算163
9.2.3外層的計算165
9. 3自定義history write模塊165
9.3.1接口函數165
9.3.2自定義模塊的註冊167
9.4小結168
第10章escalator進程、alert進程族和task manager進程——事件激發的動作169
10.1 escalator進程169
10.1.1理解升級序列169
10.1.2工作過程171
10.1.3 escalator進程與alert進程族以及task表的關係173
10.2 alert進程族173
10. 2.1核心數據結構與工作機制173
10.2.2進程間通信服務消息與進程間交互178
10.2.3 alert syncer進程180
10.2.4 alert manager進程180
10.2.5 alerter進程181
10.2.6看門狗邏輯181
10.3 task manager進程182
10.3.1遠程命令任務和任務執行結果182
10.3.2數據任務和數據結果任務183
10.3.3立即檢查任務184
10.3.4問題確認任務和問題關閉任務185
10.4小結186
第11章Zabbix內部監控187
11.1 self-monitoring進程與collector變量187
11.1.1測量指標和單位188
11.1 .2數據結構189
11.1.3數據處理過程190
11.1.4數據溢出問題191
11.1.5共享內存中的collector變量191
11.2從數據庫獲取狀態信息192
11.3從緩存獲取狀態信息193
11.3.1獲取ConfigCache的狀態信息193
11.3.2獲取ValueCache的狀態信息194
11.3.3獲取HistoryCache和HistoryIndexCache的狀態信息195
11.3.4獲取VMwareCache的狀態信息195
11 .4從其他渠道獲取信息195
11.4.1從poller進程獲取信息195
11.4.2從進程間通信服務獲取信息196
11.4.3遠程獲取數據196
11.5小結197
第12章Zabbix代理專述198
12.1 Zabbix代理端分擔的功能198
12.1.1功能劃分的現狀與評估198
12.1.2未來功能劃分的可能性200
12.2 Zabbix代理端的工作機制200
12.2.1 Zabbix代理端的configuration syncer進程200
12.2.2 Zabbix代理端的data sender進程201
12.2.3被動模式下的Zabbix代理203
12.2.4 Zabbix代理端的housekeeper進程204
12.2.5 Zabbix代理端的heartbeat sender進程205
12.3小結206
第13章數據庫表和housekeeper進程207
13.1 Zabbix服務器訪問數據庫207
13.1. 1連接的建立與關閉208
13.1.2 SQL語句的構造與運行209
13.1.3事務與數據的一致性211
13.1.4訪問量的計算211
13.2進程使用的數據庫表212
13.2.1 history syncer進程使用的表212
13.2.2 lld worker進程使用的表212
13.2.3 alert syncer進程使用的表213
13.2.4 escalator進程使用的表213
13.2.5 proxy poller進程使用的表214
13.2.6 configuration syncer進程使用的表215
13.3 housekeeper進程216
13.3.1相關結構體定義216
13.3.2清理數據的過程217
13.3.3 housekeeping_cleanup()函數219
13.4小結220
第14章Zabbix java gateway 221
14.1 JMX監控221
14.2 ZJG的內部結構222
14.2.1功能結構222
14.2.2 ThreadPoolExecutor線程池225
14.2.3日誌輸出226
14.3 java poller進程與ZJG的交互227
14.4 ZJG的安裝部署229
14.4.1編譯和部署ZJG 229
14.4.2啟動和停止ZJG 229
14.5小結230
第三部分Zabbix客戶端及源碼構建
第15章Zabbix客戶端的工作機制232
15.1 Zabbix客戶端主進程232
15.1.1 Zabbix客戶端主進程的工作過程232
15.1.2 collector變量與共享內存234
15.2 collector進程236
15.2.1 collector進程的工作過程236
15.2.2 system.cpu.util監控值的收集237
15.2.3 proc.cpu.util監控值的收集239
15.2.4 vfs.dev.read與vfs.dev.write數據242
15.3 listener進程244
15.4 active checks進程246
15.5可加載模塊247
15.5.1模塊加載過程247
15.5.2製作模塊文件(.so文件)及測試248
15. 6小結249
第16章Zabbix客戶端的原生監控項250
16.1 agent類監控項250
16.2 simple類監控項251
16.3 common類監控項252
16.3.1系統通用監控項253
16.3 .2 web.page組監控項254
16.3.3 vfs.file組監控項255
16.3.4 vfs.dir組監控項256
16.3.5 dns組監控項257
16.3.6 log組監控項257
16.3.7 zabbix.stats監控項258
16.4 specific類監控項259
16.4.1 kernel組監控項259
16.4.2 net組監控項260
16.4.3 proc組監控項260
16.4.4文件系統監控項261
16.4.5塊設備監控項262
16.4.6內存監控項263
16.4.7系統專用監控項263
16.4.8傳感器監控項266
16.5 hostname監控項266
16.6小結267
第17章Zabbix的構建過程268
17.1總體構建過程268
17.1.1源碼文件的目錄結構268
17.1.2 gcc的構建過程269
17.2 configure過程270
17.2.1理解configure.ac文件271
17.2.2理解aclocal.m4文件272
17.2.3理解configure腳本273
17.3 make過程276
17.3.1 Makefile文件的內容結構277
17.3.2理解Makefile.am文件280
17.3.3 src目錄的構建過程283
17.4 make install過程284
17.5 Zabbix客戶端的構建過程284
17.6 Zabbix的構建過程示例285
17.7小結286
第四部分Zabbix Web
第18章Zabbix Web API 288
18.1類的關係與類的職責288
18.2設計模式291
18.2.1單例模式291
18.2.2類工廠模式291
18.3 jsonrpc消息的處理過程292
18.3.1準備階段293
18.3.2消息處理階段294
18.4擴展Zabbix Web API 297
18.4.1相關源碼文件的組織297
18.4.2擴展方法示例298
18.5小結299
第19章Zabbix Web應用300
19.1 Zabbix的MVC模式300
19.1.1 MVC中的類圖與類的職責300
19.1.2請求處理過程302
19.2前端頁面的結構與構建304
19.2.1佈局與視圖305
19.2.2 HTML的構建過程307
19.3 CController類309
19.4 Zabbix Web應用的擴展309
19.4.1源碼文件的目錄結構309
19.4.2在頁面增加篩選條件310
19.5小結312