Зависимость от устройства в ZABBIX 4.2 - PullRequest
0 голосов
/ 23 мая 2019

Предположим следующий сценарий использования Zabbix 4.2.У нас есть основной коммутатор, два распределенных коммутатора и 20 коммутаторов доступа, где распределенные коммутаторы подключены к ядру, и 10 коммутаторов доступа подключены к каждому распределенному коммутатору.Я наблюдаю за всеми из них с помощью SNMP v2c и с помощью шаблонов коммутаторов Cisco (официальный).Теперь возникает проблема, поскольку я не могу легко определить зависимость устройства в zabbix.Проще говоря, я имею в виду, что если распределенный коммутатор отключается, я хочу иметь сигнал тревоги для этого устройства, а не для всех подключенных к нему коммутаторов доступа.Я мог бы определить это следующим образом.Измените триггеры для каждого устройства и сделайте их зависимыми от соответствующего триггера для распределенных коммутаторов.Однако это слишком много времени.Что я должен делать?Любая помощь приветствуется.

1 Ответ

1 голос
/ 23 мая 2019

Вы правы, не существует простого способа установить такую ​​зависимость.

Мне пришлось управлять той же ситуацией некоторое время назад, и я написал установщик зависимостей Python, который использует логику "зависимая группа хостов <-> главный хост".

Вы можете изменить ее так, чтобы она подходилаваши потребности (см. masterTargetTriggerDescription и slaveTargetTriggerDescription для целей зависимости), это работает, но содержит небольшую проверку ошибок: используйте на свой страх и риск!

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 ""
...