Zabbix監控系統深度實踐(企業級分布式系統自動化運維必選利器,大規模Zabbix集群實戰經驗技巧總結,由淺入深全面講解配置、設計、案例和內部原理)
姚仁捷 著
ISBN 978-7-121-24013-3
2014年8月出版
定價:69.00元
364頁
16開
編輯推薦
國內最大規模Zabbix集群負責人力作
全面講解Zabbix配置應用,深入剖析Zabbix內部原理
用真實工作需求驅動,以獨家實踐案例指引,助您監控利器出鞘
Zabbix是目前最流行的分布式圖形化開源監控系統解決方案,它有健全靈活的監控數據采集、存儲、告警規則配置以及圖形化展示界面。豐富的功能背后是極高的復雜性,特別在國內缺乏相關的中文資料的背景下,系統管理人員很難參透工具內在的精髓和局限,從而高效地將其用於大規模監控場景。本書作者曾參與大規模Zabbix集群應用項目,系統覆蓋了當時5000多台主機和幾十萬個監控點,近百萬的監控點記錄,修改了Zabbix多處源碼,實現了很多自動化的監控部署和Proxy-Master 的分布式監控,以及通過Zabbix Trigger自動分析等,從實踐中總結了極具價值的方法、思想和技巧在本書中分享。
內容提要
《Zabbix監控系統深度實踐》是一本由淺入深,全面講解Zabbix應用與原理的技術書籍,也是作者多年實戰經驗的總結和濃縮。在概念篇,從一個簡單但完整的入門案例講起,案例中有最基本的概念介紹,通過案例幫助那些只要將服務器加入監控,並且看到監控數據的讀者;然后逐步深入,在進階篇介紹Zabbix的各方各面的配置;在設計篇中對Zabbix的內部原理進行深入剖析,包括Zabbix與數據庫的交互Zabbix數據庫表的設計等,並分享作者在Zabbix上踩過的坑以及解決問題的思路。最后會在開源部分介紹58同城開源的Zatree和Chrome的插件、手機客戶端等工具。
這本書會從我們工作中的實際需求出發,以實際案例作為指引,希望對於讀者而言,不僅僅是學會某些具體的操作,而是深入了解Zabbix 的設計思路,掌握解決問題的方法。
《Zabbix監控系統深度實踐》適合想使用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 添加Item… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯28
4.5 添加Trigger… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯29
4.6 設置Action… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯31
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和Trends…⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯66
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 Triggers…⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯86
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&Screens&Maps欄目… ……………………………………………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 網頁字符串匹配… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 282
19.5 日志文件監控… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 283
19.6 Latest Data局部刷新… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 284
19.7 動態載入模塊… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 285
19.8 SNMP監控改進…⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 289
19.8.1 SNMPv3相關的增強…………………………………………………………… 289
19.8.2 SNMP重試和超時機制改進…………………………………………………… 290
19.8.3 lld的復雜OIDs… ……………………………………………………………… 290
第 20 章 Zabbix內置監控項實現⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 291
20.1 system.hostname…⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 291
20.2 system.cpu.load… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 292
第五部分 社區和開源
第 21 章 典型案例分析…⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 296
21.1 前端顯示Zabbix server停止工作問題… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 296
21.2 Item設置了但沒有數據…⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 302
21.2.1 看頁面是否有報錯… ………………………………………………………… 302
21.2.2 Zabbix Server和Zabbix Agent的網絡是否互通… …………………………… 303
21.2.3 zabbix_get是否能夠獲取到數據… …………………………………………… 304
21.2.4 總結… ………………………………………………………………………… 304
21.3 一個掃描history全表的SQL問題… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 305
21.4 解決問題的思路… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 315
第 22 章 Zabbix代碼問題和解決…⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 316
22.1 Duplicated Host問題… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 316
22.2 拼接大SQL問題…⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 318
22.3 nextid問題… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 319
22.4 在Zabbix中打印日志…⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 321
第 23 章 PPTV的Zabbix監控體系…⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 322
23.1 Python Zabbix API… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 322
23.2 Spider——服務器添加Zabbix監控… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 324
23.3 Event Console…⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 326
23.4 Rule Engine… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 326
23.5 報警系統架構… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 327
第 24 章 Zatree…⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 328
第 25 章 Zabbix第三方插件⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 331
25.1 Chromix… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 331
25.2 Zabbix Notifier… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 332
25.3 手機端Zabbix App…⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 333
25.3.1 ZBX Mobile… ………………………………………………………………… 333
25.3.2 Zabbkit… ……………………………………………………………………… 335
第 26 章 微信公眾平台報警…⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 338
26.1 申請微信公眾平台賬號… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 338
26.2 配置微信公眾平台賬號… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 339
26.2.1 使用SAE進行測試開發………………………………………………………… 341
26.2.2 申請測試賬號… ……………………………………………………………… 342
26.2.3 獲取access_token… ………………………………………………………342
26.2.4 獲取用戶的openid……………………………………………………………… 343
26.2.5 發送第一條文字消息… ……………………………………………………… 343
26.3 微信接口請求次數限制… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 344
第 27 章 社區論壇…⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 345
附錄 Zabbix自帶宏… ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 347
后記⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 349
作者簡介
姚仁捷:資深工程師,現就職於唯品會上海研發中心工作,負責日志平台建設,包括日志基礎架構,數據可視化和報警系統的開發。
國內最早研究Zabbix的技術人員之一,Zabbix Python API作者。曾擔任社區內最大的Zabbix集群——PPTV監控系統項目負責人。精通Zabbix集群運維、使用和二次開發,深入了解Zabbix源碼,善於從代碼級別分析解決問題。
資深《冰與火之歌》粉絲,業余跑步愛好者,樂於嘗試並推廣一切可以給互聯網用戶帶來便利和優質體驗的技術。
媒體評論
Zabbix是目前很流行的分布式圖形化開源監控系統解決方案。它有健全靈活的監控數據采集、存儲、告警規則配置以及圖形化展示界面,已經被越來越多的互聯網公司所應用,成為運維基礎架構系統的重要組成部分。
三年前,姚仁捷作為聚力傳媒(PPTV)的系統工程師,參與並承擔PPTV生產環境運維監控系統的建設工作。在短短三個月的時間里,完成了從方案選取、部署測試、小范圍應用、全面上線的一整套工作,從無到有建設了覆蓋數千台設備的運維監控系統。我作為項目負責人,對於他的成就感到非常欣慰。
本人作為姚仁捷的同事、朋友,向有志於運維自動化的朋友們鄭重推薦此書!
陳文春
聚力傳媒(PPTV)系統平台部高級總監
Zabbix是一個用於基礎架構監控和告警的開源解決方案,可以說是近幾年來國內外中小型互聯網企業中最流行的一種。它結合了Cacti繪圖和Nagios的告警機制,並擁有非常簡易的Web配置界面,再配合一些標准的監控模板,就能很輕松地上手了。姚仁捷曾經在PPTV負責過Zabbix大規模集群的工作,積累了豐富的經驗和技巧,本書是他多年實踐工作的結晶,從功能到部署,從原理到案例,全面講解了Zabbix相關知識,值得一讀!
程國強
攜程網站運營系統開發總監
Zabbix是近幾年涌現出來的開源企業級監控工具,集數據采集,圖表繪制,報警等功能於一身,適合中小型企業快速的從無到有建立一個完備的監控體系。豐富的功能背后是極高的復雜性,特別在國內缺乏相關的中文資料的背景下,系統管理人員很難參透工具內在的精髓和局限,從而高效地將其用於大規模監控場景。姚仁捷是國內Zabbix大規模應用場景的實踐先驅,在源代碼級對Zabbix的工作機制進行過研究及優化。相信本書可以幫助后來者少走彎路,趨利避害,讓Zabbix成為監控項目實施中的利器。
吳曉剛
攜程網站運營中心系統開發部高級經理
Zabbix是近年來非常流行的分布式監控工具,但是上手容易,精通難。八牛曾經是國內最大規模Zabbix集群的維護者,在Zabbix運維、優化及二次開發方面都有豐富的經驗。本書作為他多年經驗的結晶,不但詳細闡述了Zabbix的部署運用,還有針對性地解析了Zabbix架構設計的關鍵點和具體實現方式,更列舉了常見的疑難問題和解決方案,堪稱監控領域難得的精品書籍,相信不同層次的讀者都會有所收獲。
饒琛琳
新浪網技術保障部系統架構師
前言
本書的由來
我從職業生涯開始至今,就一直在和監控系統打交道。
我最早在eBay 容量規划小組工作,使用監控系統查看服務器狀態及網站運營指標;后來到PPTV 運維部,通過監控系統的數據了解上線發布的結果和網站的健康程度等情況;現在到了唯品會,我們的監控系統能夠從業務、技術兩個維度考察當前公司網站的運作情況。
在有監控系統之前,工程師需要到服務器上去敲命令來獲取系統數據;為了分析問題,可能還需要將數據復制到本地計算機的Excel 里進行畫圖;最要命的是,在出現問題的時候無法知道,只有在用戶報障后才能察覺。這是多么駭人聽聞的場景!
而當我們有了一個好的監控系統后,這些問題就迎刃而解了。我們可以在一個界面中瀏覽整個機房的服務器狀態、可以在Web 前端上方便地查看監控數據、可以回溯尋找事故發生時候系統的問題和報警情況。現在,我們的工程師們已經可以一邊悠閑地喝着咖啡,一邊分析問題了。
監控系統是整個運維自動化體系中非常重要的環節。從服務器上架到最后被回收重用,都有監控系統的身影。服務器上架時,它需要添加監控;服務器工作過程中,監控系統要時刻注意服務器的健康,並且在服務器出現異常時,要發出報警通知對應的人員;在服務器被回收時,監控系統要取消服務器的監控。這些都需要監控系統擁有API,能夠方便地跟外部其他系統一起工作,把自己的工作自動化起來。
國內的互聯網巨頭們,可以自行開發一套監控系統。而對於絕大多數企業來說,開源的Zabbix 是非常棒的選擇。它能夠非常好地實現以上這些需求。可以說,在目前Zabbix 是最熱門的開源監控系統。
本書的內容結構
從周圍的QQ 群、論壇等地方,我發現大家對於Zabbix 的學習都是非常零散的,缺少一個系統的學習過程和解決問題的正確思路。在這本書的前面,我會先向大家介紹一個最簡單的入門案例,案例中有最基本的概念介紹,通過案例幫助那些只要將服務器加入監控,並且看到監控數據的讀者。后面深入一些,會介紹Zabbix 的方方面面的配置,適合打算使用Zabbix 高級功能的讀者。在接下來的部分,會深入剖析Zabbix 的內部原理,包括Zabbix 與數據庫的交互,Zabbix 數據庫表的設計等,我在Zabbix 上踩過的坑以及解決問題的思路,等等,希望能授之以漁。在本書的最后部分,主要是介紹Zabbix 在開源方面的進展,最主要的就是58 同城開源的Zatree,以及Chrome 的插件和手機客戶端。
這本書會從我們工作中的實際需求出發,介紹Zabbix 的使用方法和其配置管理。在這些內容之后,會有深入一些的對於Zabbix 實現的講解,希望對於讀者而言,不僅僅是學會某些具體的操作,而是深入了解Zabbix 的設計思路,掌握解決問題的方法。
作者聯系方式
由於經驗的不足,書中可能會有一些不足之處,大家可以聯系微博@ 超大杯摩卡星冰樂,或者是我的郵箱baniu.yao@gmail.com。
聲明
在剛開始進行寫作時,我考慮到很多讀者是用中文版的Zabbix,所以文中的Zabbix 的術語都是使用中文。但后來我覺得對於Zabbix 的術語,研究人員是需要了解它的英文說法的,這樣在同行之間才能更好的交流,也可以在Google 上更好地檢索信息。基於這個原因,我將之前的中文術語全部又換成了英語。由於這些術語非常多,雖然編輯幫我細致的檢查,難免有疏漏,非常抱歉。希望大家能夠諒解。
致謝
在前言的最后,要感謝很多人。首先感謝的是我的父母,沒有你們,就沒有我。然后要感謝我的老婆,因為要忙於寫書,好多時候不能陪你。最后要感謝的是諸超、陳文春、吳曉剛、周昕毅、朱寧和劉海陽等同事的幫助,在我寫書的過程中,給出了很多寶貴的建議。謝謝各位。