Про pinba и pinboard для мониторинга PHP

// Июль 2nd, 2013 // Веб-разработка

pinba_sqВот есть у меня какие-то задумки, идеи, но не всегда есть время их реализовать или проверить. Так было и с Pinba. О ней я узнал на позапрошлом DevConf. Собирался поставить… да, целый год собирался, и таки поставил. И знаете что, она мне понравилась. Особенно в свете недавно вышедшей гуевины Pinboard.

Концептуально Pinba, как и любое клиент-серверное приложение состоит из… та-да… клиента и сервера (как подсказывает нам Адмирал Ясен Хрен). Клиент — легковесное php-расширение, которое собирает статистику по скриптам и отправляет их UDP датаграммами на сервер. В этом то и заключается killer-feature пинбы. Она практически не даёт оверхеда на мониторинг.

pinba-work

Как работает pinba

Сервер сделан весьма оригинально, он представляет собой MySQL storage engine, в котором только для чтения доступны данные статистики. Я сначала удивился, но потом понял всю прелесть такого решения. Ведь очень просто ваять свои гуевины для pinba, и видимо поэтому и увидел свет Pinboard.

Ну в общих чертах всё понятно, теперь приступим к установке настройки и тестированию пинбы. Тестовый стенд представлен моим старым ноутом с Ubuntu 13.04 Server на борту.

Установка pinba-mysql-engine (сервера)

1. sudo apt-get install libncurses5-dev cmake libprotobuf-dev libjudy-dev libevent-dev mysql-source-5.5 protobuf-compiler build-essential fakeroot dpkg-dev bison checkinstall

2. cd /usr/src/mysql; tzr zxf ./mysql-source-5.5.tar.gz

3. cd ./mysql-5.5 & cmake .

4. cd ~; git clone https://github.com/tony2001/pinba_engine.git ./pinba-server

5 cd ./pinba-server; ./buildconf.sh

6. configure --with-mysql=/usr/src/mysql/mysql-5.5 --libdir=/usr/lib/mysql/plugin/

7. make

8. sudo checkinstall

9. указываем версию = 1 и название пакета = pinba-mysql-engine

**********************************************************************

Done. The new package has been installed and saved to

/media/ssd/andrey/compile/pinba-server/pinba-mysql-engine_1-1_i386.deb

You can remove it from your system anytime using:

dpkg -r pinba-mysql-engine

**********************************************************************

10.  mysql -uroot -p

11. mysql> INSTALL PLUGIN pinba SONAME 'libpinba_engine.so';

12. mysql> CREATE DATABASE pinba;

13. mysql -D pinba < default_tables.sql

13. mysql -uroot -p -D pinba < default_tables.sql

14. Настраиваем сервер

Сервер 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.
15. sudo service mysql restart

Отлично сервер установлен. Проверить его можно с помошью команды SHOW PLUGINS. Дальше ставим клиента. Можно на ту же машину, можно на другую.

Установка pinba-extension (клиент)

1. sudo apt-get install php5-dev

2. git clone https://github.com/tony2001/pinba_extension ./pinba-client

3. cd ./pinba-client

4. phpize

5. ./configure

6. make

7. sudo make install

Installing shared extensions:     /usr/lib/php5/20100525+lfs/

8. Настриаваем клиент

На каждом сервере, где выполняется php надо установить модуль и добавить в php.ini следующие строки:
; configuration for php pinba module
extension=pinba.so
pinba.enabled=1
pinba.server=192.168.1.42:3300 ; адрес и порт сервера пинбы

9. sudo service php5-fpm restart

Не забудьте разрешить UDP трафик на порт пинбы в ваших файерволах/роутерах.

Установка pinboard (GUI для Pinba)

Pinboard — это симпатишная гуевина для pinba. Написана на Silex и Symfony2-компонентах, что не может не радовать. Ну тут не буду разжевывать, а дам ссылку на хабрапост в котором детально описан процесс установки.

Преимущества pinba+pinboard

Мне очень понравился график потребления памяти. Вот кстати, как выглядит главное окно Pinboard.

pinba-main

Обратите внимание, что если запросы вашего сайта обрабатывает несколько бекэндов, то вы можете переключалкой посмотреть статистику отдельно по каждому, или сводную, как захотите.

Использование pinba для мониторинга и отладки

Для теста я переносил сайт с одного ip на другой и в пинбе наблюдал как расходятся DNS записи (соотношения обращений к одному хосту и другому). Вот только не хватает круговой диаграммы или гистограммы по хостам для сайта. Это было бы вообще шикарно.

pinba-dns

Визуализация распространения DNS зоны

 

На рисунке часть графика, обозначенная, как A — время нахождения движка на старом сервере (трудяга перегружен). Сектор B с пилой — время расхождения DNS зоны, когда часть клиентов обращается к старому севреру (пики), а часть к новому (спады). Сектор C — сайт полностью перехал на новый сервер. Пики — генерация и кэширования контента, спады — нормальная отдача страниц. Соответственно интервал между пиками в секторе C — ttl кэша.

Или вот ещё вариант. Мы хотим сравнить, как работает наш бекенд с кэшированием и без него. Пожалуйста, просто включаем кэширование и мониторим пинбу в закладке Live в Pinboard.

pinba-cache

Использование pinba для отладки

Забыл названия столбцов отскринить, так что расскажу на словах. Первый столбец — имя хоста, второй — URL, третий — время обработки запроса в мс, четвертый — потребление памяти для запроса в Кб.

Третья строка — работа сайта (WordPress) без кэша. 4 секунды генерация, 11 Мб потребление.

Вторая строка — генерация кэша. Как видно тут время даже стало меньше, хоть и не обязано было, памяти — столько же.

Первая строка — получаем данные из кэша. Вау! Реально Вау! Сначала не поверил, проверил еще разок. Всё верно, 4 мс и пол-мегабайта памяти. И да, это страничный кэш в memcached на том же сервере. Но все равно впечатляет. В общем, к чему это я, теперь если надо проверить например, как сайт ведёт себя после деплоя свежего кода, или вообще в реалтайме посмотреть как чего — то пинба будет вам отличным помошником в этом.

В закладке Request time можно найти «Slowest requests for last day». И вы сразу поймёте, какие запросы отжирают у вас ресурсы сервера. Pinboard понравилась мне за Live и Slow requests. Прямо то, что докутор прописал.

Ссылки

http://habrahabr.ru/post/183104/

Share

Спасибо!


Если вам помогла статья, или вы хотите поддержать мои исследования и блог - вот лучший способ сделать это:


Комментировать