因为这个监控系统是分布式的,每台机器都需要部署同样的监控脚本;唯一不同的就是,不同的机器本机自身参数不同(ip地址,主机名等等),修改对应的参数即可。
所以,首先定义一套监控脚本出来,然后其他需要监控的linux服务器需要从这copy到自己的服务器上面。
约定一个小习惯:
以后把shell脚本放到/usr/local/sbin/下,方便以后查找
操作
1 创建监控中心父目录以及各个子目录
[[email protected] ~]# cd /usr/local/sbin/
[[email protected] sbin]# mkdir mon
[[email protected] sbin]# cd mon/
[[email protected] mon]# mkdir bin conf shares log mail
[[email protected] mon]# ls
bin conf log mail shares
目录说明:
bin下是主程序
conf下是配置文件
shares下是各个监控脚本
mail下是邮件引擎
log下是日志
2 在bin下面创建主脚本
[[email protected] mon]# cd bin/
[[email protected] bin]# vim mail.sh
#!/bin/bash
#Written by aming.
# 是否发送邮件的开关
export send=1
# 过滤ip地址
export addr=`/sbin/ifconfig |grep -A1 "ens33: " |awk '/inet/ {print $2}'`
dir=`pwd`
# 只需要最后一级目录名
last_dir=`echo $dir|awk -F'/' '{print $NF}'`
# 下面的判断目的是,保证执行脚本的时候,我们在bin目录里,不然监控脚本、邮件和日志很有可能找不到
if [ $last_dir == "bin" ] || [ $last_dir == "bin/" ]; then
conf_file="../conf/mon.conf"
else
echo "you shoud cd bin dir"
exit
fi
exec 1>>../log/mon.log 2>>../log/err.log
echo "`date +"%F %T"` load average"
/bin/bash ../shares/load.sh
#先检查配置文件中是否需要监控502
if grep -q 'to_mon_502=1' $conf_file; then
export log=`grep 'logfile=' $conf_file |awk -F '=' '{print $2}' |sed 's/ //g'`
/bin/bash ../shares/502.sh
fi
脚本解释:
export send=1 是否发送邮件,1表示是(监控的所有项目都会发送邮件),0表示否(一般系统处于维护状态设置0)。export表示send的变量会应用在所有的子脚本里面。
export addr=`/sbin/ifconfig |grep -A1 "ens33: " |awk '/inet/ {print $2}'` 过于ip地址的原因是,因为监控项目都是分布式,过滤ip地址可以快速定位是哪台服务器发送的邮件,从而达到追踪监控目的。定义主机名也可以代替此方法。
原文地址:http://blog.51cto.com/13578154/2124508