Python學習筆記-DNS域名輪循業務監控

      大部分的DNS解析是一個域名對應一個IP地址,但是通過DNS輪循技術可將一個域名對應多個IP地址,這樣可以實現簡單且高效的負載平衡,但是輪循技術有一個缺點就是當目標主機不可用時,不能自動的刪除,所以引出了要對業務主機的服務的可用性進行監控。

本例通過分析當前域名的解析IP,再結合服務端口探測來實現自動監控,在域名解析中添加、刪除IP時,無須對監控腳步更改。

! Python 2.x中的"httplib"模塊在Python 3.x中變爲"http.client"

#!/usr/bin/python3
#
import dns.resolver
import os
import http.client

iplist=[]	#定義域名IP列表變量
appdomain="www.google.cn"	#定義業務域名

def get_iplist(domain=""):	#域名解析函數,解析成功IP將被追加到iplist
	try:
		A = dns.resolver.query(domain, 'A')	#解析A記錄類型
	except Exception as 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 True

def checkip(ip):
	checkurl = ip+":80"
	getcontent = ""
	http.client.socket.setdefaulttimeout(5)		#定義http連接超時時間(5秒)
	conn = http.client.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.")


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章