Раньше уже наталкивался на упоминания Graphite и StatsD, но всё в контексте каких-то нереальных приседаний с конфигами, и потому проходил мимо. Недавно же на службе звёзды сошлись таким образом, что-таки решил сесть и запилить по-быстрому сбор и отображение неких стат.данных PHP-приложения посредством StatsD и Graphite.
Содержание
Отмазка
Данная статья не является точной инструкцией, а скорее подробным описанием идеи. При наличии минимальных навыков даже этого описания будет достаточно для получения желаемого результата.
Настройка сборщика данных мониторинга
По итогам коротких изысканий было выяснено, что наипростейшим способом получить желаемое будет воспользоваться Bucky — маленький сервер для сбора метрик и препровождения их в Graphite. Этот сервер понимает в том числе и на языке StatsD.
Итак, по пунктам:
- Устанавливаем Graphite
- Устанавливаем Bucky (запуск коего осуществляется supervisor)
- Обучаем наше PHP-приложение отправлять метрики Bucky (по интерфейсу StatsD)
Рассмотрим эти шаги подробнее:
Установка Graphite
1 2 3 4 5 6 7 |
yum install httpd python-whisper python-carbon graphite-web /usr/bin/python /usr/lib/python2.6/site-packages/graphite/manage.py syncdb service carbon-cache restart service carbon-aggregator restart service httpd restart |
Установка Bucky
1 |
yum install python-bucky |
1 2 3 4 |
# Basic statsd configuration statsd_ip = "<IP-адрес данного сервера>" statsd_port = 8125 statsd_enabled = True |
Файл конфигурации для запуска Bucky мог бы выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 |
[program:bucky] command=/usr/bin/bucky --statsd-ip=<IP-адрес данного сервера> startsecs=1 startretries=999 stopasgroup=true user=root log_stdout=true log_stderr=true logfile=/var/log/bucky.log logfile_maxbytes=20MB logfile_backups=10 |
Настройка PHP-приложения
Предположим, нам необходимо собрать статистику по скорости генерации страниц нашим web-приложением.
Для этого воспользуемся пакетом domnikl/statsd-php, добавив
1 2 3 4 5 |
{ "require": { "domnikl/statsd": "~2.0" } } |
в свой composer.json
файл.
В код страницы можно добавить код типа:
1 2 3 4 5 6 7 8 9 10 |
<?php $start = microtime(true); /* * Тут располагается код вашего приложения */ $connection = new \Domnikl\Statsd\Connection\UdpSocket('<Адрес StatsD сервера>', 8125); $statsd = new \Domnikl\Statsd\Client($connection, "pages"); $statsd->timing(__FILE__, round((microtime(true) - $start)*1000)); |
Всё, информация о скорости генерации страницы будет поставляться на соответствующий порт вашего StatsD сервера, о чём вы тут же получите свидетельство в панели Graphite.
THE END
PS:
В одной из следующих статей рассматривается возможность сбора и визуализации через Graphite метрик NGINX.