zabbix搭建好后,除了调用默认的模板,还要监控其它常用的进程,有redis,rsync,nginx,gunicorn,mysql等等都要进行监控。
自定义监控的配置过程如下:
1、编写进程监控脚本,获取监控项的具体值
2、在zabbix_agentd.conf文件中定义UserParameter
3、在界面配置item,通过键值来控制传参
4、查看监控数据情况
5、配置触发器,用来报警
6、宕服务测试
对于zabbix的安装与邮件报警设置,可参考两篇文章。
http://yangrong.blog.51cto.com/6945369/1541810 zabbix监控之基于LNMP环境安装
http://yangrong.blog.51cto.com/6945369/1541822 zabbix监控之同时向多人邮件报警
进程监控脚本构思:
根据名称或端口号来判定该程序是否存在。
如果传参包含端口号,则根据端口号判断进程,有返回1,没有返回0。
如果不包含端口号,根据进程名判断进程,有返回1,没有返回0。
注:所编写的脚本只需要输出具体值即可,无须像nagios那样返回退出值,描述信息等。
[root@yang python]# catprocess_port.py #!/usr/bin/python #Auth:yangrong #function:check process_nameor check process_port #date:2014-8-18 import os,sys,commands def help(): print "Usage: " print " %s process_name [process_port]"%sys.argv[0] print "Example: " print " %s mysql ;If the process_nameexists, output 1, otherwise 0"%sys.argv[0] print " %s nginx 80 ;If the process_port exists, output 1,otherwise 0"%sys.argv[0] print " %s mysql 3306 "%sys.argv[0] def check_process_name(): process_num=commands.getstatusoutput("ps -ef|grep -v grep|grep -v%s|grep -v '\[%s\]'|grep %s|wc -l "%(sys.argv[0],sys.argv[1],sys.argv[1])) #print process_num if not process_num[1]: print "0" return if int(process_num[1]) >= 1: print "1" else: print "0" def check_process_port(): process_num=commands.getstatusoutput("netstat -lnt|grep -v grep|grep ':%s '|wc -l"%sys.argv[2]) if int(process_num[1]) >=1: print "1" else: print "0" ###start execute if len(sys.argv) == 2: check_process_name() sys.exit() elif len(sys.argv) == 3: check_process_port() sys.exit() else: help() sys.exit()
在zabbix agent端修改zabbix_agentd.conf文件:
用户参数=键值[*],命令
echo 'UserParameter =check_process[*],/usr/bin/python /python/process_port.py $1 $2 ' >>/usr/local/zabbix/etc/zabbix_agentd.conf #添加用户参数
/etc/init.d/zabbix_agentdrestart #重启zabbixagent服务
agent端本机测试:
在中括号中内容为传参内容,如果要传参多个,用逗号隔开,第一个则是$1,第二个则是$2。
[root@yang python]#/usr/local/zabbix/sbin/zabbix_agentd -t check_process[hello]
check_process[hello] [t|0]
#返回结果为0,代表hello进程不存在。
[root@yang python]#/usr/local/zabbix/sbin/zabbix_agentd -t check_process[mysql]
check_process[mysql] [t|1]
#返回结果为1,代表mysql进程存在。
[root@yang python]#/usr/local/zabbix/sbin/zabbix_agentd -t check_process[mysql,3306]
check_process[mysql,3306] [t|1]
测试可用,接下来在主界面配置监控
【组态】à【主机】à【项目】à【创建监控项】
此处键值的用法和zabbix_agentd.conf中定义的UserParameter一致。
【监控中】à【最新数据】 最新数据为1,监控正常。
【组态】à【主机】à【触发器】à【创建触发器】
在agent client端,宕掉mysql。邮箱1分钟后收到报警。
成功收到报警邮件,自定义监控及报警配置完成。