Successfully reported this slideshow.
Your SlideShare is downloading. ×

MathOps или математика в мониторинге / Павел Труханов (okmeter.io)

Ad

MathOps или
математика в
мониторинге
Павел Труханов
okmeter.io

Ad

Чем вызван этот доклад

Ad

Системы массового
обслуживания

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Check these out next

1 of 70 Ad
1 of 70 Ad

MathOps или математика в мониторинге / Павел Труханов (okmeter.io)

Download to read offline

РИТ++ 2017, Root Conf
Зал Конгресс-холл, 6 июня, 14:00

Тезисы:
http://rootconf.ru/2017/abstracts/2725.html

Мониторинг — это и cpu usage, iowait, load average, и времена ответа сайта и отдельных сервисов.

Тайминги ответа — среднее по всем запросам? Нет, подайте лучше медиану, а то и 99-перцентиль!

Но что такое перцентиль? Посмотрим в википедии и всё поймём! Не совсем.
...

РИТ++ 2017, Root Conf
Зал Конгресс-холл, 6 июня, 14:00

Тезисы:
http://rootconf.ru/2017/abstracts/2725.html

Мониторинг — это и cpu usage, iowait, load average, и времена ответа сайта и отдельных сервисов.

Тайминги ответа — среднее по всем запросам? Нет, подайте лучше медиану, а то и 99-перцентиль!

Но что такое перцентиль? Посмотрим в википедии и всё поймём! Не совсем.
...

Advertisement
Advertisement

More Related Content

More from Ontico (20)

Advertisement

MathOps или математика в мониторинге / Павел Труханов (okmeter.io)

  1. 1. MathOps или математика в мониторинге Павел Труханов okmeter.io
  2. 2. Чем вызван этот доклад
  3. 3. Системы массового обслуживания
  4. 4. События — время и статус ответа Что мы делаем с этими событиями Мониторим — контроль по порогам, что всё хорошо Графики — для наглядности операторам
  5. 5. Графики
  6. 6. Графики
  7. 7. Как сделать график?
  8. 8. Как сделать график? Из 10 или 100 или 1000 событий за интервал
  9. 9. Как сделать график? Из 10 или 100 или 1000 событий за интервал С разными типами С разными таймингами С разным результатом
  10. 10. 1000 таймингов — что с ними делать?
  11. 11. 1000 таймингов — что с ними делать? Плотность распределения
  12. 12. 1000 таймингов — что с ними делать? Плотность распределения Функция распределения
  13. 13. 1000 таймингов
  14. 14. 1000 таймингов
  15. 15. 1000 таймингов
  16. 16. 1000 таймингов — каждую минуту
  17. 17. 1000 таймингов — каждую минуту
  18. 18. 1000 таймингов — каждую минуту
  19. 19. 1000 таймингов — каждую минуту
  20. 20. 1000 таймингов — каждую минуту! 1000 таймингов — каждую минуту!
  21. 21. 1000 таймингов Что с ними делать? Взять статистику!
  22. 22. 1000 таймингов — ура, график!
  23. 23. Угадай статистику — чему равно среднее? • 100 • 150 • 200 • 250 • 300 • 350
  24. 24. Угадай статистику — чему равно среднее? avg
  25. 25. Угадай статистику — чему равно среднее? • 200 • 250 • 300 • 350 • 400
  26. 26. Угадай статистику — чему равно среднее? avg
  27. 27. Угадай статистику — чему равно среднее? avg
  28. 28. Почему не среднее Физический смысл Робастность к выбросам
  29. 29. Почему не среднее Физический смысл Робастность к выбросам
  30. 30. 1. Узнать как ведет себя система в “норме” 2. Выбрать пороги 3. Мониторить, алертить 4. … 5. PROFIT
  31. 31. Как ведёт себя система “в норме” avg
  32. 32. avg Как ведёт себя система “в норме” p50
  33. 33. avg Угадай p90 p50 • 300 • 350 • 400 • 450 • 500 • 550 • 600
  34. 34. avg Как ведёт себя система “в норме” p50 p90 • 300 • 350 • 400 • 450 • 500 • 550
  35. 35. Угадай p90 avg • 300 • 350 • 400 • 450 • 500 • 550
  36. 36. Угадай p90 p90avg • 300 • 350 • 400 • 450 • 500 • 550 • 600 • 650
  37. 37. p95? p90avg • 800 • 900?
  38. 38. p95? p95 • 1100 p90avg
  39. 39. Угадай перцентиль p95
  40. 40. Угадай перцентиль p95
  41. 41. Угадай перцентиль p95
  42. 42. Угадай перцентиль p95 p90
  43. 43. Угадай перцентиль p95 p90 p95
  44. 44. Мониторинг — SLA / SLO / SLi Например, P95 < 55мс
  45. 45. p90
  46. 46. Мониторинг — SLA / SLO / SLi p95 < 55мс p75 < 15мс p50 < 10мс
  47. 47. Мониторинг — SLA / SLO / SLi p95 < 50мс + p75 < 15мс 0 75 95 60 30 0
  48. 48. avg p50 p90 p95
  49. 49. Где на самом деле эти 5% ? p95
  50. 50. Где на самом деле эти 5% ? p95
  51. 51. p90% p95% p99% p99.9% ???
  52. 52. p90% p95% p99% p99.9% — МАЛОВАТО ???
  53. 53. Как на самом деле “находят” p9X
  54. 54. Как на самом деле “находят” p9X
  55. 55. Как на самом деле “находят” p9X
  56. 56. Как на самом деле “находят” p9X
  57. 57. Как на самом деле “находят” p9X
  58. 58. Что произошло
  59. 59. Как так? 8ч 1д
  60. 60. А как же пользователи? • Сессии длятся долго • Общее впечатление об отзывчивости сервиса • Один плохой response time сильно влияет • Важные ajax’ы и прочие ресурсы
  61. 61. Вероятность одной страницы быть лучше чем p99 = 99% =) Вероятность N страницам быть не хуже p99 = (0.99 ^ N) * 100% % пользователей которые наткнутся на что-то хуже p99 = (1 - (0.99 ^ N)) * 100% Для N = 10 это 10% Для p99.9 это 1%
  62. 62. Не доверяйте интуиции в статистике Every statistician ever.
  63. 63. Павел Труханов okmeter.io

Editor's Notes

  • Привет, Паша и я тоже усредняю перцентили

    Почему я могу говорить на эту тему — по должности приходится много про это думать и читать и думать
    Мы делаем мониторинг, чтобы тысячи инженеров

    Набралось
    Наболело
    Хочется поделиться и снять
  • StatsD — такая штука в которую вы легко оплёвываете свои измерения и она их агрегирует, считает от них статистику, дает удобно мониторить

    Появилась и набирает популярность идея “мониторь (измеряй) всё”

    Но, в statsD не без проблем — а популярность это раздувает.
  • Сервис - запросы - очереди

    Service times
    Response times

    Мониторинг важен! Чтобы пользователи были довольны.

    Но “давай добавим мониторинг” — неочевидные грабли, и интуиция вас и нас подводит!
    Одна из задач моего (доклада) — показать вам, что вы может быть кое-что не так понимали, и чтобы вы перестали доверять своей интуиции в области мат статистики.


    Бывают тормоза и отказы в обслуживании
    Отказы - фейл или таймаут (клиентский или внутренний)
    Сохраняем инфо — event.log
    Для веб — access.log, задержки — response time, отказы — http status
  • Бывают тормоза и отказы в обслуживании
    Отказы - фейл или таймаут (клиентский или внутренний)
    Сохраняем инфо — event.log
    Для веб — access.log, задержки — response time, отказы — http status

    Хорошо = нормально, как обычно
    Мониторинг бывает только по порогам, д(п)оказать это — одна из целей моего доклада
    В конце концов всё сводится к if (branch / jump) инструкции
    Нас в okmeter часто спрашивают — «Что хочется от порога - не статика, а сложная модель которая может быть преобразована в формулу базовыми данными для которой являются значения измерений в прошлых интервалах»


    Графики
    Наглядность важна — операторы принимают решения
    Показывают историю, импакт, динамику!

    Из этих двух пунктов следует какую и как использовать математику в мониторинге !
  • Тайм лайн — чтобы показать историю динамику

    Бывают Stacked, линии, точки и тп.

    Каждый момент времени — вертикальная полоска
  • Тайм лайн — чтобы показать историю динамику

    Бывают Stacked, линии, точки и тп.

    Каждый момент времени — вертикальная полоска

    Почему такой!
  • А у нас есть только одна вертикальная полоска (ну 800, ну даже 1600 точек на вашем retina экране)

    Реально у каждого типа свои тайминги
    Свои частоты по результатам и тп

    Ну то есть можно смотреть и обобщенно
    Но если разделять, то можно лучше влавствовать
    То есть все равно даже с одним “типом” запросов будут проблемы — ну поиск l=20 а ктото l=100
    Или тот же самый branch (mis)prediction в проце
  • А у нас есть только одна вертикальная полоска (ну 800, ну даже 1600 точек на вашем retina экране)

    Реально у каждого типа свои тайминги
    Свои частоты по результатам и тп

    Ну то есть можно смотреть и обобщенно
    Но если разделять, то можно лучше влавствовать
    То есть все равно даже с одним “типом” запросов будут проблемы — ну поиск l=20 а ктото l=100
    Или тот же самый branch (mis)prediction в проце
  • Плотность распределения — откладываем по горизонтали значение, а вверх количество

    Сначала еще раз — что такое тайминг?
    Область определения для таймингов [0, inf) — иногда реально [0, max timeout]
    Из непонимания этого оч частая ошибка — неправильное применение идей для Нормального распределения


  • Сначала еще раз — что такое тайминг?
    Область определения для таймингов [0, inf) — иногда реально [0, max timeout]
    Из непонимания этого оч частая ошибка — неправильное применение идей для Нормального распределения


  • На самом деле скорее что то такое, нижняя граница (тайминг меньше нуля!)

    Люди говорят “о, у нас log normal” — нет! Это модель. Реальность может быть сильно или несильно похожа на модель
  • Хотя на самом деле может быть вообще-то довольно разнообразным.

    Мы тут видим т.наз Би модальное ! От слова “мода, т.е. Пик, максимум. Их два.

    (Page)Кеш HIT и MISS или length=20 а кто-то length=1000
  • Реально же вот как-то так — у каждого типа свои тайминги, свои частоты по результатам и тп

    Вот мы допустим, поняли как устроено ваше распределение — как сделать график?
  • Вот мы допустим, поняли как устроено ваше распределение
    Все равно надо его на график отразить - pdf можно только так себе нарисовать

    Что делаем? Берем статистику!
  • Вот мы допустим, поняли как устроено ваше распределение
    Все равно надо его на график отразить - pdf можно только так себе нарисовать

    Что делаем? Берем статистику!
  • Вот мы допустим, поняли как устроено ваше распределение
    Все равно надо его на график отразить - pdf можно только так себе нарисовать

    Что делаем? Берем статистику!
  • Вот мы допустим, поняли как устроено ваше распределение
    Все равно надо его на график отразить - pdf можно только так себе нарисовать

    Что делаем? Берем статистику!
  • Вот мы допустим, поняли как устроено ваше распределение
    Все равно надо его на график отразить - pdf можно только так себе нарисовать

    Что делаем? Берем среднее и получаем time series chart
  • Сре́днее арифмети́ческое — сумма всех чисел, делённая на их количество.
    Самое известно.
    Не так плохо. В смысле что есть причины для которых оно придумано было. — Мат ожидание

    Что такое мат ожидание?

    Статическое / квази-статическое — днем / ночью и т.п.


    Недостатки: не соответствует интуитивному пониманию «среднего»

    Мода!
    Медиана! — для дискретных нечетко определена.

    OKAY
    а усечённое, геометрическое, гармоническое, степенное?

    Любая статистика, т.е. (условно) одно число от N наблюдений — это lossy сжатие с потерей данных.

    Фанаты перцентилей — нет!
    Как не бери от сложного распределения одно число, оно всё равно на разные вопросы не будет давать ответы.
  • Ну то есть мы вот эти все распределения в каждую минуту превратили просто в число

    И уже можем сделать график

    По нему можно увидеть, что ситуация квази-статическая =)

    Ну то есть среднее болтается в полтора раза, но не так что прям на порядок меняется.

    А что же это на самом деле нарисовали такое? “СРЕДНЕЕ”?
  • Игра

    Сеанс черной магии с разоблачением

    Ну вот это то что называется log normal распределение — если от него взять логорифм то получится нормальное.
    Т.е. Буквально это экспонента от нормального — примерно такое действительно можно часто наблюдать во всяких веб-сервисах
    Ну точнее наблюдать, что-то похожее.
  • Игра

    Сеанс черной магии с разоблачением
  • Игра

    Сеанс черной магии с разоблачением
  • Игра

    Сеанс черной магии с разоблачением
  • Игра

    Сеанс черной магии с разоблачением
  • 1
    Физ смысл — цент тяжести. Поэтому одно “далекое” измерение перевешивает, так получается по правилу рычага

    2
    меньшинство с аномальными значениями серьёзно смещают.

    next
  • Колокол!
    2
    меньшинство с аномальными значениями серьёзно смещают.
    Выбросы могут быть и частью распределения — так, в нормальном распределении каждое 22-е измерение будет выходить из «двух сигм», и каждое 370-е — из трёх.


    Почему мы вообще хотим что-то “устойчивое к выбросам” ?
    Какую на самом деле задачу решаем?
    Исследовательская — подходит. От туда и взялось. Для него и хотим робастность. Ну там вася который измерял заснул и получился выброс
    Берем МНК или Макс правдоподобие — т.е. исследование основной части закономерности. Понятно что мы детали или шумы хотим отбросить.

    Тут по среднему мы узнаем / поймем только лишь какую-то среднюю, центральную закономерность.

    Мониторинг.
    УЖе знаем “как должно” “как хотим”
    Что-то робастное к выбросам не подходит

    Т.к. Мы хотим иначе мы просто ХУДШЕЕ отбрасываем — такие взяли и закрыли глазки или отвернулись и надели розовые очки.

  • Понимания нет — хотим исследовать.
    Чтобы что?
    Потом мониторить
    Ставить цель улучшить
    Ограничения / свободы
    Высокоточный результат важен? Нет.
    Нужно ли делать систему аналитики? Может достаточно “на коленке” один раз посчитать?
    Есть ли чужое/априорное знание? Используем как отправную точку

    На примере. Что за система у нас? Интернет сервис для людей =)
    Для веб
    Google говорит надо 400ms время ответа
    Shopzilla / aws — задержки = снижение конверсии
    Основные или важные страницы
    Ведут себя по разному! Товар vs поиск
    Надо понимать для каждого типа
    Остальные — много разных, хорошо бы понимать хотя бы в целом
  • Это мы уже видели
    Это распределение вероятности — ну или частот в данном случае, т.к. это просто наблюдения снятые с реальной системы.

    Теперь мы хотим как-то охарактеризовать эту штуку, чтобы следить за ней.

    Одним числом характеризовать, как мы видели, что это не очень хорошая идея.

    Ну давайте несколькими числами!
    Тут вот и выходят на сцену перцентили!
  • Тут вот и выходят на сцену перцентили!


    Медиану мы уже видели — это ...

    Больше перцентилей
  • Игра

    Сеанс черной магии с разоблачением
  • Еще одна
  • Почему ?
    Там же уже нет ничего?
  • Почему ?
    Там же уже нет ничего?
  • Почему ?
    Там же уже нет ничего?
  • Последний (ну так)

    А, вас уже не обманешь — обрезано, значит там спрятано, где-то примерно где root conf, да?
    ~20 мс типа

    Смотрим...
  • Нет, нету

    Ок, значит 25
    Или 30 Кто за 30?
    Кто за 35
  • 35 это только p90!

    А p95 же где?
    Сожмём еще !
  • Блиииин, ну всё давайте остановимся.
    Смотрите — мои глаза мне говорят:
    почти все запросы наших пользователей лежат вот тут — до 50 ms
    Но p95 каким-то образом вон там.

    Почему так?
    Потому что Log - мозгу это сильно непривычно.


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

    Теперь хотим контроль, т.е. Задать пороги и по ним отслеживать.

    Ну ОК — раз p95 такая далёкая, давайте по ней всё смотреть и будет счастье
    т.к. Всё остальное заведомо лучше
    ТАк?
    Нет
  • Ок, теперь когда мы исследовательскую задачу решили

    Теперь хотим контроль, т.е. Задать пороги и по ним отслеживать.

    Ну ОК — раз p95 такая далёкая, давайте по ней всё смотреть и будет счастье
    т.к. Всё остальное заведомо лучше
    ТАк?
    Нет


    Обычно все говорят SLA, хотя там есть различия. но для нас и так норм.

    Ну вот зафиксировали типа себе такую планку — ОК? Ну там триггер завели на это. ОК?

  • Ок, теперь когда мы исследовательскую задачу решили

    Теперь хотим контроль, т.е. Задать пороги и по ним отслеживать.

    Ну ОК — раз p95 такая далёкая, давайте по ней всё смотреть и будет счастье
    т.к. Всё остальное заведомо лучше
    ТАк?
    Нет


    Обычно все говорят SLA, хотя там есть различия. но для нас и так норм.

    Ну вот зафиксировали типа себе такую планку — ОК? Ну там триггер завели на это. ОК?

  • Ок, теперь когда мы исследовательскую задачу решили

    Теперь хотим контроль, т.е. Задать пороги и по ним отслеживать.

    Ну ОК — раз p95 такая далёкая, давайте по ней всё смотреть и будет счастье
    т.к. Всё остальное заведомо лучше
    ТАк?
    Нет


    Обычно все говорят SLA, хотя там есть различия. но для нас и так норм.

    Ну вот зафиксировали типа себе такую планку — ОК? Ну там триггер завели на это. ОК?

  • То есть я хочу еще раз это обсудить
    Что мы тут упускаем из виду.

    Часто я вижу в системах мониторинга вот эти вот p95

    Во-первых 95 из 100 это значит есть еще 5%


  • Во-первых 95 из 100 это значит есть еще 5%

    Так вот где они?

    Давайте сожмем график — мы уже делали, там ничего не видно просто становится.
  • ВОТ ОНИ

    Ну это условность некая — они конечно не там, мы просто их собрали в этот последний столбец, чтобы их размазанными не смотреть

    И сразу все стало на свои места.
    5% это вообще-то не мало.
    каждый двадцатый

    Так прям сразу понятно, что 95 видимо мало.

    Что у нас больше 95? Ну 99 это красиво.
    Ну бывает конечно у кое-кого и p99 мониторится, я видел пару раз, но не часто.

    Ну бывает и 99.9
    но сейчас я попробую показать что и 99 это вообще-то не достаточно.


  • Что у нас больше 95? Ну 99 это красиво.
    Ну бывает конечно у кое-кого и p99 мониторится, я видел пару раз, но не часто.

    Ну бывает и 99.9
    но сейчас я попробую показать что и 3 - 999 это вообще-то не то, чтобы много,

    Мы говорим про мониторинг конечно. 999 для мониторинга, это мало!



  • Что у нас больше 95? Ну 99 это красиво.
    Ну бывает конечно у кое-кого и p99 мониторится, я видел пару раз, но не часто.

    Ну бывает и 99.9
    но сейчас я попробую показать что и 3 - 999 это вообще-то не то, чтобы много,

    Мы говорим про мониторинг конечно. 999 для мониторинга, это мало!


  • Ну всем сейчас доступны легко всякие графики.
    Ну и очень просто — давайте измерим с реальной системы p95 или 99 и нарисуем
  • Ну и очень просто — давайте измерим с реальной системы p95 или 99 и нарисуем

    Ну среднее мы уже рисовали, давайте для начала посмотрим на медиану p50
    Выглядит стабильно и хорошо в течение дня.
    Ну вот прям хоть заводи триггер что она не больше там 2.1мс

    Ну давайте все таки p90
  • Ну давайте все таки p90

    Ну ок, она по-шумнее - где казалось бы Робастность пресловутая, да?

    Ну давайте на p95 и p99 посмотрим
  • Ну давайте все таки p90

    Ну ок, она по-шумнее - где казалось бы Робастность пресловутая, да?

    Ну давайте на p95 и p99 посмотрим
  • Ну вот 99

    Ну ок, что мы видим?
    она по-шумнее - где казалось бы Робастность пресловутая, да?

    Ну разброс гиганский между p50 и p99 — но это мы уже видели. Ожидаемо.


    Ну то есть вот я хочу спросить — КАКОЙ ПОРОГ для p99 мы тут выберем.
    Ну вот видно что она где-то от 0.5с до 5 с , значит можно порог в 5 поставить

    НЕТ нет нет
  • Ваш мозг усреднил картинку и выбрал порог — ну допустим даже по верхней границе

    Но на самом деле так нельзя

    Опять статистика и интуиция разошлись

    А что на самом деле?

    В десять раз больше чем нас обманул наш мозг своей интуицией.

    Как это получается?
    Это если мы посмотрим с все наблюдения за 24 часа


  • А у нас какое-то распределение с длинным хвостом, и он перетягивает
    и несмотря на всю робастность перцентилей
    Реально вот так
  • Как это получается?

    Ну во первых уж так мозг устроен =)

    Во вторых у вашего мониторинга в день 1440 минутных замеров
    В данном случае перцентилей

    Если у вас чаще чем раз в минуту — ну значит еще хуше.

    Старшие перцентили как мы выше заметили — более шумные.
    Вот и получается, что мы замеряем каждую минуту и это к реальным перцентилям сервиса не относится никак.
    Ну то есть часто (из 1500 раз то!!) нам просто везёт и мы не видим этих реальных p99

    А их при условии 100rps (ну средненький проект не highload) это 1 запрос в минуту хуже чем этот минутный p99, 60 в час или 1.4 тысячи в день.
    ДА ПОФИГ, нормально!

    И этот эффект тем хуже чем чаще вы мониторите перцентиль и чем больше у вас пользователей/RPS.


    Во вторых у вас реально система работает не статически а квази — ночью запросов меньше, но зато кеши холоднее и т.п.

    Ну и тут мы на распутье — нам шашечки или ехать.
    Если вы хотите математически корректное решение, то нам нужно придумать модель сервиса и искать например максимальным правдоподобием это p99
    Потому что просто измерять — не выйдет — мы видели что оно просто растет с ростом времени измерения.

    Если же вы хотите инженерную задачу решать — то что то приближенное можно получить


  • Просто ссылаясь на смотря на более высокую перцентиль.
    На какую конкретно — не понятно, опять таки зависит от модели.

    Вот тут пример что 99 всреднем (ха-ха) похожа на “настроящую” 97

  • Ну или вот 100-тая (т.е. максимум) как приближение “настоящей” 99ой

    Метод конечно нематематичный и не то чтобы я его рекомендовал, просто как наблюдение привожу.
  • Про что мы забыли?
  • Все это подходит, если мы мониторим какие-то обобщенные запросы
    Ну например в базу данных или что-то такое.

    Но в конечном счете мы тут на РИТе говорим в основном про интерент сервисы
    И там пользователи

    И у пользователей сессия и глубина просмотра. И получается вот что
  • И у пользователей сессия и глубина просмотра. И получается вот что

    При глубине 10 — 10% ваших пользователей получат “p99”

    И это НАПОМИНАЮ про настоящуюю p99 и p999 соответственно, а не минутную

×