Ad Widget

Collapse

Сдвиг #SNMPINDEX в имени прототипа элемента данных

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • BorisTheBlade
    Junior Member
    • Mar 2022
    • 4

    #1

    Сдвиг #SNMPINDEX в имени прототипа элемента данных

    Доброго времени суток, форумчане!
    Есть задача мониторить статус камер на регистраторе Dahua.
    Путем изучения MIB, шаблоном из репозитория и snmpwalk были добыты OID`ы с именами камер, IP адресами камер и их статусами, но вот незадача - в разных таблицах эти данные.

    Вот правило:
    discovery[{#ICAM_IP}, 1.3.6.1.4.1.1004849.2.10.2.2.1.2, {#CAM_NAME}, 1.3.6.1.4.1.1004849.2.10.2.2.1.4, {#CAM_STATUS}, 1.3.6.1.4.1.1004849.2.10.1.2.1.2]
    И если с именем и адресом камер все ок, то со статусом у меня беда.
    В первых двух параметрах счисление OID идет с 1 по 64, а таблица со статусами счисляется с 0 до 63... По итогу имею создание лишних элементов и смещение статусов.

    Т.е. после запуска дискавери мы получаем созданные элементы данных с {#ICAM_IP} и {#CAM_NAME} с {#SNMPINDEX} 1, что является параметрами первого канала, а вот {#CAM_STATUS} первого канала будет с {#SNMPINDEX} равному 0.
    Для наглядности сопоставил в табличке:
    Click image for larger version

Name:	oid.jpg
Views:	701
Size:	27.6 KB
ID:	441088

    Возможно ли корректно отдискаверить и сопоставить все данные актуальным каналам на регистраторе?
  • BorisTheBlade
    Junior Member
    • Mar 2022
    • 4

    #2
    Апнем тему.
    Ни у кого нет идей?

    Comment

    • Semiadmin
      Senior Member
      • Oct 2014
      • 1625

      #3
      Добавить в LLD rule шаг препроцессинга, где при помощи JS в полученный JSON будет добавлен еще один LLD макрос, значение которого равно {#SNMPINDEX} - 1. Использовать этот макрос в прототипе айтема для статуса вместо {#SNMPINDEX}.

      Comment

      • BorisTheBlade
        Junior Member
        • Mar 2022
        • 4

        #4
        Тоже приходила такая мысль, но я далек от JS и написал такую вот дичь:

        var snmpindex = '{#SNMPINDEX}';
        var snmpid = '{#SNMPID}';
        return ++snmpindex(snmpid);

        Естественно, не взлетело)

        Comment

        • Kos
          Senior Member
          Zabbix Certified SpecialistZabbix Certified Professional
          • Aug 2015
          • 3404

          #5
          Примерно так (добавляем макрос {#CAM_STATUS_INDEX}, содержащий то же, что {#SNMPINDEX}, но на единицу меньше).
          Добавляется в правило препроцессинга не для прототипов элементов данных, а для самого правила LLD.
          Т.е. там, где у вас указан ключ "discovery[...]".
          Кстати, не уверен, что таблица статусов должна быть перечислена в правиле дискаверинга (я бы её оттуда убрал, если макрос {#CAM_STATUS} нигде не используется).
          Code:
          //transform a source string into JSON object
          val_json=JSON.parse(value);
          //transform string value of every {#SNMPINDEX} into integer, decrease by 1, finally - transform back to string
          for (i in val_json) {
            val_json[i]["{#CAM_STATUS_INDEX}"] = (parseInt(val_json[i]["{#SNMPINDEX}"]) - 1) + "";
          }
          //return the result as a string
          return JSON.stringify(val_json);

          Comment


          • BorisTheBlade
            BorisTheBlade commented
            Editing a comment
            Спасибо большое за наводку - попробую и отпишусь.
        Working...