天天看點

DNS域名輪詢業務監控(Python)

1、概要

大部分的DNS解析都是一個域名對應一個IP位址,但是通過DNS輪循技術可以做到一個域名對應多個IP,進而實作最簡單且高效的負載平衡,不過此方案最大的弊端是目标主機不可用時無法被自動剔除,是以做好業務主機的服務可用監控至關重要。本示例通過分析目前域名的解析IP,在結合服務端口探測來實作自動監控,在域名解析中添加、删除IP時,無須對監控腳本進行更改。

2、步驟

1)實作域名的解析,擷取域名所有的A記錄解析IP清單

2)對IP清單進行HTTP級别的探測

3、代碼解析

通過dns.resolver.quer()方法擷取業務域名A記錄資訊,查詢出所有IP位址清單,再使用(在Python2中httplib子產品,Python3中http.client子產品)的request()方法以GET方式請求監控頁面,監控業務所有服務的IP是否服務正常。

[root@localhost ~]# cat simple_A.py

#!/usr/bin/env python
#coding=utf-8
import dns.resolver
import os
import httplib
#定義域名IP清單變量
iplist = []
#定義目标域名
appdomain = "www.baidu.com"
#域名解析函數,解析成功IP追加到iplist
def get_iplist(domain=""):
        try:
 #解析A記錄
A = dns.resolver.query(domain,'A')
     except Exception,e:
             print "dns resolver error:" +str(e)
             return
      #使用responese.answer方法
      for i in A.response.answer:
              for j in i.items:
                  #追加到iplist
                   iplist.append(j)
     return True
def checkip(ip):
      #将解析的Ip轉為字元串格式,以便跟:80端口合并
      oip = ('%s') % ip
      checkurl = oip+":80"
      getcontent = ""
      #定義http連結逾時時間
      httplib.socket.setdefaulttimeout(5)
      #建立http連結對象
      conn=httplib.HTTPConnection(checkurl)
      try:
              #發起url請求,添加host主機
              conn.request('GET',"/",headers={"Host":appdomain})
              r = conn.getresponse()
             #隻擷取url頁面的15個字元,用來做可用性校驗
             getcontent = r.read(15)
      finally:
             #監控url頁面的類型要先查清楚,在做對比,這裡<!DOCTYPE html>要大寫,也可以對比http狀态碼
              if getcontent == "<!DOCTYPE html>":
                    print oip+" [ok]"
              else:
                   #這裡可以放置告警程式,比如發短信,郵件等
                    print oip+" [error]"
if __name__ == "__main__":
              #域名解析正确且至少傳回1個IP
               if get_iplist(appdomain) and len(iplist) > 0:
                     for ip in iplist:
                           checkip(ip)
               else:
                     print "dns resolver error."           

複制

[root@localhost ~]# python simple_A.py

www.a.shifen.com. [ok]

14.215.177.38 [ok]

14.215.177.39 [ok]

DNS域名輪詢業務監控(Python)

#運作結果來看,域名www.baidu.com解析出2個IP位址,并且服務都是正常的。