Про pinba и pinboard для мониторинга PHP
Вот есть у меня какие-то задумки, идеи, но не всегда есть время их реализовать или проверить. Так было и с Pinba. О ней я узнал на позапрошлом DevConf. Собирался поставить… да, целый год собирался, и таки поставил. И знаете что, она мне понравилась. Особенно в свете недавно вышедшей гуевины Pinboard.
Концептуально Pinba, как и любое клиент-серверное приложение состоит из… та-да… клиента и сервера (как подсказывает нам Адмирал Ясен Хрен). Клиент – легковесное php-расширение, которое собирает статистику по скриптам и отправляет их UDP датаграммами на сервер. В этом то и заключается killer-feature пинбы. Она практически не даёт оверхеда на мониторинг.
Сервер сделан весьма оригинально, он представляет собой MySQL storage engine, в котором только для чтения доступны данные статистики. Я сначала удивился, но потом понял всю прелесть такого решения. Ведь очень просто ваять свои гуевины для pinba, и видимо поэтому и увидел свет Pinboard.
Ну в общих чертах всё понятно, теперь приступим к установке настройки и тестированию пинбы. Тестовый стенд представлен моим старым ноутом с Ubuntu 13.04 Server на борту.
Установка pinba-mysql-engine (сервера)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
1. sudo apt-get install php5-dev 2. git clone <a href="https://github.com/tony2001/pinba_extension">https://github.com/tony2001/pinba_extension</a> ./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 для мониторинга и отладки
Для теста я переносил сайт с одного ip на другой и в пинбе наблюдал как расходятся DNS записи (соотношения обращений к одному хосту и другому). Вот только не хватает круговой диаграммы или гистограммы по хостам для сайта. Это было бы вообще шикарно.
На рисунке часть графика, обозначенная, как A – время нахождения движка на старом сервере (трудяга перегружен). Сектор B с пилой – время расхождения DNS зоны, когда часть клиентов обращается к старому севреру (пики), а часть к новому (спады). Сектор C – сайт полностью перехал на новый сервер. Пики – генерация и кэширования контента, спады – нормальная отдача страниц. Соответственно интервал между пиками в секторе C – ttl кэша.
Или вот ещё вариант. Мы хотим сравнить, как работает наш бекенд с кэшированием и без него. Пожалуйста, просто включаем кэширование и мониторим пинбу в закладке Live в Pinboard.
Забыл названия столбцов отскринить, так что расскажу на словах. Первый столбец – имя хоста, второй – URL, третий – время обработки запроса в мс, четвертый – потребление памяти для запроса в Кб.
Третья строка – работа сайта (WordPress) без кэша. 4 секунды генерация, 11 Мб потребление.
Вторая строка – генерация кэша. Как видно тут время даже стало меньше, хоть и не обязано было, памяти – столько же.
Первая строка – получаем данные из кэша. Вау! Реально Вау! Сначала не поверил, проверил еще разок. Всё верно, 4 мс и пол-мегабайта памяти. И да, это страничный кэш в memcached на том же сервере. Но все равно впечатляет. В общем, к чему это я, теперь если надо проверить например, как сайт ведёт себя после деплоя свежего кода, или вообще в реалтайме посмотреть как чего – то пинба будет вам отличным помошником в этом.
В закладке Request time можно найти “Slowest requests for last day”. И вы сразу поймёте, какие запросы отжирают у вас ресурсы сервера. Pinboard понравилась мне за Live и Slow requests. Прямо то, что докутор прописал.