Ad Widget

Collapse

Использование snmpindex в зависимости от snmpvalue

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #16
    Посмотрел ещё раз - как минимум, в версии Zabbix 5.0 всё необходимое для данной задачи уже есть - и предобработка правила LLD с помощью JavaScript, и замещения (overrides). И ещё подумал, что проще может оказаться другой подход: в качестве параметров в ключах элементов данных использовать не SNMP-индекс, и имя интерфейса (которое будет одинаково для сенсоров на приём и на передачу). Только его ещё надо извлечь; но это совсем несложно: обрезаем из {#SNMPVALUE} незначащую часть в конце строки.

    То есть, при таком подходе:
    1) добавляем для правила LLD шаг предобработки с типом JavaScript и примерно таким кодом:
    Code:
    //transform source string into JSON object
    val_json=JSON.parse(value);
    //Regular expression: search needed substring
    re=/\s+(Tx|Rx) Power Sensor/;
    //transform needed part of array (replace substring by an empty string)
    for (i in val_json) {
      val_json[i]["{#INT_NAME}"] = val_json[i]["{#SNMPVALUE}"].trim().replace(re,"");
    }
    //return result converted back to String
    return JSON.stringify(val_json);
    В результате в наш исходный JSON должен добавиться третий LLD-макрос {#INT_NAME}, содержащий имя интерфейса (например, "subslot 0/1 transceiver 3").

    2) корректируем прототипы элементов данных, создавая сами элементы данных с разными ключами, но одинаковыми параметрами ключа для одного интерфейса, например: sensor.sfp.power.rx["{#INT_NAME}"] - для приёмника, sensor.sfp.power.tx["{#INT_NAME}"] - для передатчика.
    При помощи правил замещения настраиваем таким образом, чтобы rx либо tx-айтемы создавались только при наличии соответствующей подстроки в имени элемента данных (а там используем макрос {#SNMPNAME}).

    3) для триггера тоже создаём правило замещения, чтобы создавать его для tx- или rx-айтемов. А уж в формуле восстановления для триггера при таком подходе пишется просто:
    Code:
    ({Host:sensor.sfp.power.rx["{#INT_NAME}"].last()} = -40 and {Host:sensor.sfp.power.tx["{#INT_NAME}"].last()} = -40)
    or
    (предыдущее выражение восстановления)
    Last edited by Kos; 09-02-2024, 12:26.

    Comment

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

      #17
      Originally posted by fractal90
      старая еще, 4.0.6, понемногу переезжаем на 6 LTS, до конца февраля сетевую часть мониторинга перенесем. Способ 2 мне видится более приемлемым, так как минимально на одной железке могут быть от 2 до 48 трансиверов, к каждому по 2 элемента. с Javascript для меня точно сложнее но есть команды которые в нем разбираются, помогут
      Да, в версии 4.0 таких вещей делать ещё нельзя...

      Но остаётся другой вариант - всё же использовать пользовательские макросы с контекстом, которые в данной версии уже есть (ссылка).
      Там идея такая (она использовалась в старых версиях шаблонов для сетевого оборудования и сохранилась кое-где в примерах документации, например, скриншот тут).
      На уровне шаблона задаётся user macro - например: {$IFCONTROL} со значением, равным единице.
      А триггерное выражение в прототипе триггера начинается с выражения:
      Code:
      {$IFCONTROL:"{#SNMPINDEX}"}=1 and (...предыдущее условие...)
      В таком случае для того, чтобы "погасить" триггер для интерфейса с индексом 1375, достаточно на соответствующем хосте определить пользовательский макрос {$IFCONTROL:"1375"} со значением, выставленным в ноль.​

      Comment

      • fractal90
        Senior Member
        • Jun 2019
        • 177

        #18
        Originally posted by Kos
        В таком случае для того, чтобы "погасить" триггер для интерфейса с индексом 1375, достаточно на соответствующем хосте определить пользовательский макрос {$IFCONTROL:"1375"} со значением, выставленным в ноль.​​
        таких макросов будет очень много) и SNMPINDEX на каждом железе разный

        Comment

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

          #19
          Originally posted by fractal90
          таких макросов будет очень много) и SNMPINDEX на каждом железе разный
          Это понятно. Просто для закрытия триггера всё равно нужно делать какие-то действия - дизейблить порт на самом устройстве, дизейблить триггер в Zabbix-е (кстати, тоже вариант ) или прописывать макрос. В предположении, что основная часть интерфейсов работает, а отключать мониторинг надо только на некоторых - это может оказаться рабочим вариантом.
          Понятно, что не шибко удобно, но для версии 4.0 вряд ли кто предложит что-то более практичное

          Comment

          • Alex_UUU
            Senior Member
            • Dec 2018
            • 541

            #20
            При этом в макрос можно даже код на JavaScript вставлять, а в обработчике его выполнять через eval() :-)

            Comment

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

              #21
              Originally posted by Alex_UUU
              При этом в макрос можно даже код на JavaScript вставлять, а в обработчике его выполнять через eval() :-)
              Нельзя
              Как мы выяснили, у автора вопроса - Zabbix v4.0, а там ещё нет JavaScript

              Comment

              Working...