cacti和nagios是比较常用的监控系统,比较适合中小规模的网络监控,zabbix是一个基于WEB界面的提供分布式网络监视功能的企业级的开源解决方案。相对于cacti和nagios而言,zabbix最大的特点是分布式监控,自动发现,自定义监控项目。

一、监控系统所具备的四个要素:

1、数据采集

zabbix采集数据的手段有SNMP、zabbix的Agent、IPMI agent、web monitoring、database monitoring,Internal check、calculated monitoring、custom command monitoring、ping或端口检查等。

2、数据存储

zabbix将数据存储在RDBMS中。

3、数据展示

zabbix使用php开发的程序进行绘图。

4、事件报警

zabbix通知机制有:E-mail、SMS、Jabber、Chat message、Command execution。

二、为什么要选择zabbix:

可以监控多达100,000台设备

分布式监控

支持多种检测方式

真正的开源软件


三、Zabbix组件概述:

zabbix-serve:负责接收agent发送的报告信息,所有配置、统计数据及操作数据都有此组件组织进行;

database:用于存储配置信息和zabbix收集的数据

web-interface:zabbix的GUI接口,通常与server运行在同一台主机上;

proxy:可选组件,常用于分布式监控环境中,代替server收集其他被监控端的监控数据,并统一发送到server端。

Agent:部署在被监控主机上,负责收集本地数据发往server或proxy端。


zabbix的术语:

主机(host):要监控的网络设备统称;

主机组(host group):主机的逻辑容器,可以包含主机和模板;

监控项(item):一个特定监控指标和对应的数据,每个item由key进行标示;

trigger(触发器):一个表达式,用于评估某监控对象的某个特定的item所接收的数据是否在合理范围内

,即阈值,状态分为“OK”和“problem”。

事件(event):发生的一个值得关注的事情,如:触发器的状态转变,新的agent上线或自动发现等操作。

动作:对于指定的event发生以后所采定义的处理方法,如发送通知或报警;

报警升级(escalation):发送警告信息的方案,如果在定义内的警告次数之内没有处理,将向上级发送报警短信;

媒介(media):发送通知的手段,如Email、SMS、Jabber等。

通知(notification):通过媒介向用户发送某事件的信息。


zabbix配置演示:

本案例使用CentOS 6.4 x86_64 系统。

zabbix-2.0.8-3.el6.x86_64.rpm # zabbix基础服务

zabbix-get-2.0.8-3.el6.x86_64.rpm # zabbix获取agent信息的工具之一

zabbix-server-2.0.8-3.el6.x86_64.rpm # zabbix服务主程序

zabbix-server-mysql-2.0.8-3.el6.x86_64.rpm # zabbix 服务器工具之一

zabbix-web-2.0.8-3.el6.noarch.rpm # web管理界面

zabbix-web-mysql-2.0.8-3.el6.noarch.rpm  #数据存储介质

zabbix-agent-2.0.8-3.el6.x86_64.rpm # zabbix 代理(受监控端程序)

zabbix-sender-2.0.8-3.el6.x86_64.rpm # 支持zabbix自动发现的组件


可以到相关站点下载合适的安装包

http://www.zabbix.com/download.php


一、安装:

服务器端:

[root@localhost ~]# yum -y localinstall zabbix-2.0.8-3.el6.x86_64.rpm zabbix-get-2.0.8-3.el6.x86_64.rpm zabbix-server-2.0.8-3.el6.x86_64.rpm zabbix-server-mysql-2.0.8-3.el6.x86_64.rpm zabbix-web-2.0.8-3.el6.noarch.rpm zabbix-web-mysql-2.0.8-3.el6.noarch.rpm
#
#安装包有些依赖epel源,所以请自行添加epel到本机的repo文件,下面提供一个互联网的yum源:针对centos6.X系列
#
[Mirror.sohu]
name=Mirror.sohu.com
baseurl=http://mirror.sohu.com/centos/6/os/$basearch/
enabled=1
gpecheck=0
[fedora-epel]
name=fedora-epel
baseurl=http://mirror.sohu.com/fedora-epel/6/$basearch/
enabled=1
gpgcheck=0
#
#安装包所依赖的包有:
Installing:
 zabbix                          x86_64   2.0.8-3.el6     /zabbix-2.0.8-3.el6.x86_64           
 zabbix-get                      x86_64   2.0.8-3.el6     /zabbix-get-2.0.8-3.el6.x86_64       
 zabbix-server                   x86_64   2.0.8-3.el6     /zabbix-server-2.0.8-3.el6.x86_64    
 zabbix-server-mysql             x86_64   2.0.8-3.el6     /zabbix-server-mysql-2.0.8-3.el6.x86_64
 zabbix-web                      noarch   2.0.8-3.el6     /zabbix-web-2.0.8-3.el6.noarch       
 zabbix-web-mysql                noarch   2.0.8-3.el6     /zabbix-web-mysql-2.0.8-3.el6.noarch
Installing for dependencies:
 OpenIPMI-libs                   x86_64   2.0.16-14.el6          base                                 
 apr                             x86_64   1.3.9-5.el6_2          base                                 
 apr-util                        x86_64   1.3.9-3.el6_0.1        base                                 
 apr-util-ldap                   x86_64   1.3.9-3.el6_0.1        base                                 
 dejavu-fonts-common             noarch   2.30-2.el6             base                                 
 dejavu-sans-fonts               noarch   2.30-2.el6             base                                 
 fontpackages-filesystem         noarch   1.41-1.1.el6           base                                 
 fping                           x86_64   2.4b2-10.el6           epel                                 
 httpd                           x86_64   2.2.15-26.el6.centos   base                                 
 httpd-tools                     x86_64   2.2.15-26.el6.centos   base                                 
 iksemel                         x86_64   1.4-2.el6              epel                                 
 libXpm                          x86_64   3.5.10-2.el6           base                                 
 libtool-ltdl                    x86_64   2.2.6-15.5.el6         base                                 
 libxslt                         x86_64   1.1.26-2.el6_3.1       base                                 
 lm_sensors-libs                 x86_64   3.1.1-17.el6           base                                 
 mailcap                         noarch   2.1.31-2.el6           base                                 
 net-snmp                        x86_64   1:5.5-44.el6           base                                 
 net-snmp-libs                   x86_64   1:5.5-44.el6           base                                 
 php                             x86_64   5.3.3-22.el6           base                                 
 php-bcmath                      x86_64   5.3.3-22.el6           extra                                
 php-cli                         x86_64   5.3.3-22.el6           base                                 
 php-common                      x86_64   5.3.3-22.el6           base                                 
 php-gd                          x86_64   5.3.3-22.el6           base                                 
 php-mbstring                    x86_64   5.3.3-22.el6           extra                                
 php-mysql                       x86_64   5.3.3-22.el6           base                                 
 php-pdo                         x86_64   5.3.3-22.el6           base                                 
 php-xml                         x86_64   5.3.3-22.el6           base                                 
 unixODBC                        x86_64   2.2.14-12.el6_3        base


修改zabbix配置文件:


[root@localhost ~]# cd /etc/zabbix/
# 根据实际情况修改数据库的相关信息和本机zabbix服务监听地址
[root@localhost zabbix]# vi zabbix_server.conf
ListenIP=172.16.1.6 或0.0.0.0
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=redhat


启动mysql数据库为zabbix授权用户并导入初始数据


[root@localhost ~]# yum -y install mysql-server
[root@localhost ~]# service mysqld start
[root@localhost ~]# chkconfig mysqld on
[root@localhost zabbix]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.66 Source distribution
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
# mysql> grant all on zabbix.* to 'zabbix'@'localhost' identified by 'redhat';
Query OK, 0 rows affected (0.00 sec)
# mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
#
#为使得zabbix可以支持中文,在创建数据库时要设定字符集为utf8.
# mysql> create database zabbix charset utf8;
Query OK, 1 row affected (0.00 sec)
#
#
#导入初始数据库数据,注意:请按顺序导入
[root@localhost zabbix]# mysql -uzabbix -hlocalhost -predhat zabbix < /usr/share/doc/zabbix-server-mysql-2.0.8/create/schema.sql
[root@localhost zabbix]# mysql -uzabbix -hlocalhost -predhat zabbix < /usr/share/doc/zabbix-server-mysql-2.0.8/create/p_w_picpaths.sql
[root@localhost zabbix]# mysql -uzabbix -hlocalhost -predhat zabbix < /usr/share/doc/zabbix-server-mysql-2.0.8/create/data.sql


zabbix-web安装后生成zabbix.conf,web访问的相关属性可以设置配置文件

[root@localhost ~]# ls /etc/httpd/conf.d/
php.conf      README        welcome.conf  zabbix.conf
#
#启动httpd、mysqld、zabbix-server服务
[root@zabbix ~]# service  httpd restart
Stopping httpd: [  OK  ]
Starting httpd: [  OK  ]
[root@zabbix ~]# service zabbix-server restart
Shutting down Zabbix server: [  OK  ]
Starting Zabbix server: [  OK  ]
[root@zabbix ~]# service mysqld restart
Stopping mysqld:  [  OK  ]
Starting mysqld:  [  OK  ]
[root@zabbix ~]# netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State   
tcp        0      0 172.16.1.6:10051            0.0.0.0:*                   LISTEN   
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN   
tcp        0      0 :::80                       :::*                        LISTEN


修改php.ini中关于时区的定义:


[root@zabbix ~]# vi /etc/php.ini
date.timezone = Asia/Chongqing
[root@zabbix ~]# service  httpd restart


配置zabbix,通过访问http://172.16.1.6/zabbix即可配置

184620654.png


#下一步,继续,一定要OK才可以进行下一步

184830784.png


一直下一步:

184930819.png


登录用户名:admin 密码:zabbix

185048539.png


配置步骤,先看图:

195504491.png


添加一台Host时,要定义监控的item,通过ZabbixPoller将agent端通过Internal,SNMP、Zabbix Agent接口取得的数据拉回本地,如果item的数据范围超过阈值,就会触发trigger,trigger引起Action,然后调用E-mail或SMS发信息。一个trigger发生就产生一个event。为方便管理,可以将Host加入HostGroup,把item、trigger、Graph放进一个容器(Template),直接应用到Host或HostGroup。手动将Host设置为Maintenance模式,进行维护。


1、自定义模板:

Configuration--> Templates (create tempaltemy-temp) ---> 同时新建一个组(my-group),在Macros里可以定义宏,

宏是一种抽象,它根据一系列预定义的规则替换一定的文本模式,而解释器或编译器在遇到宏时会自动进行替换。

zabbix支持全局、模板、主机级别使用用户自定义的宏,用户自定义的宏要使用“{$MACRO}”,系统内置宏引用时不加$

宏的名称只能使用大写字母、数字、下划线来命名。

zabbix有很多内置的宏,如{HOST.NAME} {HOST.IP}{TRIGGER.DESCRIPTION}{TRIGGER.NAME}等。

201527222.png


在template中创建item

201927466.png


在右上角点击Create item,以创建监控eth0接口流量的item为例:

202544305.png


上面用的是zabbix内置的item来监控,下面演示自定义用户参数来监控服务器。

这需要在agent端的配置文件中定义,定义完成后要重启zabbix-agent 服务。

注意:是在agent端的配置文件。

语法:UserParameter=<key[*]>,<command>

注:command执行结果只能有一个返回值。

# 用法一,key不带参数
UserParameter=memory.free,free | awk '/^Mem:/{print $4}'
[root@node1 ~]# zabbix_get -s 172.16.1.2 -k "memory.free"
365904
# 用法二,key带参数,在后面用$1引用,原来的awk表达式中的位置变量用2个$。一次定义,多次使用。
UserParameter=memory.utils[*],cat /proc/meminfo | awk '/$1/{print $$2}'
在server端检查:
[root@node1 ~]# zabbix_get -s 172.16.1.2 -k "memory.utils[MemTotal]"
494420
[root@node1 ~]# zabbix_get -s 172.16.1.2 -k "memory.utils[MemFree]"
298720
[root@node1 ~]# zabbix_get -s 172.16.1.2 -k "memory.utils[Buffers]"
46404
[root@node1 ~]# zabbix_get -s 172.16.1.2 -k "memory.utils[SwapTotal]"
2097144
[root@node1 ~]# zabbix_get -s 172.16.1.2 -k "memory.utils[SwapFree]"
2097144
#
#使用2个参数:
在agent端配置文件中定义:
UserParameter=Nginx.active[*], /usr/bin/curl -s "http://$1:$2/status" | awk '/^Active/ {print $NF}'
其他实例:
UserParameter=memory.free,free | awk '/^Mem:/{print $4}'
UserParameter=memory.utils[*],cat /proc/meminfo | awk '/$1/{print $$2}'
UserParameter=Nginx.active[*], /usr/bin/curl -s "http://$1:$2/status" | awk '/^Active/ {print $NF}'
UserParameter=Nginx.reading[*], /usr/bin/curl -s "http://$1:$2/status" | grep 'Reading' | cut -d" " -f2
UserParameter=Nginx.writing[*], /usr/bin/curl -s "http://$1:$2/status" | grep 'Writing' | cut -d" " -f4
UserParameter=Nginx.waiting[*], /usr/bin/curl -s "http://$1:$2/status" | grep 'Waiting' | cut -d" " -f6
# 定义完成后要重启zabbix-agent服务;
[root@node2 ~]# service zabbix-agent restart
启用Nginx的status功能
[root@node2 ~]# yum -y install nginx
[root@node2 ~]# vi /etc/nginx/conf.d/default.conf
# The default server
#
server {
    listen       80 default_server;
    server_name  _;
    #charset koi8-r;
    #access_log  logs/host.access.log  main;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
        location /status {
        stub_status on;
        access_log off;
        }
[root@node2 ~]# service nginx start
Starting nginx:                                            [  OK  ]
#
在服务器端:
[root@node1 ~]# curl http://172.16.1.2/status
Active connections: 1
server accepts handled requests
 71 71 71
Reading: 0 Writing: 1 Waiting: 0
#
[root@node1 ~]# zabbix_get -s 172.16.1.2 -k "Nginx.active[172.16.1.2,80]"
1


创建触发器:

表达式:{<server>:<key>.<function>(<parameter>)}<operator><constant>

注:

function:函数

parameter:参数

operator:比较操作符

constant:常数

server主机名称;

key:主机上监控项目的key

function:评估采集到的数据是否在合理的范围内时所使用的函数,目前触发器所支持的函数有:avgcountchangedatedayofweekdeltadiffiregexplastnowsum等。

parameter:函数参数,大多数函数可以接受秒数为其参数,如果在数值前面有“#”作为前缀,

则表示最近几次的取值,如:sum(300)表示300秒内所有取值之和。sum(#10)则表示最近10次取值之和。

此外,avgcountlastminmax还支持使用第二个参数,用于完成时间限定,

特例:last(0)等同last(#1)


实例:如果eth0的入流量小于80K就触发一个事件

204453883.png




另一个触发器实例:

当流量变化幅度过大(自定义),比如流量变化幅度大于5Mbps时触发:

204738330.png


定义trigger后会有一条虚线,效果如下,204558251.png


使用流量统计软件进行对比,发现采集的数据还是比较准的。

ifstat是一款流量统计软件,使用方便,使用方法在前面“iptables企业应用之应用层过滤、日志记录”有介绍,使用ping -f -s 50000 172.16.1.2 就可以发起较大的流量

215551454.png



添加一台被监控主机:


在zabbix客户端安装agent等组件:
zabbix-2.0.8-3.el6.x86_64.rpm
zabbix-agent-2.0.8-3.el6.x86_64.rpm
zabbix-sender-2.0.8-3.el6.x86_64.rpm # 用于自动发现场景
#
启动服务
[root@node2 ~]#  chkconfig zabbix-agent on
[root@node2 ~]# vi/etc/zabbix/zabbix_agentd.conf
Server = 172.16.1.1 (服务器地址,在本例中交叉使用了172.16.1.6和172.16.1.1来演示)
[root@node2 ~]#  servicezabbix-agent start


210732271.png

定义主机

210937329.png


关联模板,并保存:

211156465.png


为主机添加监控的图形(Graph),点击(Graphs)然后点击右上角的Create graph:

211947801.png


修改图的属性:

212445286.png

保存之后,再创建一个图形,然后在screen中将2个图形显示在同一页面上。

213139978.png213255403.png

保存后点击左侧的node2,进入配置界面:

213708129.png


保存后,就可以通过Screen来查看了,效果如下:左图中间的虚线是设置的阈值(80K)

213907405.png


 默认情况下网页刷新速度很慢,为方便观察,可以通过在Admin属性中设置,同时可以修改页面的语言为简体中文,保存后刷新页面生效。

214414806.png

214551582.png

关于zabbix的报警功能和自动发现等功能将在后续的博客中陆续更新,敬请关注。