Pinba статистика в режиме реального времени Довгаль Антон, Badoo.com tony@daylessday.org Немного о себе • Разработчик PHP с 2003-го года • Автор OCI8, PECL/haru, PECL/memcache, PECL/libevent, PECL/memtrack, PECL/rar, PECL/sphinx и др. • С 2007-го года работаю в Badoo.com Что это? • Pinba — это демон для сбора данных о выполнении скриптов на рабочих серверах • Pinba — это custom storage engine для MySQL • Pinba — это «попугай лори» на языке австралийских аборигенов • Pinba — это PHP Is Not a Bottleneck Anymore Зачем это? • Большой сервис требует постоянного контроля • Много серверов, много кода, много людей • Xdebug и ему подобные — для дебага, не для продакшена • Обработка данных на лету • Красивые графики радуют менеджеров Как это работает? • Каждый скрипт шлет пакет с данными • Это происходит после окончания выполнения запроса • Для отсылки пакета используется UDP • Сервер хранит пул из последних N пакетов, т.е. данные по последним N запросам • Для пользователя всё выглядит, как обычная база MySQL Данные • • • • • • • • домен имя физического сервера имя скрипта количество обработанных запросов объем вывода скрипта пиковое количество выделенной памяти время выполнения скрипта использованные системные ресурсы (user/system) • таймеры Таймеры • Одна из главных причин создания Pinba • Позволяют засекать время исполнения произвольных частей кода • Для группировки и суммирования таймеров используются таги вида «имя» => «значение». Примеры таймеров $timer1 = pinba_timer_start(array("db"=>$db_server, "op"=>"connect")); $c = mysql_connect($db_server, $user, $password); pinba_timer_stop($timer1); $timer2 = pinba_timer_start(array("db"=>$db_server, "op"=>"select", "query"=>"users")); $r = mysql_query("SELECT .. FROM User ..", $c); if (!$r) { pinba_timer_tags_merge($timer2, array("result"=>"failure")); } pinba_timer_stop($timer2); Интерфейс к данным «Виртуальные» таблицы с сырыми данными: • request — данные запроса • timer — значения таймеров • tag — имена тагов • timertag — таймеры <-> таги + значения тагов, «один ко многим» Отчеты • Запросы по сырым данным — это медленно • Отчеты обновляются на лету • Фиксированные отчеты: – – – – – – – с группировкой по скрипту по серверу по домену по серверу и скрипту по домену и скрипту по домену и серверу по домену, серверу и скрипту • Отчеты по произвольным тагам Пример из жизни Обратный пик на графике общего числа запросов в секунду Пример из жизни Пики на графике среднего времени выполнения скриптов Пример из жизни Одновременное замедление всех скриптов Пример из жизни Причина — падение одной из баз Есть чо? Вопросы? http://pinba.org Спасибо!