用過varnish的對varnishstat確定不陌生。直接反應varnish當前運行的狀態,相比較這種當前狀態的展現,我更習慣看歷史曲線,因此我又將varnish與zabbix結合在一塊兒了。
python
首先,定義zabbix自定義監控
json
怎麼作,這就不詳細說了,能夠參考:http://shanks.blog.51cto.com/3899909/1310757 bash
我這隻把自定義腳本和zabbix-agent配置文件貼出來
ide
自定義腳本(varnish_stat)
spa
#!/usr/bin/python #monitor varnish3.0 status,use zabbix. # -*- coding: UTF-8 -*- import commands import sys import json def get_varnish_stat(type): varnishstat_cmd = commands.getoutput('/usr/bin/varnishstat -j') varnishstatus = json.loads(varnishstat_cmd) print varnishstatus[type]['value'] def show_help(): print ''' %s [segment] --------------------------- [segment:] N_struct_object varnish obj number. Client_requests_received number of client request. Cache_hits in all client requests ,hit in cache number. Cache_misses in all client requests ,not hit in cache number. N_expired_objects over time obj number. N_LRU_nuked_objects no free cache storage,to be moved obj number Total_header_bytes header bytes in all storage. Total_body_bytes body bytes in all storage. ''' % sys.argv[0] sys.exit(1) def main_(): if len(sys.argv) == 2: if (sys.argv[1]) == 'N_struct_object': get_varnish_stat('n_object') elif (sys.argv[1]) == 'Client_requests_received': get_varnish_stat('client_req') elif (sys.argv[1]) == 'Cache_hits': get_varnish_stat('cache_hit') elif (sys.argv[1]) == 'Cache_misses': get_varnish_stat('cache_miss') elif (sys.argv[1]) == 'N_expired_objects': get_varnish_stat('n_expired') elif (sys.argv[1]) == 'N_LRU_nuked_objects': get_varnish_stat('n_lru_nuked') elif (sys.argv[1]) == 'Total_header_bytes': get_varnish_stat('s_hdrbytes') elif (sys.argv[1]) == 'Total_body_bytes': get_varnish_stat('s_bodybytes') else: show_help() else: show_help() main_()
zabbix-agentd配置文件(只包含varnish自定義監控部分)
blog
# ***For Varnish*** UserParameter=varnish.stat[*],/usr/bin/python /usr/local/zabbix/script/varnish/varnish_stat $1
效果展現
ip