首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ZABBIX 4.2中的设备依赖性

ZABBIX 4.2中的设备依赖性
EN

Stack Overflow用户
提问于 2019-05-23 21:08:39
回答 2查看 723关注 0票数 0

假设使用Zabbix 4.2的场景如下。我们有一个核心交换机,两个分布式交换机和20个接入交换机,其中分布式交换机连接到核心,10个接入交换机连接到每个分布式交换机。我正在使用SNMP v2c和cisco交换机模板(官方交换机)监控所有这些交换机。现在问题出现了,因为我不能很容易地在zabbix中定义设备依赖。简单地说,我的意思是,如果分布式交换机发生故障,我希望为该设备设置警报,而不是为连接到该设备的所有接入交换机设置警报。我可以这样定义它。更改每个设备的触发器,并使其依赖于分布式交换机的相应触发器。然而,这太耗时了。我该怎么办?任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

发布于 2019-05-24 03:47:57

你是对的,没有一种简单的方法来设置这种依赖关系。

不久前我不得不处理同样的情况,我写了一个python依赖设置器,它使用“依赖主机组<-->主主机”逻辑。

您可以修改它以满足您的需要(请参阅依赖目标的masterTargetTriggerDescriptionslaveTargetTriggerDescription ),它可以工作,但包含很少的错误检查:使用风险自负!

代码语言:javascript
运行
复制
import csv
import re
import json
from zabbix.api import ZabbixAPI

# Zabbix Server endpoint
zabbixServer    = 'https://yourzabbix/zabbix/'
zabbixUser      = 'admin'
zabbixPass      = 'zabbix'
zapi = ZabbixAPI(url=zabbixServer, user=zabbixUser, password=zabbixPass)

# Hostgrop variables - to reference IDs while building API parameters
hostGroupNames  = []    # list = array
hostGroupId     = {}    # dict = associative array

# Csv file for dep settings - see the format:
"""
Hostgroup;Master
ACCESS_1;DistSwitch1
ACCESS_2;DistSwitch1
ACCESS_5;DistSwitch2
ACCESS_6;DistSwitch2
DIST;CoreSwitch1
"""
fileName        = 'dependancy.csv'
masterTargetTriggerDescription = '{HOST.NAME} is unavailable by ICMP'
slaveTargetTriggerDescription = '{HOST.NAME} is unavailable by ICMP|Zabbix agent on {HOST.NAME} is unreachable'

# Read CSV file
hostFile = open(fileName)
hostReader = csv.reader(hostFile, delimiter=';', quotechar='|')
hostData = list(hostReader)

# CSV Parsing
for line in hostData:
    hostgroupName = line[0]
    masterName = line[1]
    slaveIds = []

    masterId = zapi.get_id('host', item=masterName, with_id=False, hostid=None)
    hostGroupId = zapi.get_id('hostgroup', item=hostgroupName, with_id=False, hostid=None)
    masterTriggerObj = zapi.trigger.get(hostids=masterId, filter=({'description': masterTargetTriggerDescription}) )

    print "Group: " + hostgroupName + " - ID: " + str(hostGroupId)
    print "Master host: " + masterName + " - ID: " + str(masterId)
    print "Master trigger: " + masterTriggerObj[0]['description'] + " - ID: " + str(masterTriggerObj[0]['triggerid'])


    # cycle through slave hosts
    hostGroupObj = zapi.hostgroup.get(groupids=hostGroupId, selectHosts='extend')
    for host in hostGroupObj[0]['hosts']:

        #exclude master
        if host['hostid'] != str(masterId):
            print "  - Host Name: " + host['name'] + " - ID:  " + host['hostid'] + " - MASTER: " + str(masterId)

            # cycle for all slave's triggers
            slaveTargetTriggerObj = zapi.trigger.get(hostids=host['hostid'])
            #print json.dumps(slaveTargetTriggerObj)
            for slaveTargetTrigger in slaveTargetTriggerObj:
                # search for dependancy targets
                if re.search(slaveTargetTriggerDescription, slaveTargetTrigger['description'] ,re.IGNORECASE):
                    print "    - Trigger: " + slaveTargetTrigger['description'] + " - ID: " + slaveTargetTrigger['triggerid']
                    # Clear existing dep. from the trigger, then create the new dep.
                    clear = zapi.trigger.deletedependencies(triggerid=slaveTargetTrigger['triggerid'].encode())
                    result = zapi.trigger.adddependencies(triggerid=slaveTargetTrigger['triggerid'].encode(), dependsOnTriggerid=masterTriggerObj[0]['triggerid'])


    print "----------------------------------------"
    print ""
票数 1
EN

Stack Overflow用户

发布于 2020-05-21 07:17:46

我更新了Simone Zabberoni贡献的代码,并重写了它以使用Python3、PyZabbix和YAML。

代码语言:javascript
运行
复制
#!/usr/bin/python3
import re
import yaml
#https://pypi.org/project/py-zabbix/
from pyzabbix import ZabbixAPI

# Zabbix Server endpoint
zabbix_server    = 'https://zabbix.example.com/zabbix/'
zabbix_user      = 'zbxuser'
zabbix_pass      = 'zbxpassword'

# Create ZabbixAPI class instance
zapi = ZabbixAPI(zabbix_server)
# Enable HTTP auth
zapi.session.auth = (zabbix_user, zabbix_pass)

# Login (in case of HTTP Auth, only the username is needed, the password, if passed, will be ignored)
zapi.login(zabbix_user, zabbix_pass)

# Hostgrop variables - to reference IDs while building API parameters
hostGroupNames  = []    # list = array
hostGroupId     = {}    # dict = associative array
# yaml file for dep settings - see the format:
"""
pvebar16 CTs:
  master: pvebar16.example.com
  masterTargetTriggerDescription: 'is unavailable by ICMP'
  slaveTargetTriggerDescription: 'is unavailable by ICMP|Zabbix agent is unreachable for 5 minutes'
"""
fileName        = 'dependancy.yml'

with open('dependancy.yml') as f:
    hostData = yaml.load(f)

for groupyml in hostData.keys():
    masterTargetTriggerDescription = hostData[groupyml]['masterTargetTriggerDescription']
    slaveTargetTriggerDescription = hostData[groupyml]['slaveTargetTriggerDescription']
    masterName = hostData[groupyml]['master']
    hostgroupName = groupyml

    slaveIds = []

    masterId = zapi.host.get(filter={'host': masterName},output=['hostid'])[0]['hostid']
    hostGroupId = zapi.hostgroup.get(filter={'name': hostgroupName},output=['groupid'])[0]['groupid']
    masterTriggerObj = zapi.trigger.get(host=masterName, filter={'description': masterTargetTriggerDescription}, output=['triggerid','description'])

    print("Group: " + hostgroupName + " - ID: " + str(hostGroupId))
    print("Master host: " + masterName + " - ID: " + str(masterId))
    print("Master trigger: " + masterTriggerObj[0]['description'] + " - ID: " + str(masterTriggerObj[0]['triggerid']))

    # cycle through slave hosts
    hostGroupObj = zapi.hostgroup.get(groupids=hostGroupId, selectHosts='extend')
    for host in hostGroupObj[0]['hosts']:
        #exclude master
        if host['hostid'] != str(masterId):
            print("  - Host Name: " + host['name'] + " - ID:  " + host['hostid'] + " - MASTER: " + str(masterId))
            # cycle for all slave's triggers
            slaveTargetTriggerObj = zapi.trigger.get(hostids=host['hostid'])
            for slaveTargetTrigger in slaveTargetTriggerObj:
                # search for dependancy targets
                if re.search(slaveTargetTriggerDescription, slaveTargetTrigger['description'] ,re.IGNORECASE):
                    print("    - Trigger: " + slaveTargetTrigger['description'] + " - ID: " + slaveTargetTrigger['triggerid'])
                    # Clear existing dep. from the trigger, then create the new dep.
                    clear = zapi.trigger.deletedependencies(triggerid=slaveTargetTrigger['triggerid'])
                    result = zapi.trigger.adddependencies(triggerid=slaveTargetTrigger['triggerid'], dependsOnTriggerid=masterTriggerObj[0]['triggerid'])
    print("----------------------------------------")
    print("")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56275984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档