Как сказано на официальном сайте —
И это действительно так. Она позволит вам в реальном времени получать статистику по работающему приложению, при этом не замедляя само приложение.
Что делать со статистикой — это уже ваше дело, например, мы выводим ее в заббикс и используем как для мониторинга стабильности (нет ошибок, мало число длинных запросов), так и для аналитики.
Удивительно, что про это действительно замечательное изобретение не было еще ни одной статьи на хабре.
Мне захотелось сделать что-нибудь хорошее для этого opensource проекта, а что может быть лучше упоминания на хабре ;)
Сама пинба состоит из двух частей — это php extention и engine (движок для mysql).
И то и другое поставляется в исходном коде. Сама установка достаточно тривиальна и хорошо описана в справочном руководстве.
Клиент (модуль)
На каждом сервере, где выполняется php надо установить модуль и добавить в php.ini следующие строки:
После этого каждый php скрипт, cli в том числе, перед завершением работы будет посылать отчет по udp на указанный адрес и порт.
На этом установка завершена, клиент настроен.
Сервер (движок mysql).
При первом прочтении документации я не мог понять, зачем пинбе нужен mysql. Оказалось, что все просто — mysql — это интерфейс/точка входа в систему аналитики.
Это очень удобно, ведь под данную СУБД есть уже куча решений и все умеет с ним работать.
Сервер pinba конфигурируется как движок mysql. Настроек не много и имена их очевидны:
Подробнее смотрите в документации.
После того, как вы установите сервер и включите модуль на клиентах в пинбу (mysql) будут поступать данные о всех скриптах, которые были выполнены с этим модулем.
Данные о всех уникальных запросах попадут в табличку request. Так же вам доступны группировки:
report_by_hostname, report_by_hostname_and_script, report_by_hostname_and_server, report_by_hostname_server_and_script, report_by_script_name, report_by_server_and_script, report_by_server_name.
И вообще, это же mysql, так что:
Резюмирую — не настраивая практически ничего мы получили систему аналитики всего php в продакшене.
Например, мы знаем суммарное число обращений (rps):
То же самое, но по каждому хосту (серверу прода):
И еще большой набор различных отчетов. Все отчеты будут обновляться оперативно и содержать самые свежие данные.
Это не анализ логов apache, это профайлинг и мониторинг прямо на продакшене!
Теперь о самом вкусном.
Вы можете измерять продолжительность какого-либо события в скриптах и тэггировать его. Эти данные так же будут доступны для отчетов.
Например, если у вас есть длинная выборка пользователей из базы, то можно сделать так:
Я добавил таймеры прямо в фреймворк, который мы используем, и сейчас в той или иной мере у меня измеряются все запросы к базам, memcached и т.д.
Отдельно отмечу, что эти данные легко доступны в интерфейсе сервера.
Их можно выбрать или из сырых данных — см. таблицы report, timer, timertag, либо создать таблицы, в которых данные будут находится уже в аггрегированном состоянии.
Пример (из вики):
NOTE: Комментарий к таблице важен.
После создания, в эту таблицу будут автоматически (!) аггрегироваться данные по тегу group и серверу (server).
Мы используем ее в продакшене. Она работает ;)
Я не ставлю целью сделать какое-то законченное описание pinba, тем более мне не хочется копировать мануал.
Если вы используете php в продакшене, попробуйте pinba. Она действительно хороша!
Литература:
* wiki
* группа google
upd: Встречайте автора текущей реализации — tony2001!
Pinba is a realtime monitoring/statistics server for PHP using MySQL as a read-only interface.
И это действительно так. Она позволит вам в реальном времени получать статистику по работающему приложению, при этом не замедляя само приложение.
Что делать со статистикой — это уже ваше дело, например, мы выводим ее в заббикс и используем как для мониторинга стабильности (нет ошибок, мало число длинных запросов), так и для аналитики.
Удивительно, что про это действительно замечательное изобретение не было еще ни одной статьи на хабре.
Мне захотелось сделать что-нибудь хорошее для этого opensource проекта, а что может быть лучше упоминания на хабре ;)
Установка
Сама пинба состоит из двух частей — это php extention и engine (движок для mysql).
И то и другое поставляется в исходном коде. Сама установка достаточно тривиальна и хорошо описана в справочном руководстве.
Прицип работы и конфигурация
Клиент (модуль)
На каждом сервере, где выполняется php надо установить модуль и добавить в php.ini следующие строки:
; configuration for php pinba module
extension=pinba.so
pinba.enabled=1
pinba.server=192.168.1.42:3300 ; адрес и порт сервера пинбы
После этого каждый php скрипт, cli в том числе, перед завершением работы будет посылать отчет по udp на указанный адрес и порт.
На этом установка завершена, клиент настроен.
Сервер (движок mysql).
При первом прочтении документации я не мог понять, зачем пинбе нужен mysql. Оказалось, что все просто — mysql — это интерфейс/точка входа в систему аналитики.
Это очень удобно, ведь под данную СУБД есть уже куча решений и все умеет с ним работать.
Сервер pinba конфигурируется как движок mysql. Настроек не много и имена их очевидны:
[mysqld] pinba_port=3300 #порт pinba_address=192.168.1.205 pinba_stats_gathering_period=10000 #(microseconds) pinba_stats_history=900 #(seconds) pinba_temp_pool_size=10000 pinba_request_pool_size=1000000 #<max expected requests per second> * <stats_history> = <request pool size> pinba_tag_report_timeout=-1 #Default value is -1, i.e. keep the data updated forever.
Подробнее смотрите в документации.
После того, как вы установите сервер и включите модуль на клиентах в пинбу (mysql) будут поступать данные о всех скриптах, которые были выполнены с этим модулем.
Данные о всех уникальных запросах попадут в табличку request. Так же вам доступны группировки:
report_by_hostname, report_by_hostname_and_script, report_by_hostname_and_server, report_by_hostname_server_and_script, report_by_script_name, report_by_server_and_script, report_by_server_name.
И вообще, это же mysql, так что:
show tables;
Резюмирую — не настраивая практически ничего мы получили систему аналитики всего php в продакшене.
Например, мы знаем суммарное число обращений (rps):
mysql> select req_per_sec from report_by_server_name where server_name = 'ro.plus1.wapstart.ru'; +-------------+ | req_per_sec | +-------------+ | 547.161 | +-------------+ 1 row in set (0.00 sec)
То же самое, но по каждому хосту (серверу прода):
mysql> select hostname, req_per_sec from report_by_hostname_and_server where server_name = 'ro.plus1.wapstart.ru'; +----------+-------------+ | hostname | req_per_sec | +----------+-------------+ | a.... | 81.7561 | | b.. | 59.0298 | | c... | 90.8049 | | f.... | 54.5014 | | f.... | 54.5122 | | h...... | 63.5664 | | k... | 54.5068 | | s.... | 90.8211 | +----------+-------------+ 8 rows in set (0.00 sec)
И еще большой набор различных отчетов. Все отчеты будут обновляться оперативно и содержать самые свежие данные.
Это не анализ логов apache, это профайлинг и мониторинг прямо на продакшене!
Таймеры и теги
Теперь о самом вкусном.
Вы можете измерять продолжительность какого-либо события в скриптах и тэггировать его. Эти данные так же будут доступны для отчетов.
Например, если у вас есть длинная выборка пользователей из базы, то можно сделать так:
$t = pinba_timer_start(array("group"=>"mysql", "server"=>"dbs2", "operation"=>"select"));
//работа с базой
pinba_timer_stop($t);
Я добавил таймеры прямо в фреймворк, который мы используем, и сейчас в той или иной мере у меня измеряются все запросы к базам, memcached и т.д.
Отдельно отмечу, что эти данные легко доступны в интерфейсе сервера.
Их можно выбрать или из сырых данных — см. таблицы report, timer, timertag, либо создать таблицы, в которых данные будут находится уже в аггрегированном состоянии.
Пример (из вики):
CREATE TABLE `tag_info_group_server` (
`group_value` varchar(32) DEFAULT NULL,
`server_value` varchar(32) DEFAULT NULL,
`req_count` int(11) DEFAULT NULL,
`req_per_sec` float DEFAULT NULL,
`hit_count` int(11) DEFAULT NULL,
`hit_per_sec` float DEFAULT NULL,
`timer_value` float DEFAULT NULL
) ENGINE=PINBA DEFAULT CHARSET=latin1 COMMENT='tag2_info:group,server'
NOTE: Комментарий к таблице важен.
После создания, в эту таблицу будут автоматически (!) аггрегироваться данные по тегу group и серверу (server).
Стабильность
Мы используем ее в продакшене. Она работает ;)
Я не ставлю целью сделать какое-то законченное описание pinba, тем более мне не хочется копировать мануал.
Если вы используете php в продакшене, попробуйте pinba. Она действительно хороша!
Литература:
* wiki
* группа google
upd: Встречайте автора текущей реализации — tony2001!