SlideShare ist ein Scribd-Unternehmen logo
1 von 39
Downloaden Sie, um offline zu lesen
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
Спасибо!

Weitere ähnliche Inhalte

Was ist angesagt?

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

Was ist angesagt? (20)

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

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

Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...Igor Miniailo
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Anton Baranov
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Ontico
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...rit2011
 
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Sergey Xek
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...rit2011
 
Марат Мавлютов - Современный веб как сложная система
Марат Мавлютов - Современный веб как сложная системаМарат Мавлютов - Современный веб как сложная система
Марат Мавлютов - Современный веб как сложная системаYandex
 
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)
PostgreSQL - Ups, DevOps..., Алексей Лесовский (PostgreSQL-Consulting)Ontico
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeYehor Herasymchuk
 
Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Ontico
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013Roman Pavlushko
 
Вадим Мадисон "Опыт разработки через микросервисы"
Вадим Мадисон "Опыт разработки через микросервисы"Вадим Мадисон "Опыт разработки через микросервисы"
Вадим Мадисон "Опыт разработки через микросервисы"Tanya Denisyuk
 
Преимущества PHP 7: от D7 до новой виртуальной машины
Преимущества PHP 7:  от D7 до новой виртуальной машиныПреимущества PHP 7:  от D7 до новой виртуальной машины
Преимущества PHP 7: от D7 до новой виртуальной машины1С-Битрикс
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и DjangoTaras Lyapun
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayAndrey Rebrov
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияSQALab
 
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)Ontico
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 

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

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

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 Спасибо!