SlideShare a Scribd company logo
Мониторинг производительности
приложения
pinba + graphite
Наш подход в Lingualeo
Сервис помогающий изучать Английский язык
- 9 000 000 пользователей
- 100-150k DAU (website), 300k DAU (Mobile)
- 1.5M MAU (website), 900k MAU (Mobile)
- nginx, PHP, sphinx, redis, memcache, mysql
- 400 rps в пике к динамике (12 rps на ядро AWS)
Коротко о Lingualeo
- Мониторинг программной и аппаратной
инфраструктуры
(Zabbix, Icinga, Munin)
- Мониторинг пользовательской активности
(Google Analytics Alerts, внутренняя аналитика )
- Функциональный мониторинг
(Zabbix+Selenium+BrowserMob, site24x7.com)
- Мониторинг производительности приложения
(pinba, xhprof, NewRelic)
Виды мониторинга
- Измерение и анализ времени на обработку
всего запроса на application серверах
- Измерение и анализ времени загрузки страниц и
ajax запросов в браузере
- Измерение потребления ресурсов RAM и CPU на
application серверах
- Мониторинг кол-ва ошибок при обработке
запроса
Мониторинг производительности приложения это:
- Отвечает на вопрос какие именно участки кода
тормозят, но не отвечает на вопрос ПОЧЕМУ
- Помогает понять, какое влияние на скорость
обработки запросов оказывает то или иное
изменение в коде
- Помогает принять быстрое решение в случае
«выкатили новый релиз и все вкорячило»
Цели и особенности мониторинга производительности
Почему pinba?
Характеристика Pinba XHProf NewRelic
Нужен extension? Да (но есть purePHP
реализация)
Да Да
Нужно переделывать
код?
Да Да (но незначительно) Да
Можно ли мониторить
что-то кроме времени
Да, CPU (rusage,susage),
RAM
Да, RAM, CPU Да, много чего
Где хранит метрики MySQL MongoDB/файлы Cloud
Легковесность Да Относительно, сбор
быстрый но save_run это
вставка в Mongo
Да
Стоимость Free + 50 USD/месяц сам
сервер мониторинга
Free + 50 USD/месяц сам
сервер мониторинга
~500USD month для
small bussines, дальше
150 USD/month за
сервер
Почему graphite?
Характеристика Graphite (Carbon) Zabbix RRDCached
Скорость сбора метрик 50k/sec (SATA)
100k/sec (SSD)
2-3k/sec (максимум 10k) 3-4k/sec (если диски
SSD)
Масштабируемость Высокая (relay, proxy) Средняя (proxy) Низкая
Alerts Нет Да Нет
Где хранит метрики Whisper, Ceres MySQL RRD
Кастомизируемость
графиков
Очень высокая, много
альтернативных viewer’s
Средняя (есть reports) Высокая, но рисовать
ОЧЕНЬ сложно
Скорость отрисовки
графиков
быстро для простых
графиков
для сложных графиков
упирается в диски
Быстрая Быстро для простых
графиков
для сложных графиков
упирается в диски
Итоговая схема сбора метрик
deployment Pinba Data Flow
autoscale-XX
«executionEnvironment»
PHP-FPM + pinba extension
notes
запуск php кода
замер времени исполнения
AWS ELB
AWS EC2 (c1.small) autoscale group
monitor
«executionEnvironment»
MySQL + pinba-engine
«executionEnvironment»
pinba2graphite.php 1 раз в минуту
User
«executionEnvironment»
Carbon Daemon (Whisper)
notes
часть данных кешируется в памяти,
часть данных flush на диск в Whisper
файлы
«executionEnvironment»
graphite (uwsgi + nginx + memcache)
protobuf over UDP
аггрегирующий SQL запрос
time + metric name + value over TCP
view dashboards over HTTP
значение метрик с диска и из кеша
Основной dashboard (время в UTC)
Распределение по времени выполнения
Распределение по времени выполнения
Какой модуль тормозит
Где тормозит API
Перцентили и average response time
Перцентиль 90 – означает что 90% запросов длятся не более 0.25-0.45 секунды
Ищем bottleneck’s пример 1 шаг 1
15 мая 2014 17:20 MSK
Симптомы
Кол-во «тормозящих» скриптов очень мало, но они занимают php-fpm child
в результате все остальные скрипты ждут очереди от nginx, autoscale масштабируется, но
полностью проблему не решает, сайт работает но «подтормаживает»
Ищем bottleneck’s пример 1 шаг 2
Модули и API не тормозят. Значит проблема не в framework (index.php)
Ищем bottleneck’s пример 1 шаг 3
Нашли ЧТО тормозит - тормозит getsound.php, но мониторинг не скажет почему тормозит, для
этого надо знать код
1) скрипт является прокси сервисом к стороннему HTTP API
2) напрямую скрипт не вызывается, но прописан как Origin к CDN Amazon CloudFront
3) стороннее API упало и скрипт подвисает на HTTP timeout при обращении к стороннему
сервису
Решение – уменьшить connection и read timeout для работы со сторонним API, кидать
дополнительный Exception и настроить ALERT по нему в Graylog
Ищем bottleneck’s пример 2 шаг 1
24 апреля 2014 14:10 MSK
Симптомы
Резко начал «вкорячивать» index.php, статика и генерированный html грузится (CDN), AJAX нет, сайт
«почти лежит»
Ищем bottleneck’s пример 2 шаг 2
Судя по графикам тормозят все AJAX, но больше всех userdict/getTranslations
но почему?
Анализ кода показал что в этом месте ведется активное общение с MySQL, дальше SHOW PROCCESSLIST
помог локализовать запрос с тяжелым дисковым IO и убить его.
Системная оптимизация пример 1 шаг 1
На dashboard есть вот такой график
Анализ кода показал что для api_getUntrainedWordsCount, делается прямой
SQL запрос по PrimaryKey
Кеширование запроса позволило в 7 раз снизить общее время на
обработку этого action
(к сожалению это было год назад а метрики мы храним всего пол года)
Системная оптимизация пример 1 шаг 2
Второй шаг оптимизации простое сокращение частотности обращения к API
на клиенте
Итоговые принципы
Не смотрите МИНИМУМ (в идеале он должен стремиться к нулю ;)
Смотрите «распределение по гистограмме»
мы используем 0.2, 0.5, 1.0, 2.0 sec для pinba_sripts и
0.1, 0.2, 0.5, 1.0, 1.0 для pinba_tags
Для оценки мгновенных изменений лучше не смотреть «среднее время»
Для оценки качественных изменений, лучше смотреть перцентили (98%)
Снижение количества обращений к серверу может такой же хорошей
оптимизацией как и уменьшение времени работы отдельного URL
Полезные ссылки
Как ставить и настраивать Graphite
http://graphite.wikidot.com
Как ставить и настраивать PINBA
http://pinba.org
Блог в котором время от времени я пишу
http://slach.livejournal.com/
Вопросы из зала и контакты
СПАСИБО ЗА ТО, ЧТО УДЕЛИЛИ ВРЕМЯ ;)
Я ГОТОВ ОТВЕТИТЬ НА ЛЮБЫЕ ВОПРОСЫ
ЕСЛИ ЧТО ПИШИТЕ
bloodjazman@gmail.com
skype: bloodjazman

More Related Content

PPTX
мониторинг производительности Web приложений на python
Slach
 
PDF
Pinboard + pinba / Как организовать мониторинг сотни PHP-проектов (Devconf 2014)
Ilyas Salikhov
 
PDF
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Vadim Nesterov
 
PDF
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix
 
PPT
Zabbix v2
Alex Nikitin
 
PDF
Zabbix в Badoo или о чем не пишут в мануале, Илья Аблеев (Badoo)
Badoo Development
 
PPTX
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Ontico
 
PDF
Нагруженный поиск на Sphinx
Roman Pavlushko
 
мониторинг производительности Web приложений на python
Slach
 
Pinboard + pinba / Как организовать мониторинг сотни PHP-проектов (Devconf 2014)
Ilyas Salikhov
 
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Vadim Nesterov
 
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix
 
Zabbix v2
Alex Nikitin
 
Zabbix в Badoo или о чем не пишут в мануале, Илья Аблеев (Badoo)
Badoo Development
 
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Ontico
 
Нагруженный поиск на Sphinx
Roman Pavlushko
 

What's hot (20)

PPTX
Jinba - frontendconf.ru/2015
Pavel Dovbush
 
PDF
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Ontico
 
PDF
Профилирование кода на C/C++ в *nix системах
Aleksander Alekseev
 
PPTX
переезд мониторинга
Алексей Демидов
 
PPTX
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Ontico
 
PDF
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
Ontico
 
PDF
Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".
Badoo Development
 
PDF
Anton Turetckii "What does it take to build a host?"
Fwdays
 
PPTX
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Fwdays
 
PDF
Архитектура поиска в Avito / Андрей Смирнов (Avito)
Ontico
 
PDF
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Ontico
 
PDF
Путь к Go на конкретном примере
Sergey Xek
 
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Ontico
 
PDF
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Ontico
 
PDF
Типовое внедрение мониторинга
Uptime Community
 
PDF
Near-realtime аналитика событий в высоконагруженном проекте
Alexandr Krasheninnikov
 
PDF
Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошни...
Ontico
 
PDF
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
Roman Pavlushko
 
PDF
Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmati...
Ontico
 
PDF
Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяц
Tanya Denisyuk
 
Jinba - frontendconf.ru/2015
Pavel Dovbush
 
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Ontico
 
Профилирование кода на C/C++ в *nix системах
Aleksander Alekseev
 
переезд мониторинга
Алексей Демидов
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Ontico
 
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
Ontico
 
Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".
Badoo Development
 
Anton Turetckii "What does it take to build a host?"
Fwdays
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Fwdays
 
Архитектура поиска в Avito / Андрей Смирнов (Avito)
Ontico
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Ontico
 
Путь к Go на конкретном примере
Sergey Xek
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Ontico
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Ontico
 
Типовое внедрение мониторинга
Uptime Community
 
Near-realtime аналитика событий в высоконагруженном проекте
Alexandr Krasheninnikov
 
Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошни...
Ontico
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
Roman Pavlushko
 
Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmati...
Ontico
 
Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяц
Tanya Denisyuk
 
Ad

Similar to мониторинг производительности приложения на PINBA (20)

PDF
PUG #9 at OWOX: Поиск узких мест в приложении на PHP
Анна Магас
 
PPTX
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
sportgid
 
PDF
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
2ГИС Технологии
 
PDF
Cергей Коржнев, 2ГИС
Ontico
 
PDF
Pavel Dovbush Toster
Pavel Dovbush
 
PPTX
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Igor Miniailo
 
PDF
Мониторинг быстродействия web-проекта / Владимир Буянов (Ultimate Guitar)
Ontico
 
PDF
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)
Ontico
 
PDF
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
rit2011
 
PDF
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Sergey Xek
 
PDF
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
rit2011
 
PDF
Как неправильно замониторить something — Failover conf 2015 Павел Труханов ok...
Pablo Tru
 
PPTX
Оптимизация производительности нагруженных веб-систем на Java
Alex Chistyakov
 
PPT
ZFConf 2010: Performance of Zend Framework Applications
ZFConf Conference
 
PDF
Честное перформанс-тестирование / Дмитрий Пивоваров (ZeroTurnaround)
Ontico
 
ODP
SECON'2014 - Сергей Цивин - Производительность веб-приложений
Конференция разработчиков программного обеспечения SECON'2014
 
PPTX
Ловушки тестирования производительности
SQALab
 
PDF
Итак, оно тормозит
Vsevolod Polyakov
 
PPTX
Industrial Programming Java - Lection Pack 02 - Distributed applications - La...
Fedor Lavrentyev
 
PPTX
Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боев...
Ontico
 
PUG #9 at OWOX: Поиск узких мест в приложении на PHP
Анна Магас
 
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
sportgid
 
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
2ГИС Технологии
 
Cергей Коржнев, 2ГИС
Ontico
 
Pavel Dovbush Toster
Pavel Dovbush
 
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Igor Miniailo
 
Мониторинг быстродействия web-проекта / Владимир Буянов (Ultimate Guitar)
Ontico
 
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)
Ontico
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
rit2011
 
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Sergey Xek
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
rit2011
 
Как неправильно замониторить something — Failover conf 2015 Павел Труханов ok...
Pablo Tru
 
Оптимизация производительности нагруженных веб-систем на Java
Alex Chistyakov
 
ZFConf 2010: Performance of Zend Framework Applications
ZFConf Conference
 
Честное перформанс-тестирование / Дмитрий Пивоваров (ZeroTurnaround)
Ontico
 
SECON'2014 - Сергей Цивин - Производительность веб-приложений
Конференция разработчиков программного обеспечения SECON'2014
 
Ловушки тестирования производительности
SQALab
 
Итак, оно тормозит
Vsevolod Polyakov
 
Industrial Programming Java - Lection Pack 02 - Distributed applications - La...
Fedor Lavrentyev
 
Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боев...
Ontico
 
Ad

мониторинг производительности приложения на PINBA

  • 2. Сервис помогающий изучать Английский язык - 9 000 000 пользователей - 100-150k DAU (website), 300k DAU (Mobile) - 1.5M MAU (website), 900k MAU (Mobile) - nginx, PHP, sphinx, redis, memcache, mysql - 400 rps в пике к динамике (12 rps на ядро AWS) Коротко о Lingualeo
  • 3. - Мониторинг программной и аппаратной инфраструктуры (Zabbix, Icinga, Munin) - Мониторинг пользовательской активности (Google Analytics Alerts, внутренняя аналитика ) - Функциональный мониторинг (Zabbix+Selenium+BrowserMob, site24x7.com) - Мониторинг производительности приложения (pinba, xhprof, NewRelic) Виды мониторинга
  • 4. - Измерение и анализ времени на обработку всего запроса на application серверах - Измерение и анализ времени загрузки страниц и ajax запросов в браузере - Измерение потребления ресурсов RAM и CPU на application серверах - Мониторинг кол-ва ошибок при обработке запроса Мониторинг производительности приложения это:
  • 5. - Отвечает на вопрос какие именно участки кода тормозят, но не отвечает на вопрос ПОЧЕМУ - Помогает понять, какое влияние на скорость обработки запросов оказывает то или иное изменение в коде - Помогает принять быстрое решение в случае «выкатили новый релиз и все вкорячило» Цели и особенности мониторинга производительности
  • 6. Почему pinba? Характеристика Pinba XHProf NewRelic Нужен extension? Да (но есть purePHP реализация) Да Да Нужно переделывать код? Да Да (но незначительно) Да Можно ли мониторить что-то кроме времени Да, CPU (rusage,susage), RAM Да, RAM, CPU Да, много чего Где хранит метрики MySQL MongoDB/файлы Cloud Легковесность Да Относительно, сбор быстрый но save_run это вставка в Mongo Да Стоимость Free + 50 USD/месяц сам сервер мониторинга Free + 50 USD/месяц сам сервер мониторинга ~500USD month для small bussines, дальше 150 USD/month за сервер
  • 7. Почему graphite? Характеристика Graphite (Carbon) Zabbix RRDCached Скорость сбора метрик 50k/sec (SATA) 100k/sec (SSD) 2-3k/sec (максимум 10k) 3-4k/sec (если диски SSD) Масштабируемость Высокая (relay, proxy) Средняя (proxy) Низкая Alerts Нет Да Нет Где хранит метрики Whisper, Ceres MySQL RRD Кастомизируемость графиков Очень высокая, много альтернативных viewer’s Средняя (есть reports) Высокая, но рисовать ОЧЕНЬ сложно Скорость отрисовки графиков быстро для простых графиков для сложных графиков упирается в диски Быстрая Быстро для простых графиков для сложных графиков упирается в диски
  • 8. Итоговая схема сбора метрик deployment Pinba Data Flow autoscale-XX «executionEnvironment» PHP-FPM + pinba extension notes запуск php кода замер времени исполнения AWS ELB AWS EC2 (c1.small) autoscale group monitor «executionEnvironment» MySQL + pinba-engine «executionEnvironment» pinba2graphite.php 1 раз в минуту User «executionEnvironment» Carbon Daemon (Whisper) notes часть данных кешируется в памяти, часть данных flush на диск в Whisper файлы «executionEnvironment» graphite (uwsgi + nginx + memcache) protobuf over UDP аггрегирующий SQL запрос time + metric name + value over TCP view dashboards over HTTP значение метрик с диска и из кеша
  • 14. Перцентили и average response time Перцентиль 90 – означает что 90% запросов длятся не более 0.25-0.45 секунды
  • 15. Ищем bottleneck’s пример 1 шаг 1 15 мая 2014 17:20 MSK Симптомы Кол-во «тормозящих» скриптов очень мало, но они занимают php-fpm child в результате все остальные скрипты ждут очереди от nginx, autoscale масштабируется, но полностью проблему не решает, сайт работает но «подтормаживает»
  • 16. Ищем bottleneck’s пример 1 шаг 2 Модули и API не тормозят. Значит проблема не в framework (index.php)
  • 17. Ищем bottleneck’s пример 1 шаг 3 Нашли ЧТО тормозит - тормозит getsound.php, но мониторинг не скажет почему тормозит, для этого надо знать код 1) скрипт является прокси сервисом к стороннему HTTP API 2) напрямую скрипт не вызывается, но прописан как Origin к CDN Amazon CloudFront 3) стороннее API упало и скрипт подвисает на HTTP timeout при обращении к стороннему сервису Решение – уменьшить connection и read timeout для работы со сторонним API, кидать дополнительный Exception и настроить ALERT по нему в Graylog
  • 18. Ищем bottleneck’s пример 2 шаг 1 24 апреля 2014 14:10 MSK Симптомы Резко начал «вкорячивать» index.php, статика и генерированный html грузится (CDN), AJAX нет, сайт «почти лежит»
  • 19. Ищем bottleneck’s пример 2 шаг 2 Судя по графикам тормозят все AJAX, но больше всех userdict/getTranslations но почему? Анализ кода показал что в этом месте ведется активное общение с MySQL, дальше SHOW PROCCESSLIST помог локализовать запрос с тяжелым дисковым IO и убить его.
  • 20. Системная оптимизация пример 1 шаг 1 На dashboard есть вот такой график Анализ кода показал что для api_getUntrainedWordsCount, делается прямой SQL запрос по PrimaryKey Кеширование запроса позволило в 7 раз снизить общее время на обработку этого action (к сожалению это было год назад а метрики мы храним всего пол года)
  • 21. Системная оптимизация пример 1 шаг 2 Второй шаг оптимизации простое сокращение частотности обращения к API на клиенте
  • 22. Итоговые принципы Не смотрите МИНИМУМ (в идеале он должен стремиться к нулю ;) Смотрите «распределение по гистограмме» мы используем 0.2, 0.5, 1.0, 2.0 sec для pinba_sripts и 0.1, 0.2, 0.5, 1.0, 1.0 для pinba_tags Для оценки мгновенных изменений лучше не смотреть «среднее время» Для оценки качественных изменений, лучше смотреть перцентили (98%) Снижение количества обращений к серверу может такой же хорошей оптимизацией как и уменьшение времени работы отдельного URL
  • 23. Полезные ссылки Как ставить и настраивать Graphite http://graphite.wikidot.com Как ставить и настраивать PINBA http://pinba.org Блог в котором время от времени я пишу http://slach.livejournal.com/
  • 24. Вопросы из зала и контакты СПАСИБО ЗА ТО, ЧТО УДЕЛИЛИ ВРЕМЯ ;) Я ГОТОВ ОТВЕТИТЬ НА ЛЮБЫЕ ВОПРОСЫ ЕСЛИ ЧТО ПИШИТЕ [email protected] skype: bloodjazman