最近在研究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、硬件需求

官方推荐的最小硬件配置:

wKioL1MTG5mgtWtyAAFTb7sgKEg014.jpg


三、Zabbix分布式部署实施

1、分布式部署拓扑图

wKioL1MTHFjTv4-JAABay0VPQNY318.jpg

补充说明:

当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 安装

 
  
  1. [root@www20 shell]# cat zabbix_agentd_install.sh

  2. #!/bin/sh

  3. #Create by sfzhang 2014.02.27

  4. yum -y install net-snmp

  5. yum -y install net-snmp-devel

  6. BASE_DIR="/data/software"

  7. TAR="zabbix-2.2.1.tar.gz"

  8. tar -zxvf $BASE_DIR/$TAR -C$BASE_DIR

  9. cd $BASE_DIR/zabbix-2.2.1

  10. ./configure--prefix=/usr/local/zabbix --sysconfdir=/etc/zabbix --enable-agent

  11. make && make install

  12. groupadd zabbix

  13. useradd zabbix -g zabbix

  14. cpmisc/init.d/fedora/core/zabbix_agentd /etc/init.d/zabbix_agentd

  15. chmod 700/etc/init.d/zabbix_agentd

  16. chown zabbix.zabbix/etc/init.d/zabbix_agentd

  17. sed -i "/BASEDIR=/s#/.*#/usr/local/zabbix#" /etc/init.d/zabbix_agentd

  18. sed -i"s#bin/zabbix_agentd#sbin/zabbix_agentd#" /etc/init.d/zabbix_agentd

  19. sed -i"s#Server=127.0.0.1#Server=192.168.161.129#"/etc/zabbix/zabbix_agentd.conf

  20. sed -i"s#ServerActive=127.0.0.1#\#ServerActive=127.0.0.1#"/etc/zabbix/zabbix_agentd.conf

  21. sed -i "/Hostname=/s#=.*#"=$HOSTNAME#""/etc/zabbix/zabbix_agentd.conf

  22. sed -i"s#\#/tmp/zabbix_agentd.pid#/data/logs/zabbix_agentd.pid#"/etc/zabbix/zabbix_agentd.conf

  23. sed -i"s#/tmp/zabbix_agentd.log#/data/logs/zabbix_agentd.log#"/etc/zabbix/zabbix_agentd.conf

  24. sed -i "s#\#Timeout=3#Timeout=30#" /etc/zabbix/zabbix_agentd.conf

  25. cat>>/etc/services<<EOF

  26. #Zabbix services

  27. zabbix-agent 10050/tcp#Zabbix Agent

  28. zabbix-agent 10050/udp#Zabbix Agent

  29. zabbix-trapper 10051/tcp#Zabbix Trapper

  30. zabbix-trapper 10051/udp#Zabbix Trapper

  31. EOF

  32. /etc/init.d/zabbix_agentdstart

四、Zabbix WEB前端配置

1、配置proxy代理

wKiom1MTHP3CWiO7AAIn-y9XOAo358.jpg

2、添加Groups和hosts

通常Groups按照频道或者是WEB,MYSQL,memcache等服务类型分组的,提供相同服务的服务器分为一组,便于后期的维护和管理。

3、自定义监控模板,监控项和触发器


五、zabbix主要功能展示

1、服务器监控

1)CPU负载监控

wKiom1MTHTzB07UVAAOXQJ1tSQM604.jpg

2)内存空间的监控

wKiom1MTHWKioMVRAAN1UIxVtbQ547.jpg

3) 磁盘空间的监控

wKioL1MTHVrzZDqXAADjAq75jFo027.jpg

4)交换分区的监控

wKioL1MTHZOir0htAADLw1ANY60651.jpg

5) 网卡流量的监控

wKiom1MTHeSj8VGmAAP9zMiwES8959.jpg

除此之外,还有服务器重启的监控,添加删除用户时的监控,主机存活状态的监控(ICMP ping协议)等。

2、应用程序的监控

Zabbix有很多系统自带的模板,在添加主机的时候Link相关的模板即可。

wKioL1MTHd3TrThJAAMfK1vGjlk238.jpg

当停止主机的上面的SSH服务或者Apache服务的时候会产生报警。

wKioL1MTHhnD0OBTAAD4jVhNQJQ872.jpg

3、WEB Monitoring

Web Monitoring是用来监控web程序的,可以监控到web程序的下载速度、返回码及响应时间。当返回码不为200的时候也可以产生报警。

wKioL1MTHkKTwnylAAQZ6RYbORU395.jpg

4、Zabbix Screens

Screen将多种信息放在一起展示,便于集中展示某个主机的监控信息。

wKiom1MTHpCjWtjrAAXqOAYol0s158.jpg

5、Zabbix maps

Zabbix的maps用来图形化显示监控设备的拓扑图,并且以不同的标记显示故障事件,通过该图表很直观的显示设备的整体情况。

wKiom1MTHruj3OzAAAChGOcZNU8492.jpg


六、Zabbix自定义监控

在实际应用当中,好多监控系统都满足不了实际的需求,需要根据实际的需求添加自定义监控。比如说:监控应用服务器tuxedo排队,当队列大于2000的时候报警。监控apache,mysql链接数,当大于2000的时候报警等等,此时Zabbix需要借助scripts来完成。

实例:监控http和mysql ESTABLISHED和TIME_WAIT连接数,当大于100的时候报警,并在WEB页面实时查看连接数。

1、在要监控的服务器上面编写Shell/python脚本,取出ESTABLISHED和TIME_WAIT连接数。

 
  
  1. [root@monitor scripts]# catcheckservices.sh

  2. #!/bin/sh

  3. #Create by sfzhang 2014.02.10

  4. ARGS=1

  5. if [ $# -ne "$ARGS"];then

  6. echo "Please input one arguement";

  7. fi

  8. case $1 in

  9. EST_80)

  10. result=`netstat -anp | grep :80 | grep EST | wc -l`

  11. echo$result

  12. ;;

  13. TIME_OUT_80)

  14. result=`netstat-anp | grep :80 | grep TIME_WAIT | wc -l`

  15. echo$result

  16. ;;

  17. EST_3306)

  18. result=`netstat -anp | grep :3306 | grep EST | wc -l`

  19. echo $result

  20. ;;

  21. TIME_OUT_3306)

  22. result=`netstat -anp | grep:3306 | grep TIME_WAIT | wc -l`

  23. echo $result

  24. ;;

  25. EST_11211)

  26. result=`netstat -anp | grep :11211 | grep EST | wc -l`

  27. echo $result

  28. ;;

  29. TIME_OUT_11211)

  30. result=`netstat -anp | grep:11211 | grep TIME_WAIT | wc -l`

  31. echo $result

  32. ;;

  33. *)

  34. echo"Usage:$0(EST_80|TIME_OUT_80|EST_3306|TIME_OUT_3306|EST_11211|TIME_OUT_11211)"

  35. ;;

  36. esac

2、在Zabbix_agentd.conf里面添加UserParameter,格式如下,对于Zabbix来说,脚本其实就是一个插件。

 
  
  1. UserParameter=checkservices.sh[*],/etc/zabbix/scripts/checkservices.sh $1 $2

重启agentd服务器,然后在zabbix server用zabbix_get就可以取到值。

wKiom1MTH6KQCkKRAAC6YaiQlQE637.jpg

3、要监控的服务器有多台的时候,最简单的方法是先编写一个Templates(模板),在Link到要监控的服务器上面。

wKioL1MTH57Q6pKIAAK-SIUkoMk347.jpg

4、给新添加的模板Linux_service_templates添加Applications。

wKiom1MTH-SzPyQcAACixKB1xCw626.jpg

5、给新添加的模板Linux_service_templates添加Items(监控项)。下面是添加http ESTABLISHED监控条目。

wKioL1MTH-zh0RI1AALiMp_pLxM745.jpg

6、给新添加的模板Linux_service_templates添加Triggers(触发器)。下面是添加 http ESTABLISHED触发器,当连接数大于2000的时候报警,故障级别为High。

wKiom1MTII3g4TYZAAF47LrhYNY544.jpg

7、要在WEB前端实时查看http的连接情况,必须配置Graph。在一个Graph里面可以添加多个Item数据。

wKiom1MTILLgVDVVAAHaNTf6EOw649.jpg

8、要查看Graphs在要监控的主机上面Link刚才的模板Linux_service_templates。

wKioL1MTILGA0QulAAMO2b16MXc970.jpg

9、在WEB前端查看实时连接情况。

Http连接情况:

wKiom1MTIQHh3PtyAASCP7onyQw582.jpg

Mysql连接情况:

wKioL1MTIQaiE7FlAAQxxbAu4hc026.jpg


七、Zabbix discovery

1、Network discovery

Zabbix network discovery能自动发现网络中存活的主机,可用通过proxy代理或者Zabbix server 发现网络中存活的主机,并按照Actions里面定义的条件自动添加到Zabbix监控里面。

1)首先:添加Discovery rule,可以通过proxy代理或者zabbix server添加rule。

wKiom1MTIVbg--UlAAI5tB5e03w751.jpg

2)然后create Actions,指定Actions的Conditions,必须具备下列条件才能自动添加,Discover

rule:规则为 Local network,system.uname的值中包含Linux,Zabbix agentd服务必须正常运行。

wKiom1MTIkXzyZwdAAI7B1ZwVyM736.jpg

3) 配置Actions的operations,将Actions里面符合条件的主机添加到shwww组里面并Link要监控的模板。

wKioL1MTIkeRt3HDAAI4PdtmSGs409.jpg

4)查看Discover自动发现的主机自动添加到Zabbix里面。

wKiom1MTIpXyeyhvAAPLZ5Fp6a4750.jpg

2、Zabbix Low-level discovery

Zabbis Low-level discovery 可以自动创建监控项,触发器和图像的方法。Zabbix可以自动发现主机上面的文件系统或者网络接口,不需要对每个文件系统和网络接口手动创建监控项,触发器和图像。Zabbix 还可以自动删除不需要的监控项,比如:上例当中的,当agentd宕机超过24小时的时候可以自动删除监控,只需在action里面配置即可。

实例:监控服务器上面所有TCP端口,就可以通过Low-level discovery轻松实现。

wKiom1MTIsfQ_wNHAAHEV7UTXuQ270.jpg

八、Zabbix报警邮件机制

1、基于业务类型发送报警邮件

当数据库服务器出问题时发给DBA组,当系统出问题时发给System组。

wKioL1MTIuWTPmCFAAJLQq_4Eog193.jpg

2、基于故障级别或者时间发送邮件

wKiom1MTIzGTsaL4AADG3UbBcq0785.jpg

九、Zabbix资产管理

Zabbix可以自动收集主机的hostname,OS,cpu信息,MAC等信息。需要在添加主机的时候开启Host inventory Automatic功能,并按照官方手册添加Item即可。

wKioL1MTIzGhO2SiAANeWU7ISK0439.jpg

十、Zabbix 报表功能

附录:

1、官方在线文档:

https://www.zabbix.com/documentation/2.2/manual/introduction

(  ERIKXUE  薛忠权 奋斗在京)