pinboard + pinba / Как организовать мониторинг сотни...

39
Pinboard + pinba Как организовать мониторинг сотни PHP- проектов Ильяс Салихов Интаро

Upload: ilyas-salikhov

Post on 04-Jun-2015

1.435 views

Category:

Technology


8 download

TRANSCRIPT

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

Pinboard + pinba Как организовать мониторинг сотни PHP-

проектов

Ильяс Салихов

Интаро

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

Интаро — веб-интегратор

Штат > 50 человек

~100 проектов на поддержке

и другие

Об Интаро

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

1. ТЗ, дизайн, верстка

2. Разработали

3. Протестировали

4. Провели нагрузочное тестирование

5. Сдали проект и забыли

… А дальше?

Новый проект

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

Проекты на сопровождении – это:

• Постоянно новые фичи

• Неизбежно новые баги

• Неизбежно «медленные» участки

кода и «медленные» запросы

Проекты на сопровождении

требуют постоянного контроля

показателей

Проекты на поддержке и сопровождении

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

• CPU load average

• Memory usage

• Network traffic

• Disk space usage

• Utilization per device

• Processes count

• Inode table usage

• …

Показатели веб-проекта

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

• CPU load average

• Memory usage

• Network traffic

• Disk space usage

• Utilization per device

• Processes count

• Inode table usage

• …

Пользователь непосредственно ощущает на себе только request time и отсутствие ошибок

Показатели веб-проекта

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

• Realtime-статистика о выполнении PHP-

скриптов

• Extension для PHP + storage для MySQL

• Отправка по UDP

• Минимальный overhead для сбора и

отправки данных на сервер статистики

• Realtime-отчеты

• Таймеры

Pinba

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

Pinba

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

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

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

• Очень простая в установке:

• Ставите pinba_extension за 30 секунд и статистика по ВСЕМ

запросам начинает отправляться в pinba

• В облаке (AWS, Azure, …) готовите образ с

pinba_extension в комплекте и вся статистика

собирается без дополнительных

телодвижений

Pinba

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

• Формирует агрегированные

данные

• Хранит статистику дольше

(по умолчанию 1 месяц)

• Доступ к данным pinba

• Мониторит

• Уведомляет

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

90, 95, 99, 100 персентили для ключевых показателей

Intaro Pinboard / Агрегированные данные

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

90, 95, 99, 100 персентили для mem_peak_usage и cpu_usage

а тут был деплой

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

Отслеживание критических показателей

• Следит за 90 и 95

персентилями

• Уведомляет о просадке

показателей

• Уведомляет о

нормализации

показателей

Intaro Pinboard / Border value

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

Пример конфига для логгирования медленных и тяжелых

страниц:

Intaro Pinboard / Тяжелые страницы

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

Анализируем тяжелые страницы: время, память, процессор

Intaro Pinboard / Тяжелые страницы

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

• Лог страниц с ошибками (с указанием сервера)

Intaro Pinboard / В курсе ошибок

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

Уведомление на почту об ошибках

Intaro Pinboard / В курсе ошибок

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

Пример конфига уведомлений

Intaro Pinboard / В курсе ошибок

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

А тут похоже стало все плохо :/

Intaro Pinboard / В курсе ошибок

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

Наша статистика использования Pinboard на 05.2014:

• Мониторится 226 сайтов

• В pinba ~4 млн. хитов в сутки

• В среднем 30 ошибок в сутки

• Предоставляем в Pinboard доступ заказчикам

• Быстрое реагирование и устранение ошибок до

того, как опомнился пользователь или клиент :)

Кроме нас Pinboard используют сторонние

разработчики с сайтами в десятки миллионов хитов

в сутки

Intaro Pinboard / В Интаро

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

Плюшки и особенности

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

PHP-фреймворки с единой точкой входа:

Подробные примеры:

https://github.com/intaro

/pinboard/wiki/Configure

-sending-of-readable-

script-names-in-Pinba

Указание URL

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

Для 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

Поддомен в тегах запроса

Указание домена

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

Киллер фича!

Указываем виртуальный домен и параметры для консольного скрипта:

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');

}

Статистика консольных скриптов

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

Устанавливаем статус ответа для консольного скрипта:

Статистика консольных скриптов

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

Live-режим для консольных скриптов и API

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

Помимо 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

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

Поддержка тегов и таймеров pinba в Pinboard

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

Замеряйте отдельные участки кода и помечайте их тегами:

$timer = pinba_timer_start([

‘category’ => ‘database’,

‘group’ => ‘database::select’,

]);

//делаем select в БД

pinba_timer_stop($timer);

Замеряем отдельные участки кода

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

Общие отчеты во вкладке в Pinboard

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

Общие отчеты во вкладке в Pinboard

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

Общие отчеты во вкладке в Pinboard

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

Таймер для запроса

Таймеры у запросов в Pinboard

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

Не профилирование, но понимание общей структуры запроса

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

Чтобы смотреть отчеты в 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);

в начале скрипта

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

Symfony2: https://github.com/intaro/pinba-bundle

• Настраивает script_name

• Автоматические таймеры на Doctrine (БД), Twig

(шаблоны) и Memcached (кеш)

• Позволяет обернуть таймерами любые другие сервисы

(Redis, Queue и др.)

1C-Битрикс: https://gist.github.com/muxx/9cc8b65a9105c8ba18a8

• На старом ядре позволяет отправлять в таймерах статистику

по запросам к БД

Поддержка таймеров в PHP-фреймворках

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

«Видим» проект так, как «видит» его пользователь

Персентели: В курсе, если проекты проседают по скорости отдачи

В курсе, если на проектах ошибки

Мониторим фоновые скрипты

Таймеры: Быстро локализуем проблему в скриптах

pinba + Pinboard

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

Пользуйтесь 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

Спасибо!