20. 监控CDN节点

CDN可以提升用户对网站访问的体验,一般情况下,比较大的公司会在全国各个城市甚至国外部署CDN节点,这样用户可以就近选择访问的节点,可以快速访问且节省带宽。但CDN节点一多就容易出现某个节点有问题的情况,本案例的需求是监控各个CDN节点,看其是否正常。

具体要求如下:

1)提供一个所有CDN节点IP的文本 /data/cdn_ip.list ;

2)提供一个监控链接地址:http://www.lzxlinux.com/test.php ;

3)要对比节点和源站的访问结果是否一致,假设源站IP为:88.88.88.88 ;

4)当某个节点出问题时,需要发送告警邮件给admin@admin.com ;

5)每分钟执行一次脚本,告警需要做收敛,即当有故障时立即告警,若故障一直存在则30分钟再次告警;

6)假定源站一定是正常的。

邮件脚本如下:

#!/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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值