Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Pinboard + pinba
Как организовать мониторинг сотни PHP-
проектов
Ильяс Салихов
Интаро
Интаро — веб-интегратор
Штат > 50 человек
~100 проектов на поддержке
и другие
Об Интаро
1. ТЗ, дизайн, верстка
2. Разработали
3. Протестировали
4. Провели нагрузочное тестирование
5. Сдали проект и забыли
… А д...
Проекты на сопровождении – это:
• Постоянно новые фичи
• Неизбежно новые баги
• Неизбежно «медленные» участки
кода и «медл...
• CPU load average
• Memory usage
• Network traffic
• Disk space usage
• Utilization per device
• Processes count
• Inode ...
• CPU load average
• Memory usage
• Network traffic
• Disk space usage
• Utilization per device
• Processes count
• Inode ...
• Realtime-статистика о выполнении PHP-
скриптов
• Extension для PHP + storage для MySQL
• Отправка по UDP
• Минимальный o...
Pinba
Pinba
• Сырые данные:
• request, timer, tag, timertag
• Отчеты:
• report_by_script_name
• report_by_server_name
• report_b...
• Очень простая в установке:
• Ставите pinba_extension за 30 секунд и статистика по ВСЕМ
запросам начинает отправляться в ...
• Формирует агрегированные
данные
• Хранит статистику дольше
(по умолчанию 1 месяц)
• Доступ к данным pinba
• Мониторит
• ...
90, 95, 99, 100 персентили для ключевых показателей
Intaro Pinboard / Агрегированные данные
90, 95, 99, 100 персентили для mem_peak_usage и cpu_usage
а тут был деплой
Отслеживание критических показателей
• Следит за 90 и 95
персентилями
• Уведомляет о просадке
показателей
• Уведомляет о
н...
Пример конфига для логгирования медленных и тяжелых
страниц:
Intaro Pinboard / Тяжелые страницы
Анализируем тяжелые страницы: время, память, процессор
Intaro Pinboard / Тяжелые страницы
• Лог страниц с ошибками (с указанием сервера)
Intaro Pinboard / В курсе ошибок
Уведомление на почту об ошибках
Intaro Pinboard / В курсе ошибок
Пример конфига уведомлений
Intaro Pinboard / В курсе ошибок
А тут похоже стало все плохо :/
Intaro Pinboard / В курсе ошибок
Наша статистика использования Pinboard на 05.2014:
• Мониторится 226 сайтов
• В pinba ~4 млн. хитов в сутки
• В среднем 30...
Плюшки и особенности
PHP-фреймворки с единой точкой входа:
Подробные примеры:
https://github.com/intaro
/pinboard/wiki/Configure
-sending-of-re...
Для SaaS назначаем единый виртуальный домен, а поддомен
выносим в теги запроса
$subdomain = ‘’; //динамический поддомен
if...
Киллер фича!
Указываем виртуальный домен и параметры для консольного скрипта:
if (function_exists('pinba_script_name_set')...
Устанавливаем статус ответа для консольного скрипта:
Статистика консольных скриптов
Live-режим для консольных скриптов и API
Помимо php_extension есть расширения для:
• Nginx
• https://github.com/tony2001/ngx_http_pinba_module
• Node.js
• https://...
Поддержка тегов и таймеров
pinba в Pinboard
Замеряйте отдельные участки кода и помечайте их тегами:
$timer = pinba_timer_start([
‘category’ => ‘database’,
‘group’ => ...
Общие отчеты во вкладке в Pinboard
Общие отчеты во вкладке в Pinboard
Общие отчеты во вкладке в Pinboard
Таймер для запроса
Таймеры у запросов в Pinboard
Не профилирование, но понимание общей структуры запроса
Чтобы смотреть отчеты в Pinboard по домену/серверу, нужно так:
$pinbaData = pinba_get_info();
$initTags = [];
if (isset($p...
Symfony2: https://github.com/intaro/pinba-bundle
• Настраивает script_name
• Автоматические таймеры на Doctrine (БД), Twig...
«Видим» проект так, как «видит» его
пользователь
Персентели: В курсе, если проекты проседают по
скорости отдачи
В курсе, е...
Пользуйтесь pinba + Pinboard!
И радуйтесь жизни :)
Свободные лицензии:
• GNU GPLv2 для pinba
• MIT для Intaro Pinboard
URL...
Upcoming SlideShare
Loading in …5
×

Pinboard + pinba / Как организовать мониторинг сотни PHP-проектов (Devconf 2014)

0 views

Published on

Published in: Technology

Pinboard + pinba / Как организовать мониторинг сотни PHP-проектов (Devconf 2014)

  1. 1. Pinboard + pinba Как организовать мониторинг сотни PHP- проектов Ильяс Салихов Интаро
  2. 2. Интаро — веб-интегратор Штат > 50 человек ~100 проектов на поддержке и другие Об Интаро
  3. 3. 1. ТЗ, дизайн, верстка 2. Разработали 3. Протестировали 4. Провели нагрузочное тестирование 5. Сдали проект и забыли … А дальше? Новый проект
  4. 4. Проекты на сопровождении – это: • Постоянно новые фичи • Неизбежно новые баги • Неизбежно «медленные» участки кода и «медленные» запросы Проекты на сопровождении требуют постоянного контроля показателей Проекты на поддержке и сопровождении
  5. 5. • CPU load average • Memory usage • Network traffic • Disk space usage • Utilization per device • Processes count • Inode table usage • … Показатели веб-проекта
  6. 6. • CPU load average • Memory usage • Network traffic • Disk space usage • Utilization per device • Processes count • Inode table usage • … Пользователь непосредственно ощущает на себе только request time и отсутствие ошибок Показатели веб-проекта
  7. 7. • Realtime-статистика о выполнении PHP- скриптов • Extension для PHP + storage для MySQL • Отправка по UDP • Минимальный overhead для сбора и отправки данных на сервер статистики • Realtime-отчеты • Таймеры Pinba
  8. 8. Pinba
  9. 9. Pinba • Сырые данные: • request, timer, tag, timertag • Отчеты: • report_by_script_name • report_by_server_name • report_by_hostname • report_by_server_and_scriptr • report_by_hostname_and_script • report_by_hostname_and_server • report_by_hostname_server_and_sc ript • Отчеты по тегам: • tag info by 1 tag • tag info by 2 tags • tag info by N tags • tag report with grouping by script name and tag value • tag report with grouping by script name, tag value, hostname and server name • tag report with grouping by script name and 2 tags • tag report with grouping by script name and N tags
  10. 10. • Очень простая в установке: • Ставите pinba_extension за 30 секунд и статистика по ВСЕМ запросам начинает отправляться в pinba • В облаке (AWS, Azure, …) готовите образ с pinba_extension в комплекте и вся статистика собирается без дополнительных телодвижений Pinba
  11. 11. • Формирует агрегированные данные • Хранит статистику дольше (по умолчанию 1 месяц) • Доступ к данным pinba • Мониторит • Уведомляет
  12. 12. 90, 95, 99, 100 персентили для ключевых показателей Intaro Pinboard / Агрегированные данные
  13. 13. 90, 95, 99, 100 персентили для mem_peak_usage и cpu_usage а тут был деплой
  14. 14. Отслеживание критических показателей • Следит за 90 и 95 персентилями • Уведомляет о просадке показателей • Уведомляет о нормализации показателей Intaro Pinboard / Border value
  15. 15. Пример конфига для логгирования медленных и тяжелых страниц: Intaro Pinboard / Тяжелые страницы
  16. 16. Анализируем тяжелые страницы: время, память, процессор Intaro Pinboard / Тяжелые страницы
  17. 17. • Лог страниц с ошибками (с указанием сервера) Intaro Pinboard / В курсе ошибок
  18. 18. Уведомление на почту об ошибках Intaro Pinboard / В курсе ошибок
  19. 19. Пример конфига уведомлений Intaro Pinboard / В курсе ошибок
  20. 20. А тут похоже стало все плохо :/ Intaro Pinboard / В курсе ошибок
  21. 21. Наша статистика использования Pinboard на 05.2014: • Мониторится 226 сайтов • В pinba ~4 млн. хитов в сутки • В среднем 30 ошибок в сутки • Предоставляем в Pinboard доступ заказчикам • Быстрое реагирование и устранение ошибок до того, как опомнился пользователь или клиент :) Кроме нас Pinboard используют сторонние разработчики с сайтами в десятки миллионов хитов в сутки Intaro Pinboard / В Интаро
  22. 22. Плюшки и особенности
  23. 23. PHP-фреймворки с единой точкой входа: Подробные примеры: https://github.com/intaro /pinboard/wiki/Configure -sending-of-readable- script-names-in-Pinba Указание URL
  24. 24. Для SaaS назначаем единый виртуальный домен, а поддомен выносим в теги запроса $subdomain = ‘’; //динамический поддомен if (function_exists('pinba_server_name_set')) { pinba_server_name_set('+prod.domain.ru'); } if (function_exists('pinba_tag_set')) { pinba_tag_set('subdomain', $subdomain); } SaaS с динамическими поддоменами: http://aa.domain.ru http://bb.domain.ru … http://+prod.domain.ru http://+prod.domain.ru Поддомен в тегах запроса Указание домена
  25. 25. Киллер фича! Указываем виртуальный домен и параметры для консольного скрипта: if (function_exists('pinba_script_name_set')) { $argv = $_SERVER['argv']; $argv[0] = '/' . basename($argv[0]); pinba_script_name_set(implode(' ', $argv)); } if (function_exists('pinba_server_name_set')) { pinba_server_name_set('+job.domain.ru'); } Статистика консольных скриптов
  26. 26. Устанавливаем статус ответа для консольного скрипта: Статистика консольных скриптов
  27. 27. Live-режим для консольных скриптов и API
  28. 28. Помимо php_extension есть расширения для: • Nginx • https://github.com/tony2001/ngx_http_pinba_module • Node.js • https://github.com/Sannis/node-pinba • Ruby • https://github.com/prepor/pinbo • Python • https://github.com/IsCoolEntertainment/pynba • http://habrahabr.ru/post/200128/ • Есть прецеденты сбора через Pinba клиентских метрик Timing API Мониторим не только PHP
  29. 29. Поддержка тегов и таймеров pinba в Pinboard
  30. 30. Замеряйте отдельные участки кода и помечайте их тегами: $timer = pinba_timer_start([ ‘category’ => ‘database’, ‘group’ => ‘database::select’, ]); //делаем select в БД pinba_timer_stop($timer); Замеряем отдельные участки кода
  31. 31. Общие отчеты во вкладке в Pinboard
  32. 32. Общие отчеты во вкладке в Pinboard
  33. 33. Общие отчеты во вкладке в Pinboard
  34. 34. Таймер для запроса Таймеры у запросов в Pinboard
  35. 35. Не профилирование, но понимание общей структуры запроса
  36. 36. Чтобы смотреть отчеты в Pinboard по домену/серверу, нужно так: $pinbaData = pinba_get_info(); $initTags = []; if (isset($pinbaData['hostname'])) { $initTags['__hostname'] = $pinbaData['hostname']; } if (isset($pinbaData['server_name'])) { $initTags['__server_name'] = $pinbaData['server_name']; } $timer = pinba_timer_start(array_merge($initTags, [ ‘category’ => ‘database’, ‘group’ => ‘database::select’, ])); //делаем select в БД pinba_timer_stop($timer); в начале скрипта
  37. 37. Symfony2: https://github.com/intaro/pinba-bundle • Настраивает script_name • Автоматические таймеры на Doctrine (БД), Twig (шаблоны) и Memcached (кеш) • Позволяет обернуть таймерами любые другие сервисы (Redis, Queue и др.) 1C-Битрикс: https://gist.github.com/muxx/9cc8b65a9105c8ba18a8 • На старом ядре позволяет отправлять в таймерах статистику по запросам к БД Поддержка таймеров в PHP-фреймворках
  38. 38. «Видим» проект так, как «видит» его пользователь Персентели: В курсе, если проекты проседают по скорости отдачи В курсе, если на проектах ошибки Мониторим фоновые скрипты Таймеры: Быстро локализуем проблему в скриптах pinba + Pinboard
  39. 39. Пользуйтесь pinba + Pinboard! И радуйтесь жизни :) Свободные лицензии: • GNU GPLv2 для pinba • MIT для Intaro Pinboard URLs: pinba.org intaro.github.io/pinboard/ Мои контакты: twitter.com/salikhov habrahabr.ru/users/muxx/ github.com/muxx Спасибо!

×