本书从运维(OPS)角度对Zabbix的各项功能进行了详细介绍,以自动化运维视角为出发点,对Zabbix的安装和配置、自动化功能、监控告警、性能调优、Zabbix API、Zabbix协议、RPM安装包定制,结合SaltStack实现自动化配置管理等内容进行了全方位的深入剖析。全书分为初级内容、中级内容、高级内容和附录部分,分别由浅入深地讲解Zabbix监控系统这个开源软件。从最简单的安装和配置,到复杂的高级应用,详细讲解了数据库分表、高可用、性能调优、架构设计,以及大量的监控案例,对即将构建Zabbix监控系统,或者已经在使用Zabbix的用户具有非常高的参考价值。
本书从零开始扫盲,内容全面透彻,介绍了zabbix的常用功能、zabbix自定义监控、zabbix自动发现功能、在自动化运维中的使用、基于api二次开发,真正实用于企业的监控系统,填补了国内zabbix相关图书的市场空白。
前 言
为何要写这本书
“运筹帷幄之中,决胜千里之外。”在IT运维中,监控占据着重要的地位,按比例来算,说30%一点也不为过。对IT运维工程师来说,构建一个真正可用的监控告警系统是一项艰巨的任务。在监控系统的开源软件中,可供选择的工具众多,然而真正符合自己需求,能够真正解决自己业务问题的监控系统软件却凤毛麟角。
笔者在运维从业生涯中用过的监控系统有Cacti、Nagios,以及笔者公司开发的监控告警系统,直到接触了Zabbix,才发现这个灵活而强大的自动化监控工具正是笔者以前所寻找的。Zabbix灵活的设计为用户提供了易用的二次开发接口,让用户既可以使用Zabbix本身提供的功能,又可以自定义更多的监控项功能,从硬件监控,到操作系统,再到服务进程,以及网络设备,其无所不能的监控功能令人叹为观止,笔者不禁要为这么优秀的开源工具而震撼。
在Zabbix的使用过程中,也会遇到很多问题,包括:配置使用、架构设计、性能调优、大规模部署和应用等。由于Zabbix是一个集众多功能于一体的工具,自带的功能实在太多,一般用户往往仅用到其基本的功能,对更高级的功能并未使用到。然而随着使用的加深,会遇到更多的问题,这其中最大的问题是告警和数据存储。本书对这两部分内容都有深入的讲解。
笔者从2012年12月开始学习并使用Zabbix,在此过程中,通过对Zabbix官网的学习,将Zabbix的部署和配置,以及其丰富的功能整理成文档,并对外公开,已在网络上公开过两个版本《Zabbix使用手册V1.4》和《Zabbix使用手册V2.0》,对不少学习Zabbix的朋友有所帮助。为了将Zabbix的功能更加详细地展示出来,于是有了本书的出现。本书以简洁通俗的方式将Zabbix的各项功能展现给读者,使读者即学即用,以此来节省读者宝贵的时间。
本书将不会开源电子书PDF版本,但笔者将来会对《Zabbix使用手册》做更多的更新,本书的所有代码和软件是开源的。另外,笔者开源的Zabbix安装包定制项目对重新打包Zabbix的RPM安装包有一定的参考价值,其地址为https://github.com/itnihao/zabbix-rpm,希望对大家有所帮助。
如何阅读本书
本书从运维(OPS)角度对Zabbix的各项功能进行了详细介绍,以自动化运维视角为出发点,对自动化功能、高可用、监控告警、性能调优、Zabbix API、Zabbix协议、RPM安装包定制等进行了深入浅出的探讨。
第1部分为基础部分,包括第1~6章,介绍监控系统的原理,让初次接触监控的读者了解监控的组成架构,从宏观上认识监控系统,接下来讲解了Zabbix的架构、Zabbix的安装、监控配置、自定义监控项、告警配置、告警脚本等功能。这部分内容适合初学者系统地学习Zabbix监控系统,对稍有经验的使用者来说,重点掌握3.9节中Zabbix对数据存储的处理,以及第5章和第6章的内容。
第2部分为中级部分,包括第7~11章,对Zabbix的多种监控方式进行了详述(如IPMI、SNMP、JMX等),对Zabbix的自动化功能进行了深入讲解,介绍了分布式监控系统,并有大量自定义脚本的监控案例,对自动化发现LLD功能进行了深入的讲解,适合对Zabbix有一定基础的读者深入学习。通过对这部分的学习,读者将会深入理解Zabbix的自动化功能。
第3部分为高级部分,包括第12~16章,介绍Zabbix的性能调优,解决Zabbix在使用过程中遇到性能瓶颈的问题,并让读者学会使用Zabbix API、Zabbix协议来扩展Zabbix,从而为构建运维平台提供了更多的扩展性。同时,也讲解了如何定制RPM包,以及如何使用SaltStack来自动化部署和配置,最后用一个实例来讲解如何构建企业级分布式监控系统,适合对Zabbix非常熟悉的读者进行深入应用。通过对这部分的学习,读者应该能够深入理解Zabbix。
第4部分为附录部分,介绍Zabbix的源码安装和Zabbix的升级,仅供读者参考。在介绍Zabbix的安装时,作者极力推荐在RHEL这类系统中使用RPM包的安装方式,但网络中大部分资料都采用源码安装,且在多种书籍中均有使用源码安装的习惯,从而误导了读者,认为源码安装才是真正地懂Linux,以此造成部分用户以使用源码安装为荣,让源码安装具有“优越感”。使用源码安装导致部分初学者连最基本的安装和配置都会遇到很多麻烦,甚至安装一个软件都需要几天才能完成。当然,这里并不排斥使用源码安装,笔者只是为了纠正一个观念,请读者尽量使用自己打包的RPM这种适合大规模安装的方式去部署Zabbix程序。本书将RPM定制的内容作为单独的一章进行介绍,让读者深入理解安装和定制的过程。
读者对象
中/高级Linux系统管理员
系统运维工程师
运维开发工程师
系统集成商
运维监控系统工程师
监控系统软件开发(设计)人员
IT管理人员
架构设计人员
勘误和支持
因作者水平有限,书中的错误或不妥之处难免,恳请读者批评、指正。如果读者有任何宝贵的意见或建议,可以发送邮件到zabbix@itnihao.com,我们将尽快给予反馈。
本书所有的代码和安装软件将放在github中托管,地址为https://github. com/itnihao/ zabbix-book/,读者可以自行下载并使用。另外,本书的勘误也会在该链接中得到反馈。
声明
本书采用的Zabbix版本为2.0和2.2,因此对Zabbix 1.8不再讨论,Zabbix 2.4将在未来两年内会发布,其功能与Zabbix 2.2将有所不同(例如,Zabbix 2.4中的分布式模式会去掉node架构等)。本书采用的操作系统以RHEL(CentOS)、Windows为主,对于其他系统,其配置方法类似,请读者举一反三。本书对部分不重要的内容只是简略地介绍,希望能起到抛砖引玉的作用。
另外,本书在编写过程中,参考了以下网址中的内容,并对官方网站的部分内容进行了翻译和整理,后面不再单独声明。
https://www.zabbix.com/documentation/2.2/manual
https://www.zabbix.org/wiki/
http://pengyao.org/zabbix-triggers-functions.html
鸣谢
本书在编写过程中得到了众多朋友的支持。在这里要感谢姚炫伟、陈益超、窦喆、冯颖聪等对本书的技术问题进行审校;感谢电子工业出版社编辑任晓露和李利健对本书的精心指导,更正了书稿中的很多错误,本书才得以与读者见面。特别感谢以下朋友对作者的支持与鼓励:伊杨林、吴华、黄小路、芮峰云、罗坤、温宏强、曾兵、范仁更、邝玲、张克元(网名Geek)、沈灿、薛群、李佃田、罗苗、杨晨、焦婷婷、KissPuppet(网名)、司鼎任、汤永全、罗伟、水喜云、唐文军、李彬(网名彬彬)、高鹏程、唐博、罗涛(网名MorningSong)等。注意,以上排名不分先后(使用Linux命令sort -R随机生成排序)。感谢SJCloud公司的全体成员,感谢公司领导金剑、陶永国、付自强在笔者工作期间的支持和帮助。
另外,也要感谢史应生、李庆雷、姚仁捷、邓磊、马哥(马永亮)、孙科伟、虚拟的现实(网名)等分享的有关Zabbix的技术文档、视频录制和讲座等内容,这些内容对促进Zabbix在国内的推广和发展有很大帮助。很多网友也写了大量有关Zabbix的博客文章,相关链接会放在本书的github项目中。
本书的代码示例规范
(1)在Shell环境中使用,Shell命令用黑体加粗。
shell# vim /etc/php.ini
(2)在MySQL环境中使用,SQL命令用黑体加粗。
mysql> flush privileges;
(3)在本书中,Zabbix-Server表示Zabbix-Server服务或进程,其他Zabbix- Agent、Zabbix-Get、Zabbix-Proxy情况类似,后面不再声明。
(4)重要参数的解释,用灰色底纹表示。
Proxy name,即Zabbix-Proxy的hostname。
Proxy mode,即Zabbix-Proxy的工作模式,被动或主动,默认是主动模式。
作者(网名itnihao)