美文网首页Python 运维开发
Dns轮训业务状态监测

Dns轮训业务状态监测

作者: Beam_L | 来源:发表于2016-10-13 14:04 被阅读0次
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 2016/10/13 11:23
    # @Author  : Beam
    # @Site    : DNS域名轮训业务监控
    """
    通过DNS轮询技术可以做多一个域名多赢多个IP实现简单高效的负载均衡,该脚本主要用途监控业务是否可用
    本脚本以谷歌为例,在实际自行搭建的dns服务器只有纯IP
    """
    # @File    : demo_dns_actual.py
    # @Software: PyCharm
     
    import dns.resolver
    import os
    import httplib
     
    iplist = []   #定义IP列表变量
    appdomain = "www.beam.pub" #定义业务域名
     
    def  get_iplist(domain=''):
        """
        域名解释函数,解释成功的A记录的IP追加到iplist列表中
        :param domain:
        :return:
        """
        try:
            A = dns.resolver.query(domain,'A') ##解析域名的A记录
        except Exception,e:
            print "dns resolver error: " + str(e)
            return False
        for i in A.response.answer:
            for j in i.items:
                iplist.append(j.address)
        return True
     
    def checkip(ip):
        """
        checkip函数用于检查IP是否能正常打开,其实还能用curl -I 得到状态码来测试业务是否正常
        :param ip:
        :return:
        """
        checkurl = ip + ':80'   #定义要检测的IP地址
        getcontent = ''
        httplib.socket.setdefaulttimeout(5)   ##定义HTTP连接超时时间为5秒
        conn = httplib.HTTPConnection(checkurl)  ##创建http连接对象
        try:
            conn.request("GET","/",headers = {"HOST":appdomain})   ##发起URL请求,添加host主机头
            r = conn.getresponse()
            getcontent  = r.read(15)     ##获取URL页面前15个字符,用于做可用性校验
            print getcontent
        finally:
            if getcontent.lower() == '<!doctype html>':   ##监控url页的内容一般是实现定义好的,比如http200等
                print ip + ' [OK]'
            else:
                print ip + ' [Error]'
     
    if __name__ == '__main__':
        if get_iplist(appdomain) and len(iplist)> 0 :
            for ip in iplist:
                checkip(ip)
        else:
            print "dns resolver error"
    

    相关文章

      网友评论

        本文标题:Dns轮训业务状态监测

        本文链接:https://www.haomeiwen.com/subject/akmwyttx.html