Zabbix监控LVS状态及keepalived VIP漂移

简介:

此文只说lvs监控,lvs+keepalived的部署,请参考我另外的文章。 

http://yangrong.blog.51cto.com/6945369/1575909

1、监控目标

   lvs的每秒会话连接数

   lvs的每秒包转发数

   lvs每秒转发带宽

   VIP切换情况

   keepalived进程的存活

 

2zabbix_sender汇报脚本

主要汇报内容:

会话连接数,每秒包转发数,每秒转发带宽,VIP

 

监控python脚本,采用zabbix_sender上报方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# 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)

 

定时任务设置:

1
2
3
#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监控模板,然后查看数据获取是否正确。

如有问题,欢迎留言。







     本文转自杨云1028 51CTO博客,原文链接:http://blog.51cto.com/yangrong/1676312,如需转载请自行联系原作者




相关文章
|
2月前
|
监控 应用服务中间件 nginx
基于Zabbix的SLA监控体系构建与实践
本文由Zabbix社区专家褚凤彬分享,详解SLA在Zabbix中的应用。通过Trigger与Service联动,构建Web应用的多层级监控体系,并介绍SLA计算规则、维护期处理及升级注意事项,助力企业精准掌控服务可用性。
381 36
|
7月前
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
326 11
|
8月前
|
运维 监控 安全
【案例分享】中国通号卡斯柯公司:ZABBIX如何破解轨道交通监控难题
本文根据2023上海峰会上朱林贤的演讲整理,聚焦中国通号卡斯柯公司如何借助Zabbix实现轨道交通信号系统的智能化管理。作为中外合资企业,卡斯柯通过统一平台整合设备监控,大幅降低成本并提升灵活性,成功应用于国内外项目。文章探讨了传统监控系统的痛点、研发维护经验及国产化与开源技术挑战,为行业转型提供了宝贵启示。未来,开放协作将是推动轨道交通智能化发展的关键。
436 8
|
10月前
|
存储 缓存 监控
|
11月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
179 23
|
11月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
277 25
|
11月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
359 22
|
负载均衡 算法 Linux
LVS+Keepalived:实现高效软负载均衡的利器
本文介绍了如何使用LVS(Linux Virtual Server)和Keepalived搭建高可用负载均衡集群。LVS通过不同调度算法将请求转发给后端服务器,而Keepalived基于VRRP协议实现服务高可用,避免IP单点故障。具体步骤包括环境准备、安装配置ipvsadm和Keepalived、启动服务及测试。文中还详细解释了配置文件中的关键参数,并提供了故障转移测试方法。最后,文章简要对比了软件、硬件和云负载均衡方案的特点,帮助读者选择合适的负载均衡策略。
1731 4
|
10月前
|
负载均衡 网络协议 Linux
LVS,软负载均衡
LVS(Linux Virtual Server)是一项广泛应用的负载均衡技术,由章文嵩博士于1998年发起,自Linux 2.4.24版本起成为官方内核的一部分。LVS通过四层负载均衡技术实现高性能、高可用的服务器集群,支持多种调度算法和工作模式(如D-NAT、full-NAT、IP隧道、DR),适用于HTTP、数据库等应用。相比7层负载均衡器(如Nginx、HAProxy),LVS具有更高的并发处理能力和更低的资源消耗,适合大规模流量分发。本期文章详细介绍了LVS的工作原理、优势与不足,并对比了常见的负载均衡产品,帮助读者根据具体需求选择合适的解决方案。
1475 5
LVS,软负载均衡
|
负载均衡 网络协议 算法
LVS 负载均衡部署的三种模式 与搭建dr模式具体步骤
LVS 负载均衡部署的三种模式 与搭建dr模式具体步骤