Zabbix使用Pycurl模組監控web頁面狀態

來源:互聯網
上載者:User

標籤:儲存   責任   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-Agentc.setopt(pycurl.HEADERFUNCTION, getheader)   #將返回的HTTP HEADER定向到回呼函數getheaderc.setopt(pycurl.WRITEFUNCTION, getbody)      #將返回的內容定向到回呼函數getbodyc.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 pycurlimport sysimport 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:            = 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.confUserParameter=web[*],/etc/zabbix/scripts/web_monitor.py $1 $2

 

3、重啟zabbix-agentd

1 [[email protected] scripts]# service zabbix-agentd restart

三、配置zabbix監控

直接了,後續的添加就自由發揮了,好多傳回值可以出圖,可以做觸發器警示等。不多敘述了

 

Zabbix使用Pycurl模組監控web頁面狀態

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.