最近寫了乙個web測試程式,因為部署在其他地方,所以想弄個監控的程序去看服務是不是還在,要是不在好發郵件,就用python簡單的寫了乙個。
當然,有的時候也要考慮到監控程序本身就掛了,或者不想監控了。
首先監控指令碼是這樣,很簡單:
monitor.py
#-*-coding
'''簡單的monitor函式,主要監控乙個遠端服務是否還在
system 是乙個系統model'''
importtimeimportsysdefmonitor(system):
last_monitor_status=true
timeinterval=10
whiletrue:
is_active=check_system_status(system.env.env_ip,system.env.env_port,\
system.env.get_env_path())if is_active==false and last_monitor_status==true:'''system is down,do something'''
pass
elif is_active==true and last_monitor_status==false:'''system revover'''
pass
else:passlast_monitor_status=is_active
time.sleep(timeinterval)if __name__=="__main__":
system=sys.ar**[1]
monitor(system)
然後是監控的一些操作
control.py
#-*-coding:utf-8
importsubprocessimportosdefstartmonitor(system):'''通過subprocess去啟動監控'''monitorprocess=subprocess.popen(["python","monitor.py","".format(system)],\
shell=false,stdout=subprocess.pipe,stderr=subprocess.pipe)
output,error=monitorprocess.communicate(input=none)iferror:raiseruntimeerror,error
pid=monitorprocess.pidreturntruedefstopmonitor(pid):
kill_result=
kill_status=os.system("kill -9 ".format(pid))returnkill_result[kill_status]defcheckmonitorprocess(pid):
systemcmd="ps -ef|grep -v ''|awk ''|grep ".\
format(pid)
monitorstatus=os.system(systemcmd)return monitorstatus
用的話還是可以用的,服務發生異常都會傳送郵件,在實際執行中遇到過這樣的問題
1.通過subprocess去啟動monitor指令碼的時候,本來想通過comunicate()方法獲取output和error,如果啟動失敗,丟擲異常,確實當error有值的時候,會丟擲異常,但是當
error沒有的時候,本來應該正常啟動監控,但是實際上通過瀏覽器啟動的時候,本來啟動成功了,瀏覽器也載入完成,但是瀏覽器的http請求好像一直連著,當去掉communicate()方法後
又可以立即啟動,並且瀏覽器http載入完成,這個問題很苦惱,難道是因為我monitor指令碼是一直迴圈執行的原因嗎?但是我monitor是單獨啟動乙個程序去執行的,應該沒什麼關係麼
2.就是當我中止監控程序,想要檢查程序還在的時候,因為我是用kill -9 pid去殺程序,然後判斷程序號是不是還在,但是實際上當你立刻殺死程序的時候,還會有乙個的死程序在,要過會才會被**,所以通過grep去判斷的時候,要過濾掉這個。
ps:我猜這個程序應該是類似孤兒程序之類的吧,父程序被殺了,變孤兒了,然後過會由init**了。殭屍程序好像是子程序完成任務了,然後傳送訊息給父程序,但是父程序沒搭理,本來父程序退出以後,子程序也就退出了,但是偏偏父程序是乙個一直執行的程序,就導致了子程序沒事做,但又沒被**,就變成了殭屍程序,可以看出殭屍程序不幹活了,但是過多的話還是會占用資源,想要避免殭屍程序的乙個辦法就是把殭屍變成孤兒,要init去**。
python 系統監控
import yagmail import psutil def sendmail subject,contents 連線郵箱伺服器 yag yagmail.smtp user 郵箱位址 password 授權密碼 host smtp.163.com 傳送郵件 yag.send to 接收的郵箱位址...
turbine聚合監控 監控服務間呼叫和監控熔斷
hystrixdashboard 主要的功能是可以針對於某一項微服務進行監控,但是如果說現在有許多的微服務需要進行整體的監控,那 麼這種情況下就可以利用 turbine 技術來實現。com.netflix.turbine.monitor.instance.instancemonitor miscon...
python效能監控工具 Python效能監控
profiler是乙個程式,用來描述執行時的程式效能,並且從不同方面提供統計資料加以表述。python中含有3個模組提供這樣的功能,分別是cprofile,profile和pstats。這些分析器提供的是對python程式的確定性分析。同時也提供一系列的報表生成工具,允許使用者快速地檢查分析結果。p...