Настройка php-fpm. Мониторинг сайтов

Как мониторить нагрузку на 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

Для каждого сайта сделаем свой конфиг. Для этого файл 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 минут должны «пойти» графики (слайдер-пример)

php-fpm munin
Александр Черных

системный администратор

Статьи по теме

0