y23335793 发表于 2018-12-29 09:01:26

Zabbix监控LVS状态及keepalived VIP漂移

  此文只说lvs监控,lvs+keepalived的部署,请参考我另外的文章。
  http://yangrong.blog.运维网.com/6945369/1575909
1、监控目标
  lvs的每秒会话连接数
  lvs的每秒包转发数
  lvs每秒转发带宽
  VIP切换情况
  keepalived进程的存活
2、zabbix_sender汇报脚本
  主要汇报内容:
  会话连接数,每秒包转发数,每秒转发带宽,VIP值
  监控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).strip()
zabbix_hostname=commands.getstatusoutput('''grep'^Hostname' %s|awk -F[=] '{print $2}' '''%zabbix_agent_file).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)
    #如果本机有VIP,则取出VIP的最后一段十进制。
         if int(lvs_keepalived_vip_status) != 0:
                   status,result_ip=commands.getstatusoutput(''' echo%s|awk -F '.' '{print $NF}' '''%keepalived_vip)
                   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>&13、zabbix server端监控项配置:
  lvs_packets_sec,
  lvs_bit_sec,
  lvs_conns_se,
  lvs_keepalived_vip_status,
  keepalived,
  在zabbix中创建一个lvs监控模板,创建五个名称如上的监控项,键值如下图所示:
  3.1) lvs监控模板中item配置图
http://s3.运维网.com/wyfs02/M02/6F/DF/wKioL1WseKLCe8l3AADSl4fZa3E281.jpg
  

  3.2) lvs监控模板中tragger配置图
  此处对三个监控项进行报警设置
  1) VIP有变动,无论从有到无或从无到有,有变动代表发生了切换,则告警
  2) keepalived进程down掉告警
  3) lvs每秒转发请求大于5W,告警(这个依实际情况判断,如果远远高于正常请求值,代表有CC***)
http://s3.运维网.com/wyfs02/M02/6F/E2/wKiom1WsdsGCWTgDAACoMLJ3z5k423.jpg
  

  

  一切设置好后,就可以创建一台监控主机,调用lvs监控模板,然后查看数据获取是否正确。
  如有问题,欢迎留言。
  




页: [1]
查看完整版本: Zabbix监控LVS状态及keepalived VIP漂移