標籤:儲存 責任 ebs 下載進度條 資料包 bash 更新 chmod http重新導向
由於網路的問題,zabbix內建web模組用不了,後台研發2b,老是更新正式環境安裝包,導致一直出問題,老是給他們擦屁股,早說過這事,他們不配合,現在出問題了,挺爽,這鍋我表示不背,就找了pycurl這個模組寫個監控。
1234567891011121314151617181920212223242526 |
c = pycurl.Curl() #建立一個curl對象 c.setopt(pycurl.CONNECTTIMEOUT, 5) #串連的等待時間,設定為0則不等待 c.setopt(pycurl.TIMEOUT, 5) #請求逾時時間 c.setopt(pycurl.NOPROGRESS, 0) #是否屏蔽下載進度條,非0則屏蔽 c.setopt(pycurl.MAXREDIRS, 5) #指定HTTP重新導向的最大數 c.setopt(pycurl.FORBID_REUSE, 1) #完成互動後強制中斷連線,不重用 c.setopt(pycurl.FRESH_CONNECT,1) #強制擷取新的串連,即替代緩衝中的串連 c.setopt(pycurl.DNS_CACHE_TIMEOUT,60) #設定儲存DNS資訊的時間,預設為120秒 c.setopt(pycurl.URL, "http://www.baidu.com" ) #指定請求的URL c.setopt(pycurl.USERAGENT, "Mozilla/5.2 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50324)" ) #配置請求HTTP頭的User-Agent c.setopt(pycurl.HEADERFUNCTION, getheader) #將返回的HTTP HEADER定向到回呼函數getheader c.setopt(pycurl.WRITEFUNCTION, getbody) #將返回的內容定向到回呼函數getbody c.setopt(pycurl.WRITEHEADER, fileobj) #將返回的HTTP HEADER定向到fileobj檔案對象 c.setopt(pycurl.WRITEDATA, fileobj) #將返回的HTML內容定向到fileobj檔案對象 c.getinfo(pycurl.HTTP_CODE) #返回的HTTP狀態代碼 c.getinfo(pycurl.TOTAL_TIME) #傳輸結束所消耗的總時間 c.getinfo(pycurl.NAMELOOKUP_TIME) #DNS解析所消耗的時間 c.getinfo(pycurl.CONNECT_TIME) #建立串連所消耗的時間 c.getinfo(pycurl.PRETRANSFER_TIME) #從建立串連到準備傳輸所消耗的時間 c.getinfo(pycurl.STARTTRANSFER_TIME) #從建立串連到傳輸開始消耗的時間 c.getinfo(pycurl.REDIRECT_TIME) #重新導向所消耗的時間 c.getinfo(pycurl.SIZE_UPLOAD) #上傳資料包大小 c.getinfo(pycurl.SIZE_DOWNLOAD) #下載資料包大小 c.getinfo(pycurl.SPEED_DOWNLOAD) #平均下載速度 c.getinfo(pycurl.SPEED_UPLOAD) #平均上傳速度 c.getinfo(pycurl.HEADER_SIZE) #HTTP頭部大小 |
代碼如下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
#!/usr/bin/env python # __*__coding:utf8__*__ #Author:wangpengtai #Blog:http://wangpengtai.blog.51cto.com/ import pycurl import sys import StringIO #引用該模組的原因是:使用pycurl後會列印出頁面內容,我們不需要看到這個內容,只需要擷取頁面反饋資訊就行了,只能將其寫入緩衝中,目前沒找到好辦法,學藝不精,不會使用重新導向寫到os.devnull中,無奈初次下策。。。 #開始使用的是寫入臨時檔案,但是會有許可權問題,導致zabbix無法擷取到資料。 class WebStatus( object ): def __init__( self , url): self .url = url self .curl = pycurl.Curl() self .string = StringIO.StringIO() # 串連等待時間,0則不等待 self .curl.setopt(pycurl.CONNECTTIMEOUT, 5 ) # 逾時時間 self .curl.setopt(pycurl.TIMEOUT, 5 ) # 下載進度條,非0則屏蔽 self .curl.setopt(pycurl.NOPROGRESS, 1 ) # 指定HTTP重新導向最大次數 self .curl.setopt(pycurl.MAXREDIRS, 5 ) # 完成互動後強制中斷連線,不重用 self .curl.setopt(pycurl.FORBID_REUSE, 1 ) # 設定DNS資訊儲存時間,預設為120秒 self .curl.setopt(pycurl.DNS_CACHE_TIMEOUT, 60 ) # 佈建要求的Url self .curl.setopt(pycurl.URL, self .url) self .curl.setopt(pycurl.WRITEFUNCTION, self .string.write) #將頁面內容寫入緩衝 self .curl.perform() def request_value( self ): data = { "Http_code" : self .curl.getinfo(pycurl.HTTP_CODE), "Speed_download" : self .curl.getinfo(pycurl.SPEED_DOWNLOAD), "Connect_time" : self .curl.getinfo(pycurl.CONNECT_TIME), "Total_time" : self .curl.getinfo(pycurl.TOTAL_TIME), "Dnslookup_time" : self .curl.getinfo(pycurl.NAMELOOKUP_TIME), "Redirect_time" : self .curl.getinfo(pycurl.REDIRECT_TIME), "Redirect_count" : self .curl.getinfo(pycurl.REDIRECT_COUNT) } return data def __end__( self ): #釋放記憶體和串連,做一個有始有終,有責任心的營運狗 self .string.close() self .curl.close() if __name__ = = "__main__" : Usage = """ Usage: python web_monitor.py url [Http_code|Speed_download|Connect_time|Total_time|Dnslookup_time|Redirect_time|Redirect_count] """ try : url = sys.argv[ 1 ] request = sys.argv[ 2 ] try : s = WebStatus(url) try : print s.request_value()[request] except KeyError: print "Make sure 2nd argument is right!" except pycurl.error: print "Make sure the url is right or reachable!" except IndexError: print "Must be 2 arguments given!%s" % Usage |
驗證:www.baidu.com一直是我測(攻)試(擊)的對象板面的做法和配料
二、配置zabbix自訂監控
這個相對來說比較靈活,可以找一台機器專門用來做監控,只需要在這台機器上配置以下內容就可以監控多個URL了。
zabbix介面中可以配置一個模版,將其掛在該機器上就行了。
1、將代碼寫到下面目錄下並加上可執行許可權
1234 |
[[email protected] scripts] # pwd /etc/zabbix/scripts [[email protected] scripts] # vim web_monitor.py [[email protected] scripts] # chmod +x web_monitor.py |
2、配置zabbix_agentd.conf
12 |
[[email protected] scripts] # cat /etc/zabbix_agentd.conf UserParameter=web[*], /etc/zabbix/scripts/web_monitor .py $1 $2 |
3、重啟zabbix-agentd
1 |
[[email protected] scripts] # service zabbix-agentd restart |
三、配置zabbix監控
直接了,後續的添加就自由發揮了,好多傳回值可以出圖,可以做觸發器警示等。不多敘述了
Zabbix使用Pycurl模組監控web頁面狀態