#!/bin/bash
# Check system info: Disk Info, Top info
# Written by brian
# exp:
# nohup /bin/sh get_http.sh >/dev/null &
#需要监控的网站列表和关键定义
weblist=`cat weblist`
#报警配置文件
alertlog='alert.log'
#邮件发送日志文件
mailsendlog='mailsend.log'
#详细日志文件
detaillog='detail.log'
#收件邮件列表
maillist='xx@163.com,yy@163.com'
mailsend(){
str=$1
code=$2
if [ ! -f $alertlog ]
then
>$alertlog
fi
keven=`echo $str|grep scjhym`
#对特殊网站进行邮件收件人地址重写
if [[ ! -z $keven ]]
then
maillist='zz@163.com'
fi
ip=`echo $str|awk -F'|' '{print $1}'`
site=`echo $str|awk -F'|' '{print $2}'`
comstr=$ip"|"$site
if grep $comstr $alertlog
then
lstr=`grep $comstr $alertlog`
second=`echo $lstr|awk -F'|' '{print $4}'`
#计算当前时间和最近一次报警时间的间隔
midtime=`expr $(date +%s) - $second`
num=`echo $lstr|awk -F'|' '{print $5}'`
if [[ $num -lt 2 ]]
then
if [[ $midtime -gt 300 ]]
then
comstr=`echo "$comstr"|/bin/sed -e 's#/#\\\/#g'`
/bin/sed -i "/$comstr/d" $alertlog >/dev/null
newstr=$str"|"$(date +%s)"|"`expr $num + 1`
mailcontent=$ip"_"$site" is error,code: "$code",keyword: "`echo $str|awk -F'|' '{print $3}'`",notify num: "`expr $num + 1`
echo $mailcontent | mutt -s "$ip:http notify" $maillist
echo $newstr >> $alertlog
echo `date +"%Y-%m-%d %H:%M:%S"`" $site" >> $detaillog
echo `/usr/bin/curl -s $site` >> $detaillog
echo "-------------------------------------" >> $detaillog
echo `date +"%Y-%m-%d %H:%M:%S"`" "$mailcontent >> $mailsendlog
fi
fi
else
mailcontent=$ip"_"$site" is error,code: "$code",keyword: "`echo $str|awk -F'|' '{print $3}'`",notify num: 1。"
echo $mailcontent | mutt -s "$ip:http notify" $maillist
newstr=$str"|"$(date +%s)"|1"
echo $newstr >> $alertlog
echo `date +"%Y-%m-%d %H:%M:%S"`"$site" >> $detaillog
echo `/usr/bin/curl -s $site` >> $detaillog
echo "-------------------------------------" >> $detaillog
echo `date +"%Y-%m-%d %H:%M:%S"`" "$mailcontent >> $mailsendlog
fi
}
doCheck(){
for i in $weblist
do
ip=`echo $i|awk -F'|' '{print $1}'`
site=`echo $i|awk -F'|' '{print $2}'`
keywords=`echo $i|awk -F'|' '{print $3}'`
http_code=`/usr/bin/curl -o /dev/null -s -w %{http_code} -m 10 $site`
keystats=`/usr/bin/curl -s $site|grep "$keywords"`
if [[ -z $keystats ]]
then
sleep 5
keystats=`/usr/bin/curl -s $site|grep "$keywords"`
if [[ -z $keystats ]]
then mailsend $i $http_code
fi
else
if grep $ip"|"$site $alertlog
then
cstr=`echo $ip"|"$site|/bin/sed -e 's#/#\\\/#g'`
/bin/sed -i "/$cstr/d" $alertlog >/dev/null
echo `date +"%Y-%m-%d %H:%M:%S"`" "$i" is OK!" >> $mailsendlog
fi
fi
done
}
while true
do
doCheck > /dev/null &
#每隔二十秒检查一次
sleep 20
done
#######################
#####weblist配置文件格式#####
#IP地址|URL地址|关键字#######
#222.249.9.X|http://www.xxx.com|keywords
# Check system info: Disk Info, Top info
# Written by brian
# exp:
# nohup /bin/sh get_http.sh >/dev/null &
#需要监控的网站列表和关键定义
weblist=`cat weblist`
#报警配置文件
alertlog='alert.log'
#邮件发送日志文件
mailsendlog='mailsend.log'
#详细日志文件
detaillog='detail.log'
#收件邮件列表
maillist='xx@163.com,yy@163.com'
mailsend(){
str=$1
code=$2
if [ ! -f $alertlog ]
then
>$alertlog
fi
keven=`echo $str|grep scjhym`
#对特殊网站进行邮件收件人地址重写
if [[ ! -z $keven ]]
then
maillist='zz@163.com'
fi
ip=`echo $str|awk -F'|' '{print $1}'`
site=`echo $str|awk -F'|' '{print $2}'`
comstr=$ip"|"$site
if grep $comstr $alertlog
then
lstr=`grep $comstr $alertlog`
second=`echo $lstr|awk -F'|' '{print $4}'`
#计算当前时间和最近一次报警时间的间隔
midtime=`expr $(date +%s) - $second`
num=`echo $lstr|awk -F'|' '{print $5}'`
if [[ $num -lt 2 ]]
then
if [[ $midtime -gt 300 ]]
then
comstr=`echo "$comstr"|/bin/sed -e 's#/#\\\/#g'`
/bin/sed -i "/$comstr/d" $alertlog >/dev/null
newstr=$str"|"$(date +%s)"|"`expr $num + 1`
mailcontent=$ip"_"$site" is error,code: "$code",keyword: "`echo $str|awk -F'|' '{print $3}'`",notify num: "`expr $num + 1`
echo $mailcontent | mutt -s "$ip:http notify" $maillist
echo $newstr >> $alertlog
echo `date +"%Y-%m-%d %H:%M:%S"`" $site" >> $detaillog
echo `/usr/bin/curl -s $site` >> $detaillog
echo "-------------------------------------" >> $detaillog
echo `date +"%Y-%m-%d %H:%M:%S"`" "$mailcontent >> $mailsendlog
fi
fi
else
mailcontent=$ip"_"$site" is error,code: "$code",keyword: "`echo $str|awk -F'|' '{print $3}'`",notify num: 1。"
echo $mailcontent | mutt -s "$ip:http notify" $maillist
newstr=$str"|"$(date +%s)"|1"
echo $newstr >> $alertlog
echo `date +"%Y-%m-%d %H:%M:%S"`"$site" >> $detaillog
echo `/usr/bin/curl -s $site` >> $detaillog
echo "-------------------------------------" >> $detaillog
echo `date +"%Y-%m-%d %H:%M:%S"`" "$mailcontent >> $mailsendlog
fi
}
doCheck(){
for i in $weblist
do
ip=`echo $i|awk -F'|' '{print $1}'`
site=`echo $i|awk -F'|' '{print $2}'`
keywords=`echo $i|awk -F'|' '{print $3}'`
http_code=`/usr/bin/curl -o /dev/null -s -w %{http_code} -m 10 $site`
keystats=`/usr/bin/curl -s $site|grep "$keywords"`
if [[ -z $keystats ]]
then
sleep 5
keystats=`/usr/bin/curl -s $site|grep "$keywords"`
if [[ -z $keystats ]]
then mailsend $i $http_code
fi
else
if grep $ip"|"$site $alertlog
then
cstr=`echo $ip"|"$site|/bin/sed -e 's#/#\\\/#g'`
/bin/sed -i "/$cstr/d" $alertlog >/dev/null
echo `date +"%Y-%m-%d %H:%M:%S"`" "$i" is OK!" >> $mailsendlog
fi
fi
done
}
while true
do
doCheck > /dev/null &
#每隔二十秒检查一次
sleep 20
done
#######################
#####weblist配置文件格式#####
#IP地址|URL地址|关键字#######
#222.249.9.X|http://www.xxx.com|keywords