← Все заметки

· 1 мин чтения

p95 в мониторе доступности: метод ближайшего ранга и чего он не скрывает

Как uptime-monitor считает p50/p95 задержки и аптайм, почему выбран метод ближайшего ранга и где эти цифры обманчивы.

Проект: uptime-monitor

Монитор показывает p50 и p95 задержки успешных проверок за 24 часа. Среднее здесь плохо подходит: один выброс сдвигает его, а медленный хвост пользователи как раз и чувствуют.

Ближайший ранг

Процентиль p считается как элемент отсортированного списка с номером ceil(p/100 * N). Для 20 измерений p95 равен 19-му по возрастанию. Никакой интерполяции: результат всегда реальное измерение.

rank := int(math.Ceil(p / 100 * float64(len(s))))
return s[rank-1]

Функция чистая: срез не меняется, для пустого среза вернётся 0, границы p<=0 и p>=100 обработаны отдельно. Так её легко покрыть тестами.

Аптайм

Аптайм это доля успешных проверок, ok / total * 100. Важная оговорка из README: он считается по числу проверок, а не по длительности, поэтому у проверок с разным интервалом цифры несопоставимы по точности.

Где цифры обманывают

  • На малом числе измерений p95 почти равен максимуму.
  • Агрегаты считаются запросами по сырой истории: для десятков проверок это мгновенно, для тысяч понадобятся предагрегаты.
  • Проверки идут с одной машины, это не распределённый мониторинг из нескольких регионов.