來源:python運維技術
ID:python運維技術
在小型公司裡如果產品線單一的話,比如就一個app, 一般1~2個運維就夠用了,如果產品過於龐大,就需要多個運維人員,但對於多產品線的公司來說,運維人員就要必須分多個人負責,因為超過200個站點讓1個人維護,那工作量是巨大的,就單單給開發的溝通時間,估計就要佔用一整天時間了,目前我所在的公司站點非常多,為管理方便,之前我們這裡是實行過一段叫站長制的方式,就是不同人承擔不同的專案維護,每個人就是自己所負責專案的站長,這個站長制實行完後,就有個監控問題,之前只要站點有問題,是每個人都可以收到,但為了防止報警泛濫,所以就需要把監控改成故障站點只發給負責該站點的站長,有了這個背景,我們今天就來實現這個需求,指令碼基本實現首先要有一個能夠報警的函式,還需要一個檢查站點是否故障的函式,最後一個函式是如果站點恢復後,要重新加入要監控的串列中,到這基本差不多了,但如果站點太多,用迴圈去檢查還是效率太低了點,所以我們考慮採用執行緒併發執行, 如果都想清楚了,就可以開始著手我們程式碼的編寫了:
首先匯入我們所需要的模組:
from threading import Thread
import requests
import time
import smtplib
然後定義要檢查的站點串列和報警郵件傳送人:
clients = {“http://www.mindg.cn”:”xxx@xx.com”,
“http://www.google.com”:”gg@gg.com”,
“http://www.baidu.com”:”cc@cc.com”}
接下來實現檢查是否站點故障函式:
temp_dic = {}
def site_up():
while True:
for client, email in clients.items():
try:
r = requests.get(client)
if r.status_code == 200:
print client, ‘Site ok’
time.sleep(60)
else:
print client, ‘Site first registered as down – added to the “site down” monitoring’
temp_dic[client]=email
del clients[client]
except requests.ConnectionError:
print client, ‘Site first registered as down – added to the “site down” monitoring’
temp_dic[client]=email
del clients[client]
這個函式就是用requests檢查站點傳回的狀態碼,如果是200就認為正常,否則就把該站點加到臨時的一個字典中,然後從檢查字典中刪除該站點。
因為站點偶爾出現問題不代表是站點問題,也可能是網路抖動,所以重新檢查站點是否故障要等待一個固定時間,實現如下:
## site ‘down’ function
def site_down():
while True:
time.sleep(900)
for client, email in temp_dic.items():
try:
r = requests.get(client)
if r.status_code == 200:
print client, ‘Site is back up!!’
email_sender(‘Site back up!! ‘, email, client)
clients[client]=email
del temp_dic[client]
else:
email_sender(‘Site down!! ‘, email, client)
print client, ‘Site Currently down – email sent’
except requests.ConnectionError:
email_sender(‘Site down!! ‘, email, client)
print client, ‘Site Currently down – email sent’
這個函式就是從臨時字典中取出第一次檢查出有問題的站點,15分鐘後再次檢查,如果傳回200,就傳送郵件,並從臨時字典中移除,重新加入監控串列中,如果仍然未恢復,就要傳送報警郵件了。
最後,我們採用併發的方式執行函式:
t1 = Thread(target = site_up)
t2 = Thread(target = site_down)
t1.start()
t2.start()
如果到這裡就算結束這篇文章, 大家拿著指令碼肯定是不能執行的,因為少程式碼,有興趣的也可以sleep 2分鐘,仔細再看看,是否發現漏掉了什麼,是的,我還沒給出發報警郵件的函式程式碼,不但沒貼而且不妨告訴大家我是故意的,之所以沒直接給呢, 第一:是因為現在報警方式太多了,我建議大家在這個指令碼基礎上進行修改實現自己想要的報警方式,第二:就當是留個作業吧,畢竟多動手才能提高程式設計水平,其它不多說了,最重要的是第三點:請幫忙轉發,:), 呵呵。
《Linux雲端計算及運維架構師高薪實戰班》2018年08月27日即將開課中,120天衝擊Linux運維年薪30萬,改變速約~~~~
*宣告:推送內容及圖片來源於網路,部分內容會有所改動,版權歸原作者所有,如來源資訊有誤或侵犯權益,請聯絡我們刪除或授權事宜。
– END –
更多Linux好文請點選【閱讀原文】哦
↓↓↓