前段时间写的一个脚本,准备大规模的应用在nagios中,当nagios需要检查的服务超过3000,硬件差一点的机器负责这些服务的检查就有些力不从心了,因此被动检测以及nagios的分布式就显得更加重要了。下面是脚本详情
# Name : 被动检查统一脚本
# CTime : 2012-04-13
# =====================公共变量=============================
NagiosPath="/usr/local/nagios/"
NSCABin=${NagiosPath}"bin/send_nsca"
NSCAHost="192.168.8.200"
NSCAPort="5667"
NSCAConfig=${NagiosPath}"etc/send_nsca.cfg"
Date=`date +%Y%m%d%H`
InfoFile=/logs/dmesg/${Date}.$$
HostName="bzweb"
# check_sys_files variable
MD5FILE="/home/okooo/apps/nagios/libexec/sys_files_md5.conf"
MD5SUMBIN="/usr/bin/md5sum"
# check_load variable
LoadWarning="3,3,3"
LoadCriticl="4,4,4"
LoadBin=${NagiosPath}"libexec/check_load -w $LoadWarning -c $LoadCriticl"
# check_disk variable
DiskWarning="20%"
DiskCriticl="10%"
DiskBin=${NagiosPath}"libexec/check_disk -w $DiskWarning -c $DiskCriticl -A -i /dev/shm"
# check_openmanage variable
OpmBin=${NagiosPath}"libexec/check_openmanage -b ctrl_fw=ALL\/ctrl_driver=ALL\/bat=ALL -p"
# check_jmx variable
JMXBin=${NagiosPath}"libexec/check_jmx -U service:jmx:rmi:///jndi/rmi://localhost:"
JMXPar="/jmxrmi -O java.lang:type=Memory -A HeapMemoryUsage -K used -I HeapMemoryUsage -J used -v"
# =======================================================
# 函数名 : getResult
# 功能 : 得到检查结果的函数
# 参数列表
# 参数1 : 待执行的检查命令
# 参数2 : 检查结果的状态字符再哪列
# 参数3 : 检查类型,目前包含: jmx
# 参数4 :对应参数3中对应的附加信息
function getResult()
{
if [ "$3" == "jmx" ];then
Info=`${JMXBin}$4${JMXPar}`
Result=$Info
State=`echo $Info | awk '{print $'''$2'''}'`
else
Info=`$1`
Result=`echo $Info|cut -d '|' -f 1`
Profdata=`echo $Info|cut -d '|' -f 2`
State=`echo $Info | awk '{print $'''$2'''}'`
fi
}
# 函数名 : SendResult
# 功能 : 发送被动检查结果
# 参数列表
# 参数1 : 被检查的服务名
function SendResult()
{
case $State in
"OK")
echo -e "$HostName\t$1\t0\t$Result|$Profdata" | ${NSCABin} -H $NSCAHost -c $NSCAConfig;;
"WARNING")
echo -e "$HostName\t$1\t1\t$Result|$Profdata" | ${NSCABin} -H $NSCAHost -c $NSCAConfig;;
"CRITICAL")
echo -e "$HostName\t$1\t2\t$Result|$Profdata" | ${NSCABin} -H $NSCAHost -c $NSCAConfig;;
*)
echo -e "$HostName\t$1\t3\t$Result" | ${NSCABin} -H $NSCAHost -c $NSCAConfig;;
esac
}
# check_jmx function
function check_jmx()
{
ServiceName=$1
ServicePort=$2
getResult null 1 jmx $ServicePort
SendResult $ServiceName
}
# check_dmesg function
function check_dmesg()
{
/bin/dmesg |grep -v 'Treason uncloaked\|NFS: Buggy server\|blocks\|heads\|^$' >$InfoFile
Messages=`cat $InfoFile|head -1 |awk '{print substr($0,1,20)}'`
if [ "`cat $InfoFile`" == "" ];then
echo -e "$HostName\tcheck_dmesg\t0\tOK" | ${NSCABin} -H $NSCAHost -c $NSCAConfig
rm -rf $InfoFile
elif
cat $InfoFile | egrep -v "not|warning|drop|Down|error|dis|high|hot|disconnect|promiscuous" >/dev/null 2>&1
[ $? == 0 ] ;then
echo -e "$HostName\tcheck_dmesg\t1\tWARNING,内容包含'$Messages' "| ${NSCABin} -H $NSCAHost -c $NSCAConfig
/bin/dmesg -c
else
echo -e "$HostName\tcheck_dmesg\t2\tCRITICAL,内容包含'$Messages'"| ${NSCABin} -H $NSCAHost -c $NSCAConfig
/bin/dmesg -c
fi
}
# check_sys_files function
function check_sys_files()
{
Result=`$MD5SUMBIN -c $MD5FILE 2>/dev/null | grep FAILED`
if [ "$Result" != "" ];then
echo -e "$HostName\tcheck_sys_files\t2\t$Result" | ${NSCABin} -H $NSCAHost -c $NSCAConfig
else
echo -e "$HostName\tcheck_sys_files\t0\tSystem File is OK." | ${NSCABin} -H $NSCAHost -c $NSCAConfig
fi
}
# CPU Load
function check_load()
{
getResult "$LoadBin" "1"
SendResult "CPU Load"
}
function check_disk()
{
getResult "$DiskBin" "2"
SendResult "check_disk"
}
# check_openmanage Dell硬件检查
function check_openmanage()
{
getResult "OpmBin" "1"
SendResult "check_openmanage"
}
#============= Main ============
while getopts Amplsdj: OPTION
do
case $OPTION in
A)
check_dmesg
check_sys_files
check_load
check_disk
check_openmanage;;
m)
check_dmesg;;
p)
check_disk;;
l)
check_load;;
s)
check_sys_files;;
d)
check_openmanage;;
j)
for jmxinfo in $OPTARG
do
eval $(echo $jmxinfo | awk -F : '{ printf("type=%s\nport=%s\n",$1,$2); }')
check_jmx $type $port
done;;
*)
echo -e "please input correct parameter:
Usage: $0 -A | -[m p l s d]
-A check all services
-m check_dmesg
-p check_disk
-l check_load
-s check_sys_file
-d check_openmanage"
esac
done



近期评论