SlideShare a Scribd company logo
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 table usage
• …
Показатели веб-проекта
• CPU load average
• Memory usage
• Network traffic
• Disk space usage
• Utilization per device
• Processes count
• Inode table usage
• …
Пользователь непосредственно
ощущает на себе только request
time и отсутствие ошибок
Показатели веб-проекта
• Realtime-статистика о выполнении PHP-
скриптов
• Extension для PHP + storage для MySQL
• Отправка по UDP
• Минимальный overhead для сбора и
отправки данных на сервер статистики
• Realtime-отчеты
• Таймеры
Pinba
Pinba
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
• Очень простая в установке:
• Ставите pinba_extension за 30 секунд и статистика по ВСЕМ
запросам начинает отправляться в pinba
• В облаке (AWS, Azure, …) готовите образ с
pinba_extension в комплекте и вся статистика
собирается без дополнительных
телодвижений
Pinba
• Формирует агрегированные
данные
• Хранит статистику дольше
(по умолчанию 1 месяц)
• Доступ к данным pinba
• Мониторит
• Уведомляет
90, 95, 99, 100 персентили для ключевых показателей
Intaro Pinboard / Агрегированные данные
90, 95, 99, 100 персентили для mem_peak_usage и cpu_usage
а тут был деплой
Отслеживание критических показателей
• Следит за 90 и 95
персентилями
• Уведомляет о просадке
показателей
• Уведомляет о
нормализации
показателей
Intaro Pinboard / Border value
Пример конфига для логгирования медленных и тяжелых
страниц:
Intaro Pinboard / Тяжелые страницы
Анализируем тяжелые страницы: время, память, процессор
Intaro Pinboard / Тяжелые страницы
• Лог страниц с ошибками (с указанием сервера)
Intaro Pinboard / В курсе ошибок
Уведомление на почту об ошибках
Intaro Pinboard / В курсе ошибок
Пример конфига уведомлений
Intaro Pinboard / В курсе ошибок
А тут похоже стало все плохо :/
Intaro Pinboard / В курсе ошибок
Наша статистика использования Pinboard на 05.2014:
• Мониторится 226 сайтов
• В pinba ~4 млн. хитов в сутки
• В среднем 30 ошибок в сутки
• Предоставляем в Pinboard доступ заказчикам
• Быстрое реагирование и устранение ошибок до
того, как опомнился пользователь или клиент :)
Кроме нас Pinboard используют сторонние
разработчики с сайтами в десятки миллионов хитов
в сутки
Intaro Pinboard / В Интаро
Плюшки и особенности
PHP-фреймворки с единой точкой входа:
Подробные примеры:
https://github.com/intaro
/pinboard/wiki/Configure
-sending-of-readable-
script-names-in-Pinba
Указание URL
Для 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
Поддомен в тегах запроса
Указание домена
Киллер фича!
Указываем виртуальный домен и параметры для консольного скрипта:
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');
}
Статистика консольных скриптов
Устанавливаем статус ответа для консольного скрипта:
Статистика консольных скриптов
Live-режим для консольных скриптов и API
Помимо 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
Поддержка тегов и таймеров
pinba в Pinboard
Замеряйте отдельные участки кода и помечайте их тегами:
$timer = pinba_timer_start([
‘category’ => ‘database’,
‘group’ => ‘database::select’,
]);
//делаем select в БД
pinba_timer_stop($timer);
Замеряем отдельные участки кода
Общие отчеты во вкладке в Pinboard
Общие отчеты во вкладке в Pinboard
Общие отчеты во вкладке в Pinboard
Таймер для запроса
Таймеры у запросов в Pinboard
Не профилирование, но понимание общей структуры запроса
Чтобы смотреть отчеты в 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);
в начале скрипта
Symfony2: https://github.com/intaro/pinba-bundle
• Настраивает script_name
• Автоматические таймеры на Doctrine (БД), Twig
(шаблоны) и Memcached (кеш)
• Позволяет обернуть таймерами любые другие сервисы
(Redis, Queue и др.)
1C-Битрикс: https://gist.github.com/muxx/9cc8b65a9105c8ba18a8
• На старом ядре позволяет отправлять в таймерах статистику
по запросам к БД
Поддержка таймеров в PHP-фреймворках
«Видим» проект так, как «видит» его
пользователь
Персентели: В курсе, если проекты проседают по
скорости отдачи
В курсе, если на проектах ошибки
Мониторим фоновые скрипты
Таймеры: Быстро локализуем проблему в
скриптах
pinba + Pinboard
Пользуйтесь 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
Спасибо!

More Related Content

PPTX
мониторинг производительности приложения на PINBA
PDF
Практика применения Pinba в Badoo / Денис Карасик (Badoo)
PDF
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов (...
PPTX
мониторинг производительности Web приложений на python
PDF
Нагруженный поиск на Sphinx
PDF
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
PPTX
Yevgen Lysenko "AWS RDS Aurora Serverless, ECS Fargate and more serverless-pr...
PDF
RootConf 2015
мониторинг производительности приложения на PINBA
Практика применения Pinba в Badoo / Денис Карасик (Badoo)
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов (...
мониторинг производительности Web приложений на python
Нагруженный поиск на Sphinx
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Yevgen Lysenko "AWS RDS Aurora Serverless, ECS Fargate and more serverless-pr...
RootConf 2015

What's hot (20)

PDF
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
PDF
Архитектура поиска в Avito / Андрей Смирнов (Avito)
PDF
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
PDF
Anton Turetckii "What does it take to build a host?"
PPT
Zabbix v2
PDF
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
PDF
Avito Stachka 2012
PDF
Реалтайм статистика скорости работы нативных и веб-приложений у реальных поль...
PPTX
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
PPTX
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
PDF
Zabbix в Badoo или о чем не пишут в мануале, Илья Аблеев (Badoo)
PDF
Юрий Насретдинов, Badoo
PPTX
Jinba - frontendconf.ru/2015
PDF
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
PDF
Ровная балансировка нагрузки на фронтенд-кластере
PDF
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
PPTX
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
PDF
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
PDF
Реализация восстановления после аварий / Сергей Бурладян (Avito)
PDF
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Архитектура поиска в Avito / Андрей Смирнов (Avito)
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Anton Turetckii "What does it take to build a host?"
Zabbix v2
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Avito Stachka 2012
Реалтайм статистика скорости работы нативных и веб-приложений у реальных поль...
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Zabbix в Badoo или о чем не пишут в мануале, Илья Аблеев (Badoo)
Юрий Насретдинов, Badoo
Jinba - frontendconf.ru/2015
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Ровная балансировка нагрузки на фронтенд-кластере
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Ad

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

PPTX
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
PPTX
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
PPTX
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
PDF
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
PDF
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
PDF
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
PDF
Марат Мавлютов - Современный веб как сложная система
PDF
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PDF
Zero Downtime PHP Deployment with Envoyer And Forge
PDF
Компиляция скриптов PHP (Алексей Романенко)
PDF
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
PDF
PDF
Вадим Мадисон "Опыт разработки через микросервисы"
PPTX
Преимущества PHP 7: от D7 до новой виртуальной машины
PPTX
Errors Tracker
PDF
Введение в Python и Django
PDF
Building deployment pipeline - DevOps way
PPTX
Использование Open Source инструментов для автоматизации тестирования
PDF
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
PDF
Иван Карев — Клиентская оптимизация
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
Марат Мавлютов - Современный веб как сложная система
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
Zero Downtime PHP Deployment with Envoyer And Forge
Компиляция скриптов PHP (Алексей Романенко)
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
Вадим Мадисон "Опыт разработки через микросервисы"
Преимущества PHP 7: от D7 до новой виртуальной машины
Errors Tracker
Введение в Python и Django
Building deployment pipeline - DevOps way
Использование Open Source инструментов для автоматизации тестирования
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
Иван Карев — Клиентская оптимизация
Ad

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

  • 1. Pinboard + pinba Как организовать мониторинг сотни PHP- проектов Ильяс Салихов Интаро
  • 2. Интаро — веб-интегратор Штат > 50 человек ~100 проектов на поддержке и другие Об Интаро
  • 3. 1. ТЗ, дизайн, верстка 2. Разработали 3. Протестировали 4. Провели нагрузочное тестирование 5. Сдали проект и забыли … А дальше? Новый проект
  • 4. Проекты на сопровождении – это: • Постоянно новые фичи • Неизбежно новые баги • Неизбежно «медленные» участки кода и «медленные» запросы Проекты на сопровождении требуют постоянного контроля показателей Проекты на поддержке и сопровождении
  • 5. • CPU load average • Memory usage • Network traffic • Disk space usage • Utilization per device • Processes count • Inode table usage • … Показатели веб-проекта
  • 6. • CPU load average • Memory usage • Network traffic • Disk space usage • Utilization per device • Processes count • Inode table usage • … Пользователь непосредственно ощущает на себе только request time и отсутствие ошибок Показатели веб-проекта
  • 7. • Realtime-статистика о выполнении PHP- скриптов • Extension для PHP + storage для MySQL • Отправка по UDP • Минимальный overhead для сбора и отправки данных на сервер статистики • Realtime-отчеты • Таймеры Pinba
  • 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. • Очень простая в установке: • Ставите pinba_extension за 30 секунд и статистика по ВСЕМ запросам начинает отправляться в pinba • В облаке (AWS, Azure, …) готовите образ с pinba_extension в комплекте и вся статистика собирается без дополнительных телодвижений Pinba
  • 11. • Формирует агрегированные данные • Хранит статистику дольше (по умолчанию 1 месяц) • Доступ к данным pinba • Мониторит • Уведомляет
  • 12. 90, 95, 99, 100 персентили для ключевых показателей Intaro Pinboard / Агрегированные данные
  • 13. 90, 95, 99, 100 персентили для mem_peak_usage и cpu_usage а тут был деплой
  • 14. Отслеживание критических показателей • Следит за 90 и 95 персентилями • Уведомляет о просадке показателей • Уведомляет о нормализации показателей Intaro Pinboard / Border value
  • 15. Пример конфига для логгирования медленных и тяжелых страниц: Intaro Pinboard / Тяжелые страницы
  • 16. Анализируем тяжелые страницы: время, память, процессор Intaro Pinboard / Тяжелые страницы
  • 17. • Лог страниц с ошибками (с указанием сервера) Intaro Pinboard / В курсе ошибок
  • 18. Уведомление на почту об ошибках Intaro Pinboard / В курсе ошибок
  • 19. Пример конфига уведомлений Intaro Pinboard / В курсе ошибок
  • 20. А тут похоже стало все плохо :/ Intaro Pinboard / В курсе ошибок
  • 21. Наша статистика использования Pinboard на 05.2014: • Мониторится 226 сайтов • В pinba ~4 млн. хитов в сутки • В среднем 30 ошибок в сутки • Предоставляем в Pinboard доступ заказчикам • Быстрое реагирование и устранение ошибок до того, как опомнился пользователь или клиент :) Кроме нас Pinboard используют сторонние разработчики с сайтами в десятки миллионов хитов в сутки Intaro Pinboard / В Интаро
  • 23. PHP-фреймворки с единой точкой входа: Подробные примеры: https://github.com/intaro /pinboard/wiki/Configure -sending-of-readable- script-names-in-Pinba Указание URL
  • 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. Киллер фича! Указываем виртуальный домен и параметры для консольного скрипта: 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. Устанавливаем статус ответа для консольного скрипта: Статистика консольных скриптов
  • 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. Поддержка тегов и таймеров pinba в Pinboard
  • 30. Замеряйте отдельные участки кода и помечайте их тегами: $timer = pinba_timer_start([ ‘category’ => ‘database’, ‘group’ => ‘database::select’, ]); //делаем select в БД pinba_timer_stop($timer); Замеряем отдельные участки кода
  • 31. Общие отчеты во вкладке в Pinboard
  • 32. Общие отчеты во вкладке в Pinboard
  • 33. Общие отчеты во вкладке в Pinboard
  • 34. Таймер для запроса Таймеры у запросов в Pinboard
  • 35. Не профилирование, но понимание общей структуры запроса
  • 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. Symfony2: https://github.com/intaro/pinba-bundle • Настраивает script_name • Автоматические таймеры на Doctrine (БД), Twig (шаблоны) и Memcached (кеш) • Позволяет обернуть таймерами любые другие сервисы (Redis, Queue и др.) 1C-Битрикс: https://gist.github.com/muxx/9cc8b65a9105c8ba18a8 • На старом ядре позволяет отправлять в таймерах статистику по запросам к БД Поддержка таймеров в PHP-фреймворках
  • 38. «Видим» проект так, как «видит» его пользователь Персентели: В курсе, если проекты проседают по скорости отдачи В курсе, если на проектах ошибки Мониторим фоновые скрипты Таймеры: Быстро локализуем проблему в скриптах pinba + Pinboard
  • 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 Спасибо!