內容提要
《Zabbix監控系統深度實踐(第2版)》由淺入深,全面講解Zabbix套用與原理,是作者多年實戰經驗的總結和濃縮。在概念篇,從一個簡單但完整的入門案例講起,案例中有最基本的概念介紹,通過案例幫助那些只需將伺服器加入監控,就能看到監控數據的讀者;然後逐步深入,在進階篇介紹Zabbix的各方面的配置;在設計篇中對Zabbix的內部原理進行深入剖析,包括Zabbix與資料庫的互動、Zabbix資料庫表的設計等,並分享作者在Zabbix上踩過的坑以及解決問題的思路;最後會在開源部分介紹58同城開源的Zatree和Chrome的外掛程式、手機客戶端等工具。
《Zabbix監控系統深度實踐(第2版)》從工作中的實際需求出發,以實際案例作為指引,希望對於讀者而言,不僅僅是學會某些具體的操作,而是深入了解Zabbix 的設計思路,掌握解決問題的方法。
《Zabbix監控系統深度實踐(第2版)》適合想使用Zabbix構建監控系統的技術人員閱讀,也適合有一定基礎、對於Zabbix有更高的要求的讀者。
目錄
第 1 章 自動化運維和監控系統 2
1.1 網際網路公司的運維工作 2
1.2 何謂自動化運維 3
1.3 監控系統在運維自動化中的角色5
1.4 監控系統的理想化模樣5
第 2 章 Zabbix簡介 7
2.1 Zabbix發展現狀 7
2.2 選擇Zabbix的理由 8
2.3 Zabbix部分名詞約定 9
第 3 章 Zabbix安裝 11
3.1 獲取Zabbix 11
3.2 Zabbix Server安裝 12
3.2.1 Zabbix資料庫配置 12
3.2.2 安裝Zabbix Server 13
3.2.3 安裝Zabbix Web前端 16
3.3 Zabbix Agent安裝18
3.3.1 UNIX/Linux上安裝Zabbix Agent 18
3.3.2 Windows上安裝Zabbix Agent 18
3.4 測試Zabbix Agent和Zabbix Server運行 20
3.5 配置檔案詳解20
3.5.1 zabbix_server.conf 20
3.5.2 zabbix_agentd.conf 24
第 4 章 監控第一台Host 26
4.1 Host在監控系統中的活動 26
4.2 添加一個用戶27
4.3 把伺服器加入Zabbix監控 27
4.4 添加Item28
4.5 添加Trigger29
4.6 設定Action31
4.7 收到第一封報警郵件33
4.8 Zabbix 報警流程33
4.9 看,Zabbix在工作呢34
4.9.1 全局搜尋框35
4.9.2 查看監控數據35
4.9.3 查看報警信息36
4.10 添加自定義監控點 37
第二部分 配置篇
第 5 章 增加監控 40
5.1 Host配置 41
5.2 Item屬性 45
5.3 Item類型 48
5.3.1 Zabbix Agent類型 48
5.3.2 SNMP類型 51
5.3.3 IPMI類型 52
5.3.4 日誌檔案監控 53
5.3.5 計算型Item 54
5.3.6 Zabbix內部監控 55
5.3.7 ssh類型Item 58
5.3.8 Telnet類型Item 60
5.3.9 External Check類型Item 60
5.3.10 Aggregate類型Item 60
5.3.11 Trapper類型Item 62
5.3.12 JMX類型Item 62
5.3.13 ODBC類型Item 64
5.4 Item歷史數據History和Trends66
5.5 使用Application對Item分組67
5.6 Item Key詳解68
5.7 Template模板69
5.7.1 新建和配置一個Template 69
5.7.2 建立/取消Host和Template的關聯 71
5.7.3 修改Template 73
5.7.4 Template和Host 73
5.7.5 Template之間的父子關係 74
5.8 Clone、Full Clone和Mass Update 75
5.9 Windows監控 76
5.10 VMware監控 82
5.11 Zabbix監控性能84
第 6 章 報警配置 86
6.1 Triggers86
6.1.1 配置Triggers 86
6.1.2 Trigger expression 87
6.1.3 Function詳解 89
6.1.4 Trigger依賴 92
6.1.5 Trigger等級 94
6.1.6 單位 95
6.2 Events 95
6.3 Actions 96
6.3.1 Action 97
6.3.2 Operation 99
6.3.3 Condition 104
6.3.4 Escalations 107
6.3.5 Unsupported狀態的Items的報警 110
6.4 Media類型 111
6.5 Maintenance狀態 116
第 7 章 數據可視化 118
7.1 Graph 118
7.2 Network Maps 123
7.2.1 新建Maps 123
7.2.2 創建元素 124
7.2.3 選擇元素 126
7.2.4 關聯元素 126
7.2.5 關聯指示器 126
7.3 Screens 127
7.4 Slide shows 131
第 8 章 Users和Macros 133
8.1 User和User group 133
8.1.1 配置User 133
8.1.2 User group 135
8.2 Macros 136
8.2.1 自帶宏 136
8.2.2 用戶自定義宏 137
8.2.3 自定義宏的適用範圍 139
第 9 章 IT services服務監控與Web monitoring網路監控 140
9.1 Services服務監控 140
9.2 服務配置 141
9.3 Web monitoring網路監控配置 145
9.4 監控百度示例 148
第 10 章 Zabbix前端界面 151
10.1 Monitoring板塊 151
10.1.1 Dashboard欄目 151
10.1.2 Overview欄目 157
10.1.3 Web欄目 158
10.1.4 Latest data欄目 159
10.1.5 Triggers欄目 159
10.1.6 Events欄目 160
10.1.7 Graphs⪼reens⤅s欄目 161
10.2 Inventory板塊 161
10.3 Reports板塊 161
10.4 Configuration板塊 166
10.4.1 Host groups欄目 166
10.4.2 Template欄目 167
10.4.3 Hosts欄目 168
10.4.4 Maintenance欄目 170
10.4.5 其他 170
10.5 Administration板塊 171
10.5.1 General欄目 171
10.5.2 DM欄目 177
10.5.3 Authentication欄目 178
10.5.4 Users欄目 179
10.5.5 Media types欄目 181
10.5.6 Scripts欄目 181
10.5.7 Audit欄目 185
10.5.8 Queue欄目 186
10.5.9 Notification欄目 186
10.5.10 Installation欄目 187
10.6 前端配置 187
10.6.1 全局配置參數 187
10.6.2 前端維護狀態顯示 189
10.6.3 Profile設定 190
10.7 全局搜尋框 192
第 11 章 Discovery 193
11.1 基於網路的Discovery 193
11.2 Discovery的一個例子 195
11.3 Discovery Rule和Discovery Action的配置 196
11.4 存活Agent自動加入監控 199
11.5 low-level discovery 200
第三部分 進階篇
第 12 章 Zabbix API 206
12.1 Zabbix API POST參數 206
12.2 Item支持的Zabbix API方法 207
12.2.1 Item object 208
12.2.2 item.create 209
12.2.3 item.delete 210
12.2.4 item.exists 210
12.2.5 item.get 211
12.2.6 item.getobjects 214
12.2.7 item.isreadable/item.iswritable 215
12.2.8 item.update 215
12.3 如何閱讀Zabbix API文檔 216
第 13 章 Zabbix分散式監控 217
13.1 兩種分散式架構對比 217
13.2 Proxy單級分散式架構 218
13.3 Proxy配置 219
13.4 Node多級分散式架構 220
第 14 章 Zabbix系統最佳化 227
14.1 Zabbix內部運行機制 227
14.2 Items過多造成性能下降 228
14.3 資料庫及其他調優 232
第 15 章 輕量級日誌監控套用 233
15.1 準備工作 233
15.2 添加 Item 234
15.3 測試 234
15.4 配置報警 236
15.5 輪轉的日誌檔案 237
15.6 獲取關鍵字 238
第四部分 設計篇
第 16 章 Zabbix資料庫表結構解析 240
16.1 表結構概述 240
16.2 Hosts表 241
16.3 Items表 244
16.4 Trigger在資料庫中的結構 248
16.5 Events表 253
16.6 Triggers和Events生成的規則 255
第 17 章 History和Trends 256
17.1 sync欄位的含義 257
17.2 history和trends的區別 261
17.3 housekeeper和trends表 262
17.4 Graph對於history和trends的選擇 263
第 18 章 Zabbix和資料庫互動詳解 268
18.1 include/zbxdb.h 268
18.2 zbxdb/db.c 270
18.3 zbxdbhigh 271
第 19 章 Zabbix 2.2新功能介紹 274
19.1 資料庫自動升級 274
19.1.1 檢查資料庫版本 274
19.1.2 mandatory和optional欄位 275
19.1.3 資料庫升級過程 277
19.1.4 前端提示 278
19.2 Web監控 279
19.2.1 Web監控Template化 279
19.2.2 Web監控重試機制 279
19.2.3 使用HTTP代理 280
19.2.4 URL監控中使用頁面內容作為變數 281
19.3 數據映射 282
19.4 history和trends存儲的代碼分析 282
19.4.1 DCsync_history 283
19.4.2 DCsync_trends 285
19.4.3 整個流程 285
19.5 網頁字元串匹配 286
19.6 日誌檔案監控 287
19.7 Latest Data局部刷新 288
19.8 動態載入模組 288
19.9 SNMP監控改進 292
19.9.1 SNMPv3相關的增強 292
19.8.2 SNMP重試和逾時機制改進 293
19.9.3 lld的複雜OIDs 293
第 20 章 Zabbix內置監控項實現 294
20.1 system.hostname 294
20.2 system.cpu.load 295
第五部分 社區和開源
第 21 章 典型案例分析 300
21.1 前端顯示Zabbix server停止工作問題 300
21.2 Item設定了但沒有數據 306
21.2.1 看頁面是否有報錯 306
21.2.2 Zabbix Server和Zabbix Agent的網路是否互通 307
21.2.3 zabbix_get是否能夠獲取到數據 308
21.2.4 總結 308
21.3 一個掃描history全表的SQL問題 309
21.4 解決問題的思路 319
第 22 章 Zabbix代碼問題和解決 320
22.1 Duplicated Host問題 320
22.2 拼接大SQL問題 322
22.3 nextid問題 323
22.4 在Zabbix中列印日誌 325
第 23 章 PPTV的Zabbix監控體系 326
23.1 Python Zabbix API 326
23.2 Spider——伺服器添加Zabbix監控 328
23.3 Event Console 330
23.4 Rule Engine 330
23.5 報警系統架構 331
第 24 章 Zatree 332
24.1 使用Zatree 332
24.2 Zabbix二次開發和重新開發監控系統的選擇 334
第 25 章 Zabbix第三方外掛程式 337
25.1 Chromix 337
25.2 Zabbix Notifier 338
25.3 手機端Zabbix App 339
25.3.1 ZBX Mobile 339
25.3.2 Zabbkit 341
第 26 章 微信公眾平台報警 344
26.1 申請微信公眾平台賬號 344
26.2 配置微信公眾平台賬號 345
26.2.1 使用SAE進行測試開發 347
26.2.2 申請測試賬號 348
26.2.3 獲取access_token 348
26.2.4 獲取用戶的openid 349
26.2.5 傳送第一條文字訊息 349
26.3 微信接口請求次數限制 350
第 27 章 社區論壇 351
附錄 Zabbix自帶宏 353
後記 355
程式設計師職業生涯的一些感悟 356
前言
本書的由來
我從職業生涯開始至今,就一直在和監控系統打交道。
我最早在eBay 容量規劃小組工作,使用監控系統查看伺服器狀態及網站運營指標;後來到PPTV 運維部,通過監控系統的數據了解上線發布的結果和網站的健康程度等情況;現在到了唯品會,我們的監控系統能夠從業務、技術兩個維度考察當前公司網站的運作情況。
在有監控系統之前,工程師需要到伺服器上去敲命令來獲取系統數據;為了分析問題,可能還需要將數據複製到本地計算機的Excel 里進行畫圖;最要命的是,在出現問題的時候無法知道,只有在用戶報障後才能察覺。這是多么駭人聽聞的場景!
而當我們有了一個好的監控系統後,這些問題就迎刃而解了。我們可以在一個界面中瀏覽整個機房的伺服器狀態、可以在Web 前端方便地查看監控數據、可以回溯尋找事故發生時系統的問題和報警情況。現在,我們的工程師們已經可以一邊悠閒地喝著咖啡一邊分析問題了。
監控系統是整個運維自動化體系中非常重要的環節。從伺服器上架到最後被回收重用,都有監控系統的身影。伺服器上架時,它需要添加監控;在伺服器工作過程中,監控系統要時刻注意伺服器的健康,並且在伺服器出現異常時,要發出報警通知對應的人員;在伺服器被回收時,監控系統要取消伺服器的監控。這些都需要監控系統擁有API,能夠方便地跟外部其他系統一起工作,把自己的工作自動化起來。
國內的網際網路巨頭們,可以自行開發一套監控系統。而對於絕大多數企業來說,開源的Zabbix 是非常棒的選擇。它能夠非常好地實現以上這些需求。可以說,目前Zabbix 是最熱門的開源監控系統。
本書的內容結構
從周圍的QQ 群、論壇等地方,我發現大家對於Zabbix 的學習都是非常零散的,缺少一個系統的學習過程和解決問題的正確思路。在這本書的前面,我會先向大家介紹一個最簡單的入門案例,案例中有最基本的概念介紹,通過案例幫助那些只需將伺服器加入監控,並且看到監控數據的讀者。後面深入一些,會介紹Zabbix 的方方面面的配置,適合打算使用Zabbix 高級功能的讀者。在接下來的部分,會深入剖析Zabbix 的內部原理,包括Zabbix 與資料庫的互動、Zabbix 資料庫表的設計等我在Zabbix 上踩過的坑以及解決問題的思路。希望能授之以漁。在本書的最後部分,主要介紹Zabbix 在開源方面的進展,最主要的就是58 同城開源的Zatree,以及Chrome 的外掛程式和手機客戶端。
本書會從我們工作中的實際需求出發,介紹Zabbix 的使用方法和其配置管理。在這些內容之後,會有深入一些的對於Zabbix 實現的講解,希望對於讀者而言,不僅僅是學會某些具體的操作,而是深入了解Zabbix 的設計思路,掌握解決問題的方法。