Ad Widget

Collapse

Функция Last

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • teddy
    Senior Member
    • Dec 2017
    • 234

    #1

    Функция Last

    Коллеги!
    Zabbix Server 6.4.1
    Сломал мозг на элементарном.
    Поясните где ошибка в формуле триггера
    Code:
    last(/192.168.1.124/custom.ora.QUEUEPAYMENTS,:6s)=0
    или
    Code:
    last(/192.168.1.124/custom.ora.QUEUEPAYMENTS,:now-6s)=0
    если учесть что выражение верно:
    Code:
    last(/192.168.1.124/custom.ora.QUEUEPAYMENTS,#6)=0
    Но мне нужен именно сдвиг по времени.

    Сервер пишет:
    Invalid parameter "/1/expression": incorrect expression starting from "last(/192.168.1.124/custom.ora.QUEUEPAYMENTS,:6s)=0"
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    В соответствии с документацией, функция last() имеет формат:
    last (/host/key,<#num<:time shift>>)​
    Т.е. если указывается параметр "time shift", то обязателен и параметр "#num":
    Code:
    last(/192.168.1.124/custom.ora.QUEUEPAYMENTS,#1:now-6s)=0
    Попробовал у себя сделать триггер в таком же формате - успешно создаётся.

    Comment

    • teddy
      Senior Member
      • Dec 2017
      • 234

      #3
      ухтышка. до такого варианта я не додумался так и думал что какая то мелочь.
      last(/192.168.1.124/custom.ora.QUEUEPAYMENTS,#1:now-6m)
      Тогда правильно ли я понимаю смысл - верни мне последнее значение со сдвигом на 6m?
      по сути значение которое мы получили не менее чем 6m назад? т.е если мы пытаемся получать данные условно раз в 1 минуту, то с учетом очередей задержек и всего остального такая функция вернет значение параметра который был получен последним от хоста в момент времени 6 минут назад?

      PS проверил - действительно в такой нотации работает. и вроде бы даже как задумано. последнее еще проверяю.
      Огромное спасибо!
      Last edited by teddy; 11-04-2023, 11:52.

      Comment

      • orbital
        Senior Member
        • Dec 2019
        • 104

        #4
        Добрый вечер, а можно ли както ограничить last сегодняшним днем? Т е если посл значение было вчера то ждать пока появится сегодняшнее?

        Comment

        • Alex_UUU
          Senior Member
          • Dec 2018
          • 541

          #5
          Т.е. ситуация, когда данных нет?
          Например сейчас 1 час ночи, мы вытаскивает ласт минус 2 часа. Но это вчерашний день и данные не нужны?
          Тут разве что использовать time и им отсекать полученное значение

          Comment

          • orbital
            Senior Member
            • Dec 2019
            • 104

            #6
            Уже решил вопрос другим способом. Заинтересовало про time, расскажите подробнее.

            Comment

            • Alex_UUU
              Senior Member
              • Dec 2018
              • 541

              #7
              Там есть функция time выдает число в виде ЧЧММСС. Никакой смысловой нагрузки не несет, только для сравнения.
              Например:
              item.last(2h)=0
              and
              item.time()>='020000'

              Вроде так. Должно срабатывать если 2 часа назад значение было равно нулю и текущее время больше 2 часов ночи.Т.е. если сейчас - час ночи, мы смотрим значение на 23 часа вчера и оно равно нулю - то не сработает.​

              Comment

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

                #8
                Originally posted by Alex_UUU
                Например:
                item.last(2h)=0
                and
                item.time()>='020000'
                Как профессиональный зануда , немного уточню: идея правильная, конкретная реализация - не совсем:
                • в функции last() нельзя указывать период (2h), только порядковый номер (#1). Чтобы проверить последнее значение два часа назад, нужно к этому номеру добавить сдвиг (о чем, собственно, я и писал чуть выше): last(/хост/айтем,#1:now-2h).
                • функция time() возвращает целое число в указанном формате. Т.е. при сравнении апострофы не нужны (хотя, наверное, будет работать и с ними, но добавит лишнее преобразование типов):
                Code:
                item.time()>=020000

                Comment

                • Alex_UUU
                  Senior Member
                  • Dec 2018
                  • 541

                  #9
                  Originally posted by Kos
                  Как профессиональный зануда ,
                  - Вы что, и пальцы за меня загибать будете?
                  - Ага
                  Ну надо же автору дать немного и на подумать :-)

                  Comment

                  • orbital
                    Senior Member
                    • Dec 2019
                    • 104

                    #10
                    Привет, напишу здесь, чтобы не плодить новых тем. Есть "елемент данных1" и "елемент данных 2" У первого срок хранения 14 часов, второй берет последнее значение из первого в определенное время. Ранее это работало нормально и если к примеру в первом елементе данных нет значений то и во втором в заданное время тоже ничего не будет, но вот примерно мес 2 назад всё испортилось и теперь даже если в первом нет данных то во втором в то определенное время появляется значение которое было последним за пределами этих 14 часов, хотя в списке значений ничего нет....

                    Comment

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

                      #11
                      orbital, а можно подробнее про эти два элемента данных - какие у них типы данных (текст или число, если число - диапазон допустимых значений), и что вы хотите получить во втором из них в случае отсутствия в истории первого? Ну и упомяните версию Zabbix, о которой идёт речь. Второй элемент данных - вычисляемый?

                      Из общих соображений, я бы использовал такой подход: в формуле для второго элемента данных (если он вычисляемый) с помощью функции count() проверял бы, есть ли у первого элемента данных значения за интересующий меня период, и в зависимости от этого дальше возвращал бы либо нужное значение, либо какое-то заведомо некорректное. А в предобработку можно добавить шаг, который при некорректном значении выполнял бы нужное действие (помечал бы второй элемент данных как неподдерживаемый, отбрасывал как ненужный либо заменял бы на какое-то другое, сигнализирующее о том, что у первого элемента данных значений нет).

                      Comment

                      • orbital
                        Senior Member
                        • Dec 2019
                        • 104

                        #12
                        Originally posted by Kos
                        orbital, а можно подробнее про эти два элемента данных - какие у них типы данных (текст или число, если число - диапазон допустимых значений), и что вы хотите получить во втором из них в случае отсутствия в истории первого? Ну и упомяните версию Zabbix, о которой идёт речь. Второй элемент данных - вычисляемый?

                        Из общих соображений, я бы использовал такой подход: в формуле для второго элемента данных (если он вычисляемый) с помощью функции count() проверял бы, есть ли у первого элемента данных значения за интересующий меня период, и в зависимости от этого дальше возвращал бы либо нужное значение, либо какое-то заведомо некорректное. А в предобработку можно добавить шаг, который при некорректном значении выполнял бы нужное действие (помечал бы второй элемент данных как неподдерживаемый, отбрасывал как ненужный либо заменял бы на какое-то другое, сигнализирующее о том, что у первого элемента данных значений нет).
                        Тип данных текст, в случае если в первом елементе ничего нет, то и во втором тоже не должно быть ничего, так работало до 1 июня. Второй элеметнт данных вычисляемый, версия сервера 6.4.18. Вчера поставил предобработку отбрасывание повторяющихся значений на втором элементе и вроде это помогло, возможно в очередном обновлении сервера появился такой глюк.

                        Comment

                        Working...