Ad Widget

Collapse

правильная функция для расчета среднего

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • jnsvano
    Senior Member
    • Feb 2013
    • 143

    #1

    правильная функция для расчета среднего

    Всем привет.
    Я задумался над вопросом, как правильно сказать Заббиксу использовать среднее значение для определенного промежутка времени.
    Вроде бы avg(5m) должно быть, но last(5m) тоже что-то выдает, или это последнее значение за 5 минут ?
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    В качестве параметра для функции last() можно передавать что угодно: эта функция свой параметр просто игнорирует, т.к. по определению возвращает одно конкретное значение (последнее).

    Comment

    • yukra
      Senior Member
      • Apr 2013
      • 1359

      #3
      Originally posted by Kos
      В качестве параметра для функции last() можно передавать что угодно: эта функция свой параметр просто игнорирует, т.к. по определению возвращает одно конкретное значение (последнее).
      Не всегда: last (sec|#num,<time_shift>)
      The most recent value. sec (ignored) or #num - the Nth most recent value
      time_shift (optional) - see avg() Supported value types: float, int, str, text, log

      Take note that #num works differently here than with many other functions.
      For example:
      last() is always equal to last(#1)
      last(#3) - third most recent value (not three latest values)

      Zabbix does not guarantee exact order of values if more than two values exist within one second in history.

      The #num parameter is supported since Zabbix 1.6.2.
      The time_shift parameter is supported since Zabbix 1.8.2.

      Comment

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

        #4
        Верно, спасибо за уточнение.
        Я имел в виду, что игнорируется, если задано в формате "продолжительность времени" (как у автора вопроса).
        Если же задавать через решётку в формате#n - будет браться n-ный с конца элемент.

        Comment

        • jnsvano
          Senior Member
          • Feb 2013
          • 143

          #5
          Спасибо, в общих чертах понял.
          Если для триггера берется например загрузка процессора avg(5m) > n, можно ли сделать так, чтобы оно рассчитывалась не постоянно, а скажем через какое-то время (5, 10 минут или неважно сколько)?
          Пример: триггер срабатывает, через минуту возвращается в нормальное состояние, и через минуту срабатывает опять (потому что по-видимому опять avg(5m) > n). Для этого параметра нет необходимости так часто извещать о проблеме, было бы хорошо получать извещение минимум раз в 5-10 минут....

          Comment

          • rough-84
            Senior Member
            • Oct 2014
            • 198

            #6
            Для этих целей есть гистериоз


            Допустим для вашего случая подойдёт триггер вида:

            ({TRIGGER.VALUE}=0&{host:system.cpu.util[,,avg5].last(0)}>80)
            and
            ({TRIGGER.VALUE}=1&{host:system.cpu.util[,,avg5].last(0)}>50

            Сработает при >80 и вернётся в ок. когда будет меньше 50
            Last edited by rough-84; 22-01-2016, 13:42.

            Comment

            • jnsvano
              Senior Member
              • Feb 2013
              • 143

              #7
              Originally posted by rough-84
              Допустим для вашего случая подойдёт триггер вида:
              ({TRIGGER.VALUE}=0&{host:system.cpu.util[,,avg5].last(0)}>80)
              and
              ({TRIGGER.VALUE}=1&{host:system.cpu.util[,,avg5].last(0)}>50
              Сработает при >80 и вернётся в ок. когда будет меньше 50
              OK, но разве там должно быть "AND", а не "OR" ?
              В любом случае почему-то не получается создать такой триггер, все время получаю ошибку типа:
              "Incorrect trigger expression. Check expression part starting from
              " & {host:system.cpu.util.avg(5m)}>75) OR ({TRIGGER.VALUE}=1 & {host:system.cpu.util.avg(5m)}<50)".

              Соответственно, триггер мой выглядит так:
              ({TRIGGER.VALUE}=0 & {host:system.cpu.util.avg(5m)}>75) OR ({TRIGGER.VALUE}=1 & {host:system.cpu.util.avg(5m)}<50)

              Comment

              • rough-84
                Senior Member
                • Oct 2014
                • 198

                #8
                Да я ошибся, там конечно же OR
                Ошибка скорее всего где то в названии item
                Убедитесь что обычный триггер host:system.cpu.util.avg(5m)>75 не выдаёт ошибку.
                Ну и {host:system.cpu.util.avg(5m)}<50) сдесь должно быть >50

                Comment

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

                  #9
                  Originally posted by jnsvano
                  получаю ошибку типа:
                  "Incorrect trigger expression. Check expression part starting from
                  " & {host:system.cpu.util.avg(5m)}>75) OR ({TRIGGER.VALUE}=1 & {host:system.cpu.util.avg(5m)}<50)".
                  Видимо, у Вас Zabbix версии 2.4. Там по сравнению с предыдущими версиями (в частности, 2.2) поменялся синтаксис выражений в триггерах: вместо "&" и "|" надо писать "and" и "or". Т.е. логика триггерного выражения правильная, а вот синтаксис - нет :-)

                  Comment

                  • jnsvano
                    Senior Member
                    • Feb 2013
                    • 143

                    #10
                    Originally posted by Kos
                    Видимо, у Вас Zabbix версии 2.4. Там по сравнению с предыдущими версиями (в частности, 2.2) поменялся синтаксис выражений в триггерах: вместо "&" и "|" надо писать "and" и "or". Т.е. логика триггерного выражения правильная, а вот синтаксис - нет :-)
                    Да, действительно так. С or и and все заработало, спасибо.

                    Comment

                    Working...