监控cdn上的页面访问示例:
邮件脚本如下:
#!/usr/bin/python
#coding:utf-8
import smtplib
from email.mine.text import MIMEText
import sys
mail_host = 'stmp.163.com'
mail_user = 'test@163.com'
mail_pass = 'your_mail_password'
mail_postfix = '163.com'
def send_mail(to_list,subject,content):
me = "zabbix 监控告警平台"+"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEText(content,'plain','utf-8')
msg['Subject'] = subject
msg['From'] = me
msg['to'] = to_list
try:
s = smtplib:SMTP()
s.connect(mail_host)
s.login(mail_user,mail_pass)
s.sendmail(me,to_list,msg.as_string())
s.close()
return True
except Exception,e:
print str(e)
return False
if __name__ == "__main__"
send_mail(sys.argv[1], sys.argv[2], sys.argv[3])
参考脚本如下:
#!/bin/bash
#监控所有cdn节点是否正常
#定义收件人邮箱
mail="/usr/local/sbin/mail.py"
mail_user=admin@admin.com
url="http://www.lzxlinux.com/test.php"
s_ip="88.88.88.88"
ipf="/data/cdn_ip.list"
if ! which curl &>/dev/null
then
yum install -y curl
fi
mycurl()
{
curl --connect-timeout 2 -x$1:80 $url 2>/dev/null
}
#定义告警函数
m_mail()
{
log=$1
t_s=`date +%s`
t_s2=`date -d "1 hours ago" +%s`
if [ ! -f /tmp/$log ]
then
touch /tmp/$log
chattr +a /tmp/$log
echo $t_s2 >> /tmp/$log
fi
t_s2=`tail -1 /tmp/$log |awk '{print $1}'
echo $t_s >> /tmp/$log
v=$[$t_s-$t_s2]
if [ $v -gt 1800 ]
then
python $mail $mail_user "节点$1异常" "`cat $2`" 2>/dev/null
echo "0" > /tmp/$log.count
else
if [ ! -f /tmp/$log.count ]
then
echo "0" > /tmp/$log.count
fi
nu=`cat /tmp/$log.count`
nu2=$[$nu+1]
echo $nu2 > /tmp/$log.count
if [ $nu2 -gt 30 ]
then
python $mail $mail_user "节点$1异常持续30分钟了" "`cat $2`" 2>/dev/null
echo "0" > /tmp/$log.count #第二次告警后计时器归0
fi
fi
}
mycurl $s_ip >/tmp/s.html
for ip in `cat $ipf`
do
mycurl $ip > /tmp/$ip.html
#对比源站和节点的页面是否有差异
diff /tmp/s.html /tmp/$ip.html > /tmp/$ip.diff 2>/dev/null
n=`wc -l /tmp/$ip.diff |awk '{print $1}'`
if [ $n -gt 0 ]
then
m_mail $ip /tmp/$ip.diff
fi
done