Ad Widget

Collapse

Срабатывание триггера только при многократном повторении условия

Collapse
This topic has been answered.
X
X
 
  • Time
  • Show
Clear All
new posts
  • yadvlz
    Junior Member
    • May 2016
    • 5

    #1

    Срабатывание триггера только при многократном повторении условия

    Добрый день.

    Прошу помочь решить следующую задачу: есть триггер с выражением last(/myhostname/system.run[find /path -type f -name *.gz | wc -l])>20, он работает корректно, но хотелось бы модернизировать его таким образом, чтобы уведомление прилетало только после третьего выполнения условия.

  • Answer selected by Kos at 21-03-2022, 10:51.
    Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    Originally posted by yadvlz
    Не могли бы предоставить пример? Мои эксперименты с count успехом не увенчались.
    Пример 1 (с использованием count()).
    Анализируем последние три значения и смотрим, сколько из них превышало 20. Если все три, то триггер срабатывает:
    Code:
    count(/myhostname/system.run[find /path -type f -name *.gz | wc -l],#3,"gt",20)=3
    Пример 2 (на мой взгляд, проще; через min()).
    Просто выбираем минимальное значение из последних трёх и сравниваем с порогом 20. Если уж минимальное больше порога, то остальные тем более не меньше, т.е. все три последних значения превысили порог:
    Code:
    min(/myhostname/system.run[find /path -type f -name *.gz | wc -l],#3)>20

    Comment

    • 0xbeer
      Junior Member
      • Mar 2021
      • 6

      #2
      Originally posted by yadvlz
      Добрый день.

      Прошу помочь решить следующую задачу: есть триггер с выражением last(/myhostname/system.run[find /path -type f -name *.gz | wc -l])>20, он работает корректно, но хотелось бы модернизировать его таким образом, чтобы уведомление прилетало только после третьего выполнения условия.

      Добрый день. Попробуйте так:

      Code:
      last(/myhostname/system.run[find /path -type f -name *.gz | wc -l],#3)>20

      Comment


      • Kos
        Kos commented
        Editing a comment
        Это работать не будет, функция last() анализирует только одно значение (в данном примере - третье с конца). Нужно использовать функции, которые могут обрабатывать несколько значений - такие как min(), max(), avg(), count() и т.д.
    • Kos
      Senior Member
      Zabbix Certified SpecialistZabbix Certified Professional
      • Aug 2015
      • 3404

      #3
      Вместо функции last() (которая анализирует только одно значение) воспользуйтесь функцией count(), которая может анализировать несколько значений из истории.
      Например, можно составить условие: "если из трёх последних значений все три больше 20".
      Как вариант - функцией min() с тем же смыслом (если уж минимальное из трёх последних значений больше порога, то остальные тем более не меньше).

      Comment

      • yadvlz
        Junior Member
        • May 2016
        • 5

        #4
        Originally posted by Kos
        Например, можно составить условие: "если из трёх последних значений все три больше 20".
        Не могли бы предоставить пример? Мои эксперименты с count успехом не увенчались.

        Comment

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

          #5
          Originally posted by yadvlz
          Не могли бы предоставить пример? Мои эксперименты с count успехом не увенчались.
          Пример 1 (с использованием count()).
          Анализируем последние три значения и смотрим, сколько из них превышало 20. Если все три, то триггер срабатывает:
          Code:
          count(/myhostname/system.run[find /path -type f -name *.gz | wc -l],#3,"gt",20)=3
          Пример 2 (на мой взгляд, проще; через min()).
          Просто выбираем минимальное значение из последних трёх и сравниваем с порогом 20. Если уж минимальное больше порога, то остальные тем более не меньше, т.е. все три последних значения превысили порог:
          Code:
          min(/myhostname/system.run[find /path -type f -name *.gz | wc -l],#3)>20

          Comment

          • yadvlz
            Junior Member
            • May 2016
            • 5

            #6
            Всё получилось, благодарю!

            Comment

            Working...