28

Мониторинг: avarage time vs percentile

Всем привет! Для всех, кто сталкивался с мониторингом или любым подсчетом большого количества данных, сталкивался с таким понятием как "среднее значение".

Но истинно ли оно?

Мониторинг: avarage time vs percentile IT, Мониторинг, Статистика, Grafana, Длиннопост

Давайте разберем, что есть avg и percentile.

Avg - среднее арифметическое нескольких чисел, сумма этих чисел, которую разделили на количество слагаемых.

Процентиль(он же квантиль) - это определённая часть выборки данных. Чаще всего используют 50, 75, 90, 99 процентили.

Если со средним значением все понятно, то процентиль проще пояснить на примере. Допустим, у нас есть 10 баз данных, на которые стабильно поступают SQL запросы. Мы знаем, что в среднем наша норма ответа на один тяжеловесный запрос около 1000ms в одной БД. Но одна из БД сегодня под повышенной нагрузкой, и не справляется с нагрузкой.

Возьмем значение для последней БД 19000ms. Если считать среднее значение, то выйдет такая картина:

(9000 + 19000) \ 10 = 2 800 ms время выполнения запроса для каждой БД. Что это значит? Имея такую картину, мы первым делом осознаем, что остальные 9 серверов должны были превысить допустимый лимит в условных 1500ms. Но если проверить вручную, то выяснится, что остальные 9 БД обрабатывают тяжеловесный запрос все так же 1000ms.

Возьмем для подсчета 50-й и 99-й процентиль.

Для его подсчета нам потребуется набор входящих данных.

1121; 983; 1200; 891; 1068; 1042; 1000; 1010; 999; 19000;

Считается он по этой формуле:

Мониторинг: avarage time vs percentile IT, Мониторинг, Статистика, Grafana, Длиннопост

Где P-й процентиль списка из N упорядоченных по величине чисел (от меньших к большим) является наименьшее в списке число, которое больше, чем N процентов всех чисел исследуемого ряда. Например, для приведенного выше примера с временем выполнения запроса, 99-й процентиль означает время выполнения, которое больше, чем время выполнения 99% других БД.

50-й процентиль будет равен 1 026, это будет являться истинным средним значением для большинства серверов. Но откидывать из мониторинга последний сервер так же нельзя. Для этого мы считаем 99-й процентиль. Он будет равен 17 398.


Конечно вручную вам считать не придется, так как это умеют делать и системы мониторинга и прочие инструменты.

Когда мы посчитали процентили, мы можем их визуализировать на графиках, на которых сразу будет понятно, в каком случае проблемы имеют масштабный характер или же единичный.

Для визуализации своих метрик я использую grafana. Выглядеть это будет вот так:
Мониторинг: avarage time vs percentile IT, Мониторинг, Статистика, Grafana, Длиннопост

(график просто для примера, он не является визуализацией моих подсчетов)

Краткая мораль avg - зло(в большинстве случаев), процентиль - добро. Всем спасибо за внимание.

P.S. для подсчета процентилей использовался онлайн калькулятор.

Лига Сисадминов

2.2K постов18.8K подписчиков

Правила сообщества

Мы здесь рады любым постам связанным с рабочими буднями специалистов нашей сферы деятельности.