1.前言

在前一篇讲述了如何安装Memcached和Redis,在这一篇主要讲述如何安装企业级IT设备监控系统Zabbix。本人曾在某大型集团公司信息化部门工作,公司在多个城市以及一个城市的多个区有办公区,在那里不仅会开发软件系统,还需要对大量的软件系统、操作系统及IT设备进行监控,以保证IT基础设施能够7×24小工作。在没有实施系统之前,经常接到电话被告知网络中断了或是某个应用程序无法使用了,每次接到电话之后首先要排除是否误报,然后再分析是哪里出了问题,最终找出解决办法。每次处理事情的周期很长,也很麻烦,于是本人在网上寻找类似软件,最终在smokeping、cacti、nagios、zabbix、ntop等众多软件中选择了Zabbix。Zabbix的官方网站为:https://www.zabbix.com,由于发展了很多年,所以在官方网站上有大量的文档和监控模板。


zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供柔软的通知机制以让系统管理员快速定位/解决存在的各种问题。zabbix由2部分构成,zabbix server与可选组件zabbix agent。zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux, Solaris, HP-UX, AIX, Free BSD, Open BSD, OS X等平台上。Zabbix Server必须安装在Linux系统上,但Zabbix agent则有适应各种操作系统的版本。


当然,如果是个人或小组简单应用,可以考虑自己开发一些小工具来实现,比如在Windows上可以利用PerformanceCounter之类的工具(在Linux上也有类似的工具)来实现部分功能,本人以前曾尝试过,也见过别人做过类似的工作,但毕竟应用面比较窄,要想全面监控,还是用企业级IT设备及系统开源监控工具比较好。


2.准备

Zabbix相关的资源下载页面为https://www.zabbix.com/download,可以在此安装个人需要下载。

2.1zabbix服务器端

提供了针对各种类型操作系统的Zabbix Server安装包和已经在虚拟机配置好的虚拟机文件,同时还提供了源代码供动手能力强的人自己编译安装,在这里我们就自己编译安装,下载最新版本Zabbix server版本,为3.4.3,下载地址:https://ncu.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/3.4.3/zabbix-3.4.3.tar.gz

2.2zabbix Linux客户端

这里就直接下载已经编译好的客户端即可,下载地址:

2.3zabbix Windows客户端

这里就下载编译好的客户端,下载地址:https://www.zabbix.com/downloads/3.4.0/zabbix_agents_3.4.0.win.zip。

3.编译安装

3.1Zabbix server编译安装

首先将Zabbix Server源代码上传到服务器(可以上传也可以在Linux服务器上用wget下载),假定放在/root路径下。

首先创建zabbix运行时的账户:

groupadd zabbix

useradd -g zabbix zabbix


接着解压zabbix源代码:

tar -zxvf zabbix-3.4.3.tar.gz

cd /root/zabbix-3.4.3

可以查看zabbix的编译配置参数:

./configure –help

其中有几个比较重要的参数:

--prefix=PREFIX   指定安装位置

--enable-server   启用服务器功能

--enable-agent   启用客户端功能

--enable-java    启用Java gateway功能

--enable-ipv6    启用IPv6

--with-mysql    支持MySQL

--with-libxml2   支持xml

--with-net-snmp  支持net-snmp

--with-ssh2      支持ssh2

--with-libcurl     支持cURL


在我们进行编译之前,我们需要安装一些库,主要是编译和运行过程中需要,安装命令如下:

yum install net-snmp net-snmp-devel net-snmp-utils libssh2 libssh2-devel openldap openldap-devel unixODBC unixODBC-devel OpenIPMI OpenIPMI-devel libevent libevent-devel -y


如果不安装这些库,可以在运行下面的configure命令时出现如下错误:

configure: error: net-snmp library not found

configure: error: SSH2 library not found

configure: error: unixODBC library not found

configure: error: SSH2 library not found


因为在本系列之前的文章中我们已经安装了MySQL、PHP及Java,所以我们这里只需要指定路径即可,如:

--with-mysql=/usr/local/mysql-5.7.18/bin/mysql_config


我们现在安装Zabbix Server的服务器是CentOS7,Linux内核版本为3.10,我们已经安装了MySQL5.7及PHP5.6.30,因此我们的编译配置为:

./configure --prefix=/usr/local/zabbix\
 --enable-server\
 --enable-agent\
 --enable-ipv6\
 --enable-java\
 --with-mysql=/usr/local/mysql-5.7.18/bin/mysql_config\
 --with-net-snmp=/usr/bin/net-snmp-config\
 --with-libcurl\
 --with-libxml2\
 --with-openipmi\
 --with-unixodbc\
 --with-ldap\
 --with-ssh2\


如无意外则会编译成功。


题外话:在本系列上一篇在讲编译安装Memcached的时候讲了编译安装libevent的,当时指定libevent安装在/usr/local/libevent,我本着能少一事就少一事的态度,通过参数指定libevent的位置,不再安装libevent,结果编译报错,说是找不到event.h,我的configure参数如下:

./configure --prefix=/usr/local/zabbix\
 --enable-server\
 --enable-agent\
 --enable-ipv6\
 --enable-java\
 --with-mysql=/usr/local/mysql-5.7.18/bin/mysql_config\
 --with-net-snmp=/usr/bin/net-snmp-config\
 --with-libcurl\
 --with-libxml2\
 --with-openipmi\
 --with-unixodbc\
 --with-ldap\
 --with-ssh2\
 --with-libevent=/usr/local/libevent\
 --with-libevent-include=/usr/local/libevent/include/event2\
 --with-libevent-lib=/usr/local/libevent/lib

在这里折腾了很长时间,自己多次尝试,包括在官网和网上寻找答案均无结果,最终无奈之下选择yum install libevent libevent-devel来解决问题。


3.2Zabbix-agent编译安装

对于Zabbix的客户端也可以编译安装,也可以直接安装已经编译好的安装包,在Linux下使用yum install方式来安装,也可以像在Windows下一样下载压缩包后解压缩安装。

其中介绍下Windows下安装过程:

按照前文提及的下载地址下载压缩包,将其解压到带安装的Windows主机的C盘下,解压后的路径为:C:\zabbix_agents_3.4.0.win,在C:\zabbix_agents_3.4.0.win\bin目录下有win32和win64两个目录分别对应x86和x64架构,因本人的机器为Win7 X64,因此在命令窗口下安装的命令为:

cd C:\zabbix_agents_3.4.0.win\bin\win64

zabbix_agentd.exe -c C:\zabbix_agents_3.4.0.win\conf\zabbix_agentd.win.conf –i

上述命令执行成功后你会在Windows系统的服务中多了一个Zabbix Agent的服务。

启动zabbix_agentd的命令为:

zabbix_agentd.exe -c C:\zabbix_agents_3.4.0.win\conf\zabbix_agentd.win.conf –s


4.配置

4.1初始化Zabbix数据库

首先,请确认MySQL已经启动,然后登录到MySQL。

[root@common ~]# /usr/local/mysql-5.7.18/bin/mysql -u root -p

Enter password: 


然后创建Zabbix数据库,Zabbix的数据库初始化文件在/root/zabbix-3.4.3/database目录下(注意本文是将Zabbix源码包解压到/root/zabbix-3.4.3目录下,如果不是此目录请根据实际情况修改),从目录下的文件夹名可知Zabbix支持DB2、Oracle、MySQL、PostgreSql和SQLite数据库,当如果监控的设备数较多的话,建议还是不要使用SQLite了。

下面就来创建数据库和初始化数据库:

mysql> create database zabbix character set utf8 collate utf8_bin;

mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbixpassword'; flush privileges;

mysql> quit;

注意:

请将上面的SQL语句中的'zabbixpassword'更改为实际的数据库密码,并牢记住这个密码,稍后会使用这个密码。

如果在my.cnf中配置了” skip-name-resolve”,即禁止MySQL将域名解析为IP,那么就需要将授权语句改为:“grant all privileges on zabbix.* to zabbix@’127.0.0.1’  identified by 'zabbixpassword'; flush privileges;”

至此已经完成了数据库的创建,但是还没有初始化,下面以刚刚创建的zabbix这个MySQL账号去完成zabbix数据库的初始化。

/usr/local/mysql-5.7.18/bin/mysql -u zabbix -p
Enter password:
mysql> use zabbix;
mysql> source /root/zabbix-3.4.3/database/mysql/ schema.sql;
mysql> source /root/zabbix-3.4.3/database/mysql/ images.sql;
mysql> source /root/zabbix-3.4.3/database/mysql/ data.sql;


至此,完成了MySQL数据库的初始化了,可以进行Zabbix管理系统的安装了。


4.2Zabbix Server配置

在前面的编译安装过程中,我们指定了Zabbix的安装路径为/usr/local/zabbix,在这个目录下还有一些子文件夹:

etc文件夹用于存放zabbix服务器的配置文件的,主要两个,分别是zabbix_server.conf和zabbix_agentd.conf;

sbin文件夹用于存放Zabbix的server和agent启动文件的。

经过编译安装后的zabbix监听和监控程序是不能正常运行的,需要对其进行配置。

 zabbix_server.conf文件存放了Zabbix服务器作为服务端监听程序的一些配置,主要有以下几个地方需要修改:

DBName=zabbix 数据库名称,请根据实际情况修改

DBUser=zabbix 数据库用户,请根据实际情况修改

DBPassword=zabbix 数据库密码,请根据实际情况修改

zabbix_agentd.conf需要配置的有:

Server=127.0.0.1

ServerActive=127.0.0.1

Hostname=Zabbix server


下面是在Zabbix服务器上两个文件的配置情况:

11_Zabbix_Server_Config.png 

需要说明的是:zabbix_server和zabbix_agentd两个程序分别有不同的用途,可以这么理解(实际上某些场合会有些不一样):zabbix_server作为服务器进程运行,接收客户端zabbix_agentd发送过来的数据,而zabbix_agentd负责将本机的监控指标数据发送到zabbix_server进程,因此要想监控Zabbix服务器本身所在的Linux系统的性能,也需要启动zabbix_agentd。这两个程序分别使用的是zabbix_server.conf和zabbix_agentd.conf两个配置文件,在非Zabbix服务器上再次部署时仅仅需要安装和配置zabbix_agentd即可。


经过上面的配置,可以从命令行启动zabbix_server和zabbix_agentd了。

启动zabbix_server:

/usr/local/zabbix/sbin/zabbix_server

启动zabbix_agentd:

usr/local/zabbix/sbin/zabbix_agentd


本人在启动zabbix_server时报如下错误:

error while loading shared libraries: libmysqlclient.so.20: cannot open shared object file: No such file or directory

经查找ibmysqlclient.so.20位于/usr/local/mysql-5.7.18/lib/目录下,因此创建了一个链接:

ln -s /usr/local/mysql-5.7.18/lib/libmysqlclient.so.20 /usr/lib64/libmysqlclient.so.20

错误消失。


另外,在实际工作场景中手动启动zabbix_server和zabbix_agentd毕竟不是很方便,因此可以将其注册为service,在编译安装Zabbix时的压缩包下就存放有将其注册为系统service的脚本,在本篇中这个目录是:/root/zabbix-3.4.3/misc/init.d,在这个目录下可以找到ubuntu等系统的名字但是找不到RedHat和CentOS的名字,但是熟悉Linux的人会知道Fedora、RHEL/Red Hat Enterprise Linux及CentOS的关系,而选择/root/zabbix-3.4.3/misc/init.d/fedora/core5下的文件。

将/root/zabbix-3.4.3/misc/init.d/fedora/core5目录下的zabbix_server和zabbix_agentd文件拷贝到/etc/init.d/目录下,修改其中的zabbix_server和zabbix_agentd的路径信息,然后chmod 755 /etc/init.d/zabbix_*,并执行如下命令:

chkconfig zabbix_server on

chkconfig zabbix_agentd on

这样zabbix_server和zabbix_agentd就可以随着系统启动了。

4.3安装Zabbix系统

因为zabbix压缩包解压在/root/zabbix-3.4.3,在这个目录下有一个frontends目录,这个目录下包含了Zabbix的Web管理界面,可以将其复制到Web服务器目录上:

mkdir  /usr/local/nginx-1.12.0/html/zabbix

cp -r /root/zabbix-3.4.3/frontends/php/* /usr/local/nginx-1.12.0/html/zabbix

注:在本系列第5篇讲述了Nginx的安装,在本系列的第7篇讲述了Nginx与php-fpm的集成,nginx安装在/usr/local/nginx-1.12.0/目录下。

现在可以安装Zabbix的Web管理系统了,为避免虚拟机与宿主机频繁切换麻烦,建议将虚拟机通过桥接方式接入到宿主机网络,然后在宿主机上访问虚拟机上的Web系统,在这里安装zabbix的虚拟机IP为192.168.0.108,首先在宿主机中打开网址http://192.168.0.108/zabbix/,会看到Zabbix的欢迎界面:

01_ZabbizSetup_Index.png 

点击下一步进行安装环境检查,如果没有满足安装条件,则会看到错误信息,如下图所示:

02_ZabbizSetup_PreRequisites_error.png 

大多数情况下都会给出如何改正的建议,按照建议去修改即可,当满足安装条件时看到如下界面:

03_ZabbizSetup_PreRequisites_ok.png 

点击下一步,进行数据库连接信息的配置,如下图所示:

 04_ZabbizSetup_DB.png

在这里还是提醒一下,如果在my.cnf中配置了“skip-name-resolve”,那么就请将上面的”localhost”替换成127.0.0.1。

点击下一步即可配置Zabbix主机信息,如下图所示:

05_ZabbizSetup_Host.png 

点击下一步,进行安装前的配置信息检查,如下图所示:

06_ZabbizSetup_summary.png 

点击下一步,开始安装,如果/usr/local/nginx-1.12.0/html/zabbix/conf/文件夹权限不够的话,可能遇到下面的提示:

07_ZabbizSetup_install.png 

遇到这种情况有几种办法,一种是给文件夹赋予当前web系统所使用的角色的写的权限;一种是按照上面的提示将文件下载下来放到指定的位置。

解决了上面的问题即可完成安装了,界面如下:

08_ZabbizSetup_finished.png 

至此,完成了Zabbix服务器的安装了。

5.检验配置

在宿主机打开zabbix的首页http://192.168.0.108/zabbix/index.php,进行登录,注意Zabbix默认的管理账号和对应的密码是:Admin/zabbix(Linux中区分大小写的,同时记得登入系统之后第一件事就是更改默认密码),登录进来之后界面如下:

09_Zabbix_index.png 

上面没有任何数据,同时在最下方可以看到“zabbix server is running:The information displayed may not be current”的提示。

5.1更改密码和系统语言

默认情况下Zabbix使用的是英文,对于大多数人来说不够亲切,可以在http://192.168.0.108/zabbix/profile.php网页修改,同时也可以在这个界面修改自己的登录密码,如下图所示:

10_Zabbix_User_Config.png 

在Language处选择”Zh-cn”然后点击Update按钮,用户界面就会变成中文了。


5.2解决中文乱码问题

切换为简体中文之后,会发现在”监视中”-“图形”界面一些文字是乱码,需要采用如下办法解决:

将Windows系统中的simkai.ttf这个字体文件上传到Zabbix的Web系统目录下,simkai.ttf这个文件在Win7中的位置为:C:\Windows\Fonts\simkai.ttf,将在上传到/usr/local/nginx-1.12.0/html/zabbix/fonts目录下(这个视安装位置而定)。

然后在命令行下切换到/usr/local/nginx-1.12.0/html/zabbix/,执行如下命令:

sed -i 's/DejaVuSans/simkai/g' ./include/defines.inc.php

至此,中文乱码问题解决,如下图所示:

12_Zabbix_Server_Lang.png 

5.3添加主机

首先在被监控的主机上安装对应的agent客户端,并配置好agentd.conf文件(参考Zabbix server上的配置)。

接着通过“配置”-“主机”-“创建主机”可以打开创建主机页面,要填写的信息如下图所示:

13_Zabbix_Agent_new.png 

在接下来的操作中设置需要关联的模板,通过设置关联模板就决定了会监控哪些数据,如下图所示:

14_Zabbix_Agent_template.png 

通过上述步骤完成了被监控主机的创建。

5.4模板管理

Zabbix默认提供了一些模板,但实际上这些模板不足以满足我们灵活多变的监控需求,如果对Zabbix足够熟练可以自己去创建模板,但是对于初次使用的人来说这个要求有些高,因此还可以从https://share.zabbix.com/下载一些已经经过别人验证过的模板,下图是该网页截图:

15_Zabbix_template_download.png 

大家可以根据分类快速找到适合自己的模板。


5.5Zabbix API

Zabbix提供了API服务,对于常见的操作和查询均可通过API进行,在Zabbix服务器上可以通过http://localhost/zabbix/api_jsonrpc.php来访问Zabbix API,这个API接收和响应的数据都是使用JSON的。本人之前使用C#开发过一个邮件通知系统,用于定时查询Zabbix的状态,如果异常就发送通知邮件,邮件格式如下:

 16_Zabbix_mail.png

这样一来,就不需要时时刻刻监控Web页面,有异常就会收到邮件通知了。

6.总结

本篇讲述了如何在CentOS7中安装Zabbix这个企业级开源IT设备监控系统,对于拥有大量需要监控的IT设备和应用的团队来说,使用一个好的监控工具可以大大减轻运维人员的压力,至少在我担任某上市公司信息化副总期间,通过这个工具我基本上没有让运维人员向我报告过集团公司的网络设备、服务器及网络的异常情况,极大地方便了运维人员。不过由于时间限制,没有来得及详述Zabbix的更细致用法,包括我曾经为Zabbix写的一个基于Zabbix API的查询服务,遇到异常情况及时向运维人员告警的监控工具。


声明:本文首发于本人个人微信订阅号:zhoujinqiaoIT,其后会同时在本人的CSDN、51CTO及oschina三处博客发布,本人会负责在此四处答疑。