Python之 實現基於網域名稱輪詢的業務監控的例項

2021-08-14 07:50:59 字數 1545 閱讀 1782

大部分的dns解析都是乙個網域名稱對應乙個ip位址,但是通過dns輪詢技術可以做到乙個網域名稱對應多個ip,從而實現最簡單且高效的負載平衡,不過此方案最大的弊端是目標主機不可用時無法被自動剔除,因此做好業務主機的服務可用監控至關重要。本例項通過分析當前網域名稱的解析ip,再結合服務埠探測實現自動監控,在網域名稱解析中新增、刪除ip時,無需對監控監本進行修改。

我們主要分為以下兩個步驟實現本例項:

1)實現網域名稱的解析,獲取網域名稱所有的記錄解析ip列表

2)對ip列表進行http級別的探測

具體**如下:

# -*- coding:utf-8 -*-

'''created on 2023年1月3日

#定義域名ip列表變數

iplist =

#定義業務網域名稱

#網域名稱解析函式,解析成功ip將被追加到iplist

def get_iplist(domain = ""):

try:

a = dns.resolver.query(domain, 'a')

except exception, e:

print "dns resolver error: " + str(e)

return

for i in a.response.answer:

for j in i.items:

#將ip追加到列表中

return true

#檢測ip是否能夠連通

def checkip(ip):

checkurl = ip+":80"

getcontent = ""

#定義http連線超時時間5秒

#建立http連線物件

#發起url請求,新增host主機頭

r = conn.getresponse()

getcontent = r.read(15)

finally:

#監控url頁的內容一般是事先定義好的,比如 「http200」等

print getcontent

if getcontent == "":

print ip + " [ok]"

else:

#此處可放告警程式,可以是郵件、簡訊通知

print ip + " [error]"

if __name__ == "__main__":

#條件:網域名稱正確解析並且至少返回乙個ip

for ip in iplist:

checkip(ip)

else:

print "dns resolver error."

我們可以將此python指令碼放入crontab執行計畫中,再結合告警程式,基本可以滿足基於網域名稱輪詢的業務監控。

基於HTTP的長輪詢簡單實現

web客戶端與伺服器之間基於ajax http 的常用通訊方式,分為短連線與長輪詢。短連線 客戶端和伺服器每進行一次http操作,就建立一次連線,任務結束就中斷連線。在長輪詢機制中,客戶端像傳統輪詢一樣從伺服器請求資料。然而,如果伺服器沒有可以立即返回給客戶端的資料,則不會立刻返回乙個空結果,而是保...

Python之實現聊天室

from socket import import threading s1 socket af inet,sock dgram localhost 192.168.2.216 8077 otherhost 192.168.2.216 8088 s1.bind localhost defmain p...

python基礎之實現float函式

本題只將字串型別的數字轉換為float資料 實現思路 重點是找到小數點的位置,然後除去相應的值,就能獲得對應的小數 實現float 只將字串轉換為float型別的資料 如 34.22 轉換為34.22 str int dict defmy float string string list strin...