Ad Widget

Collapse

Сложные вычисления, среднее из 5-ти максимальных значений.

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Roman Tiukh
    Junior Member
    • Nov 2020
    • 5

    #1

    Сложные вычисления, среднее из 5-ти максимальных значений.

    Здравствуйте.
    Есть 40 однотипных узлов у каждого из которых есть условный элемент данных item.1.
    Мне нужно из 40 узлов взять последние значения item.1 и из 5-ти наибольших значений вычислить среднее.
    Как я могу это сделать?

    Тут английская версия.
    Last edited by Roman Tiukh; 10-11-2020, 08:46.
  • Whols
    Senior Member
    • Jul 2018
    • 133

    #2

    Comment

    • Whols
      Senior Member
      • Jul 2018
      • 133

      #3
      Единственное, вы не сможете взять "наибольшие 5", а только максимальное в группе.

      Comment

      • Roman Tiukh
        Junior Member
        • Nov 2020
        • 5

        #4
        Whols спасибо что ответили, но к сожалению этот вариант не решает поставленную задачу

        Comment

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

          #5
          Я правильно понял, что нужно:
          • взять по последнему (одному) значению для каждого из 40 хостов;
          • из них отобрать 5 наибольших (причём, часть из них могут и совпадать);
          • и уже из этих пяти вычислить среднее?

          Comment

          • Roman Tiukh
            Junior Member
            • Nov 2020
            • 5

            #6
            Kos Здравствуйте, да, все правильно.

            Comment

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

              #7
              Originally posted by Roman Tiukh
              Kos Здравствуйте, да, все правильно.
              Вот, честно говоря, как это делать штатными средствами - не представляю, но задача интересная.

              Хочется прикрутить агрегированные проверки, но не получается - слишком ограничен выбор операций для них (фактически, только 4 функции группировки, ни одна из которых не подходит).

              Объединять вычисления элементов данных с разных хостов можно в вычисляемых элементах данных, но тут свои "затыки".
              Во-первых, писать формулу, вручную перечисляя каждый из 40 однотипных элементов данных для каждого из хостов, - мягко говоря, тоскливо.
              Во-вторых (и это главное), там нет формул для вычисления "пяти наибольших элементов из сорока", и возможности использовать промежуточные переменные (как в каких-либо скриптовых языках) тоже нет.

              Можно было бы использовать препроцессинг (там есть Javascript), но там нет возможности обратиться к значениям других айтемов.
              Разве что... кажется, есть идея:
              • обращаемся к нужным элементам данных, используя API. Это можно делать либо внешним скриптом, либо (начиная с версии 5.2) - используя элемент данных типа "Script".
              • дальнейшую обработку делаем с помощью препроцессинга через Javascript. Она уже будет содержать нужные шаги:
                • извлечь из полученного JSON-а набор чисел в виде массива;
                • отсортировать этот массив в порядке убывания;
                • посчитать среднее арифметическое пяти первых элементов массива.

              Comment

              • Roman Tiukh
                Junior Member
                • Nov 2020
                • 5

                #8
                Kos Спасибо за ответ, а как на счет внешнего скрипта который будет спрашивать данные у Zabbix и возвращать результат? Просто я видел в инструкции что внешние скрипты бьют по продуктивности, ибо создают много процесов.
                Last edited by Roman Tiukh; 11-11-2020, 13:11.

                Comment

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

                  #9
                  Originally posted by Roman Tiukh
                  Kos Спасибо за ответ, а как на счет внешнего скрипта который будет спрашивать данные у Zabbix и возвращать результат? Просто я видел в инструкции что внешние скрипты бьют по продуктивности, ибо создают много процесов.
                  Ну, как вариант можно вообще всё делать внешним скриптом - это всегда работает
                  Я просто пытался как можно больше работы переложить на сервер Zabbix, оставив за скриптом лишь сбор данных, но не вычисления (тем более, что в v5.2 можно и без скрипта обойтись).

                  Да, каждый вызов скрипта - это отдельный процесс.
                  В вашем случае будет один вызов скрипта на получение всех данных от Zabbix-а, который, в свою очередь, наверное, может это сделать за одно обращение для всех 40 хостов (но я мало пользовался API и тут ориентируюсь слабо). Так что существенной дополнительной нагрузки это не должно создавать.

                  Comment

                  Working...