Приветствую, коллеги!
Имеется PDU APC7953. В SNMP дереве у неё следующая обстановка наблюдается:
делаем snmpwalk .1.3.6.1.4.1.318.1.1.12.2 и получаем следующий результат:
Обратите внимание на следующие OIDs:
rPDULoadDevBankIndex - Это нумерация элементов DevBank, которые хранят характеристики банков питания.
rPDULoadDevBankNumber - указывает какому физическому банку питания соответствует каждая сущность DevBank.
rPDULoadStatusIndex - это нумерация элементов статуса Status, которые хранят информацию о текущем состоянии нагрузки на банки питания.
rPDULoadStatusBankNumber - указывает какому физическому банку питания соответствует информация о статусе.
Я хочу используя эту информацию настроить мониторинг таким образом, чтобы заббикс оповещал, когда нагрузка на каждый банк подходит к его максимальной нагрузке. Для этого надо взять rPDULoadDevBankMaxLoad и сравить его значение с rPDULoadStatusLoad.
Правило обнаружения выглядит так:
Так же создал пару прототипов элементов данных, в соответствии с задачей:


Данные собираются в следующем виде:

А теперь прикол!
Если идти в порядке нумерации, то элементы DevBank (см. rPDULoadDevBankNumber) соответствуют следующим банкам (в порядке нумерации) - Банк 1, Банк 2, Банк 3.
А элементы Status (см. rPDULoadStatusBankNumber) - Банк 0, Банк 1, Банк 2.
Значит я не могу их связать по {#SNMPINDEX}, т.к. данные будут принадлежать разным сущностям!
Причём Банк 0 и Банк 3 - это одно и то же (прим. - хранят суммированные данные обо всех банках).
И так оно и есть, на скриншоте с Latest Data Bank#3 Max Load показывает 32 (это сумма по всем имеющимся банкам), а Status#3 Bank Load показывает 2,5А, что по факту соответствует нагрузке на второй банк. А суммированная нагрузка выводится в Status#1 Bank Load и равна 5.1А.
Получается, чтобы их связать надо сдвинуть нумерацию STATUSINDEX: вместо 1, 2, 3 сделать 3, 1, 2 (переместить суммированный показатель на третье место, как у DevBank), тогда всё будет в соответствии.
Реализовал следующие правила предобработки:

Тестирую и в процессе теста всё работает как задумано:

Исходный результат LLD:
LLD после правил предобработки:
В общем вроде как всё хорошо, {#STATUSINDEX} номера поменялись, они используются в элементах данных, именно под этим номером, значит и данные должны поменяться... но в Latest Data изменений вообще никаких нет!
Не пойму что я делаю не так, вроде всё правильно же сделал. Подскажите как ещё отдебажить можно эту штуку, уже третий день с ней маюсь и уже чисто из спортивного интереса хочу реализовать именно так.
Имеется PDU APC7953. В SNMP дереве у неё следующая обстановка наблюдается:
делаем snmpwalk .1.3.6.1.4.1.318.1.1.12.2 и получаем следующий результат:
Code:
PowerNet-MIB::rPDULoadDevMaxPhaseLoad.0 = INTEGER: 0 PowerNet-MIB::rPDULoadDevNumPhases.0 = INTEGER: 1 PowerNet-MIB::rPDULoadDevMaxBankLoad.0 = INTEGER: 32 PowerNet-MIB::rPDULoadDevNumBanks.0 = INTEGER: 2 PowerNet-MIB::rPDULoadDevBankTableSize.0 = INTEGER: 3 PowerNet-MIB::rPDULoadDevBankIndex.1 = INTEGER: 1 PowerNet-MIB::rPDULoadDevBankIndex.2 = INTEGER: 2 PowerNet-MIB::rPDULoadDevBankIndex.3 = INTEGER: 3 PowerNet-MIB::rPDULoadDevBankNumber.1 = INTEGER: 1 PowerNet-MIB::rPDULoadDevBankNumber.2 = INTEGER: 2 PowerNet-MIB::rPDULoadDevBankNumber.3 = INTEGER: 3 PowerNet-MIB::rPDULoadDevBankMaxLoad.1 = INTEGER: 16 PowerNet-MIB::rPDULoadDevBankMaxLoad.2 = INTEGER: 16 PowerNet-MIB::rPDULoadDevBankMaxLoad.3 = INTEGER: 32 PowerNet-MIB::rPDULoadDevMaxOutletTableSize.0 = INTEGER: 0 PowerNet-MIB::rPDULoadStatusIndex.1 = INTEGER: 1 PowerNet-MIB::rPDULoadStatusIndex.2 = INTEGER: 2 PowerNet-MIB::rPDULoadStatusIndex.3 = INTEGER: 3 PowerNet-MIB::rPDULoadStatusLoad.1 = Gauge32: 50 PowerNet-MIB::rPDULoadStatusLoad.2 = Gauge32: 24 PowerNet-MIB::rPDULoadStatusLoad.3 = Gauge32: 24 PowerNet-MIB::rPDULoadStatusLoadState.1 = INTEGER: phaseLoadNormal(1) PowerNet-MIB::rPDULoadStatusLoadState.2 = INTEGER: phaseLoadNormal(1) PowerNet-MIB::rPDULoadStatusLoadState.3 = INTEGER: phaseLoadNormal(1) PowerNet-MIB::rPDULoadStatusPhaseNumber.1 = INTEGER: 1 PowerNet-MIB::rPDULoadStatusPhaseNumber.2 = INTEGER: 1 PowerNet-MIB::rPDULoadStatusPhaseNumber.3 = INTEGER: 1 PowerNet-MIB::rPDULoadStatusBankNumber.1 = INTEGER: 0 PowerNet-MIB::rPDULoadStatusBankNumber.2 = INTEGER: 1 PowerNet-MIB::rPDULoadStatusBankNumber.3 = INTEGER: 2 PowerNet-MIB::rPDULoadBankConfigIndex.1 = INTEGER: 1 PowerNet-MIB::rPDULoadBankConfigIndex.2 = INTEGER: 2 PowerNet-MIB::rPDULoadBankConfigIndex.3 = INTEGER: 3 PowerNet-MIB::rPDULoadBankConfigLowLoadThreshold.1 = INTEGER: 0 PowerNet-MIB::rPDULoadBankConfigLowLoadThreshold.2 = INTEGER: 0 PowerNet-MIB::rPDULoadBankConfigLowLoadThreshold.3 = INTEGER: 0 PowerNet-MIB::rPDULoadBankConfigNearOverloadThreshold.1 = INTEGER: 12 PowerNet-MIB::rPDULoadBankConfigNearOverloadThreshold.2 = INTEGER: 12 PowerNet-MIB::rPDULoadBankConfigNearOverloadThreshold.3 = INTEGER: 24 PowerNet-MIB::rPDULoadBankConfigOverloadThreshold.1 = INTEGER: 14 PowerNet-MIB::rPDULoadBankConfigOverloadThreshold.2 = INTEGER: 16 PowerNet-MIB::rPDULoadBankConfigOverloadThreshold.3 = INTEGER: 32 PowerNet-MIB::rPDULoadBankConfigAlarm.1 = INTEGER: noLoadAlarm(1) PowerNet-MIB::rPDULoadBankConfigAlarm.2 = INTEGER: noLoadAlarm(1) PowerNet-MIB::rPDULoadBankConfigAlarm.3 = INTEGER: noLoadAlarm(1)
rPDULoadDevBankIndex - Это нумерация элементов DevBank, которые хранят характеристики банков питания.
rPDULoadDevBankNumber - указывает какому физическому банку питания соответствует каждая сущность DevBank.
rPDULoadStatusIndex - это нумерация элементов статуса Status, которые хранят информацию о текущем состоянии нагрузки на банки питания.
rPDULoadStatusBankNumber - указывает какому физическому банку питания соответствует информация о статусе.
Я хочу используя эту информацию настроить мониторинг таким образом, чтобы заббикс оповещал, когда нагрузка на каждый банк подходит к его максимальной нагрузке. Для этого надо взять rPDULoadDevBankMaxLoad и сравить его значение с rPDULoadStatusLoad.
Правило обнаружения выглядит так:
Code:
discovery[{#DEVBANKINDEX},.1.3.6.1.4.1.318.1.1.12.2.1.6.1.1,{#STATUSINDEX},.1.3.6.1.4.1.318.1.1.12.2.3.1.1.1]
Данные собираются в следующем виде:
А теперь прикол!
Если идти в порядке нумерации, то элементы DevBank (см. rPDULoadDevBankNumber) соответствуют следующим банкам (в порядке нумерации) - Банк 1, Банк 2, Банк 3.
А элементы Status (см. rPDULoadStatusBankNumber) - Банк 0, Банк 1, Банк 2.
Значит я не могу их связать по {#SNMPINDEX}, т.к. данные будут принадлежать разным сущностям!
Причём Банк 0 и Банк 3 - это одно и то же (прим. - хранят суммированные данные обо всех банках).
И так оно и есть, на скриншоте с Latest Data Bank#3 Max Load показывает 32 (это сумма по всем имеющимся банкам), а Status#3 Bank Load показывает 2,5А, что по факту соответствует нагрузке на второй банк. А суммированная нагрузка выводится в Status#1 Bank Load и равна 5.1А.
Получается, чтобы их связать надо сдвинуть нумерацию STATUSINDEX: вместо 1, 2, 3 сделать 3, 1, 2 (переместить суммированный показатель на третье место, как у DevBank), тогда всё будет в соответствии.
Реализовал следующие правила предобработки:
Code:
1. Replace: "{#DEVBANKINDEX}":"1","{#STATUSINDEX}":"1"} -> "{#DEVBANKINDEX}":"1","{#STATUSINDEX}":"3"}
2. Replace: "{#DEVBANKINDEX}":"2","{#STATUSINDEX}":"2"} -> "{#DEVBANKINDEX}":"2","{#STATUSINDEX}":"1"}
3. Replace: "{#DEVBANKINDEX}":"3","{#STATUSINDEX}":"3"} -> "{#DEVBANKINDEX}":"3","{#STATUSINDEX}":"2"}
Исходный результат LLD:
Code:
[{"{#SNMPINDEX}":"1","{#DEVBANKINDEX}":"1","{#STATUSINDEX}":"1"},{"{#SNMPINDEX}":"2","{#DEVBANKINDEX}":"2","{#STATUSINDEX}":"2"},{"{#SNMPINDEX}":"3","{#DEVBANKINDEX}":"3","{#STATUSINDEX}":"3"}]
Code:
[{"{#SNMPINDEX}":"1","{#DEVBANKINDEX}":"1","{#STATUSINDEX}":"3"},{"{#SNMPINDEX}":"2","{#DEVBANKINDEX}":"2","{#STATUSINDEX}":"1"},{"{#SNMPINDEX}":"3","{#DEVBANKINDEX}":"3","{#STATUSINDEX}":"2"}]
Не пойму что я делаю не так, вроде всё правильно же сделал. Подскажите как ещё отдебажить можно эту штуку, уже третий день с ней маюсь и уже чисто из спортивного интереса хочу реализовать именно так.
Вопрос решён
Comment