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/images.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即可配置
#下一步,继续,一定要OK才可以进行下一步
一直下一步:
登录用户名:admin 密码:zabbix
配置步骤,先看图:
添加一台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 tempalte(my-temp)) ---> 同时新建一个组(my-group),在Macros里可以定义宏,
宏是一种抽象,它根据一系列预定义的规则替换一定的文本模式,而解释器或编译器在遇到宏时会自动进行替换。
zabbix支持全局、模板、主机级别使用用户自定义的宏,用户自定义的宏要使用“{$MACRO}”,系统内置宏引用时不加$。
宏的名称只能使用大写字母、数字、下划线来命名。
zabbix有很多内置的宏,如{HOST.NAME} 、{HOST.IP}、{TRIGGER.DESCRIPTION}、{TRIGGER.NAME}等。
在template中创建item
在右上角点击Create item,以创建监控eth0接口流量的item为例:
上面用的是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:评估采集到的数据是否在合理的范围内时所使用的函数,目前触发器所支持的函数有:avg、count、change、date、dayofweek、delta、diff、iregexp、last、now、sum等。
parameter:函数参数,大多数函数可以接受秒数为其参数,如果在数值前面有“#”作为前缀,
则表示最近几次的取值,如:sum(300)表示300秒内所有取值之和。sum(#10)则表示最近10次取值之和。
此外,avg、count、last、min、max还支持使用第二个参数,用于完成时间限定,
特例:last(0)等同last(#1)
实例:如果eth0的入流量小于80K就触发一个事件
另一个触发器实例:
当流量变化幅度过大(自定义),比如流量变化幅度大于5Mbps时触发:
定义trigger后会有一条虚线,效果如下,
使用流量统计软件进行对比,发现采集的数据还是比较准的。
ifstat是一款流量统计软件,使用方便,使用方法在前面“iptables企业应用之应用层过滤、日志记录”有介绍,使用ping -f -s 50000 172.16.1.2 就可以发起较大的流量
添加一台被监控主机:
在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
定义主机
关联模板,并保存:
为主机添加监控的图形(Graph),点击(Graphs)然后点击右上角的Create graph:
修改图的属性:
保存之后,再创建一个图形,然后在screen中将2个图形显示在同一页面上。
保存后点击左侧的node2,进入配置界面:
保存后,就可以通过Screen来查看了,效果如下:左图中间的虚线是设置的阈值(80K)
默认情况下网页刷新速度很慢,为方便观察,可以通过在Admin属性中设置,同时可以修改页面的语言为简体中文,保存后刷新页面生效。
关于zabbix的报警功能和自动发现等功能将在后续的博客中陆续更新,敬请关注。