Правильное скользящее среднее для real-time мониторинга

    Правильный real-time мониторинг системы, дело не такое простое, как может показаться на первый взгляд.

    Самый распространенный пример — измерение времени отклика сервера на запрос. Допустим у нас всё есть:
    — сервер для каждого запроса вычисляет execution time, складывает в счётчик
    — сервер умеет отдавать значение счётчика по внешнему запросу
    — есть monitoring сервер который собирает значения каждый poll interval, хранит, агрегирует и рисует графики

    Решение в лоб — измерять мгновенное значение счётчика — особого смысла не имеет, при poll interval в одну или пять минут, мы получим мгновенное значение производительности системы измеренное по последнему запросу. Если все 5 минут до этого исполнялись запросы по 2секунды или больше, а последний был легкий на 20ms мы увидим только 20ms. Или наоборот.

    Стандартное решение — скользящее среднее по последним N запросам. Решение работает замечательно, пока N запросов выполняются за время меньшее poll interval. Если нагрузка падает, получается вот такое вот:



    Между полночью и 4-мя часами утра либо не было запросов вовсе, либо было меньше N. Значение скользящего среднего не менялось и создаётся обманчивое впечатление, что сервер обрабатывал все запросы за 6ms.

    Ниже, тот же счётчик, только с другого сервера где скользящее среднее было модифицировано.



    Картина видна гораздо лучше. Видно где были запросы, а где не было.

    Модификация довольно простая. Кроме параметра N — размера окна для скользящего среднего. Вводится ещё один параметр — T, время забывания (expiration time), все значения в окне, старше T не учитываются при подсчёте среднего.

    Выбор T (ms) для данного значения poll interval (ms) — это другая интересная проблема.
    Если T << poll interval, (много меньше) будут потерянные значения
    Если T >> poll interval, (много больше) будет график #1
    В первом приближении, можно принять T = 2 * poll interval
    Поделиться публикацией

    Похожие публикации

    Комментарии 9

      +1
      Если я правильно понимаю, это у вас легко модифицированный вариант weighted moving average для N отсчетов, где Windex..Windex+N = 1, Wо..Windex-1=0, верно?
        0
        да, абсолютно.
        0
        Тср = Тпосл * k + Tср * (1 — k), где k зависит от частоты измерений
          0
          Это уже экспоненциальное :)
          0
          Может уже стоит использовать средства мониторинга которые поддерживают такое из коробки? :)
            0
            а какие поддерживают?
              0
              zabbix.
                0
                обзоров cacti vs xabbix vs nagios vs ganglia не встречали?
                  0
                  cacti не мониторинг, это система сбора и визуализации статистики.
                  nagios мониторниг, но заточен он под обработку событий а не данных, т.е. данные надо предварительно обработать, а уже потом кормить в nagios.
                  zabbix позволяет собирать данные и преобразовывать в события.
                  ganglia судя по тому что я вижу это что-то типа cacti, но распределенное.

                  Что выбирать сильно зависит от того что вы хотите от системы мониторинга.

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое