随着IDC的服务器越来越多,一直都想用套软件来承担日常的运维监控工作,但是普通的网管软件基本上都是基于SNMP的,监控的层次比较低,特别是对于我们运维来说应用方面的监控是主要工作。做为我想要的运维监控软件,它应该满足一下一些要求:
1。对于主机基本情况的监控。如CPU、文件系统、MEM等;
2。对于主流应用系统的监控,比如http、mysql、mail等,同时它对于应用系统的监控必须能够细化到如http进程、mysql当前有多少query打开多少table等等这些情况;
3。它必须有良好的扩展性,比如对于webst这样少见的应用最好自己可以定制脚本来抓取连接信息等;
4。web监控和灵活的图表定制能力,我可以根据服务器或者某个应用来自由定制曲线图;
5。它还需要有灵活的预警功能,对于服务器down应用down等预设阀进行预警处理,同时预警功能最好具有拓展性,比如能通过我们现有的短信平台发送。
本来打算自己写一个agent/Server模式的软件,agent在每个监控节点上开放端口,由server通过crond定期呼叫agent获取监控信息,然后用php+mysql在server端前台管理和监控。不过试了leera介绍的zabbix,我期望的功能要求它基本都达到了,而且是开源的产品,这样基本打消了我的念头。
下面就开始一起认识强大的zabbix吧,首先来看看如何安装。
zabbix的官方站点:http://www.zabbix.com/
当前稳定版本:1.1.6
zabbix想比较其他管理监控软件而言,安装非常简单。
首先配置数据库环境,我这里使用mysql作为数据库支持,
mysql> use zabbix;
mysql> source /tmp/zabbix-1.1.6/create/mysql/schema.sql
mysql> source /tmp/zabbix-1.1.6/create/data/data.sql
mysql> source /tmp/zabbix-1.1.6/create/data/images.sql
# cd zabbix-1.1.6
# ./configure –prefix=/data/app/zabbix \ //指定安装目录
–enable-server \ //安装server端,监控节点不需要
–enable-agent \ //安装agent端
–with-mysql \ //需要mysql支持需要指定其目录
–with-oracle \ //需要oracle支持需要指定其目录
–with-net-snmp //需要snmp支持需要指定
# make
# make install
# cp -r misc/conf/*.conf /etc/zabbix //如果是agent那么只需要zabbix_agent.conf zabbix_agentd.conf两个文件即可
# cp -r misc/init.d/redhat/*ctl /data/app/zabbix/bin
注意修改/data/app/zabbix/bin/zabbix_agentd_ctl和zabbix_suckerd_ctl文件中默认的zabbix目录;
如果是server端,需要修改/etc/zabbix中的zabbix_server.conf、zabbix_trapper.conf两个文件,主要是配置一些路径、IP、端口、数据库信息等等;如果是agent端,需要修改/etc/zabbix中的zabbix_agent.conf、zabbix_agentd.conf两个文件,也是配置类似的相关信息,这些都比较简单不用详说。
在agent端服务器上需要通过/data/app/zabbix/bin/zabbix_agentd_ctl start来启动agent进程,在server端通过/data/app/zabbix/bin/zabbix_suckerd_ctl start来启动server进程,如果发生错误可以查看指定的log文件来分析。
最后我们需要在server端来配置web脚本的环境,拷贝frontends/php目录的脚本到web文件目录,并修改include/db.inc.php中的数据库连接信息。
ok,安装基本完成,后面再来看看如何使用zabbix,先来两张我的zabbix的截屏,不过只添加了部分server。
一服务器列表界面
二手工指定的监控面板
Hi,你好!
看到你的博客,终于把zabbix安装好了!谢谢!
我有个问题
我想:当触发器被触发时,执行一脚本。
我按照zabbix manual上设置没有成功,你能否教下我?
非常感激!!
谢谢!!
不知你指的是不是自己定义监控变量?
可以参考zabbix_agentd.conf中对于Parameter的定义,如
#UserParameter=mysql.version,mysql -V
所指的是定义一个监测变量 mysql.version,对应的是mysql -V的执行结果,即mysql的版本值。
相同原理,如果我们需要监测80端口的连接数,我们也可以定义这个监测变量。
UserParameter=httpd.connects,netstat -an | grep IPADDR:80 | wc -l
那么我们在server上对于指定的服务器增加httpd.connects的监控变量就可以监控80端口的连接数了。
呵呵,真是谢谢你!
今天长知识了,可以利用监控变量来监控一些值。
我想这样:
我创建一个触发器,它的表达式为
{test:system.swap.size[,free].last(0)} >100000
当系统的 free swap space>100000时,触发器被触发,发出一些警告,执行一些动作,我看了manual,动作方式有3种,email、sms和script,想选择执行script。
按照手册上,一步一步设置,没有弄好
呵呵,不知我讲清楚没?谢谢!!
呵呵,描述得有点混乱,还望大侠不吝赐教!
呵呵,谢谢你!