Ad Widget

Collapse

Предобработка в шаблоне LLD - ЧЯДНТ???

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • heaveaxy
    Junior Member
    • Oct 2019
    • 11

    #1

    Предобработка в шаблоне LLD - ЧЯДНТ???

    Приветствую, коллеги!
    Имеется 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)
    Обратите внимание на следующие OIDs:
    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]
    Так же создал пару прототипов элементов данных, в соответствии с задачей:
    2. Item 1
    3. Item 2

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

    А теперь прикол!
    Если идти в порядке нумерации, то элементы 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), тогда всё будет в соответствии.
    Реализовал следующие правила предобработки:
    5. LLD Preprocessing

    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"}
    Тестирую и в процессе теста всё работает как задумано:
    6. LLD Test
    Исходный результат LLD:
    Code:
    [{"{#SNMPINDEX}":"1","{#DEVBANKINDEX}":"1","{#STATUSINDEX}":"1"},{"{#SNMPINDEX}":"2","{#DEVBANKINDEX}":"2","{#STATUSINDEX}":"2"},{"{#SNMPINDEX}":"3","{#DEVBANKINDEX}":"3","{#STATUSINDEX}":"3"}]
    LLD после правил предобработки:
    Code:
    [{"{#SNMPINDEX}":"1","{#DEVBANKINDEX}":"1","{#STATUSINDEX}":"3"},{"{#SNMPINDEX}":"2","{#DEVBANKINDEX}":"2","{#STATUSINDEX}":"1"},{"{#SNMPINDEX}":"3","{#DEVBANKINDEX}":"3","{#STATUSINDEX}":"2"}]
    В общем вроде как всё хорошо, {#STATUSINDEX} номера поменялись, они используются в элементах данных, именно под этим номером, значит и данные должны поменяться... но в Latest Data изменений вообще никаких нет!

    Не пойму что я делаю не так, вроде всё правильно же сделал. Подскажите как ещё отдебажить можно эту штуку, уже третий день с ней маюсь и уже чисто из спортивного интереса хочу реализовать именно так.
    Last edited by heaveaxy; 10-02-2021, 11:06.
  • heaveaxy
    Junior Member
    • Oct 2019
    • 11

    #2
    UPDATE!
    Нашёл решение!
    1. Оказывается это я косяк, надо менять не 1,2,3 на 3,1,2, а 1,2,3 на 2,3,1. тогда логика установления соответствия приходит в целостный вид.
    2. Правила предобработки и так РАБОТАЛИ, просто я выводил везде в именах элементов данных {#STATUSINDEX}, а он то соответствует данным в любом случае. Надо было вывести и {#STATUSINDEX} и {#DEVBANKINDEX}, тогда сразу понятно стало бы что чему соответствует и где что поменялось.
    Click image for larger version

Name:	2021-02-10_16-33.png
Views:	133
Size:	71.7 KB
ID:	418499

    Всем спасибо за помощь Вопрос решён

    Comment

    Working...