Ad Widget

Collapse

Вычисляемое значение с нарастающим итогом

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • ADvorkin
    Junior Member
    • Jan 2018
    • 27

    #1

    Вычисляемое значение с нарастающим итогом

    Попытался настроить тригер с информированием от отсутствии активности порта в течение 10 дней. Обычный триггер min(10d) вполне закономерно сожрал весь кэш на 1000 портах. Поэтому возникла идея создать новый элемент данных, который бы подсчитывал время неактивности порта. Для этого надо брать предыдущее значение этого параметра, но функция last(item) не работает с неподдерживаемыми значениями, то есть подсчет не может стартовать, пока туда принудительно не записано любое числовое значение. Но как его записать, ведь в вычисляемых элементах данных нет условных операторов?

    Можно в элемент данных записывать дату последней активности (через функцию now() и предыдущее значение элемента), но все равно проблема старта снятия данных остается актуальной: если предыдущих данных нет, то возникает ошибка not supported.

    Возможно решение уже давно существует, но я не смог его найти. Если так, то ткните меня носом в него.
    Last edited by ADvorkin; 05-11-2019, 09:44.
  • Ivan Egorkin
    Junior Member
    • Nov 2019
    • 7

    #2
    Можете дать чуть больше информации.
    1. что у вас в данных по активности? Приведите примеры из "последние данные".
    2. Дайте пример вашего элемента данных.
    В случае если в результате вывода есть числовые данные их можно выцепить через regexp.
    Если у вас текстовая строка, можно попробовать сделать вычисляемый элемент данных, он уже в свою очередь будет числовым значением.

    Comment

    • ADvorkin
      Junior Member
      • Jan 2018
      • 27

      #3
      Я хочу создать элемент данных, в котором сохраняется количество минут, которые порт был неактивен. Написал вот такую формулу для элемента данных ifLastActive[A4], которая работает: last(ifLastActive[A4])*(last(ifOperStatus[A4])-1)*(2-last(ifAdminStatus[A4]))+1. Но она работает только если ifLastActive[A4] содержит данные. Если данных нет, то я получаю ошибку: Cannot evaluate expression: "Cannot evaluate function "last()": item "Switch1:ifLastActive[A4]" not supported." Что вполне логично, поскольку там действительно нет значений. Но если я любым способом туда значение засовываю (например, с помощью формулы "0"), то подсчет стартует.

      Альтернативным будет решение с элементом данных, где будет хранится дата последней активности порта - я смогу ее обработать в тригере.
      Last edited by ADvorkin; 05-11-2019, 10:38.

      Comment

      • Ivan Egorkin
        Junior Member
        • Nov 2019
        • 7

        #4
        Я сам относительно новичок в Заббиксе, но постараюсь вам помочь используя те знания которые я уже подчерпнул.
        У вас есть периоды неактивности оборудования и нужно вести их подсчет т.е. например у вас был период неактивности с 12-00 по 15-00 потом была активность с 15-00 по 17-00 и потом опять неактивность. и вам нужно запомнить предидущий период в 3 часа и плюсовать к нему новый период?
        Пожалуйста скажите все же какие данные получает ваш элемент данных.

        Comment

        • ADvorkin
          Junior Member
          • Jan 2018
          • 27

          #5
          Я не понимаю о каких периодах неактивности идет речь. У меня порты активны всегда, но иногда клиенты съезжают. Вот мне и надо "поймать" когда порт в течение 10 дней не включился ни разу. Сейчас это делается с помощью тригера {Switch1:ifAdminStatus[Port 24].last()}=1 and {Switch1:ifOperStatus[Port 24].min(10d)}=2. Но забикс хранит 14400 элементов данных (ежеминутно за 10 дней) для каждого из 1000 портов в кэше, что приводит к исчерпанию кэша. Поэтому и возникла идея создать элемент данных где хранился период с последней активности порта. Тогда никаких проблем с кэшем не будет, даже если увеличить период.

          Comment

          • Semiadmin
            Senior Member
            • Oct 2014
            • 1625

            #6
            Если Zabbix 4.2 или выше, я бы попробовал троттлинг без хартбита и триггер вроде
            Switch1:ifAdminStatus[Port 24].last()}=1 and {Switch1:ifOperStatus[Port 24].last()}=2 and {Switch1:ifOperStatus[Port 24].nodata(10d)}=1.
            Или с троттлинг с хартбитом и тот же триггер, который у вас сейчас.

            Comment

            • ADvorkin
              Junior Member
              • Jan 2018
              • 27

              #7
              К сожалению у меня Zabbix 3.2, но идею я понял. Любопытно.

              Comment

              • ADvorkin
                Junior Member
                • Jan 2018
                • 27

                #8
                Originally posted by Semiadmin
                Если Zabbix 4.2 или выше
                Почитал внимательно про тротлинг и подумал, что это хороший повод обновить версию Zabbix.

                Comment

                • Semiadmin
                  Senior Member
                  • Oct 2014
                  • 1625

                  #9
                  В 3.2 можно попробовать создать искусственный тренд - вычисляемый айтем с функцией вроде min("ifOperStatus[Port 24]",1h) и периодом обновления раз в час. В триггере оперировать им.

                  Comment

                  • ADvorkin
                    Junior Member
                    • Jan 2018
                    • 27

                    #10
                    Тоже отличная идея. Объем кеша сразу уменьшается в 60 раз! Вот что значит свежий взгляд - я уже неделю мучаю Заббикс, оптимизируя его.

                    Comment

                    • ADvorkin
                      Junior Member
                      • Jan 2018
                      • 27

                      #11
                      Originally posted by Semiadmin
                      В 3.2 можно попробовать создать искусственный тренд - вычисляемый айтем с функцией вроде min("ifOperStatus[Port 24]",1h) и периодом обновления раз в час. В триггере оперировать им.
                      Переделал мониторинг всех коммутаторов на такой вариант - кэш свободен на 82%. Супер! Спасибо за подсказку.

                      Comment

                      Working...