大部分的dns解析都是乙個網域名稱對應乙個ip位址,但是通過dns輪循技術可以做到乙個網域名稱對應多個ip,從而實現最簡單且高效的負載平衡,不過此方案最大的弊端是目標主機不可用時無法被自動剔除,因此做好業務主機的服務可用監控至關重要。本示例通過分析當前網域名稱的解析ip,再結合服務埠探測來實現自動監控,在網域名稱解析中新增、刪除ip時,無須對監控指令碼進行更改。實現架構圖如圖1-1所示。
1. 步驟
1)實現網域名稱的解析,獲取網域名稱所有的a記錄解析ip列表;
2)對ip列表進行http級別的探測。
2. **解析
本示例第一步通過dns.resolver.query()方法獲取業務網域名稱a記錄資訊,查詢出所有ip位址列表,再使用httplib模組的request()方法以get方式請求監控頁面,監控業務所有服務的ip是否服務正常。
# python 2.x中的"httplib"模組在python 3.x中變成了"http.client"
iplist= #定義域名ip列表變數
#定義業務網域名稱
defget_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:
if j.rdtype == 1:
return
true
defcheckip
(ip):
checkurl=ip+":80"
getcontent=""
http.client.socket.setdefaulttimeout(5) #定義http連線超時時間(5秒)
conn=http.client.httpconnection(checkurl) #建立http連線物件
try:
r=conn.getresponse()
getcontent =r.read(15) #獲取url頁面前15個字元,以便做可用性校驗
# print(getcontent) # 輸出的是b''。需要用bytes轉換下
finally:
if getcontent==bytes("", 'utf-8'): #監控url頁的內容一般是事先定義好的,比如「http200」等
print (ip+" [ok]")
else:
print (ip+" [error]" ) #此處可放告警程式,可以是郵件、簡訊通知
if __name__=="__main__":
for ip in iplist:
checkip(ip)
else:
print ("dns resolver error.")
我們可以將此指令碼放到crontab中定時執行,再結合告警程式,這樣乙個基於網域名稱輪循的業務監控已完成。執行程式,顯示結果如下:
74.125.31.94 [ok]
74.125.128.199 [ok]
173.194.72.94 [ok]
從結果可以看出,網域名稱www.google.com.hk解析出3個ip位址,並且服務都是正常的。
DNS網域名稱輪循業務監控
我們一般的dns解析是乙個網域名稱對應乙個ip位址,但是若我們用dns輪循技術即可將乙個網域名稱對應多個ip位址,這樣可以實現簡單且高效的負載平衡,但是輪循技術有乙個缺點就是當目標主機不可用時,不能自動的刪除,所以引出了要對業務主機的服務的可用性進行監控。具體流程是利用dnspython模組的res...
Python學習筆記 DNS網域名稱輪循業務監控
大部分的dns解析是乙個網域名稱對應乙個ip位址,但是通過dns輪循技術可將乙個網域名稱對應多個ip位址,這樣可以實現簡單且高效的負載平衡,但是輪循技術有乙個缺點就是當目標主機不可用時,不能自動的刪除,所以引出了要對業務主機的服務的可用性進行監控。本例通過分析當前網域名稱的解析ip,再結合服務埠探測...
python3 提取主網域名稱
一瓶水,兩包豆奶,乙個破站 一天。又是徘徊在 之間的一天。閒的很,這是我未完成的某個工具其中乙個函式。import re defgetwant url rewant re.compile a za z d rewant.findall url 這是阿里雲網域名稱字尾大全 我排除了一些太不常見的和中文...