zabbix 监控LVS(实例)

简介: /etc/zabbix/zabbix_agentd.confUnsafeUserParameters=1UserParameter=ipvsadm.activeconn[],/etc/zabbix/ipvsadm.

/etc/zabbix/zabbix_agentd.conf

UnsafeUserParameters=1
UserParameter=ipvsadm.activeconn[],/etc/zabbix/ipvsadm.py active 12 3 UserParameter=ipvsadm.inactconn[*],/etc/zabbix/ipvsadm.py inactive1 23
UserParameter=ipvsadm.weight[
],/etc/zabbix/ipvsadm.py weight 12 $3
UserParameter=ipvsadm.discovery,/etc/zabbix/ipvsadm_discover.sh

vi /etc/zabbix/ipvsadm_discover.sh

!/bin/bash

SVC_FLG=1
END_FLG=0
IFS=$'\n'

echo '{"data":['

for LINE in sudo /usr/sbin/ipvsadm -Ln
do

echo ${LINE}

    TYPE=`echo ${LINE} | awk '{print $1}'`
    IP_INFO=`echo ${LINE} | awk '{print $2}'`
    if [ ${END_FLG} != 0 ] ; then
            echo ", "
            END_FLG=0
    fi
    if [ "${TYPE}" = "TCP" -o "${TYPE}" = "UDP" ] ; then
            CUR_TYPE=${TYPE}
            CUR_IP_INFO=${IP_INFO}
            SVC_FLG=0
    elif [ "${TYPE}" = "->" -a ${SVC_FLG} = 0 ] ; then
            echo -n "{\"{#VTYPE}\":\"${CUR_TYPE}\",\"{#VIPINFO}\":\"${CUR_IP_INFO}\",\"{#RIPINFO}\":\"${IP_INFO}\"}"
            END_FLG=1
    fi

done
echo "]}"

vi /etc/zabbix/ipvaadm.py

!/bin/env python

-- coding: utf-8 --

usage: ipvsadm.py acctiveconn tcp 172.18.0.12:80 172.17.0.22:80

import sys

def parserArgs(args):
p = dict()
if args[1] not in ('active', 'inactive', 'weight') :
print 'type error'
sys.exit(1)
p['type'] = args[1]
p['proto'] = args[2].upper()
vip = args[3].split(':')
p['vipHex'] = ipToHexStr(vip[0])
p['vipPort'] = '%04X' % int(vip[1])
rip = args[4].split(':')
p['ripHex'] = ipToHexStr(rip[0])
p['ripPort'] = '%04X' % int(rip[1])
#print p
return p

def ipToHexStr(ip):
buf=list()
for i in ip.split('.'):
buf.append('%02X' % int(i))

return "".join(buf)

def findData(args):
vip = "%s %s:%s" % (args['proto'], args['vipHex'], args['vipPort'])
rip = " -> %s:%s" % (args['ripHex'], args['ripPort'])
vipStr = None
result = None
for line in file("/proc/net/ip_vs"):
if line.startswith(vip):
vipStr = True
continue
if vipStr is True and line.startswith(rip):
break
# -> AC110016:0050 Masq 1 10 157
import re
values = re.split('\s+', line)
#print values
# ['', '->', 'AC110016:0050', 'Masq', '1', '0', '0', '']
result = dict()
result['weight'] = values[4]
result['active'] = values[5]
result['inactive'] = values[6]
return result[args['type']]

if name == "main":
args = parserArgs(sys.argv)
print findData(args)

导入模板 zb_template.xml

<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>3.2</version>
<date>2018-12-21T02:33:10Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template App LVS</template>
<name>Template App LVS</name>
<description/>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>LVS</name>
</application>
</applications>
<items/>
<discovery_rules>
<discovery_rule>
<name>ipvsadm Service</name>
<type>0</type>
<snmp_community/>
<snmp_oid/>
<key>ipvsadm.discovery</key>
<delay>30</delay>
<status>0</status>
<allowed_hosts/>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<delay_flex/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<filter>
<evaltype>0</evaltype>
<formula/>
<conditions/>
</filter>
<lifetime>30</lifetime>
<description/>
<item_prototypes>
<item_prototype>
<name>Active Connections on {#RIPINFO} for {#VIPINFO} {#VTYPE}</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>ipvsadm.activeconn[{#VTYPE},{#VIPINFO},{#RIPINFO}]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>LVS</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<application_prototypes/>
</item_prototype>
<item_prototype>
<name>InActive Connections on {#RIPINFO} for {#VIPINFO} {#VTYPE}</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>ipvsadm.inactconn[{#VTYPE},{#VIPINFO},{#RIPINFO}]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>LVS</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<application_prototypes/>
</item_prototype>
<item_prototype>
<name>Balance Weight on {#RIPINFO} for {#VIPINFO} {#VTYPE}</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>ipvsadm.weight[{#VTYPE},{#VIPINFO},{#RIPINFO}]</key>
<delay>30</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>LVS</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<application_prototypes/>
</item_prototype>
</item_prototypes>
<trigger_prototypes>
<trigger_prototype>
<expression>{Template App LVS:ipvsadm.weight[{#VTYPE},{#VIPINFO},{#RIPINFO}].last()}<1</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>No Weight to {#RIPINFO}</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>2</priority>
<description/>
<type>0</type>
<manual_close>0</manual_close>
<dependencies/>
<tags/>
</trigger_prototype>
</trigger_prototypes>
<graph_prototypes>
<graph_prototype>
<name>Balance Weight {#RIPINFO} for {#VIPINFO} {#VTYPE}</name>
<width>900</width>
<height>200</height>
<yaxismin>0.0000</yaxismin>
<yaxismax>100.0000</yaxismax>
<show_work_period>1</show_work_period>
<show_triggers>1</show_triggers>
<type>0</type>
<show_legend>1</show_legend>
<show_3d>0</show_3d>
<percent_left>0.0000</percent_left>
<percent_right>0.0000</percent_right>
<ymin_type_1>0</ymin_type_1>
<ymax_type_1>0</ymax_type_1>
<ymin_item_1>0</ymin_item_1>
<ymax_item_1>0</ymax_item_1>
<graph_items>
<graph_item>
<sortorder>0</sortorder>
<drawtype>0</drawtype>
<color>1A7C11</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template App LVS</host>
<key>ipvsadm.weight[{#VTYPE},{#VIPINFO},{#RIPINFO}]</key>
</item>
</graph_item>
</graph_items>
</graph_prototype>
<graph_prototype>
<name>Connections Statictics on {#RIPINFO} for {#VIPINFO} {#VTYPE}</name>
<width>900</width>
<height>200</height>
<yaxismin>0.0000</yaxismin>
<yaxismax>100.0000</yaxismax>
<show_work_period>1</show_work_period>
<show_triggers>1</show_triggers>
<type>0</type>
<show_legend>1</show_legend>
<show_3d>0</show_3d>
<percent_left>0.0000</percent_left>
<percent_right>0.0000</percent_right>
<ymin_type_1>0</ymin_type_1>
<ymax_type_1>0</ymax_type_1>
<ymin_item_1>0</ymin_item_1>
<ymax_item_1>0</ymax_item_1>
<graph_items>
<graph_item>
<sortorder>0</sortorder>
<drawtype>0</drawtype>
<color>1A7C11</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template App LVS</host>
<key>ipvsadm.activeconn[{#VTYPE},{#VIPINFO},{#RIPINFO}]</key>
</item>
</graph_item>
<graph_item>
<sortorder>1</sortorder>
<drawtype>0</drawtype>
<color>2774A4</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template App LVS</host>
<key>ipvsadm.inactconn[{#VTYPE},{#VIPINFO},{#RIPINFO}]</key>
</item>
</graph_item>
</graph_items>
</graph_prototype>
</graph_prototypes>
<host_prototypes/>
</discovery_rule>
</discovery_rules>
<httptests/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
</zabbix_export>

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