Zabbix監控LVS狀態及keepalived
阿新 • • 發佈:2019-02-01
1、監控目標
lvs的每秒會話連線數
lvs的每秒包轉發數
lvs每秒轉發頻寬
VIP切換情況
keepalived程序的存活
2、zabbix_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_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) |
定時任務設定:
123 | #crontab -l #zabbix_sender彙報lvs的監控資訊 * * * * * /usr/bin/python/usr/local/lvsmonitor/lvs_status_sender .py >> /var/log/crontab .log2>&1 |
3、zabbix server端監控項配置:
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監控模板,然後檢視資料獲取是否正確。