Ad Widget

Collapse

Время получения данных в выражении триггеров.

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Alex_UUU
    Senior Member
    • Dec 2018
    • 541

    #1

    Время получения данных в выражении триггеров.

    Коллеги, приветствую.
    Вроде простая задача, но голову сломал.
    Есть элементы данных ЭД1 и ЭД2.
    И простой триггер ЭД1.last<>ЭД2.last
    Но проблема в том, что триггер проверяется при получении каждого из этих ЭД. Но ЭД2 получает правильные данные с задержкой, поэтому триггер срабатывает по получении данных ЭД1 и закрывается через время задержки. Что логично.
    Если бы в выражении триггера было время получения данных ЭД, можно было бы написать что-то типа
    ЭД1.last<>ЭД2.last
    and
    ЭД2.time-ЭД1.time >20000

    Но функцуя time, согласно докам, выдает текущее время, а не время получения данных.
    Как поступить в данной ситуации? Типа или поставить задержку на триггер или чтобы он не высчитывался при получении данных одним из элементов.
  • Semiadmin
    Senior Member
    • Oct 2014
    • 1625

    #2
    item1.last() <> item2.last() and item1.prev() <> item2.prev()

    Comment

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

      #3
      Насколько велика задержка в получении данных? Если, она превышает, скажем, 30 секунд, то можно добавить условие "и данные в ЭД2 пришли за последние 30 секунд":
      Code:
      item1.last() <> item2.last() and item2.count(30)>0

      Comment

      • Alex_UUU
        Senior Member
        • Dec 2018
        • 541

        #4
        Разница во времени от 2 до 3 часов.
        Один ЭД - текущая дата на сервере, второй - дата записи в некоем файле логов. Вытаскивается через logrt.
        И мы имеем:
        1ЭД:
        20.01.2020 00:00:01 20200120
        21.01.2020 00:00:01 20200121
        2ЭД:
        20.01.2020 02:02:01 20200120
        21.01.2020 02:12:01 20200121

        При получении данных от 1ЭД триггер срабатывает, т.к. в 2ЭД данные еще старые.И висит 2 часа, соответственно.

        (да, для уменьшения данных в предобработке включено "не записывать одинаковые данные, если не прошло суток)
        Эту предобработку, конечно, можно убрать и тогда поставить условие (при опросе 1h, например)
        item1.last() <> item2.last()
        and
        item1.last(#3) <> item2.last()

        Comment

        • Semiadmin
          Senior Member
          • Oct 2014
          • 1625

          #5
          А зачем вообще текущую дату айтемом брать?
          Сделать для айтема из лога зависимый с препроцессингом на js, текущую дату получать в скрипте средствами js, сравнивать с записью в логе и 0 или 1 на выходе.

          Comment

          • Semiadmin
            Senior Member
            • Oct 2014
            • 1625

            #6
            или вытащить препроцессингом 20200121, сохранить как int и сравнивать в триггере
            item.last() <> item.date()

            P.S. Хотя тут придется еще и проверку на получение новых данных добавлять, то-то вроде ...and item.nodata()=0, т.к. триггер начнет каждые 30 с пересчитываться, и отдельное выражение восстановления делать. Сложновато и ненадежно.
            Last edited by Semiadmin; 22-01-2020, 09:16.

            Comment

            Working...