zabbix如何监控WEB应用性能
HTTP服務目前最流行的互聯網應用之一,如何監控服務的健康狀態對系統運維來說至關重要。 ? Zabbix本身提供了對WEB應用程序的監控,比如監控WEB程序的Download Speed,Response Time和Response Code等性能指標,但是配置起來比較繁瑣和復雜。下面通過 python pycurl模塊來獲取HTTP響應時間,下載速度,狀態嗎等性能指標。然后通過zabbix trapper的方式來監控WEB應用的性能。 ? Zabbix trapper監控是客戶端收集監控數據,然后以zabbix_sender的方式發送給zabbix server或者proxy服務器。發送的數據主要包括zabbix server或者proxy主機名,監控項和值。zabbix_sender具體用法如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | [root@monitor]#?/usr/local/zabbix/bin/zabbix_sender?-help Zabbix?Sender?v2.2.3?(revision?44105)?(7?April?2014) usage:?zabbix_sender?[-Vhv]?{[-zpsI]?-ko?|?[-zpI]?-T?-i?<file>?-r}?[-c?<file>] Options: ??-c?--config?<file>???????????????????Absolute?path?to?the?configuration?file ??-z?--zabbix-server?<server>??????????Hostname?or?IP?address?of?Zabbix?server ??-p?--port?<server?port>??????????????Specify?port?number?of?server?trapper?running?on?the?server.?Default?is?10051 ??-s?--host?<hostname>?????????????????Specify?host?name.?Host?IP?address?and?DNS?name?will?not?work ??-I?--source-address?<IP?address>?????Specify?source?IP?address ??-k?--key?<key>???????????????????????Specify?item?key ??-o?--value?<key?value>???????????????Specify?value ??-i?--input-file?<input?file>?????????Load?values?from?input?file.?Specify?-?for?standard?input ???????????????????????????????????????Each?line?of?file?contains?whitespace?delimited:?<hostname>?<key>?<value> ???????????????????????????????????????Specify?-?in?<hostname>?to?use?hostname?from?configuration?file?or?--host?argument ??-T?--with-timestamps?????????????????Each?line?of?file?contains?whitespace?delimited:?<hostname>?<key>?<timestamp>?<value> ???????????????????????????????????????This?can?be?used?with?--input-file?option ???????????????????????????????????????Timestamp?should?be?specified?in?Unix?timestamp?format ??-r?--real-time???????????????????????Send?metrics?one?by?one?as?soon?as?they?are?received ???????????????????????????????????????This?can?be?used?when?reading?from?standard?input ??-v?--verbose?????????????????????????Verbose?mode,?-vv?for?more?details Other?options: ??-h?--help????????????????????????????Give?this?help ??-V?--version?????????????????????????Display?version?number |
? 下面是我用python寫的監控腳本,如果要監控多個網站,只需在list列表里面添加即可。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | [root@monitor?cron]#?cat?Check_HTTP_Response_Time.py #!/usr/bin/env?python #coding=utf-8 #Auth:david import?os import?sys import?fileinput import?pycurl import?logging hostname?=?"monitor" #IP?from?Zabbix?Server?or?proxy?where?data?should?be?send?to. zabbix_server?=?"192.168.100.200"? zabbix_sender?=?"/usr/local/zabbix/bin/zabbix_sender" #If?add?url?of?website,?please?update?list. list?=?['www.zmzblog.com','img.zmzblog.com'] #This?list?define?zabbix?key. key?=?['HTTP_ResSize','HTTP_ResTime','HTTP_ResCode','HTTP_ResSpeed'] #In?the?file?to?define?the?monitor?host,?key?and?value. log_file?=?"/tmp/HTTP_Response.log" logging.basicConfig(filename=log_file,level=logging.INFO,filemode='w') run_cmd="%s?-z?%s?-i?%s?>?/tmp/HTTP_Response.temp"?%?(zabbix_sender,zabbix_server,log_file) class?Test(): ????????def?__init__(self): ????????????????self.contents?=?'' ????????def?body_callback(self,buf): ????????????????self.contents?=?self.contents?+?buf def?Check_Http(URL): ????????t?=?Test() ????????#gzip_test?=?file("gzip_test.txt",?'w') ????????c?=?pycurl.Curl() ????????c.setopt(pycurl.WRITEFUNCTION,t.body_callback) ???????#請求采用Gzip傳輸 ????????#c.setopt(pycurl.ENCODING,?'gzip') ????try: ????????c.setopt(pycurl.CONNECTTIMEOUT,?60) ????????????c.setopt(pycurl.URL,URL) ????????????????c.perform() ????except?pycurl.error: ????????print?"URL?%s"?%?URL ????????? ????????Http_Document_size?=?c.getinfo(c.SIZE_DOWNLOAD) ????????Http_Download_speed?=?round((c.getinfo(pycurl.SPEED_DOWNLOAD)?/1024),2) ????????Http_Total_time?=?round((c.getinfo(pycurl.TOTAL_TIME)?*?1000),2) ????????Http_Response_code?=?c.getinfo(pycurl.HTTP_CODE) ????????? ????????logging.info(hostname?+'?'?+key[0]?+?'['?+?k?+?']'?+?'?'+str(Http_Document_size)) ????????logging.info(hostname?+'?'?+key[1]?+?'['?+?k?+?']'?+?'?'+str(Http_Total_time)) ????????logging.info(hostname?+'?'?+key[2]?+?'['?+?k?+?']'?+?'?'+str(Http_Response_code)) ????????logging.info(hostname?+'?'?+key[3]?+?'['?+?k?+?']'?+?'?'+str(Http_Download_speed)) ????? ????? def?runCmd(command): ????for?u?in?list: ????????????URL?=?u ????????global?k ????????if?u.startswith('https:'): ???????????k?=?u.split('/')[2] ????????else: ???????????????????k=u.split('/')[0] ????????????Check_Http(URL) ????for?line?in?fileinput.input(log_file,inplace=1): ????????print?line.replace('INFO:root:',''), ????return?os.system(command) runCmd(run_cmd) |
? 添加crontab,定期收集數據并發送給zabbix server服務器。
| 1 | */5?*?*?*?*?/zabbix/python/cron/Check_HTTP_Response.py |
? 然后在前端配置監控項,可以調用zabbix API批量添加監控項。下面以www.zmzblog.com為例來說明如何監控HTTP的響應時間。這里所有的監控類型都是Zabbix_trapper的方式。監控key HTTP_ResTime[www.zmzblog.com], HTTP_ResCode[www.zmzblog.com],HTTP_ResSize[www.zmzblog.com],HTTP_ResSpeed[www.zmzblog.com]分別表示HTTP的響應時間,狀態嗎,文檔大小和下載速度。
? 配置完監控項之后我們配置觸發器,因為現在網站的響應時間都是毫秒級別的,如果超過1000ms就報警。
? 下面分別展示一下HTTP響應時間和狀態碼,其它的下載速度和文檔大小就不展示了。
? HTTP響應狀態嗎。
?? 總結:WEB應用性能監控主要從下面兩個方面進行監控。
?? 1)HTTP的響應時間,隨著互聯網的發展,用戶體驗提升。網站的打開速度監控一定要快,至少要在毫秒級別。 ?? 2)HTTP的狀態嗎,實時監控網站的響應嗎是否正常,是否出現了404,500這樣的錯誤,這種錯誤是用戶無法忍受的,如果出現要第一時間解決。 ?? 3)由于網絡或者其它原因,為了減少誤報,建議用下面的觸發器,即檢測2次如果狀態嗎不為200或者大于400的時候報警。
? {Template HTTP Response:HTTP_ResCode[www.zmzblog.com].count(#2,200,”ne”)}=2 ? {Template HTTP Response:HTTP_ResCode[www.zmzblog.com].count(#2,400,”ge”)}=2
?
http://sfzhang88.blog.51cto.com/4995876/1826763
總結
以上是生活随笔為你收集整理的zabbix如何监控WEB应用性能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 冒泡排序--通过冒泡算法让数组中最大的值
- 下一篇: JBuilder中光标错位的解决办法