【编者按】Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。借助Zabbix,可以减轻运维人员们繁重的服务器管理任务,实现业务系统的持续运行。本文中,作者张世锋结合公司的实际机房分布在多个城市的案例,总结了Zabbix分布式部署实施方案的全过程。
最近在研究Zabbix监控,由于机房分布在多个城市,因此采用zabbix proxy做为监控方案,在每个节点部署zabbix proxy,由zabbix proxy收集agentd数据,然后将采集到的数据主动推送给zabbix server,zabbix server将数据存入数据库,并在WEB前端显示。
一、Zabbix主要功能和优劣势说明
1、Zabbix主要功能:
1)Application monitoring 应用监控
数据库/SSH/Apache/Nginx等应用程序的监控。
2)Server monitoring 服务器监控
CPU,内存,SWAP,磁盘空间,网卡流量的监控等,可以通过浏览器实时查看Graphs。
3)Network monitoring 网络设备监控
支持Cisco, Juniper, 3Com等网络设备,网络设备通过SNMP(SNMP (v1,v2,v3) devices)协议进行监控。
4)添加自定义监控,对于Zabbix无法满足的监控,可以添加自定义监控。
2、Zabbix 优势:
1)安装配置简单,支持多种语言,包括中文。
2)系统自带多种监控模板,可以直接使用。
3)支持分布式部署和WEB集中管理(通过WEB页面设置或查看报警结果)。
4)自动发现主机和网络设备(discovery of file systems,network interfaces,hosts and netwrok devices)。
5)WEB监控:可以监控WEB下载速度,返回码及响应时间。
6)提供实时和历史的监控分析数据。
7)EMAIL报警,按照故障级别|服务器类型|业务类型发送EMAIL邮件到相关负责人。
3、Zabbix 劣势:
1)需要在被监控机器上面安装agent。
2)All configuration information都存储在数据库里面,数据库是整个监控平台的瓶颈。
二、Zabbix分布式部署需求分析
1、软件需求
官方推荐的软件配置
1)MySQL5.0.3 or laterRequired if MySQLis used as Zabbix back end database,InnoDB engine isrequired.
2)PHP 5.3.0 or later
3)Apache 1.3.12 or later
2、硬件需求
官方推荐的最小硬件配置:
#p#
三、Zabbix分布式部署实施
1、分布式部署拓扑图
补充说明:
当proxy部署为主动模式(Active)时,Zabbix Server的负载最小。
1)Server:负责把数据写入到数据库,然后通过Apache|Nginx +php在WEB前端显示。
2)Proxy:帮助server采集被监控端的数据,并把采集到的数据主动传送给Server,proxy只负责数据收集。
3)Database:所有的配置信息都存储在数据库里面,Zabbix server数据库和proxy数据库必须独立。
4)Agent:agent的作用就是获取host数据,然后将收集到的数据发送给server(主动模式),或者是server主动来拿取数据(被动模式)。
5)Email:通过Qmail|postfix的SMTP负责报警邮件的发送(故障邮件和故障恢复邮件)。
2、Zabbix分布式安装部署:
1)Mysql 数据库安装(参照:http://sfzhang88.blog.51cto.com/4995876/900846)
2)LNMP + Zabbix server 安装(参照:http://sfzhang88.blog.51cto.com/4995876/978686)
3)Zabbix proxy 安装(略)
4)Zabbix agent 安装
- [root@www20 shell]# cat zabbix_agentd_install.sh
- #!/bin/sh
- #Create by sfzhang 2014.02.27
- yum -y install net-snmp
- yum -y install net-snmp-devel
- BASE_DIR="/data/software"
- TAR="zabbix-2.2.1.tar.gz"
- tar -zxvf $BASE_DIR/$TAR -C$BASE_DIR
- cd $BASE_DIR/zabbix-2.2.1
- ./configure--prefix=/usr/local/zabbix --sysconfdir=/etc/zabbix --enable-agent
- make && make install
- groupadd zabbix
- useradd zabbix -g zabbix
- cpmisc/init.d/fedora/core/zabbix_agentd /etc/init.d/zabbix_agentd
- chmod 700/etc/init.d/zabbix_agentd
- chown zabbix.zabbix/etc/init.d/zabbix_agentd
- sed -i "/BASEDIR=/s#/.*#/usr/local/zabbix#" /etc/init.d/zabbix_agentd
- sed -i"s#bin/zabbix_agentd#sbin/zabbix_agentd#" /etc/init.d/zabbix_agentd
- sed -i"s#Server=127.0.0.1#Server=192.168.161.129#"/etc/zabbix/zabbix_agentd.conf
- sed -i"s#ServerActive=127.0.0.1#\#ServerActive=127.0.0.1#"/etc/zabbix/zabbix_agentd.conf
- sed -i "/Hostname=/s#=.*#"=$HOSTNAME#""/etc/zabbix/zabbix_agentd.conf
- sed -i"s#\#/tmp/zabbix_agentd.pid#/data/logs/zabbix_agentd.pid#"/etc/zabbix/zabbix_agentd.conf
- sed -i"s#/tmp/zabbix_agentd.log#/data/logs/zabbix_agentd.log#"/etc/zabbix/zabbix_agentd.conf
- sed -i "s#\#Timeout=3#Timeout=30#" /etc/zabbix/zabbix_agentd.conf
- cat>>/etc/services<<EOF
- #Zabbix services
- zabbix-agent 10050/tcp#Zabbix Agent
- zabbix-agent 10050/udp#Zabbix Agent
- zabbix-trapper 10051/tcp#Zabbix Trapper
- zabbix-trapper 10051/udp#Zabbix Trapper
- EOF
- /etc/init.d/zabbix_agentdstart
四、Zabbix WEB前端配置
1、配置proxy代理
2、添加Groups和hosts
通常Groups按照频道或者是WEB,MYSQL,memcache等服务类型分组的,提供相同服务的服务器分为一组,便于后期的维护和管理。
3、自定义监控模板,监控项和触发器
#p#
五、zabbix主要功能展示
1、服务器监控
1)CPU负载监控
2)内存空间的监控
3) 磁盘空间的监控
4)交换分区的监控
5) 网卡流量的监控
除此之外,还有服务器重启的监控,添加删除用户时的监控,主机存活状态的监控(ICMP ping协议)等。
2、应用程序的监控
Zabbix有很多系统自带的模板,在添加主机的时候Link相关的模板即可。
当停止主机的上面的SSH服务或者Apache服务的时候会产生报警。
3、WEB Monitoring
Web Monitoring是用来监控web程序的,可以监控到web程序的下载速度、返回码及响应时间。当返回码不为200的时候也可以产生报警。
4、Zabbix Screens
Screen将多种信息放在一起展示,便于集中展示某个主机的监控信息。
5、Zabbix maps
Zabbix的maps用来图形化显示监控设备的拓扑图,并且以不同的标记显示故障事件,通过该图表很直观的显示设备的整体情况。
#p#
六、Zabbix自定义监控
在实际应用当中,好多监控系统都满足不了实际的需求,需要根据实际的需求添加自定义监控。比如说:监控应用服务器tuxedo排队,当队列大于2000的时候报警。监控apache,mysql链接数,当大于2000的时候报警等等,此时Zabbix需要借助scripts来完成。
实例:监控http和mysql ESTABLISHED和TIME_WAIT连接数,当大于100的时候报警,并在WEB页面实时查看连接数。
1、在要监控的服务器上面编写Shell/python脚本,取出ESTABLISHED和TIME_WAIT连接数。
- [root@monitor scripts]# catcheckservices.sh
- #!/bin/sh
- #Create by sfzhang 2014.02.10
- ARGS=1
- if [ $# -ne "$ARGS"];then
- echo "Please input one arguement";
- fi
- case $1 in
- EST_80)
- result=`netstat -anp | grep :80 | grep EST | wc -l`
- echo$result
- ;;
- TIME_OUT_80)
- result=`netstat-anp | grep :80 | grep TIME_WAIT | wc -l`
- echo$result
- ;;
- EST_3306)
- result=`netstat -anp | grep :3306 | grep EST | wc -l`
- echo $result
- ;;
- TIME_OUT_3306)
- result=`netstat -anp | grep:3306 | grep TIME_WAIT | wc -l`
- echo $result
- ;;
- EST_11211)
- result=`netstat -anp | grep :11211 | grep EST | wc -l`
- echo $result
- ;;
- TIME_OUT_11211)
- result=`netstat -anp | grep:11211 | grep TIME_WAIT | wc -l`
- echo $result
- ;;
- *)
- echo"Usage:$0(EST_80|TIME_OUT_80|EST_3306|TIME_OUT_3306|EST_11211|TIME_OUT_11211)"
- ;;
- esac
2、在Zabbix_agentd.conf里面添加UserParameter,格式如下,对于Zabbix来说,脚本其实就是一个插件。
- UserParameter=checkservices.sh[*],/etc/zabbix/scripts/checkservices.sh $1 $2
重启agentd服务器,然后在zabbix server用zabbix_get就可以取到值。
3、要监控的服务器有多台的时候,最简单的方法是先编写一个Templates(模板),在Link到要监控的服务器上面。
4、给新添加的模板Linux_service_templates添加Applications。
5、给新添加的模板Linux_service_templates添加Items(监控项)。下面是添加http ESTABLISHED监控条目。
6、给新添加的模板Linux_service_templates添加Triggers(触发器)。下面是添加 http ESTABLISHED触发器,当连接数大于2000的时候报警,故障级别为High。
7、要在WEB前端实时查看http的连接情况,必须配置Graph。在一个Graph里面可以添加多个Item数据。
8、要查看Graphs在要监控的主机上面Link刚才的模板Linux_service_templates。
9、在WEB前端查看实时连接情况。
Http连接情况:
Mysql连接情况:
#p#
七、Zabbix discovery
1、Network discovery
Zabbix network discovery能自动发现网络中存活的主机,可用通过proxy代理或者Zabbix server 发现网络中存活的主机,并按照Actions里面定义的条件自动添加到Zabbix监控里面。
1)首先:添加Discovery rule,可以通过proxy代理或者zabbix server添加rule。
2)然后create Actions,指定Actions的Conditions,必须具备下列条件才能自动添加,Discover
rule:规则为 Local network,system.uname的值中包含Linux,Zabbix agentd服务必须正常运行。
3) 配置Actions的operations,将Actions里面符合条件的主机添加到shwww组里面并Link要监控的模板。
4)查看Discover自动发现的主机自动添加到Zabbix里面。
2、Zabbix Low-level discovery
Zabbis Low-level discovery 可以自动创建监控项,触发器和图像的方法。Zabbix可以自动发现主机上面的文件系统或者网络接口,不需要对每个文件系统和网络接口手动创建监控项,触发器和图像。Zabbix 还可以自动删除不需要的监控项,比如:上例当中的,当agentd宕机超过24小时的时候可以自动删除监控,只需在action里面配置即可。
实例:监控服务器上面所有TCP端口,就可以通过Low-level discovery轻松实现。
八、Zabbix报警邮件机制
1、基于业务类型发送报警邮件
当数据库服务器出问题时发给DBA组,当系统出问题时发给System组。
2、基于故障级别或者时间发送邮件
九、Zabbix资产管理
Zabbix可以自动收集主机的hostname,OS,cpu信息,MAC等信息。需要在添加主机的时候开启Host inventory Automatic功能,并按照官方手册添加Item即可。
十、Zabbix 报表功能
附录:
1、官方在线文档:
https://www.zabbix.com/documentation/2.2/manual/introduction