1. 程式人生 > >Zabbix監控LVS狀態及keepalived

Zabbix監控LVS狀態及keepalived

1、監控目標

   lvs的每秒會話連線數

   lvs的每秒包轉發數

   lvs每秒轉發頻寬

   VIP切換情況

   keepalived程序的存活

2zabbix_sender彙報指令碼

主要彙報內容:

會話連線數,每秒包轉發數,每秒轉發頻寬,VIP

監控python指令碼,採用zabbix_sender上報方式:

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556# cat/usr/local/lvsmonitor/lvs_status_sender.py#!/usr/bin/env python
#coding=utf-8#date 2015-7-8#auth :yangr#function:彙報lvs的相關狀態,有每秒連線數,每秒轉發數,VIP主從切換.每秒轉發頻寬#lvs_conns_sec,lvs_packets_sec,keepalived_vip_statusimport os,commands,sys,time#變數定義----------------------#從zabbix_agentd.conf中獲取server IP或hostnamezabbix_agent_file='/usr/local/zabbix/etc/zabbix_agentd.conf'if notos.path.exists(zabbix_agent_file):
sys.exit(4)zabbix_server=commands.getstatusoutput('''grep'^ServerActive' %s|awk -F[=] '{print $2}' '''%zabbix_agent_file)[1].strip()zabbix_hostname=commands.getstatusoutput('''grep'^Hostname' %s|awk -F[=] '{print $2}' '''%zabbix_agent_file)[1].strip()if not zabbix_server or notzabbix_hostname:sys.exit()
zabbix_server_port=10051timestamp = int(time.time())keepalived_vip=['192.168.1.100']  #指定VIPtmp_file_path='/tmp/lvs_status.txt'   #指定監控值輸出檔案#-------------------------def monit_lvs():#獲取每秒包轉發數status,lvs_packets_sec=commands.getstatusoutput('''tail -1/proc/net/ip_vs_stats | /usr/bin/awk '{print strtonum("0x"$1),strtonum("0x"$2), strtonum("0x"$3), strtonum("0x"$4),strtonum("0x"$5)}'|awk '{print $2}' ''')#獲取每秒轉發的流量status,lvs_bit_sec=commands.getstatusoutput('''tail -1/proc/net/ip_vs_stats | /usr/bin/awk '{print strtonum("0x"$1),strtonum("0x"$2), strtonum("0x"$3),strtonum("0x"$4), strtonum("0x"$5)}'|awk '{print $4}' ''')#獲取lvs會話連線數status,lvs_conns_sec=commands.getstatusoutput('wc -l/proc/net/ip_vs_conn')#獲取VIP狀態,如值非0為master,為0則是backup,如果有變動,則進行了切換status,lvs_keepalived_vip_status=commands.getstatusoutput('/sbin/ipaddr |grep %s |wc -l'%keepalived_vip[0])#如果本機有VIP,則取出VIP的最後一段十進位制。if int(lvs_keepalived_vip_status) != 0:status,result_ip=commands.getstatusoutput(''' echo%s|awk -F '.' '{print $NF}' '''%keepalived_vip[0])try:lvs_keepalived_vip_status =int(result_ip)except:pass#把 key值資訊寫到一個臨時檔案,格式為 hostname,key,timestamp,valuewith open(tmp_file_path,'wb') as f:f.write('%s %s %s %s\n'%(zabbix_hostname,'lvs_packets_sec',timestamp,lvs_packets_sec))f.write('%s %s %s %s\n'%(zabbix_hostname,'lvs_bit_sec',timestamp,lvs_bit_sec))f.write('%s %s %s %s\n'%(zabbix_hostname,'lvs_conns_sec',timestamp,lvs_packets_sec))f.write('%s %s %s %s\n'%(zabbix_hostname,'lvs_keepalived_vip_status',timestamp,lvs_keepalived_vip_status))if __name__=='__main__':monit_lvs()#把臨時檔案通過zabbix_sender命令傳送到server端send_data_cmd='/usr/local/zabbix/bin/zabbix_sender -vv -z %s-p %s -T -i %s'%(zabbix_server,zabbix_server_port,tmp_file_path)#print send_data_cmdos.popen(send_data_cmd)

 定時任務設定:

123#crontab -l#zabbix_sender彙報lvs的監控資訊* * * * * /usr/bin/python/usr/local/lvsmonitor/lvs_status_sender.py >>/var/log/crontab.log2>&1

3zabbix server端監控項配置:

lvs_packets_sec,

lvs_bit_sec, 

lvs_conns_se,

lvs_keepalived_vip_status,

keepalived,

zabbix中建立一個lvs監控模板,建立五個名稱如上的監控項,鍵值如下圖所示:

 3.1) lvs監控模板中item配置圖

wKioL1WseKLCe8l3AADSl4fZa3E281.jpg

 3.2) lvs監控模板中tragger配置圖

此處對三個監控項進行報警設定

  1 VIP有變動,無論從有到無或從無到有,有變動代表發生了切換,則告警

  2 keepalived程序down掉告警

  3 lvs每秒轉發請求大於5W,告警(這個依實際情況判斷,如果遠遠高於正常請求值,代表有CC***)

wKiom1WsdsGCWTgDAACoMLJ3z5k423.jpg

一切設定好後,就可以建立一臺監控主機,呼叫lvs監控模板,然後檢視資料獲取是否正確。