Как мониторить нагрузку на web сервер, когда на сервере много разных сайтов? Это возможно, если соответствующим образом будет выполнена настройка php-fpm. Общая идея такова:
- для каждого сайта создать свой php-fpm пул
- состояние каждого пула отображать в графиках munin
В качестве примера возьмем два сайта с доменными именами advert.domain.tld (банерокрутилка) и club.domain.tld (форум), и получим по ним статистику в munin
Настройка DNS
Забегая наперед предлагаю создать в настройках домена дополнительную A-запись status. Домен status.domain.tld будет служебным для отображения статусов каждого php-fpm пула. Например, зайдя в браузере по линку status.domain.tld/advert мы получим
Именно наличие таких статусов необходимо мунину для отображения некоторой статистики
Настройка php-fpm
Для каждого сайта сделаем свой конфиг. Для этого файл php-fpm.conf приведем к следующему виду
include=/etc/php/fpm-php/fpm.d/*.conf [global] error_log = /var/log/php-fpm/error.log
Теперь сконфигурируем advert.conf
[advert] listen = /run/php-fpm/$pool.sock listen.owner = www listen.group = www listen.mode = 0666 user = www group = www pm = dynamic pm.max_children = 7 pm.start_servers = 3 pm.min_spare_servers = 1 pm.max_spare_servers = 3 pm.max_requests = 5000 pm.status_path = /status request_terminate_timeout = 5 request_slowlog_timeout = 3 slowlog = /var/log/php-fpm/$pool.slow.log
Конфигурация club.conf будет аналогичной, за исключением названия пула, вместо [advert] пишем [club] и если необходимо, то меняем значения остальных параметров. Имена файлов конфигов произвольные. Важно, чтоб расширения у них были conf. Я называю по имени домена, мне так удобнее
service php-fpm restart
и видим, что в папке /run/php-fpm/ каждый пул получил свой сокет
srw-rw-rw- 1 www www 0 Aug 15 10:54 advert.sock= srw-rw-rw- 1 www www 0 Aug 23 14:35 club.sock=
Настройка nginx
Тут ничего сложного нет, привожу конфиг виртуального сервера status.domain.tld
server { listen 80; server_name status.domain.tld; charset utf-8; include inc/restricted.conf; location /nginx { stub_status on; } location /advert { fastcgi_pass advert; include inc/fastcgi.conf; fastcgi_param SCRIPT_NAME /status; } location /club { fastcgi_pass club; include inc/fastcgi.conf; fastcgi_param SCRIPT_NAME /status; } }
В файле restricted.conf разрешаем доступ к просмотру статусов с нужных адресов и запрещаем всем остальным
nginx -s reload
Настройка Munin
Предполагаю, что Munin установлен и настроен. Дополнительно нужно скачать плагины для отображения графиков
cd git clone git://github.com/tjstein/php5-fpm-munin-plugins.git mv php5-fpm-munin-plugins/phpfpm /usr/libexec/munin/plugins/ chmod +x /usr/libexec/munin/plugins/phpfpm_*
Сконфигурируем munin-node
[phpfpm_advert_*] env.phpbin php-fpm env.phppool advert env.url http://status.domain.tld/advert [phpfpm_club_*] env.phpbin php-fpm env.phppool club env.url http://status.domain.tld/club
Подключим необходимые плагины для отображения сайта advert.domain.tld в статистике
cd /etc/munin/plugins/ ln -s /usr/libexec/munin/plugins/phpfpm_average phpfpm_advert_average ln -s /usr/libexec/munin/plugins/phpfpm_connections phpfpm_advert_connections ln -s /usr/libexec/munin/plugins/phpfpm_memory phpfpm_advert_memory ln -s /usr/libexec/munin/plugins/phpfpm_status phpfpm_advert_status ln -s /usr/libexec/munin/plugins/phpfpm_processes phpfpm_advert_processes
Аналогично подключаем club.domain.tld
service munin-node restart
Через 5-10 минут должны «пойти» графики (слайдер-пример)

- Системный администратор с 2000 года
- Участник Хабр Q&A и cyberforum
- Кейсы