运维监控利器Zabbix

1 zabbix综述

1.1什么是zabbix

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 agent需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。zabbix agent可以运行在Linux,Solaris,HP-UX,AIX,FreeBSD,Open BSD, OS X, Tru64/OSF1, Windows NT4.0, Windows 2000/2003/XP/Vista)等系统之上。

zabbix server可以单独监视远程服务器的服务状态;同时也可以与zabbix agent配合,可以轮询zabbix agent主动接收监视数据(agent方式),同时还可被动接收zabbix agent发送的数据(trapping方式)。

另外zabbix server还支持SNMP (v1,v2),可以与SNMP软件(例如:net-snmp)等配合使用。

1.2 zabbix主要特点和功能

运维监控利器Zabbix_监控

2 Zabbix的安装和配置

2.1 安装Zabbix

1.安装必要的软件和库

安装mysql的头文件及库文件、net-snmp、curl、gcc、make

1

2

3

4

5

yum install mysql-devel.x86_64

yum install net-snmp.x86_64  net-snmp-devel.x86_64 net-snmp-utils.x86_64

yum install curl.x86_64 curl-devel.x86_64

yum install gcc.x86_64 libgcc.i386  libgcc.x86_64

yum install make

2.编译安装zabbix

从zabbix的官网下载源代码,进行解压缩(略)

编译安装zabbix,注意:连同agent一起编译

1

2

#./configure -prefix=/app/zabbix  --enable-server --enable-agent --enable-proxy --with-mysql --with-net-snmp  --with-libcurl

创建zabbix用户

1

useradd -d /home/zabbix -p zabbix zabbix

进入 zabbix 解压缩后的目录,创建 zabbix 数据库

1

4

5

6

7

8

mysql -uroot -pXXXX

create database zabbix;

quit;

cat create/schema/mysql.sql | mysql -uroot  -pXXXX zabbix

cat create/data/data.sql | mysql -uroot  -pXXXX zabbix

cat create/data/p_w_picpaths_mysql.sql | mysql  -uroot -pXXXX zabbix

修改/etc/services,加入以下行

1

2

3

7

zabbix-agent 10050/tcp Zabbix  Agent

zabbix-agent 10050/udp Zabbix  Agent

zabbix-trapper 10051/tcp Zabbix  Trapper

zabbix-trapper 10051/udp Zabbix  Trapper

修改 zabbix 的配置文件

创建配置文件目录,并将源代码中的配置文件模板拷贝到新创建的配置文件目录中。

1

2

mkdir /etc/zabbix  

cp misc/conf/* /etc/zabbix

根据自己的实际情况修改zabbix_server.conf、zabbix_agentd.conf、zabbix_agent、zabbix_trapper.conf,如数据库的用户名和密码等:

1

2

DBUser=root  

DBPassword=XXXX

由于 zabbix 使用 fping 替代了ping 作为 icmp 的工具,所以要安装 fping

可以从 http://fping.sourceforge.net/ 上下载 fping 的源代码,解压编译安装。

进入 fping 解压后的源代码目录

1

2

./configure

make install

修改/etc/zabbix/zabbix_server.conf

1

FpingLocation=/usr/local/sbin/fping

拷贝zabbix服务器的frontendphp 程序到 http server 的主目录下

1

cp -r frontend/php/* /var/www/html

3.配置zabbix server

启动进程

1

2

/app/zabbix/sbin/zabbix_server

/app/zabbix/sbin/zabbix_agentd

注:客户端在部署时,除了zabbix的编译安装和创建zabbix用户之外、只要修改/etc/zabbix/zabbix_agentd.conf里对应的server相关信息即可,如下所示:

1

2

3

4

#Server=127.0.0.1

Server=XXX.XXX.XXX.XXX

#Hostname=Zabbix server

Hostname=XXX

使用浏览器登陆到 zabbix server

http:///index.php,会出现如下配置服务器界面

运维监控利器Zabbix_linux_02

一路 next 进入配置检查页面,会发现PHP max execution 和PHP Timezone 两项检查失败,如下:

运维监控利器Zabbix_linux_03

修改 /etc/php.ini ,修改以下两项后,重启httpd

1

2

max_execution_time = 300

date.timezone = Asia/shanghai

然后在页面上点击 retry ,检查成功

next 进入下一页面,检查 mysql 连接

运维监控利器Zabbix_zabbix_04

填写 mysql 连接参数,TestConnection ,成功

一路 next,出现如下页面

运维监控利器Zabbix_linux_05

点击 save configuration file ,将文件上传至/var/www/html/conf/zabbix.conf.php,点击 retry ,即可成功。

之后,一路 next ,进入登陆页面

运维监控利器Zabbix_linux_06

使用浏览器登陆到 zabbix server,别忘了修改C:\Windows\System32\drivers\etc下的hosts文件

1

XXX.XXX.XXX.XXX     XXXXXXXXXX


3 Zabbix相关监控设置

3.1 报警触发器设置

当监控项中的触发器达到你设置的报警值之后,需要执行操作来发送邮件等动作。具体设置:

1:打开zabbix的系统配置---操作---- 选择事件源为触发器------create action:

运维监控利器Zabbix_监控_07

3.2 Zabbix中常用的key介绍

Zabbix的key可以理解为zabbix的命令,执行这个key可以得到相应的结果。

1:监控端口:net.tcp.port[3306]

/usr/local/zabbix/bin/ -s[IP] -knet.tcp.port[3306] 返回1为此IP的端口3306存在,0为不存在

2:监控进程:proc.num[mysqld]

/usr/local/zabbix/bin/zabbix_get –s[IP] -kproc.num[mysqld] 返为此ip中mysqld的进程数量

/usr/local/zabbix/bin/zabbix_get –s[IP] -kproc.num[] 返回值为此IP中所有的进程数量

3:查看CPU核数:system.cpu.num 返回值为服务器CPU的核数

4:查看系统的系统启动时间和当前时间:system.boottime、system.localtime返回值为系统启动时间和当前时间,为时间戳格式

5:查看系统的简单信息:system.uname返回值为对应IP的系统信息,类似于linux系统的uname -a命令

6:查看windowns系统当前网卡的进出流量:

net.if.out[{HOST.NAME},bytes]、net.if.in[{HOST.NAME},bytes]和linux系统的key:net.if.out[eth0,bytes]、net.if.in[eth0,bytes]一样

/usr/local/zabbix/bin/zabbix_get –s[IP] -knet.if.in[IP,bytes] 返回值为该IP的进流量,此值为计数值,单位为bytes,减去上次取得值,除以时间间隔为此段时间内的平均流量;同理可得出口流量。


7:查看系统内存大小:vm.memory.size[total],返回值单位bytes

8:查看文件的大小: vfs.file.size[file]

如: vfs.file.size[/var/log/syslog] 返回的是/var/log/syslog的大小,单位是:bytes

9:查看文件是否存在:vfs.file.exists[file]

文件如果存在返回0,不存在返回1

10:查看文件的MD5:vfs.file.md5sum[file]

查看小文件的MD5,返回为MD5值(好像只有2.0以上的版本有这个key)

11:自动发现网卡并监控流量和自动发现分区及分区挂载情况的两个key:net.if.discovery,vfs.fs.discovery,windows和linux监控模板中都有这模板(2.0以上版本),应用即可

以上是常用的key,其实监控服务器无非就是内存、硬盘占用、CPU负载、流量、服务器和端口等情况。如果要监控其他的可以自定义key来实现,我比较亲睐自定义key,写个脚本、或者在/etc/zabbix/zabbix_agentd.conf里写一段自定义key来返回,得到自己想要的监控结果。

zabbix在这块做的非常好,扩展性很强,支持各种脚本来实现自定义的key。要启用

自定义key,需要在客户端的配置文件中启用UnsafeUserParameters=1参数,然后在配置文件的最下面来定义key,如:

UserParameter=free.disk,/usr/local/zabbix/bin/disk.py

free.disk为key的名字,/usr/local/zabbix/bin/disk.py为服务器端调用free.disk这个key时执行的脚本,其结果就是free.disk的返回值。脚本可以是任何可以运行的脚本语言

3.3 创建监控模板和监控项

其实在zabbix服务器端安装完成之后,就有许多自带的监控模板,基本上可以满足大众化的监控需求,不过其中有许多是没有必要的监控项或是自己不感兴趣的,比较冗余,所以要做好监控的话,还是自定义模板和监控项,这个监控模板可以修改zabbix系统自带的,也可以自己创建。以下为自己创建监控模板。

1.创建监控模板:

打开zabbix的系统配置---模板----create template:

填写模板名字和模板所在组保存即可。

运维监控利器Zabbix_linux_08

2.创建监控项:

打开zabbix的系统配置---模板---选择对应模板中的监控项---createitem:

运维监控利器Zabbix_linux_09

3.创建监控项的触发器:

打开zabbix的系统配置---模板---选择对应模板中的触发器---create trigger:

运维监控利器Zabbix_zabbix_10

4.添加主机并应用模板

添加主机有两种方法,一个是手动添加,一个是通过zabbix的自动发现来自动添加主机。

1)手动添加主机

做完以上的设置,添加主机就是很简单的事情了。打开zabbix的系统配置---主机—createhost:

运维监控利器Zabbix_zabbix_11

2)通过自动发现自动添加主机:

打开zabbix的系统配置---自动发现—create discovery rule:

运维监控利器Zabbix_linux_12

添加完主机如下图,可用性为绿色是正常,红色为不可监控(主要是网络不通或是没有安装zabbix客户端),灰色为正在检测zabbix的状态:

运维监控利器Zabbix_linux_13

2.4 FAQ/Q&A

在CentOS系统中,安装zabbix进行configure时会遇到以下4个主要问题:

1) configure error: MySQL library notfound,the problem is not installed mysql-devel

#yum install mysql-devel

2) configure error: Jabber library notfound, the problem is not installed jabber lib

#wgethttp://iksemel.googlecode.com/files/iksemel-1.4.tar.gz

#tar zxvf iksemel-1.4.tar.gz  

#cd iksemel-1.4  

#configure

#make

#make install  

之后指定jabber目录,#./configure --with-jabber=/usr/local/XXXX……

3) configure error: Not found curlLibrary

#yum install curl-devel

4) configure error : Not found NET-SNMPlibrary

#yum install net-snmp-devel