Ad Widget

Collapse

Как получить имя диска в Zabbix на основании сработавшего по нему триггера

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Kolmik
    Member
    • Jul 2024
    • 56

    #1

    Как получить имя диска в Zabbix на основании сработавшего по нему триггера

    Добрый день!
    Предположим у меня есть на мониторинге host с несколькими дисками, к хосту подключены шаблоны Linux by Zabbix agent active или Windows by Zabbix agent active, в зависимости от того какая операционная система на хосте. Пускай в примере будет Linux.
    На одном из дисков начало заканчиваться место и сработал триггер: rca-pg-96.guestrarus.local:/mnt/DB: Disk space is low (used > 90%)
    Как мне из этого триггера выцепить переменную с именем диска, чтобы дальше например это значение передавать в Action script​​ на этот триггер?
    Click image for larger version

Name:	image.png
Views:	116
Size:	96.8 KB
ID:	502325
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Если речь идёт о стандартных шаблонах Zabbix, то, вероятнее всего, нужные вам данные уже находятся в виде значений каких-то тегов (скорее всего, тега с именем "filesystem").
    В action script'е на значение тега можно сослаться с помощью встроенного макроса {EVENT.TAGS.<имя_тега>} (в данном примере - {EVENT.TAGS.filesystem}).

    Comment

    • Kolmik
      Member
      • Jul 2024
      • 56

      #3
      Originally posted by Kos
      Если речь идёт о стандартных шаблонах Zabbix, то, вероятнее всего, нужные вам данные уже находятся в виде значений каких-то тегов (скорее всего, тега с именем "filesystem").
      В action script'е на значение тега можно сослаться с помощью встроенного макроса {EVENT.TAGS.<имя_тега>} (в данном примере - {EVENT.TAGS.filesystem}).
      Спасибо, получилось.
      А можно в сработавшем триггере помимо итема, по которому сработал триггер ещё дополнительно использовать value другого итема по данному хосту, который не используется в триггере?
      Last edited by Kolmik; 19-05-2025, 11:11.

      Comment

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

        #4
        Originally posted by Kolmik
        А можно в сработавшем триггере помимо итема, по которому сработал триггер ещё дополнительно использовать value другого итема по данному хосту, который не используется в триггере?
        Когда срабатывает триггер, генерируется событие. Имя этого события по умолчанию совпадает с именем триггера, но в настройках триггера есть отдельное поле - "Имя события", которое будет использоваться вместо имени триггера, если оно заполнено (ссылка, поиск по строке "Имя события"). Так вот, в этом поле можно использовать макросы выражений (ссылка), в которых, в свою очередь, можно ссылаться на значения других элементов данных (помимо тех, которые упомянуты в условии триггера). Здесь (ссылка) пример того, как это работает.

        Comment

        • Kolmik
          Member
          • Jul 2024
          • 56

          #5
          Ну вот, грубо говоря, у меня по хосту сработал триггер о нехватке места на диске:
          rca-pg-224.guestrarus.local:/mnt/DB: Disk space is low (used > 90%)

          Я создал скрипт Manual event action, чтобы применять его вручную вот на таких триггерах, в который я передаю параметр {EVENT.TAGS.filesystem}, который содержит имя диска из этого EVENT, но мне так же нужно передать в скрипт ещё одно дополнительное значение итема, который не относится к данному эвенту:



          Получается это будет так?

          python3 /usr/lib/zabbix/externalscripts/test2.py {EVENT.TAGS.filesystem}​ {{SCSI.scsiinfo}.last()}​

          Comment

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

            #6
            Originally posted by Kolmik
            Ну вот, грубо говоря, у меня по хосту сработал триггер о нехватке места на диске:
            Code:
            rca-pg-224.guestrarus.local:/mnt/DB: Disk space is low (used > 90%)
            Я создал скрипт Manual event action, чтобы применять его вручную вот на таких триггерах, в который я передаю параметр {EVENT.TAGS.filesystem}, который содержит имя диска из этого EVENT, но мне так же нужно передать в скрипт ещё одно дополнительное значение итема, который не относится к данному эвенту:

            [...ни хрена не видно...]

            Получается это будет так?

            python3 /usr/lib/zabbix/externalscripts/test2.py {EVENT.TAGS.filesystem} {{SCSI.scsiinfo}.last()}
            Разумеется, нет.

            Во-первых, приложить скрипншот у вас не получилось.

            Во-вторых, я отвечал на вопрос: "Можно в сработавшем триггере..." - там речь шла о триггере, а не об Action'е и не о скриптах. Но, на ваше счастье, и в оповещениях, и в скриптах макросы выражений использовать тоже можно (ссылка).

            Наконец, в-третьих, макросы выражений имеют другой синтаксис (ссылку я приводил).
            Last edited by Kos; 19-05-2025, 15:48.

            Comment

            • Kolmik
              Member
              • Jul 2024
              • 56

              #7
              Originally posted by Kos
              Разумеется, нет.

              Во-первых, приложить скрипншот у вас не получилось.

              Во-вторых, я отвечал на вопрос: "Можно в сработавшем триггере..." - там речь не шла триггере, а не об Action'е и не о скриптах. Но, на ваше счастье, и в оповещениях, и в скриптах макросы выражений использовать тоже можно (ссылка).

              Наконец, в-третьих, макросы выражений имеют другой синтаксис (ссылку я приводил).
              1. Ещё раз пробую приложить скриншот итема.
              2. Вот по это ссылке https://www.zabbix.com/documentation...ression_macros для макросов выражений я беру пример:
              В качестве макроса выражения допускается только одна функция из следующего списка: avg, last, max, min, например:
              {?avg(/{HOST.HOST}/{ITEM.KEY},1h)}
              и переделываю под свои нужды:
              {?last(/{HOST.HOST}/{SCSI.scsiinfo})}

              И передача двух переменных в скрипт в итоге будет выглядеть так?

              python3 /usr/lib/zabbix/externalscripts/test2.py {EVENT.TAGS.filesystem} {?last(/{HOST.HOST}/{SCSI.scsiinfo})}
              Attached Files

              Comment

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

                #8
                Originally posted by Kolmik
                python3 /usr/lib/zabbix/externalscripts/test2.py {EVENT.TAGS.filesystem} {?last(/{HOST.HOST}/{SCSI.scsiinfo})}
                {HOST.HOST} - это встроенный макрос, который раскрывается в "техническое" имя хоста, на котором сработал триггер или к которому относится вручную запускаемый скрипт.
                А что такое {SCSI.scsiinfo}?

                Comment

                • Kolmik
                  Member
                  • Jul 2024
                  • 56

                  #9
                  Originally posted by Kos
                  А что такое {SCSI.scsiinfo}?
                  У меня на хосте в конфиге агента есть userparameter:
                  UserParameter=scsiinfo,lsscsi
                  А со стороны темплейта создан под это значение итем, который имеет имя SCSI и key - scsiinfo, который получает инфу с этого UserParameter

                  Comment

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

                    #10
                    Originally posted by Kolmik
                    У меня на хосте в конфиге агента есть userparameter:
                    UserParameter=scsiinfo,lsscsi
                    А со стороны темплейта создан под это значение итем, который имеет имя SCSI и key - scsiinfo, который получает инфу с этого UserParameter
                    То есть, мысль о том, что вместо конструкции {SCSI.scsiinfo} (где SCSI - это имя элемента данных, а scsiinfo - ключ того же элемента данных) должно что-то подставляться, - это Вы сами нафантазировали, или, всё же, эта мысль на чём-то основана? Можете привести ссылку на документацию (я в обоснование своих рекомеднаций такие ссылки приводил)?

                    Comment

                    • Kolmik
                      Member
                      • Jul 2024
                      • 56

                      #11
                      Да, это я сам нафантазировал, предположил что так должно быть, документация местами для меня сложна для понимания. Вы дали ссылки, на основании них я не могу разобраться и догадаться как должно быть.

                      Comment

                      • Kolmik
                        Member
                        • Jul 2024
                        • 56

                        #12
                        Тогда получается будет так?
                        {?last({ITEM.KEY})}
                        Но тогда я не понимаю как указывать какой именно итем мне нужен.

                        Comment

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

                          #13
                          Попробуйте для начала так:
                          Code:
                          {?last(/{HOST.HOST}/scsiinfo)}

                          Comment

                          Working...