Ad Widget

Collapse

Срабатывание триггера на все значения кроме определённых

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • artsiom82
    Member
    • Nov 2016
    • 33

    #1

    Срабатывание триггера на все значения кроме определённых

    Добрый день. Подскажите пожалуйста как сделать такой триггер?
    Приходит несколько значений, есть правильные и есть неправильные. Нужно что бы триггер срабатывал только на неправильные
    логически это так
    если значение <> 345 тогда
    если значение <> 567 тогда
    если значение <> 985 тогда
    статус триггера активирован
    или если значение не найдено в массиве (345,567,985)
    тогда статус триггера активирован
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Например, использовать триггерную функцию count() с оператором regexp. Эта функция (в отличие от триггерной функции regexp()) позволяет сравнивать на соответствие регулярному выражению не только текстовые, но и числовые значения.
    Так, выражение:
    Code:
    {Host:item.count(#1,"^(345|567|985)$",regexp)}=0
    должно будет сработать, если одно (последнее полученное) значение НЕ соответствует регулярному выражению, т.е. не равно ни одному из перечисленных целых.
    В версии 5.4 и дальше синтаксис триггерных выражений поменялся, надо будет переписать соответственно.

    Comment

    • artsiom82
      Member
      • Nov 2016
      • 33

      #3
      Originally posted by Kos
      Например, использовать триггерную функцию count() с оператором regexp. Эта функция (в отличие от триггерной функции regexp()) позволяет сравнивать на соответствие регулярному выражению не только текстовые, но и числовые значения.
      Так, выражение:
      Code:
      {Host:item.count(#1,"^(345|567|985)$",regexp)}=0
      должно будет сработать, если одно (последнее полученное) значение НЕ соответствует регулярному выражению, т.е. не равно ни одному из перечисленных целых.
      В версии 5.4 и дальше синтаксис триггерных выражений поменялся, надо будет переписать соответственно.
      То, что надо!! Огромное человеческое спасибо. Подскажите, а если не последнее полученное, а 2 из последних 3?

      Comment

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

        #4
        Originally posted by artsiom82
        а если не последнее полученное, а 2 из последних 3?
        Ну, соответственно, меняете первый параметр у функции count() (будет не #1, а #2 или #3) и пороговое значение, с которым сравнивать.
        Например:
        Code:
        {Host:item.count(#3,"^(345|567|985)$",regexp)}<=1
        будет проверять три последних значения и ругаться, если "правильных" из них 1 или меньше (другими словами: хотя бы два из трёх последних - "неправильные").

        Comment

        • artsiom82
          Member
          • Nov 2016
          • 33

          #5
          Originally posted by Kos
          Ну, соответственно, меняете первый параметр у функции count() (будет не #1, а #2 или #3) и пороговое значение, с которым сравнивать.
          Например:
          Code:
          {Host:item.count(#3,"^(345|567|985)$",regexp)}<=1
          будет проверять три последних значения и ругаться, если "правильных" из них 1 или меньше (другими словами: хотя бы два из трёх последних - "неправильные").
          но, если первое которое пришло - неправильное, то сработает триггер, а нужно, если пришло неправильное первое, триггер не сработал, пришло второе неправильное не сработал, пришло третье неправильное триггер сработал и может подскажете такой вопрос: можно ли в авторегистрации ставить автоматически какие либо теги?

          Comment

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

            #6
            Originally posted by artsiom82
            но, если первое которое пришло - неправильное, то сработает триггер, а нужно, если пришло неправильное первое, триггер не сработал, пришло второе неправильное не сработал, пришло третье неправильное триггер сработал
            Ну, в такой формулировке, как я предложил, предполагается, что в истории уже хранятся какие-то последние значения. Если же принципиально, чтобы всё работало идеально прямо с самого первого полученного значения, то регулярное выражение нужно "обратить", т.е. сделать так, чтобы под него попадали только "неправильные" значения. К сожалению, сделать это средствами самих регулярных выражений довольно проблематично, но можно обойти, если воспользоваться глобальными регулярными выражениями (там такую логику сделать можно). Тогда условие триггера приобретёт вид:
            Code:
            {Host:item.count(#3,"@My_global_regexp",regexp)}=3
            Originally posted by artsiom82
            и может подскажете такой вопрос: можно ли в авторегистрации ставить автоматически какие либо теги?
            Не видел такой возможности. Но в версии 5.4 можно теги привязывать к шаблонам, а шаблоны можно автоматически добавлять к хостам при авторегистрации.

            Comment

            • Semiadmin
              Senior Member
              • Oct 2014
              • 1625

              #7
              Или не обращать регулярку, а просто добавить условие:

              {Host:item.count(#3,"^(345|567|985)$",regexp)}<=1 and {Host:item.count(#3)} = 3

              Comment


              • Kos
                Kos commented
                Editing a comment
                Да, это вариант!
            Working...