Ad Widget

Collapse

Функции в триггере. Базовые вопросы про last(#) и другое

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Diesel315
    Senior Member
    • Jan 2020
    • 159

    #1

    Функции в триггере. Базовые вопросы про last(#) и другое

    Добрый день!

    Поясните пожалуйста по функциям в триггерах и в частности при использовании - #
    Например применительно к last (#) я только сейчас увидел, что это не "последние n-ые значение", а "послднее n-ое значение"
    Из документации (last(#3) - третье самое новое значение (не три последних значения))

    Как это понимать с точки зрения срабатывания?
    Например при last(/12R4.2-UPS.18.16/zabbix[host,snmp,available],#2)=0 и получении значений 1 - 1 - 1 - 0 он сработает сразу? Так? Ведь в данных 1 - 1 - 1 -0 последние два новых значения это 1 - 0, и последнее второе новое значение как раз 0

    Правильно понимаю логику?

  • Semiadmin
    Senior Member
    • Oct 2014
    • 1625

    #2
    вот это логика....я бы до такого не додумался

    Comment

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

      #3
      last(), оно же last(#1) - это просто последнее значение
      last(#2) - предпоследнее, т.е. не последнее, а второе с конца
      last(#3) - третье с конца
      last(#4) - четвёртое с конца
      ...и так далее.

      Возможно, немного вводит в заблуждение русский перевод, сделанный максимально близко к английскому оригиналу.
      Если так, то хотелось бы отзывов, как аккуратнее эту мысль сформулировать, чтобы было понятно и, в то же время, корректно.
      Last edited by Kos; 22-02-2024, 10:05.

      Comment

      • Diesel315
        Senior Member
        • Jan 2020
        • 159

        #4
        Первый мой пост да извиняюсь полный "вах..." Логика вышла из чата как говориться. Просто мозги уже едут...
        Посидел, подумал, кажется разобрался...

        Originally posted by Semiadmin
        вот это логика....я бы до такого не додумался
        Вам смешно, а я у меня уже "тихо свистит" от того, что вроде и настроено как надо, но что-то не то, не так срабатывает как мне нужно.
        Начинаю внимательнее изучать вопрос, оказывается есть нюансы, которые я только сейчас увидел.

        Например раньше я думал, что last(****,#2)=0 сработает, если последнИЕ два значения будут ноль, но получается ошибался.
        Только сейчас увидел в документации пример:

        В случае с функцией last параметры с символом решётки имеют другой смысл - они обозначают N-ое предыдущее значение, таким образом, с учетом заданных значений 3, 7, 2, 6, 5 (от самого последнего к наименее последнему значению):

        last(/узел сети/ключ,#2) вернёт '7'
        last(/узел сети/ключ,#5) вернёт '5'


        И получается что допустим получая значения: 1 - 1 - 1- 0 -1 у меня срабатывает триггер на последнем значении, так как last(****,#2)=0. И тут я падаю в ступор.
        Триггер сработал, но ведь там 1, как так...
        А оказывает все верно он сработал, так как с конца самое последнее новое 2-ое значение = 0

        Originally posted by Kos
        Возможно, немного вводит в заблуждение русский перевод, сделанный максимально близко к английскому оригиналу.
        Если так, то хотелось бы отзывов, как аккуратнее эту мысль сформулировать, чтобы было понятно и, в то же время, корректно​
        Спасибо за пояснения от вас. Они более корректные и лучше дают возможность понять суть # при использовании с last
        Отзывы...

        Моя наверное проблема (хотя отчасти ). Я смотрел инструкцию на русском для предыдущих версий (https://www.zabbix.com/documentation...gers/functions)
        Там описание вводит в заблуждение легкое, так как написано:
        last(#3) - третье самое новое значение (не три последних значения)
        И нет примера!

        Для новых версий (6.4) описание тоже самое, но уже есть пример​:
        For example:
        last() is always equal to last(#1)
        last(#3) - third most recent value (not three latest values)

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

        Example:
        => last(/host/key) → retrieve the last value
        => last(/host/key,#2) → retrieve the previous value
        => last(/host/key,#1) <> last(/host/key,#2) → the last and previous values differ

        See also first().
        Тут ключевой момент, что во всех версиях не совсем корректно изначально давался посыл:
        last(#3) - third most recent value (not three latest values)
        И только в последней версии в примере указали ключевое слово - "previous"
        last(/host/key,#2) → retrieve the previous value
        Именно этого ключевого слова "previous"​ не хватает в самом начале​​. Когда вы мне объяснили
        last(#2) - предпоследнее, т.е. не последнее, а второе с конца
        стало понятно...
        Иначе говоря я бы заменил в инструкции:
        last(#3) - третье самое новое значение (не три последних значения)
        на
        last(#3) - третье самое новое (предыдущее) значение с конца (не три последних значения)​​

        Comment

        • Diesel315
          Senior Member
          • Jan 2020
          • 159

          #5
          А можете еще подсказать про # и использовании max/min?
          Например:
          max(****,#3)>=75

          Я правильно понимаю, что триггер сработает, если только! последние три значения будут больше либо равно 75.
          То есть при получении значений: 20-20-30-40-50-75-75-75 тригер сработает после получения третьего значения 75 (три последних значения больше или равно 75)?

          Comment

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

            #6
            Спасибо за отзыв, постараюсь учесть.
            Originally posted by Diesel315
            А можете еще подсказать про # и использовании max/min?
            Например:
            max(****,#3)>=75
            Я правильно понимаю, что триггер сработает, если только! последние три значения будут больше либо равно 75.
            То есть при получении значений: 20-20-30-40-50-75-75-75 тригер сработает после получения третьего значения 75 (три последних значения больше или равно 75)?
            Нет, опять понимаете неправильно
            max(****,#3) - это максимальное из трёх последних значений.
            Т.е. условие max(****,#3)>=75 сработает тогда, когда хотя бы одно из трёх последних значений будет не менее, чем 75.
            Если нужно, чтобы все три последних значения были не менее 75, то вам нужна обратная функция - не max(), а min(): min(****,#3)>=75

            Comment

            • Diesel315
              Senior Member
              • Jan 2020
              • 159

              #7
              Originally posted by Kos
              Нет, опять понимаете неправильно
              Хмм... да ё-мое)
              Спасибо!

              Comment

              • Alex_UUU
                Senior Member
                • Dec 2018
                • 541

                #8
                2Kos Вот не знаю, что в последних версияхъ перевода, но что не попадалось, всегда четко было прописано что означает # и чем отличается в агрегированных функциях (сейчас я топикстартера запутаю) и в ласте.:-)

                2 Diesel315​ Если у тебя только 1 - Ок, 0 - проблема, то чтобы триггер сработал, если идут подряд 3 нуля, можно min(#3)=0, можно sum(#3)=0 можно через 3 Last :-) можно через count/
                Да, это не работает как хочется, если в предобработке стоит "Не сохранять одинаковые значения".. :-)

                Comment

                Working...