Ad Widget

Collapse

Zabbix 2.4, LLD, SNMP, вот это всё...

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • sadman
    Senior Member
    • Dec 2010
    • 1611

    #1

    Zabbix 2.4, LLD, SNMP, вот это всё...

    Пытаюсь разучить новые трюки с Zabbix. Поставил последнюю версию - 2.4.3, натравливаю LLD на железку, у которой все примерно так:

    Code:
    ctlUnitElementType.1002; Value (OctetString): voltage
    ctlUnitElementType.1003; Value (OctetString): relay
    ctlUnitElementType.1004; Value (OctetString): relay
    ...
    ctlUnitElementType.102002; Value (OctetString): door
    ctlUnitElementType.107001; Value (OctetString): water
    ctlUnitElementType.107002; Value (OctetString): water
    ctlUnitElementType.107003; Value (OctetString): water
    ctlUnitElementType.201001; Value (OctetString): temperature
    ctlUnitElementType.201002; Value (OctetString): temperature
    ctlUnitElementType.202001; Value (OctetString): humidity
    ...
    ctlUnitElementName.1002; Value (OctetString): Internal DC
    ctlUnitElementName.1003; Value (OctetString): Analog Power
    ctlUnitElementName.1004; Value (OctetString): Relay-1
    ...
    ctlUnitElementName.102002; Value (OctetString): Door
    ctlUnitElementName.107001; Value (OctetString): WaterCord_01
    ctlUnitElementName.107002; Value (OctetString): WaterCord_02
    ctlUnitElementName.107003; Value (OctetString): WaterLeak_01
    ctlUnitElementName.201001; Value (OctetString): Temp_Window
    ctlUnitElementName.201002; Value (OctetString): Temp_Wall
    ctlUnitElementName.202001; Value (OctetString): Humidity_01
    ...
    ctlUnitElementState.1002; Value (OctetString): warning
    ctlUnitElementState.1003; Value (OctetString): on
    ctlUnitElementState.1004; Value (OctetString): off
    ctlUnitElementState.102002; Value (OctetString): normal
    ctlUnitElementState.107001; Value (OctetString): normal
    ctlUnitElementState.107002; Value (OctetString): not connected
    ctlUnitElementState.107003; Value (OctetString): not connected
    ctlUnitElementState.201001; Value (OctetString): normal
    ctlUnitElementState.201002; Value (OctetString): normal
    ctlUnitElementState.202001; Value (OctetString): unreal
    Правильно ли я понимаю, что "из коробки" актуальный Zabbix мне не позволит через LLD создать айтем, который: ctlUnitElementState<>"not connected" & ctlUnitElementType=="water", имеет в своем имени ctlUnitElementName и отражает ctlUnitElementState?

    Т.е. без внешнего скрипта для формирования нужных айтемов не обойтись?
  • Jimson
    Senior Member
    • Jan 2008
    • 1327

    #2
    Не понятно что вы хотите. Элементы вида ctlUnitElementState["Door"] вас не устраивают?

    Comment

    • sadman
      Senior Member
      • Dec 2010
      • 1611

      #3
      Для начала хочу получить осмысленные имена триггеров для проталкивания их в экшны через {TRIGGER.NAME}. Но при этом нужно отбирать совершенно определенные ctlUnitElementType через фильтр правила обнаружения (я так я понял порядок действий).

      Осмысленные - это как ctlUnitElementName на железке.

      Comment

      • Jimson
        Senior Member
        • Jan 2008
        • 1327

        #4
        И в чем проблема? Правило по ctlUnitElementName даст вам имена в {#SNMPVALUE}.

        Comment

        • sadman
          Senior Member
          • Dec 2010
          • 1611

          #5
          Проблему я вижу в том, что правило по ctlUnitElementName мне даст вообще все элементы (не только датчики, но всякую внутристемную пургу, которую наблюдать не следует), а не фильтрованные по ctlUnitElementType.

          Я же правильно понимаю, что из данной массы отобрать датчики с типом water можно через дискавери ctlUnitElementType c regex-фильтром ^water, а если я буду дискаверить ctlUnitElementName, то фильтровать нечего будет?

          На случай недопонимания, повторюсь, что нужно:
          1. отдискаверить раздельно датчики воды/температуры/etc;
          2. создать элементы данных и связанные с ними триггеры в имени которых будет присутствовать название датчика, взятое из ctlUnitElementName;
          3. использовать имя триггера в действиях (послать по почте).


          Раздельное выполнение каждого пункта у меня всё получается. А совместное - нет.

          Или вы намекаете на то, что нужно получать все скопом, а потом уже в триггерах расписывать зависимости?

          Comment

          • yukra
            Senior Member
            • Apr 2013
            • 1359

            #6
            Если я вас правильно понял, то вы делаете дискавери по ctlUnitElementType и фильтру water, получаете 3 значения:
            Code:
            ctlUnitElementType.107001; Value (OctetString): water
            ctlUnitElementType.107002; Value (OctetString): water
            ctlUnitElementType.107003; Value (OctetString): water
            Потом делаете прототип айтема:
            ctlUnitElementState.{SNMPINDEX} и получаете 3 айтема:

            Code:
            ctlUnitElementState.107001; Value (OctetString): normal
            ctlUnitElementState.107002; Value (OctetString): not connected
            ctlUnitElementState.107003; Value (OctetString): not connected
            Потом делаете еще прототип:
            ctlUnitElementName.{SNMPINDEX} с именем "{SNMPVALUE}" получаете еще 3 айтема:

            Code:
            ctlUnitElementName.107001; Value (OctetString): WaterCord_01 
            ctlUnitElementName.107002; Value (OctetString): WaterCord_02
            ctlUnitElementName.107003; Value (OctetString): WaterLeak_01
            Потом делаете прототип триггера:
            Code:
            ctlUnitElementState.[{SNMPINDEX}].last() <> "not connected" AND ctlUnitElementName [{SNMPINDEX}].date() > 20000101
            c именем "{ITEM.NAME2} connected"
            и получаете в итоге триггет "WaterCord_01 connected"

            Коды триггеров тут конечно неправильные, но общая концепция надеюсь понятна.

            Comment

            • sadman
              Senior Member
              • Dec 2010
              • 1611

              #7
              Originally posted by yukra
              Если я вас правильно понял, то вы делаете дискавери по ctlUnitElementType и фильтру water,
              Ну, во всяком случае этот способ лежит на виду. Возможно, что есть иные извороты, которые знают специалисты по LLD

              Originally posted by yukra
              Потом делаете еще прототип:
              ctlUnitElementName.{SNMPINDEX} с именем "{SNMPVALUE}" получаете еще 3 айтема:
              Небольшая поправка: {#SNMPVALUE} в имени айтема раскрывается из выборки родительской дискавери, т.е. в данном случае они все равны полю, по которому производилась фильтрация - 'water', так что действие не приносит эстетического удовлетворения.
              Но данная вторичная выборка все равно полезна.

              Originally posted by yukra
              Потом делаете прототип триггера:
              Code:
              ctlUnitElementState.[{SNMPINDEX}].last() <> "not connected" AND ctlUnitElementName [{SNMPINDEX}].date() > 20000101
              c именем "{ITEM.NAME2} connected"
              и получаете в итоге триггет "WaterCord_01 connected"
              Снова поправка: {ITEM.NAME2} не раскрывается в имени триггера (уж не знаю, почему). Но при этом раскрывается {ITEM.VALUE2}, который я и подсунул в имя триггера.

              В целом данный workaround решает основную задачу, но выглядит конечно, как конь с рогами.

              Т.е., подводя промежуточный итог, можно заключить, что в моем случае штатными средствами zabbix получить в имени прототипа элемента данных, описание датчика возможности нет.

              Или есть ещё какие-то способы? Готов попробовать ))

              Comment

              • yukra
                Senior Member
                • Apr 2013
                • 1359

                #8
                Originally posted by sadman
                Небольшая поправка: {#SNMPVALUE} в имени айтема раскрывается из выборки родительской дискавери, т.е. в данном случае они все равны полю, по которому производилась фильтрация - 'water', так что действие не приносит эстетического удовлетворения.
                Но данная вторичная выборка все равно полезна.
                Да, вы правы. Делает имя не "{#SNMPVALUE}", а "{#SNMPVALUE}.{SNMPINDEX}" и у нас получаеются айтема с именем "water.107001" и значением "WaterCord_01"


                Originally posted by sadman
                Снова поправка: {ITEM.NAME2} не раскрывается в имени триггера (уж не знаю, почему). Но при этом раскрывается {ITEM.VALUE2}, который я и подсунул в имя триггера.
                Ага, в айтеме не раскрывается, а вот в нотификейшене должна https://www.zabbix.com/documentation...ed_by_location (посмотрите табличку по вашей версии).


                Originally posted by sadman
                Или есть ещё какие-то способы? Готов попробовать ))
                Можно попробовать соорудить либо через макросы и API, либо через внешние скрипты, но в любой случае мне кажется это будут примерно похожие костыли, которые в лучшем случае будут "такие же поддерживаемые", а в худшем "менее поддерживаемые и логичные"

                Comment

                • Jimson
                  Senior Member
                  • Jan 2008
                  • 1327

                  #9
                  Originally posted by sadman
                  Ну, во всяком случае этот способ лежит на виду. Возможно, что есть иные извороты, которые знают специалисты по LLD
                  Другой способ тоже лежит "на виду": использовать в качестве правила external script, который выберет по snmp ваши name и type и сформирует json сразу с тремя параметрами (макросами): index, name и type. Моя тема посвященная этому решению тут где то недалеко лежит.

                  Comment

                  • sadman
                    Senior Member
                    • Dec 2010
                    • 1611

                    #10
                    Originally posted by yukra
                    Ага, в айтеме не раскрывается, а вот в нотификейшене должна https://www.zabbix.com/documentation...ed_by_location (посмотрите табличку по вашей версии).
                    Мне кажется, что рациональней проталкивать уже понятное имя триггера в один общий action, нежели плодить экшны и разбирать в них триггер на запчасти. В этом случае подправлять описание проблемы придется в одном месте, что неизмеримо приятней.

                    Comment

                    • sadman
                      Senior Member
                      • Dec 2010
                      • 1611

                      #11
                      Originally posted by jimson
                      Другой способ тоже лежит "на виду": использовать в качестве правила external script, который выберет по snmp ваши name и type и сформирует json сразу с тремя параметрами (макросами): Index, name и type.
                      Вобщем-то я на предмет этого в первом сообщении и интересовался.

                      Теперь хотя бы стал понятен предел возможностей интегрированного lld.

                      Comment

                      Working...