shell监控网站并发邮件报警

post by rocdk890 / 2015-3-3 13:48 Tuesday linux技术
  目前网上关于网站存活监控的脚本很多,本站也放过几个,今天给大家再来个ping+curl监控网站并发邮件报警的脚本,我觉得这个脚本的思路很不错,大家有兴趣的可以下来看看.
脚本内容:
cat /root/soft_shell/check-www.sh
#!/bin/bash
#Created by haiyun
#set -x
while true
do
    list=(blog.slogra.com slogra.com)
    mail=rocdk@163.com
    date=$(date -d "today" +"%Y-%m-%d-%H:%M:%S")
    i=0
    id=${#list[*]}
    while [ $i -lt $id ]
    do
        if ping -c1 ${list[$i]} >/dev/null
        then
            echo  $date:服务器${list[$i]}能ping通.
        else
            if curl -m 10  ${list[$i]} > /dev/null
            then
                echo  $date:服务器${list[$i]} ping不通,能打开网页.
            else
                echo  "您好,据系统监测服务器${list[$i]}不能访问且ping不通,请及时处理!故障发生时间:$date"|mail -s "服务器${list[$i]}不能连接! 故障发生时间:$date" $mail
                until
                    date=$(date -d "today" +"%Y-%m-%d-%H:%M:%S")
                    ping -c1 ${list[$i]} >/dev/null && echo "恭喜!服务器${list[$i]}已恢复正常,恢复时间:$date"|mail -s "服务器${list[$i]}已恢复正常! 恢复时间:$date" $mail
                do
                    sleep 5
                done
            fi
        fi
        let i++
    done
    sleep 60
done

放入后台运行:
nohup sh /path/file.sh &   #把脚本放到后台运行,程序自己会60秒检查一次网站.

开机自启动:
echo "nohup sh /root/soft_shell/check-www.sh & " >> /etc/rc.local

下面还有个类似的脚本,但他控制了发邮件的频率:
cat /root/soft_shell/check-web.sh
#!/bin/bash
#Created by jbxue
SITES=("https://blog.slogra.com" "http://slogra.com") # 要监控的网站
NOTICE_EMAIL='me@example.com'                                 # 管理员电邮
MAXLOADTIME=10                                                # 访问超时时间设置
REMARKFILE='/tmp/monitor_load.remark'                         # 记录时否发送过通知电邮,如发送过则一小时内不再发送
ISSEND=0                                                      # 是否有发送电邮
EXPIRE=3600                                                   # 每次发送电邮的间隔秒数
NOW=$(date +%s)
 
if [ -f "$REMARKFILE" ] && [ -s "$REMARKFILE" ]; then
    REMARK=$(cat $REMARKFILE)
    
    # 删除过期的电邮发送时间记录文件
    if [ $(( $NOW - $REMARK )) -gt "$EXPIRE" ]; then
        rm -f ${REMARKFILE}
        REMARK=""
    fi
else
    REMARK=""
fi
 
# 循环判断每个site
for site in ${SITES[*]}; do
 
    printf "start to load ${site}\n"
    site_load_time=$(curl -o /dev/null -s -w "time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}" "${site}")
    site_access=$(curl -o /dev/null -s -w %{http_code} "${site}")
    time_total=${site_load_time##*:}
 
    printf "$(date '+%Y-%m-%d %H:%M:%S')\n"
    printf "site load time\n${site_load_time}\n"
    printf "site access:${site_access}\n\n"
 
    # not send
    if [ "$REMARK" = "" ]; then
        # check access
        if [ "$time_total" = "0.000" ] || [ "$site_access" != "200" ]; then
            echo "Subject: ${site} can access $(date +%Y-%m-%d' '%H:%M:%S)" | sendmail ${NOTICE_EMAIL}
            ISSEND=1
        else
            # check load time
            if [ "${time_total%%.*}" -ge ${MAXLOADTIME} ]; then
                echo "Subject: ${site} load time total:${time_total} $(date +%Y-%m-%d' '%H:%M:%S)" | sendmail ${NOTICE_EMAIL}
                ISSEND=1
            fi
        fi
    fi
 
done
 
# 发送电邮后记录发送时间
if [ "$ISSEND" = "1" ]; then
    echo "$(date +%s)" > $REMARKFILE
fi
exit 0 

ps:
1.检查网站返回的http_code是否等于200,如不是200视为异常.
2.检查网站的访问时间,超过MAXLOADTIME(10秒)视为异常.

3.发送通知邮件后,在/tmp/monitor_load.remark记录发送时间,在一小时内不重复发送,如一小时后则清空/tmp/monitor_load.remark.

脚本来源:
http://www.jbxue.com/article/15072.html
http://www.haiyun.me/archives/shell-check-server-mail.html

夜空- 本站版权
1、本站所有主题由该文章作者发表,该文章作者与夜空享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和夜空的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:blog.slogra.com/post-575.html

标签: linux web shell 网站 监控 邮件 报警

评论: