Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Мониторинг веб приложений на PHP
в режиме реального времени с
помощью Pinba. На примере Magento
Миняйло Игорь
Core Team
Киев
15 сентября 2012
Agenda
• Профайлинг web приложений
• Мониторинг web приложений
• Pinba как система мониторинга
• Использование Pinba для мониторинга
Magento
Зачем профилировать?
Медленный код - это зачастую только
предположение, что медленный именно
код. В большинстве случаев проблема
медленной работы кроется вне кода
системы. Профилирование помогает
вычислить наиболее медленные места в
системе (локализация проблемы) и, в
случае необходимости, устранить их.
Утилиты для профайлинга web
приложений
• xDebug
• xhprof
• Magento_Profiler
Профайлинг web приложений
Проблема
• Профайлер как “ad hoc” решение, для
определенной проблемы (оптимизация
отдельного участка программы).
• Профайлинг – ресурсоемкая задача и
не применим на продакшене
• Большое кол-во данных для анализа
• Мы не знаем какие части приложения
требуют оптимизации.
Почему не достаточно просто
профайлить веб приложение на этапе
тестирования?
Профайлинг не сможет выявить
большинство проблем, которые
проявляются в «реальных» условиях под
нагрузкой (race condition, работа с
внешними API и источниками данных)
Мониторинг web приложений
• Collectd (system statistics)
• Nagios
• Zabbix
Мониторинг web приложений
Проблема
• Большинство систем мониторинга
собирают статистику по системе (CPU
utilization, I/O, DB utilization, число
запросов к веб серверу). Но не мониторят
код самого приложения. Соответственно
мы получаем поверхностную картину
состояния системы.
• Сбор статистики в циклическую базу
данных
Pinba comes to rescue!
“Pinba is a realtime monitoring/statistics
server for PHP using MySQL as a read-only
interface. ”
Что умеет pinba?
• Мониторинг веб приложения в режиме
реального времени на продакшене с
минимальным оверхедом по времени.
• “Pinba is not a debugging tool in a common
sense, since you're not supposed to do
debugging on production servers, but its main
goal is to help developers to monitor
performance of PHP scripts, locate
bottlenecks in realtime and direct developers'
attention to the code that really needs it.“
Общая схема работы Pinba
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento
Как это работает?
Pinba состоит из PHP расширения и сервера.
Модуль Pinba автоматически шлёт данные обо
всех обработанных запросах на сервер. Pinba-
сервер — это сервис, написанный на С, который:
• собирает по протоколу UDP данные об
обработанных запросах;
• хранит все эти данные в памяти и строит по
ним отчёты;
• предоставляет доступ к сырым данным и
отчётам по протоколу MySQL, то есть
фактически является MySQL engine.
Данные
Каждый PHP скрипт посылает следующие данные в
конце обработки каждого запроса:
• string hostname - gethostname() result
• int request_count - number of requests served by this
process
• string server_name - $_SERVER["SERVER_NAME"]
• string script_name - $_SERVER["SCRIPT_NAME"]
• int document_size - size of the response body
• int memory_peak - memory allocation peak
• float request_time - time spent of processing the request
• float ru_utime - resource usage (user)
• float ru_stime - resource usage (system)
• array timers - array of timers (optional)
Визуализация результатов
Raw data tables
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento
Промежуточный итог:
Не настраивая практически ничего мы
получили систему аналитики всего php в
продакшене!
Таймеры и Теги
Таймеры и Теги
Соответствующие таблицы отчетов по этим тегам:
• tag_info_group - статистика по тегу group
• tag_info_group_server - статистика по тегам group+server
Mage_Core_Controller_Varien_Front
Magento_Profiler
Magento_Profiler
Отчеты
Самые медленные части приложения
(общий отчет)
Самые медленные части приложения
(с группировкой по script_name)
Overhead?
ab -n 500 magento.local/magento2/index.php/
• Без Pinba
Time taken for tests: 651.820 seconds
Time per request: 1303.639 [ms] (mean)
• С включенной Pinba (без таймеров)
Time taken for tests: 687.900 seconds
Time per request: 1375.801 [ms] (mean)
• С включенной Pinba (с таймерами)
Time taken for tests: 690.528 seconds
Time per request: 1381.057 [ms] (mean)
Предложение по усовершенствованию
• Добавить функциональность тегов в
Magento_Profiler, чтобы он не логировал
все вызовы.
• Добавить настройку (в system
configuration), чтобы пользователь мог
указать какие именно теги он хочет
логировать
• Собирать данные в Pinba
Nginx + Pinba
Что будет, если PHP-процесс не может
принять и обработать запрос?
Вопросы, господа!

More Related Content

Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento

  • 1. Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento Миняйло Игорь Core Team Киев 15 сентября 2012
  • 2. Agenda • Профайлинг web приложений • Мониторинг web приложений • Pinba как система мониторинга • Использование Pinba для мониторинга Magento
  • 3. Зачем профилировать? Медленный код - это зачастую только предположение, что медленный именно код. В большинстве случаев проблема медленной работы кроется вне кода системы. Профилирование помогает вычислить наиболее медленные места в системе (локализация проблемы) и, в случае необходимости, устранить их.
  • 4. Утилиты для профайлинга web приложений • xDebug • xhprof • Magento_Profiler
  • 5. Профайлинг web приложений Проблема • Профайлер как “ad hoc” решение, для определенной проблемы (оптимизация отдельного участка программы). • Профайлинг – ресурсоемкая задача и не применим на продакшене • Большое кол-во данных для анализа • Мы не знаем какие части приложения требуют оптимизации.
  • 6. Почему не достаточно просто профайлить веб приложение на этапе тестирования? Профайлинг не сможет выявить большинство проблем, которые проявляются в «реальных» условиях под нагрузкой (race condition, работа с внешними API и источниками данных)
  • 7. Мониторинг web приложений • Collectd (system statistics) • Nagios • Zabbix
  • 8. Мониторинг web приложений Проблема • Большинство систем мониторинга собирают статистику по системе (CPU utilization, I/O, DB utilization, число запросов к веб серверу). Но не мониторят код самого приложения. Соответственно мы получаем поверхностную картину состояния системы. • Сбор статистики в циклическую базу данных
  • 9. Pinba comes to rescue! “Pinba is a realtime monitoring/statistics server for PHP using MySQL as a read-only interface. ”
  • 10. Что умеет pinba? • Мониторинг веб приложения в режиме реального времени на продакшене с минимальным оверхедом по времени. • “Pinba is not a debugging tool in a common sense, since you're not supposed to do debugging on production servers, but its main goal is to help developers to monitor performance of PHP scripts, locate bottlenecks in realtime and direct developers' attention to the code that really needs it.“
  • 13. Как это работает? Pinba состоит из PHP расширения и сервера. Модуль Pinba автоматически шлёт данные обо всех обработанных запросах на сервер. Pinba- сервер — это сервис, написанный на С, который: • собирает по протоколу UDP данные об обработанных запросах; • хранит все эти данные в памяти и строит по ним отчёты; • предоставляет доступ к сырым данным и отчётам по протоколу MySQL, то есть фактически является MySQL engine.
  • 14. Данные Каждый PHP скрипт посылает следующие данные в конце обработки каждого запроса: • string hostname - gethostname() result • int request_count - number of requests served by this process • string server_name - $_SERVER["SERVER_NAME"] • string script_name - $_SERVER["SCRIPT_NAME"] • int document_size - size of the response body • int memory_peak - memory allocation peak • float request_time - time spent of processing the request • float ru_utime - resource usage (user) • float ru_stime - resource usage (system) • array timers - array of timers (optional)
  • 18. Промежуточный итог: Не настраивая практически ничего мы получили систему аналитики всего php в продакшене!
  • 20. Таймеры и Теги Соответствующие таблицы отчетов по этим тегам: • tag_info_group - статистика по тегу group • tag_info_group_server - статистика по тегам group+server
  • 25. Самые медленные части приложения (общий отчет)
  • 26. Самые медленные части приложения (с группировкой по script_name)
  • 27. Overhead? ab -n 500 magento.local/magento2/index.php/ • Без Pinba Time taken for tests: 651.820 seconds Time per request: 1303.639 [ms] (mean) • С включенной Pinba (без таймеров) Time taken for tests: 687.900 seconds Time per request: 1375.801 [ms] (mean) • С включенной Pinba (с таймерами) Time taken for tests: 690.528 seconds Time per request: 1381.057 [ms] (mean)
  • 28. Предложение по усовершенствованию • Добавить функциональность тегов в Magento_Profiler, чтобы он не логировал все вызовы. • Добавить настройку (в system configuration), чтобы пользователь мог указать какие именно теги он хочет логировать • Собирать данные в Pinba
  • 29. Nginx + Pinba Что будет, если PHP-процесс не может принять и обработать запрос?