【Python】DNS域名轮循业务监控

来源:互联网 发布:ubuntu 16.04 arm gcc 编辑:程序博客网 时间:2024/06/05 10:07

应用背景:

大部分的DNS解析都是一个域名对应一个IP地址,但通过DNS轮循技术可以做到一个域名对应多个IP,从而实现负载均衡,减轻服务器压力,不过此方案的最大弊端是目标主机不可用时无法被自动剔除,因此做好业务主机的服务可用监控至关重要

步骤:

  • 安装dnspython模块:pip install dnspython
  • 获取域名所有的A记录解析IP列表
  • 对所有IP进行HTTP级别的探测
#-*- coding: utf-8 -*- #!/usr/bin/pythonimport dns.resolverimport osimport httplibiplist=[]    #定义域名IP列表变量appdomain="www.baidu.com"    #定义业务域名def get_iplist(domain=""):    #域名解析函数,解析成功IP将追加到iplist    try:        A = dns.resolver.query(domain, 'A')    #解析A记录类型    except Exception,e:        print "dns resolver error:"+str(e)        return    for i in A.response.answer:        for j in i.items:            iplist.append(j.address)    #追加到iplist    return Truedef checkip(ip):    checkurl=ip+":80"    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个字符,以便做可用性校验    finally:        if getcontent=="<!DOCTYPE html>":  #监控URL页的内容一般是事先定义好,比如“HTTP200”等            print ip+" [OK]"        else:            print ip+" [Error]"    #此处可放告警程序,可以是邮件、短信通知if __name__=="__main__":    if get_iplist(appdomain) and len(iplist)>0:    #条件:域名解析正确且至少要返回一个IP        for ip in iplist:            checkip(ip)    else:        print "dns resolver error."


0 0
原创粉丝点击