Ad Widget

Collapse

Триггер. Конструктор выражения (help)

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • swq
    Member
    • Sep 2009
    • 84

    #1

    Триггер. Конструктор выражения (help)

    Есть узел с именем xx, в нем элемент test2: тип "траппер", тип информации "текст"
    Есть желание сделать такой триггер:
    1. При поступлении строки содержащей подстроку "Test" триггер взводится.
    2. Триггер сбрасывается только тогда, тогда в течении 1 минуты (в реальности 1 час) данные не поступают. Если в течении часа опять найдена подстрока "Test", триггер остается взведенным.

    Делаю такой триггер:
    ({xx:test2.nodata(1m)}=1 and {TRIGGER.VALUE}=0) or {xx:test2.str(Test)}=1

    Но не работает.
    По отдельности условия срабатывают. Вместе нет. Получается что условие {xx:test2.str(Test)}=1 всегда в 1. Как его сбросить?
  • sadman
    Senior Member
    • Dec 2010
    • 1611

    #2
    Голову вы мне сломали с этой вашей проклятой nodata.

    Может попробовать простое выражение: {xx:test2.count(1m,"Test","like")}>0)

    Если в течении минуты (часа) появится хотя бы один "Test" - триггер взведется. Не будет найдено за этот период такое значение - снимется.

    Comment

    • swq
      Member
      • Sep 2009
      • 84

      #3
      Originally posted by sadman
      Голову вы мне сломали с этой вашей проклятой nodata.

      Может попробовать простое выражение: {xx:test2.count(1m,"test","like")}>0)

      Если в течении минуты (часа) появится хотя бы один "test" - триггер взведется. Не будет найдено за этот период такое значение - снимется.
      спасибо за ответ.
      Завел триггер, сендером послал трап, триггер взвелся и все... Уже 5 минут прошло, но не сбрасывается. Сам уже голову сломал. Должно же быть решение.

      Comment

      • sadman
        Senior Member
        • Dec 2010
        • 1611

        #4
        Я подозревал, что такое может случится. Потому что триггер пересчитывается при поступлении данных. А если данных не поступает в траппер, то и пересчитывать не с чего. С nodata, полагаю, такая же морковка будет. Нужно в триггер ввести элемент данных, который бы не оказывал влияния на выражение триггера, но дергался бы раз в минуту. Наверняка есть же такой?

        Comment

        • swq
          Member
          • Sep 2009
          • 84

          #5
          нет такого элемента (
          Задумывалось так:
          Каждый час читается лог и парсится на наличие ошибок. Ошибки по LLD правилу создают элементы узла с именем "тип ошибки" и привязывают к нему триггера . Есть ошибка - соответствующий триггер взводится. Через час все повторяется и если этого типа ошибки в логе не было, то триггер должен сброситься. Заранее тип ошибки не известен и их количество достаточно велико, руками этого не осилить. Проверять же скриптом все триггера узла на предмет предыдущего значения и сравнивать с текущими (что бы сформировать фейковую строку и сбросить триггер) накладно.

          Гугл нашел что-то похожее, но по моему тут с синтаксисом что то не так, да и тип элемента немного другой:
          http://serverfault.com/questions/426...-for-text-item
          но идея есть, можно попробовать что нибудь сделать. И да, тип элемента "лог" для меня не подходит.

          Comment

          • sadman
            Senior Member
            • Dec 2010
            • 1611

            #6
            Создайте элемент типа "Вычисляемый", напишите в него 99 или 66 и поставьте период обновления в 60. Затем введите его в триггер. Теперь в него каждые 60 мин будут виртуально поступать новые значения.

            Comment

            • swq
              Member
              • Sep 2009
              • 84

              #7
              Originally posted by swq
              нет такого элемента (
              Задумывалось так:
              Каждый час читается лог и парсится на наличие ошибок. Ошибки по LLD правилу создают элементы узла с именем "тип ошибки" и привязывают к нему триггера . Есть ошибка - соответствующий триггер взводится. Через час все повторяется и если этого типа ошибки в логе не было, то триггер должен сброситься. Заранее тип ошибки не известен и их количество достаточно велико, руками этого не осилить. Проверять же скриптом все триггера узла на предмет предыдущего значения и сравнивать с текущими (что бы сформировать фейковую строку и сбросить триггер) накладно.

              Гугл нашел что-то похожее, но по моему тут с синтаксисом что то не так, да и тип элемента немного другой:
              http://serverfault.com/questions/426...-for-text-item
              но идея есть, можно попробовать что нибудь сделать. И да, тип элемента "лог" для меня не подходит.
              Update: Задача решена. Все просто, достаточно упростить задачу. Если в течении минуты (часа) любые данные приходят, то взводим триггер, если данных нет, то сбрасываем.
              {xx:test2.nodata(60)}=0
              Мда, и сам запутался с поиском нужной подстроки в логе и других ввел в заблуждение.

              Comment

              • sadman
                Senior Member
                • Dec 2010
                • 1611

                #8
                Получается, что nodata пересчитывает триггер даже если в элемент данных эти самые данные не поступают?

                Comment

                • swq
                  Member
                  • Sep 2009
                  • 84

                  #9
                  Originally posted by sadman
                  Получается, что nodata пересчитывает триггер даже если в элемент данных эти самые данные не поступают?
                  Из документации:

                  nodata сек
                  Возвращает:
                  1 - если данные не получение в течении периода времени в секундах. Период должен быть не менее 30 секунд.
                  0 - в противном случае
                  то есть, если используется функция nodata, то триггер перечитывается каждые 30 секунд

                  Comment

                  • sadman
                    Senior Member
                    • Dec 2010
                    • 1611

                    #10
                    Что-то я не вижу, как из минимального периода опроса вытекает то, что nodata инициирует пересчитывание триггера.

                    Эксперимент что показал - пересчитывает nodata триггер?

                    Comment

                    • swq
                      Member
                      • Sep 2009
                      • 84

                      #11
                      Originally posted by sadman
                      Что-то я не вижу, как из минимального периода опроса вытекает то, что nodata инициирует пересчитывание триггера.

                      Эксперимент что показал - пересчитывает nodata триггер?
                      Эксперимент показывает следующее. Нет данных, нет взвода триггера. После приема трапа, триггер взводится и висит примерно от 70 до 85 секунд, после чего опять сбрасывается.
                      Время ожидания {xx:test2.nodata(60)}=0 60секунд.
                      Почему не сразу сбрасывается ответить не могу.

                      Comment

                      • sadman
                        Senior Member
                        • Dec 2010
                        • 1611

                        #12
                        Все-таки попробуйте ввести calculated item. Просто интересно - будет ли более точно по времени пересчитываться.

                        Comment

                        Working...