用过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