Zabbix监控系统深度实践(第2版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-07 15:22:32

点击下载

作者:姚仁捷

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Zabbix监控系统深度实践(第2版)

Zabbix监控系统深度实践(第2版)试读:

前言

本书的由来

我从职业生涯开始至今,就一直在和监控系统打交道。

我最早在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上更好地检索信息。基于这个原因,我将之前的中文术语全部又换成了英文。由于这些术语非常多,虽然编辑帮我细致地进行了检查,难免有疏漏,希望大家能够谅解。

致谢

在前言的最后,要感谢很多人。首先感谢的是我的父母,没有你们,就没有我。然后要感谢我的老婆,因为要忙于写书,很多时候不能陪你。最后要感谢的是诸超、陈文春、吴晓刚、周昕毅、朱宁和刘海阳等同事的帮助,在我写书的过程中,给出了很多宝贵的建议。谢谢各位。第一部分概念篇第1章自动化运维和监控系统1.1 互联网公司的运维工作

一般来说,公司中的运维,包括基础运维、应用运维、运维开发和监控组四部分。前两者是必需的——基础运维是负责IDC的,上架服务器、网络这些;应用运维可以理解为SA(System Administrator),即系统管理员;而运维开发在一些公司则不属于运维部门,主要负责运维工具开发、系统开发等工作,比如监控系统、发布系统;监控组,就是24小时值班的人员,他们要时刻关注网站或者系统的状况,一旦出现问题,要第一时间进行排查,并且联系相关的运维和研发工程师。

国内中大型的互联公司,拥有几百、几千台服务器是很正常的情况,所以运维工程师一直是非常“悲催”的职业。每天在几千台服务器上面敲命令,查看系统状态,发布代码,任务很是繁重。

在微博上,搜索“运维苦逼”关键字,可以看到很多不堪重负的疲惫语言,比如下面几条:(1)双11来了,今晚支付宝都瘫痪啦,我在想今晚程序员,搞运维的,项目团队又要苦逼地加班了。(2)atlassian家的东西怎么和我家教务一样呢……这一天都挂成狗了,Java运维好苦逼。(3)双11最苦逼的是谁?看着老婆抢购的汉子?No!是淘宝的运维,他和他男朋友们一起在通宵加班啊。

……

从这几条微博,基本能理解运维人员的痛苦了吧。下面说说我在工作过程中碰到的运维同事们的痛苦:(1)系统出问题了不知道。要等到客户报障才知道网站服务出问题。(2)发布代码太痛苦了。要一台一台机器去执行命令,一台一台机器去检查发布是否成功。(3)机器之间不统一。代码是一样的,一台机器是正常的,另一台是不正常的,见鬼了!(4)分析问题困难。比如想看过去1天的CPU负载的情况,必须先用sar-q获取到这些数据,然后复制到Excel,再画图。如果想几台机器一起看,那更加痛苦。(5)不清楚资产情况。很多公司的运维人员,竟然不知道自己公司的IDC有多少台服务器。1.2 何谓自动化运维

如果读者是运维工程师,看到前一小节结尾的时候,肯定嘴角露出邪恶的笑容,心里想“这些我全部碰到过了”。是啊,这些是苦逼运维工程师几乎每天要面对的问题。反过来想,以这些“痛苦”作为反例,我们能想到一个好的运维架构是怎样的:(1)硬件标准化——包括服务器、内存、系统版本等。(2)软件标准化——应用版本等。(3)运维自动化——包括监控、发布、CMDB。

前两点都很容易理解,那运维自动化具体是干什么的呢?

笔者的理解,运维自动化,就是把运维中大量日常重复性工作使用工具让其自动运行,减少人的参与。首先它要包括以下几部分:(1)监控报警——系统数据,应用指标的监控,和出错时及时报警。(2)发布系统——代码发布,发布后的检查,代码的回滚,灰度发布。(3)服务器标准化——Cobbler装机加上Puppet,可以做到硬件、软件的标准化。每台机器对于运维来说都是一样的。(4)CMDB——配置管理数据库,存储了所有运维相关数据,包括服务器硬件信息、域名和服务器的关系、IDC容量等。它是运维的心脏,所有的系统都依赖于它。

说白了,这就是运维自动化了,前面提到的痛苦全都“药到病除”了:系统出问题了?报警邮件马上就发给你,简单的错误甚至可以自动修复,使监控数据的可视化、性能分析变得轻松;代码发布困难?使用发布系统,代码首先灰度发布,发布一些机器检查正常后,继续发布(在PPTV已经能做到一键发布,一键回滚);机器不统一?Cobbler保证装出来的服务器完全一样,Puppet保证服务器上的软件都是一个版本;资产容量搞不清?CMDB帮你理清楚一切。

当公司只有几十台服务器的时候,“人肉”进行这些工作去解决不标准的问题,都是可以的,无非是多找一些工程师罢了。但当公司的规模扩大,服务器到了几百、几千的规模后,还能这样做吗?答案是不能,先不说你能不能说服老板找100多人来做运维,最重要的是只要是人参与的事情,就一定会犯错,比如rm敲错以后的懊悔,我估计所有做运维的读者都曾经经历过。

如果说几百台机器的代码发布工作,让人来一台一台干的话,我估计每天几十次的发布,会把这些人累趴下,很有可能键盘上的s和h是最早磨花的,因为要不停的“ssh”。

这么多服务器,天知道哪台服务器什么时候出问题、出什么问题,这时候,监控系统要出马了,出了问题第一时间通知到负责人,告知服务器的问题和出问题现场的服务器性能数据。

读到这里,有较真的读者要问了,“那CMDB是干嘛的?监控系统、发布系统、标准化系统我都明白是干什么的了,但CMDB好像跟前面几个都没什么关系。”其实,CMDB才是运维自动化的核心。为什么这么说,看我慢慢道来。

监控系统要发报警给负责人,那么某一台服务器谁是负责人,这个信息由谁来维护呢?有人会回答:“记在Excel里。”当我发布代码时,我想发布到www这个域名下,那么哪几台服务器是为www服务的呢?仍有人回答:“可以放Excel里。”标准化,要从一个机房搬一批机器到另一个机房,然后重装系统,给新业务服务。基础运维的同事怎么知道可以搬几台机器,去搬哪些机器呢?还是同样的声音:“记在Excel里。”可是,这些记在Excel里面的数据,由谁来维护更新呢?要知道,这些数据如果不更新,就是一堆垃圾。如果数据不准确,甚至还会有危险,比如把一台正在服务的服务器给关了。这里就更不要说Excel里面记错了、记录Excel的人离职了、两个Excel数据有冲突的问题了。

对了,CMDB就是这个Excel。当然,这个是对CMDB非常粗略的解释。CMDB除了是一个二维平面的表格外,还维护了“关系”这个概念,比如前面提到的服务器和域名的关系、服务器和负责人的关系、域名和域名之间的关系等。1.3 监控系统在运维自动化中的角色

监控系统,是运维工程师和研发工程师的眼睛。它帮助工程师在第一时间发现网站的问题。

服务器的整个生命周期,都要和监控系统打交道。服务器上架,需要加入基础监控,比如CPU负载、内存等;当服务器上开始跑应用时,需要加入对应的应用监控,比如Resin、MySQL等;当服务器维护时,又要暂停这些报警,否则你明明在维护MySQL,监控系统还给你报警说MySQL挂了。这些操作,手动去做非常麻烦,需要跟运维的其他系统共同协作,比如CMDB中一台机器上架了,那么监控系统自动加入监控。

监控系统是运维人员的眼睛,没有它,就没法知道系统运行状况,总不见得,我打开几十个终端,然后while true来显示CPU负载。撇开能不能看清楚的问题,得要多少显示器才能显示所有服务器的这些信息?

当发生问题时,监控系统要第一时间发出报警,报警中除了出问题的点,还可以有一些数据和简单的分析,比如当时一段时间的CPU负载等,以帮助接到报警的人员快速定位问题。

在出现故障以后进行问题分析时,还要靠监控系统。因为监控系统真实地记录了故障发生现场这台服务器的状况。运维工程师可以通过不同纬度的分析,找出问题的原因。

监控系统在运维自动化里的角色,可以用下面三点来概括。(1)监控数据收集及可视化。(2)异常数据报警。(3)和其他系统协同工作。1.4 监控系统的理想化模样

根据控监控系统在运维中的角色,理想的监控系统应该具有如下特点。

1.监控数据收集及可视化。(1)监控系统能够自定义监控的内容,可以自己写脚本来收集需要的数据。(2)数据要保存在数据库中,这样以后需要的时候可以对这些数据进行分析计算。(3)能够方便、快速地将监控加入到服务器上,不需要烦琐的操作。(4)数据可视化不要很花哨,但要直观好用。

2.异常数据报警。(1)可以定义复杂的报警逻辑,可以做到Item之间的关联报警,而不是只能针对一个。(2)报警需要被确认,让运维人员知道多少报警已经有人认领并开始处理了。(3)报警方式要能够自定义,可以发邮件和短信,如果能够在IM上通知别人就更好了。(4)报警内容要可以自行设置,在报警邮件中加入一些简单的分析,而不是让运维人员上服务器敲命令来获取基本的信息。(5)报警后可以自动跑一些命令。这些命令可以是获取需要的信息,也可以是自动修复,比如重启服务等。

3.和其他系统协同工作。(1)有强大的API可以使用,可以让其他系统调用完成工作。(2)监控数据是开放的,数据库中的数据结构不要太复杂,让人无从下手。(3)监控可视化的图可以方便地引用,而不是要用一大串JavaScript。第2章Zabbix简介2.1 Zabbix发展现状

Zabbix是一个非常强大的监控系统,其官方的说明是:Zabbix是企业级的软件,被设计用来监控IT基础设施的可用性和性能。而我的看法是:它是一个能够快速搭建起来的、开源的监控系统。对于想快速可用的小型公司,Zabbix自带的Item足够满足需求,通过简单的配置,可以在很短的时间内搭建起一套功能完善的报警系统。而对于中大型公司,Zabbix也能很好地支撑,可以设定自定义的Item,自动生成报表,有API和其他系统集成,数据库中有开放的数据可供分析。为什么暴雪的游戏(星际争霸、暗黑破坏神、魔兽争霸等)都这么经典?因为它们“易于上手,难于精通”。而Zabbix也一样,你可以非常容易地搭建起可用的Zabbix,但要用好它,把它的潜能挖掘出来,需要花很大的力气。

使用Zabbix时,一般需要在被监控的服务器上安装Zabbix Agent,Zabbix Server会和Zabbix Agent进行通信,获取监控数据,这是Zabbix监控的一般模式。

Zabbix从2007年开始流行,2013年在国内开始流行起来。图2-1尾部的虚线部分是Google Trends对Zabbix的预测。图2-2是Zabbix在全球的区域热度。图2-1图2-2

Zabbix目前的最新稳定版是2.2.0,第一个版本是2004年3月发布的Zabbix 1.0。Zabbix从2.0开始,界面有了很大的变化,相比以前比较丑陋的UI,变得有层次感了,并且增加了对于JMX的原生支持和Linux级别的自动发现。

Zabbix目前的Bug Fix也比较正常,整个项目比较成熟,适合在公司中使用。笔者比较奇怪的是,Zabbix的很多自定义监控脚本,都是通用的,但到目前为止,还没有一个平台,去共享这些脚本,在本书的最后一部分介绍开源和社区的地方,会提到笔者在Github上建立的,旨在分享Zabbix自定义监控脚本的项目。2.2 选择Zabbix的理由

现在对应前文,看看Zabbix是否能满足理想中的监控系统的要求。

◎监控系统能够自定义监控的内容,可以自己写脚本来收集需要的数据——Zabbix支持任何自定义的监控脚本,只要输出需要的值就可以。

◎数据要保存在数据库中,这样在需要的时候可以对这些数据进行分析计算——Zabbix在数据库中的表结构虽然有些复杂,但逻辑很清晰。

◎能够方便、快速地将监控加入到服务器上,不需要烦琐的操作——Zabbix有模板这一概念,可以方便地将一组Item进行统一操作。

◎数据可视化不要很花哨,但要好用——Zabbix每一个Item都可以看到其历史,Web界面可拖动,界面友好。

◎可以定义复杂的报警逻辑,做到Item之间的关联报警,而不是只能针对一个——Zabbix强大的Trigger定义,几乎可以满足所有规则组合。

◎报警需要被确认,让运维人员知道多少报警已经有人认领并开始处理了——Zabbix对于报警,有ACK机制。

◎报警方式要能够自定义,可以发邮件、发短信,如果能够在IM上通知别人就更好了——Zabbix支持邮件、Jabber。

◎报警内容要自己可设置,在报警邮件中加入一些简单的分析,而不是让运维人员上服务器敲命令来获取基本的信息——Zabbix自定义了一套宏可以在报警邮件中引用,如果要更复杂的功能,可以通过远程调用命令实现。

◎报警后可以自动跑一些命令。这些命令可以是获取运维人员需要的信息,也可以是自动修复,比如重启服务等——在触发报警后,Zabbix可以远程执行命令。

◎有强大的API可以使用,可以让其他系统来调用完成工作——Zabbix支持RestAPI,几乎所有的操作都可以通过API实现。

◎监控数据是开放的,数据库中的数据结构不要太复杂,让人无从下手——监控数据就在Zabbix数据库中,可以方便地进行分析。

◎监控可视化的图可以方便的引用,而不是要用一大串JavaScript——Zabbix使用PHP原生的绘图模块,如果要引用Zabbix的图表,只需要引用图表的URL即可,非常方便。

由此可见,Zabbix满足我们所有对于监控系统的需求。是不是有些心动了呢?2.3 Zabbix部分名词约定

Zabbix有中文界面,但不是非常完善。我在写这本书的时候,一直在考虑,到底是用英文名词好,还是用中文名词好?如果使用英文名词,那么一部分英语不太好,或者因为各种原因使用中文界面的读者不容易理解;如果使用中文名词,有的地方官方翻译的又不是很通顺,不符合中国人的阅读习惯,比如“Discover”这个功能,Zabbix翻译为“探索”和其本意相差太远。最后,我决定在本书中使用Zabbix原生的英语名词,然后在附录中会有一个中英文对照。因为,从现在的所有开源产品来说,英语仍是第一语言;在论坛中的交流,文档资料都是英语。要掌握一个开源产品,就必须了解它的基本英语的单词和意思,而且,Zabbix本身并没有太多的英语需要理解。

虽然是基于Zabbix的中文翻译,但在开始学习Zabbix之前,先对一些Zabbix比较重要的东西和概念进行简单的解释。

◎Zabbix Server:Zabbix的控制中心,收集数据、写入数据库都是它的工作。

◎Zabbix Agent:部署在被监控服务器上的一个进程,负责和Zabbix Server交互,执行命令。

◎Host:广义上的服务器,大多数情况指代的是刀片机这类,在少部分时间会指代包括交换机在内的,被Zabbix监控的实体。

◎Item:对于某一个指标的监控,对应的是Items,英文原意是“物品”。比如某台服务器的CPU负载就是一个Item。

◎Trigger:一些逻辑规则的组合,它有三个值:正常、异常、未知。

◎Action:当Trigger符合某个值的时候,Zabbix会进行的操作,比如最常见的发邮件。第3章Zabbix安装

这一章主要介绍Zabbix的安装。总的来说,Zabbix的安装不算困难:Zabbix Server和Zabbix Proxy的安装步骤稍多,但Zabbix Agent安装非常简单。经过检验,在同样的系统中,编译安装完的Zabbix Agent可以复制到其他服务器中继续使用。3.1 获取Zabbix

Zabbix Server和Zabbix Agent都在一个压缩包中,可以到http://www.zabbix.com/download.php下载源码包,本书使用最新的稳定版的Zabbix2.2.1版本进行介绍。在下载界面中,除了2.2版本的源码外,还有下面几个可用的版本。(1)Zabbix 2.2.X Packages:它们分别针对各个发行版做了打包,比如针对RedHat的rpm,和针对Debian和Ubuntu的deb包。(2)Pre-compiled Zabbix 2.2.0(stable)agents are available for selected platforms:这个是已经编译好的,针对不同平台可以直接运行的包。(3)Zabbix Appliance:这个是Zabbix基于OpenSuSE的镜像,它默认使用MySQL作为Zabbix的存储引擎。镜像中的系统,已经实现设置过,能够保证没有故障的运行。注意:这些镜像,适合在评估测试Zabbix的使用,目前还不适用于企业生产环境的使用。

Zabbix是使用C语言编写的,笔者打算先花很小的篇幅介绍一下Zabbix源码包的目录结构。解压以后,一共有下面几个文件夹。

◎bin:Windows环境下使用。

◎build:Windows环境下使用。

◎conf:Zabbix配置文件的例子,对于每一个参数都有说明。

◎database:数据库初始化文件。

◎frontends:Zabbix前端PHP代码。

◎include:C编译时需要的头文件。

◎m4:configure脚本中shell代码的分装,目的在于自动化生成configure和Makefile。

◎man:UNIX使用手册(UNIX Manual)。

◎misc:不同系统的Zabbix启动文件。

◎src:Zabbix源码,不包括前端PHP代码。

◎upgrades:升级Zabbix时需要的,供数据库Scheme升级使用。2.2后已经废除,Zabbix会自己更新,但文件夹还是保留着。3.2 Zabbix Server安装

安装前,先看一下Zabbix对于硬件和软件的要求。Zabbix官网对于小型规模、中型规模、大型规模、超大型规模这4种,分别列举了例子,如表3-1所示。表3-1

而对于我国互联网企业来说,这点机器根本不算什么。如果说只是中小型规模,一台非常一般的服务器也足够支撑所有的监控任务了。3.2.1 Zabbix数据库配置

创建数据库时,Zabbix Server需要初始化数据库的Scheme和其中的数据,Zabbix代理(后文会介绍)只需要初始化数据库的Scheme。对于Zabbix Agent来说,不需要数据库的支持。初始化数据库非常简单,下面会针对不同的数据库,分别详细说明如何配置(假设用户名username已经存在,权限也已经配置)。

对于MySQL:

这些SQL文件都在database文件夹中,需要注意的是,我们一定要把数据库设置为UTF8编码。另外,如果是使用Zabbix Proxy,只需要导入schema.sql就行了,images.sql和data.sql都不必导入。3.2.2 安装Zabbix Server

初始化Zabbix数据库后,本节讲解Zabbix Server的安装。先从前文说到的地方把Zabbix 2.2版本的源码包下载下来,然后解压,进行以下操作。

1.创建用户

对于所有的Zabbix进程来说,一个非root用户是必须的。当Zabbix进程以那个身份启动的时候,它就会一直以那个进程的身份运行。

当使用root用户启动Zabbix进程的时候,它会切换到zabbix用户,所以zabbix用户一定要存在。这里我们首先建立一个zabbix用户组,然后添加zabbix用户到里面:

大家注意,Zabbix的PHP前端的运行是不需要zabbix这个用户的。Zabbix官网建议,如果Zabbix Server和Zabbix Agent是在一台机器上运行的话,最好使用两个用户,来隔离权限,这样有什么好处呢?如果说都使用同一个用户跑,那么Zabbix Agent可以去修改Zabbix Server的配置文件,而且对于任何一个Zabbix的管理员,都可以轻松获取Zabbix Server的敏感信息,比如Zabbix数据库的IP,用户名,密码。我见过很多Zabbix的PHP前端放在公网上,这样我相当于获取了Zabbix Server的读写权限(使用system.run,可以简单理解为远程执行命令)。

另一点需要大家注意的就是,不要把Zabbix运行在root身份或者任何拥有管理员权限的身份,这样有很大的风险。这样进入了Zabbix,相当于获取了所有服务器的root权限。非常恐怖,你能想象我在所有服务器上执行rm-rf/的结果吗?

2.编译源代码

在使用configure编译Zabbix源代码的时候,需要指定要安装的是Zabbix Server,还是Zabbix代理,或是Zabbix Agent,还需要指定使用的数据库类型,此外,Zabbix还支持很多在编译时的配置。具体可以使用./configure--help来查看。比如,我们要安装Zabbix Server和Zabbix Agent,使用MySQL作为数据库,就可以这么安装:

一般来说,我们会开启SNMP监控,那么还要加上--with-snmp。

如果想一步到位,可以像如下这样:

编译源码是最容易发生错误的,常见的就是“Not found XXX library”,下面我们来针对各种常见情况一个一个解决。

◎Not found mysqlclient library:安装mysql-devel

◎LIBXML2 library not found:安装libxml2-devel

◎Curl library not found:安装curl-devel

◎cannot use unixODBC library:安装unixODBC-devel

◎Invalid Net-SNMP directory-unable to find net-snmp-config:安装net-snmp-devel

◎Invalid OPENIPMI directory-unable to find ipmiif.h:安装OpenIPMI-devel

当我们看到如图3-1所示的界面,就是编译成功了。图3-1

3.安装

这一步非常简单,就是make install。默认情况下(即前一步没有指定prefix),zabbix_server、zabbix_proxy和zabbix_agentd会安装在/usr/local/sbin,而客户端的zabbix_get和zabbix_sender会在/usr/local/bin。

4.修改配置文件

需要修改的就是Zabbix Server连接数据库的IP、用户名和密码。

5.运行Zabbix Server3.2.3 安装Zabbix Web前端

Zabbix前端配置并不困难,在笔者刚接触Zabbix的时候,对于PHP一窍不通,安装ZabbixWeb前端的问题主要在PHP上。其实,安装了一次以后,就有经验了,觉得也不是困难的事情。

首先安装PHP和Apache:

然后可以正式安装Zabbix Web前端了,具体如下。(1)Zabbix前端和Zabbix可以是分开的两台机器,只要求Zabbix前端和Zabbix Server、Zabbix数据库网络连通即可。(2)将Zabbix源代码文件夹中的frontend中的内容复制到容器对应目录,在浏览器中打开Zabbix前端,如果一切正常的话,已经可以看到界面了。如果没有看到界面,而是看到一堆文件,那说明PHP没有安装正确,请按照前面的步骤正确安装PHP。(3)然后就是前端配置中最容易出错的一步了。从前端我们可以看到Zabbix前端对于系统的要求。根据Zabbix官网,Zabbix对于PHP的要求如表3-2所示。表3-2续表

根据图3-2所示,界面中的fail提示在实际界面中是红色的,我们需要修改PHP配置,一般是在/etc/php.ini文件中。我们根据图中关于PHP option的提示,把每一个不符合要求的都修改掉,然后重启httpd。

关于不是PHP option的fail提示,则是Zabbix需要的数据库依赖,这里以最常用的MySQL为例:

解决完全部问题后,就可以单击图3-2中原本是灰色的Next了。图3-2(4)输入数据库相关配置,单击Test connection,如果提示Can't connect to local MySQL server through socket'/tmp/mysql.sock',则需要将服务器上的mysql.sock在/tmp下做一个软连接:(5)输入Zabbix Server配置。(6)下载Zabbix前端的配置。这个配置文件是根据前面输入的数据库参数、Zabbix Server参数生成的。下载后放在提示的位置即可。(7)完成安装。默认的用户名密码是Admin和zabbix,切记登录的第一件事就是把这个默认密码给改了。3.3 Zabbix Agent安装3.3.1 UNIX/Linux上安装Zabbix Agent

在UNIX/Linux的机器上,安装Zabbix Agent非常简单,就像其他Linux源码一样,cofigure,make intall即可。命令如下:

和安装Zabbix Server一样,如果不指定prefix的话,默认安装在/usr/local/sbin下。

安装完后,需要修改Zabbix Agent的配置文件,将其中的Server=127.0.0.1中的IP地址改为Zabbix Server的IP。这里有个值得注意的地方,因为我国错综复杂的网络情况,有时这里写Zabbix Server的IP是没有用的,Zabbix Server和Zabbix Agent还是连不通,这时就需要写成Zabbix Server的出口IP。3.3.2 Windows上安装Zabbix Agent

Zabbix Agent在Windows上的安装比较简单,几步命令就可以完成,但Zabbix Server和Zabbix Proxy都不可以在Windows机器上运行。

Zabbix Agent的Windows版本就在其安装目录下的bin文件夹中,其中分了win32和win64版本,大家根据情况自行选择。在C盘根目录下有zabbix_agentd.conf,注意这个conf和Linux下的conf是不一样的,不能混用。从Zabbix安装目录下的conf文件夹中找到zabbix_agentd.win.conf,重命名为“zabbix_agentd.conf”后将其放到C盘根目录下,并配置相关的参数。下面来看看在Windows系统安装Zabbix Agent的详细步骤。(1)选择“cd c:\PATH\TO\ZABBIX\bin\win64”路径。(2)选择“zabbix_agentd.exe-install”,安装服务,成功则提示如图3-3所示。图3-3

这个时候Zabbix Agent已经在Windows中生成一个服务了,可以从“开始”→“管理工具”→“服务”中看到,如图3-4所示。图3-4

install这一步,默认是调用c:\zabbix_agentd.conf的,如果你的conf不在这里,可以使用config来指定。(3)选择“zabbix_agentd.exe-start”,启动Zabbix,启动正常则显示如图3-5所示。图3-5

从服务中也可以看到Zabbix Agent已经启动了,如图3-6所示。图3-6

现在测试Windows Zabbix Agent和Zabbix Server之间的连通性。由于Windows是没有自带telnet工具的,这里直接在浏览器上访问Zabbix Server的工作端口(默认为10051),如果显示“OK”,则说明Windows Zabbix Agent到Zabbix Server的连通性是正常的,如图3-7所示。图3-73.4 测试Zabbix Agent和Zabbix Server运行

在把Zabbix Server、Zabbix前端和Zabbix Agent都安装好后,这一节来检查Zabbix Server和Zabbix Agent是不是能连通。

方法很简单,Zabbix Agent是在10050端口接收Zabbix Server命令的,我们只要测试Zabbix Server端能否和Zabbix Agent连通即可:

这里的ZABBIX_AGENT_IP指的是Zabbix Agent的IP。3.5 配置文件详解

Zabbix的配置虽不十分复杂但也不少,有的配置参数,笔者也是使用了好久才知道是干什么的。在这一章中,已经基本介绍了Zabbix的各个组件,说明了它们的作用。接下来,笔者会针对Zabbix Server、Zabbix Agent和Zabbix Proxy的配置文件,对其中的每个参数进行介绍,不求深入,希望能让大家知道每个参数是干什么用的。3.5.1 zabbix_server.conf

从名字就看的出,这个是server的配置文件,它的参数作用(参数的范围不在这里说明,配置文件中有),如表3-3所示。表3-3续表续表续表3.5.2 zabbix_agentd.conf

配置参数如表3-4所示。表3-4续表第4章监控第一台Host

在第3章,我们搭建了Zabbix Server和Zabbix前端,同时也在服务器上安装了Zabbix Agent。在这一章,我们把一台服务器加入Zabbix监控,从真实的需求出发,实现Zabbix对于服务器的监控、报警。通过本章的实践,希望读者能够掌握Zabbix的基本使用方法。4.1 Host在监控系统中的活动

在监控系统中,核心对象是服务器。一般来说,监控都是针对服务器而言的,而对于服务器来说,核心是其Item。有了Item,就可以发现监控指标的异常,然后就是要报警,这应该是每一个运维工程师每天都要面对的情况。无论公司大小、运维有多少服务器,报警邮件一定是运维工程师最不缺的东西。在解决问题的时候,要查看服务器的性能数据,从而分析定位问题。比如,当发现服务器负载突然变高时,可能需要看磁盘I/O是不是升高,这时需要查看各个历史数据,看其是否和出问题时的时间点吻合。要是发现磁盘I/O在CPU负载突然升高时也突然升高,那很有可能就是磁盘I/O造成的CPU负载高。

因此,服务器在监控系统中的活动,主要有以下三点:

◎监控数据指标

◎数据异常时报警

◎监控数据的数据可视化

这是监控系统最重要的组成,其他都是基于这三点的。4.2 添加一个用户

首先,要定义一个使用Zabbix的用户,默认这时已存在一个zabbix用户。

如图4-1所示,在菜单上单击“Administration”→“Users”,再单击“create user”,根据屏幕上的提示输入对应的信息。在登录Zabbix时,如果连续5次输入密码错误,系统会锁定Zabbix,以防止暴力破解。所以新建用户时,一定要记住密码。图4-1

在新建一个用户时,默认是没有任何媒介的,这里单击“Media”标签,新建一个媒介,“Type”选择邮件,然后输入这个用户接收Zabbix报警时使用的邮箱即可,本书中我们使用frank@zabbix.com为例。

其他的一些设置不需要修改。添加用户后,就可以添加监控了。4.3 把服务器加入Zabbix监控

一台服务器,在Zabbix中被称为Host,在本书中,就用服务器来称呼。笔者曾考虑将本书和后面的“添加一个Item”小节合并到一起,因为把服务器加入Zabbix监控是个非常简单、非常“微不足道”的步骤,但考虑再三后,还是把它独立出来。因为“服务器”是Zabbix非常重要的概念,它关系到整个Zabbix的资源模型。关于Zabbix资源模型,会在这一章的结尾部分介绍,有兴趣的读者可以先跳过去看,然后再回过头来阅读这一小节。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载