此文只說lvs監控,lvs+keepalived的部署,請參考我另外的文章。 python
http://yangrong.blog.51cto.com/6945369/1575909bash
lvs的每秒會話鏈接數ide
lvs的每秒包轉發數spa
lvs每秒轉發帶寬orm
VIP切換狀況server
keepalived進程的存活blog
主要彙報內容:進程
會話鏈接數,每秒包轉發數,每秒轉發帶寬,VIP值crontab
監控python腳本,採用zabbix_sender上報方式:圖片
# 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_status import os,commands,sys,time #變量定義---------------------- #從zabbix_agentd.conf中獲取server IP或hostname zabbix_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=10051 timestamp = int(time.time()) keepalived_vip=['192.168.1.100'] #指定VIP tmp_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,value with 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_cmd os.popen(send_data_cmd)
定時任務設置:
#crontab -l #zabbix_sender彙報lvs的監控信息 * * * * * /usr/bin/python/usr/local/lvsmonitor/lvs_status_sender.py >>/var/log/crontab.log2>&1
lvs_packets_sec,
lvs_bit_sec,
lvs_conns_se,
lvs_keepalived_vip_status,
keepalived,
在zabbix中建立一個lvs監控模板,建立五個名稱如上的監控項,鍵值以下圖所示:
3.1) lvs監控模板中item配置圖
3.2) lvs監控模板中tragger配置圖
此處對三個監控項進行報警設置
1) VIP有變更,不管從有到無或從無到有,有變更表明發生了切換,則告警
2) keepalived進程down掉告警
3) lvs每秒轉發請求大於5W,告警(這個依實際狀況判斷,若是遠遠高於正常請求值,表明有CC***)
一切設置好後,就能夠建立一臺監控主機,調用lvs監控模板,而後查看數據獲取是否正確。
若有問題,歡迎留言。