前言:python
正常狀況下一個IP對應一個域名,可是能夠經過dns輪訓的方式將一個域名對應多個ip,這樣就能夠達到一種負載均衡的效果,那麼當用戶訪問網站的 時候,有可能被解析到不一樣的ip上去,若是這個ip的服務器出現異常,那麼此時這部分用戶訪問的頁面就是錯誤的,甚至是沒法訪問。爲了不這種狀況的發 生,因此咱們須要監控這些ip節點,好了開始上乾貨,將腳本加入crontab中便可,就能夠實時監控。服務器
Dns域名輪訓監控代碼以下:
app
root@search zhaodong]# cat dns_monitor.py #!/usr/bin/env python #coding=utf8 #Author zhaodong #使用pydns模塊解析域名,將解析以後的A記錄存儲在iplist列表中,而後經過httplib模塊訪問iplist中的數據,來判斷響應碼是不是200,以此實現dns域名輪詢的監控 import dns.resolver import os import httplib import smtplib from email.MIMEText import MIMEText from email.Header import Header #設置收件人郵箱,改爲你本身的郵箱 mailto_list=['zhaodong@163.tv'] #下面這些設置改爲你本身的信息 ######################################### mail_host="smtp.163.com" #設置服務器 mail_user="zhaodong" #用戶名 mail_pass="123456" #密碼 mail_postfix="163.com" #發件箱的後綴 ########################################## #定義dns解析ip列表 iplist=[] #定義域名列表 #定義成你公司的域名 dlist=['tshare365.com','baidu.com'] ###################################### def send_mail(to_list,sub,content): me="DNS輪詢故障"+"<"+mail_user+"@"+mail_postfix+">" msg = MIMEText(content,_subtype='plain',_charset='utf_8') msg['Subject'] = sub msg['From'] = me msg['To'] = ";".join(to_list) try: server = smtplib.SMTP() server.connect(mail_host) server.login(mail_user,mail_pass) server.sendmail(me, to_list, msg.as_string()) server.close() return True except Exception, e: print str(e) return False def Dns(domain): A = dns.resolver.query(domain, 'A') for i in A.response.answer: for p in i: iplist.append(p.address) def Checkip(ip): try: httpClient = httplib.HTTPConnection(ip, 80, timeout=30) #這裏設置的是根目錄,須要將/改爲你監控頁面的訪問路徑 httpClient.request('GET', '/') #response是HTTPResponse對象 response = httpClient.getresponse() #獲取響應碼和狀態 #print response.status #print response.reason except Exception, e: print e finally: #判斷響應碼是不是200, if response.status==200: # print ip+"[ok]" else: #響應碼不是200就調用send_mail函數發送郵件報警 send_mail(mailto_list,"DNS輪詢發現故障節點",ip) # print ip+"[Error]" if httpClient: httpClient.close() if __name__ =="__main__": #若是有多個域名就在定義一個域名列表 循環遍歷便可 for d in dlist: #print d Dns(d) for i in iplist: Checkip(i)
至此結束!
負載均衡