Мониторинг веб приложений на php в режиме реального...
TRANSCRIPT
![Page 1: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/1.jpg)
Мониторинг веб приложений на PHP в режиме реального времени с помощью
Pinba. На примере Magento
Миняйло ИгорьCore Team
Киев15 сентября 2012
![Page 2: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/2.jpg)
Agenda
• Профайлинг web приложений• Мониторинг web приложений• Pinba как система мониторинга• Использование Pinba для мониторинга
Magento
![Page 3: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/3.jpg)
Зачем профилировать?
Медленный код - это зачастую только предположение, что медленный именно код. В большинстве случаев проблема медленной работы кроется вне кода системы. Профилирование помогает вычислить наиболее медленные места в системе (локализация проблемы) и, в случае необходимости, устранить их.
![Page 4: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/4.jpg)
Утилиты для профайлинга web приложений
• xDebug• xhprof • Magento_Profiler
![Page 5: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/5.jpg)
Профайлинг web приложений
Проблема• Профайлер как “ad hoc” решение, для
определенной проблемы (оптимизация отдельного участка программы).
• Профайлинг – ресурсоемкая задача и не применим на продакшене
• Большое кол-во данных для анализа• Мы не знаем какие части приложения
требуют оптимизации.
![Page 6: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/6.jpg)
Почему не достаточно просто профайлить веб приложение на этапе тестирования?
Профайлинг не сможет выявить большинство проблем, которые проявляются в «реальных» условиях под нагрузкой (race condition, работа с внешними API и источниками данных)
![Page 7: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/7.jpg)
Мониторинг web приложений
• Collectd (system statistics)• Nagios• Zabbix
![Page 8: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/8.jpg)
Мониторинг web приложенийПроблема
• Большинство систем мониторинга собирают статистику по системе (CPU utilization, I/O, DB utilization, число запросов к веб серверу). Но не мониторят код самого приложения. Соответственно мы получаем поверхностную картину состояния системы.
• Сбор статистики в циклическую базу данных
![Page 9: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/9.jpg)
Pinba comes to rescue!
“Pinba is a realtime monitoring/statistics server for PHP using MySQL as a read-only
interface. ”
![Page 10: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/10.jpg)
Что умеет 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.“
![Page 11: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/11.jpg)
Общая схема работы Pinba
![Page 12: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/12.jpg)
![Page 13: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/13.jpg)
Как это работает?
Pinba состоит из PHP расширения и сервера. Модуль Pinba автоматически шлёт данные обо всех обработанных запросах на сервер. Pinba-сервер — это сервис, написанный на С, который:• собирает по протоколу UDP данные об
обработанных запросах;• хранит все эти данные в памяти и строит по ним
отчёты;• предоставляет доступ к сырым данным и отчётам
по протоколу MySQL, то есть фактически является MySQL engine.
![Page 14: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/14.jpg)
Данные
Каждый 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)
![Page 15: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/15.jpg)
Визуализация результатов
![Page 16: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/16.jpg)
Raw data tables
![Page 17: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/17.jpg)
![Page 18: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/18.jpg)
Промежуточный итог:
Не настраивая практически ничего мы получили систему аналитики всего php в продакшене!
![Page 19: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/19.jpg)
Таймеры и Теги
![Page 20: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/20.jpg)
Таймеры и Теги
Соответствующие таблицы отчетов по этим тегам:• tag_info_group - статистика по тегу group • tag_info_group_server - статистика по тегам group+server
![Page 21: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/21.jpg)
Mage_Core_Controller_Varien_Front
![Page 22: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/22.jpg)
Magento_Profiler
![Page 23: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/23.jpg)
Magento_Profiler
![Page 24: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/24.jpg)
Отчеты
![Page 25: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/25.jpg)
Самые медленные части приложения (общий отчет)
![Page 26: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/26.jpg)
Самые медленные части приложения (с группировкой по script_name)
![Page 27: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/27.jpg)
Overhead?
ab -n 500 magento.local/magento2/index.php/• Без PinbaTime taken for tests: 651.820 secondsTime per request: 1303.639 [ms] (mean)
• С включенной Pinba (без таймеров)Time taken for tests: 687.900 secondsTime per request: 1375.801 [ms] (mean)
• С включенной Pinba (с таймерами)Time taken for tests: 690.528 secondsTime per request: 1381.057 [ms] (mean)
![Page 28: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/28.jpg)
Предложение по усовершенствованию
• Добавить функциональность тегов в Magento_Profiler, чтобы он не логировал все вызовы.
• Добавить настройку (в system configuration), чтобы пользователь мог указать какие именно теги он хочет логировать
• Собирать данные в Pinba
![Page 29: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/29.jpg)
Nginx + Pinba
Что будет, если PHP-процесс не может принять и обработать запрос?
![Page 30: Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. На примере Magento](https://reader034.vdocuments.pub/reader034/viewer/2022042513/5873770d1a28ab3c1a8b6893/html5/thumbnails/30.jpg)
Вопросы, господа!