Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

50
Мониторинг всех слоев web проекта Николай Сивко

Upload: ontico

Post on 06-Jan-2017

1.089 views

Category:

Engineering


4 download

TRANSCRIPT

Page 1: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Мониторинг всех слоев web проектаНиколай Сивко

Page 2: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Мотивация 1 минута простоя hh.ru днем в будни

затрагивает ~30000 пользователей

~15 * HL++

Page 3: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Задачи• Узнать, что сломалось

• Быстро узнать, где сломалось

• Увидеть, что починилось

• Capacity planning

• Планирование оптимизаций

• Контроль оптимизаций

Page 4: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Поговорим• На какие метрики нужно смотреть, если вы

эксплуатируете web проект

• Как смотреть на метрики, чтобы быстро понимать, что происходит

Page 5: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Не затронем сегодня• Инструменты: чем рисовать графики, как

скрещивать разные решения и т.д.

• Алерты: имея нужные метрики, сделать проверку триггеров не так сложно

• Методология: workflow, KPI http://www.slideshare.net/NikolaySivko/rootconf2015

Page 6: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

hh.ru

Page 7: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Физический смысл• Видеть, как работает система с точки зрения

пользователя

• Видеть, что происходит в каждой подсистеме

• На что уходят ресурсы

• На все это надо смотреть во времени: как было минуту назад, вчера, в прошлый понедельник

Page 8: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)
Page 9: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Navigation timing API• js снипет отстреливает метрики на сервер GET

запросом с параметрами

• location = /stat { return 204; access_log /var/log/nginx/clientstat.access.log; }

• парсим лог

Page 10: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Client-side timers

Page 11: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)
Page 12: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Работает ли сайт?• Есть ли ошибки? Сколько?

• Быстро или медленно? У одного пользователя или у всех?

• Сколько запросов? Как обычно/провал/боты?

• Не тупит ли канал до клиентов?

Page 13: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Всё есть в логе nginx• Конечно, стандартный формат “combined” нам не

подходит

• $request_time

• $upstream_response_time

• Опционально: $upstream_addr, $upstream_status, $upstream_cache_status

Page 14: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

$request_time

Page 15: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

$upstream_response_t

Page 16: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

HTTP-5xx

Page 17: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

HTTP-5xx by URL

Page 18: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

5xx + 4xx + bots

Page 19: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

$bytes_sent

Page 20: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Про урлы• Ручные правила для парсинга основных урлов

устаревают

• Нормализация: /vacancy/123?arg=value -> /vacancy/$id

• Динамический top урлов (по rps или сумме$upstream_response_time)

• Можно отдельный top по ошибкам, но с отсечкой снизу, чтобы не было мусора

Page 21: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Балансировка

Page 22: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)
Page 23: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

На что уходит время2015-10-14 15:12:00,904 INFO: timings for xhh.pages.vacancy.Page : prepare=0.83 session=4.99 page=123.84 xsl=36.63 postprocess=13.21 finish=0.23 flush=0.49 total=180.21 code=200

Page 24: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Страница вакансии

Page 25: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Чем занят кластер?

Page 26: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Шаблонизация2015-10-14 15:12:00,865 INFO: applied XSL ambient/pages/vacancy/view.xsl in 22.50ms

Page 27: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Что оптимизировать?

Page 28: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Видим результат

Page 29: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)
Page 30: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Какой сервис сломался

Page 31: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)
Page 32: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Опять стадии2015-10-21 10:47:10.532 [Grizzly-worker(14)] INFO r.hh.health.monitoring.TimingsLogger: response: 200; context: GET /hh-session/full; total time 10 ms; jersey#beforeHandle=+0; HHid#BeforeClient=+0; HHid#Client=+6; DB#getHhSession=+3; pbMappers=+0; makeHeaderSession=+1; currentSessionInBothBodyAndHeader=+0; jersey#afterHandle=+0;

Page 33: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Log -> metrics

Page 34: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)
Page 35: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Не поплохело ли PG?

Page 36: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Чем занят CPU PG?

Page 37: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Кто грузит диски?

Page 38: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Кто грузит диски?

Page 39: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)
Page 40: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Вопросы про сеть• Сервис hhsession ждал ответа от hhid 150ms

• Сервис hhid считает, что он ответил на этот запрос за 5ms (тот же request_id)

• “Между ними только сеть”

• Результатов ping за вчера между ЭТИМИ хостами у вас нет

• Как исключить сеть?

Page 41: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

TCP RTT• TCP Round-Trip Time - время от отправки пакета

до получения ACK

• Стоит рассматривать как некий тренд, не нужно пытаться сравнивать с ICMP RTT

Page 42: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

TCP очень сложный

* www.cs.virginia.edu/~cs458/slides/module15-tcp3V2.ppt

Page 43: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Что с этим делать• Периодически снимаем со всех хостов RTT всех

текущих соединений

• Делаем агрегаты для всех remote_ip + listen_port в пределах вашего сегмента сети (перцентиль)

• Сможем увидеть, как вела себя сеть между нужными хостами

Page 44: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

7ms при ping ~ 0.8ms

Page 45: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Немного про OS• cpu• memory• disk• disk i/o• net interfaces• swap• swap i/o

Page 46: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Что это было?

Page 47: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Процессы• CPU per process+user

• Memory per process+user

• Disk I/O per process+user

• Swap per process+user

• Swap I/O per process+user

• FD usage per process+user

Page 48: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

pg_dump + pbzip2

Page 49: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Итого• Простые графики могут сильно ускорить поиск

проблемы

• Постарайтесь покрыть мониторингом все подсистемы (а особенно стыки между ними)

• Чем детальнее метрики, тем проще потом разбираться

Page 50: Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)

Спасибо за внимание!

Вопросы?

Николай Сивкоhh.ruEmail: [email protected], [email protected]