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具體用法如下:

[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列表裏面添加即可。

[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服務器。

*/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的響應時間,狀態嗎,文檔大小和下載速度。

wKiom1eImBvjU16VAAC6jIWlVho294.jpg-wh_50

  配置完監控項之後我們配置觸發器,因爲現在網站的響應時間都是毫秒級別的,如果超過1000ms就報警。

wKioL1eMoj_CL_QyAACf-OwRI5c591.jpg-wh_50

  下面分別展示一下HTTP響應時間和狀態碼,其它的下載速度和文檔大小就不展示了。

wKiom1eImG2gw04FAAKCu221shY490.jpg-wh_50

  HTTP響應狀態嗎。

wKioL1eImJTSNAMUAAHn2-OhACY730.jpg-wh_50

   總結: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






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章