Мониторинг сервисов позволяет не только узнать о проблемах, но и даёт возможность оптимизировать конфигурацию и нагрузку. В данном материале я расскажу как анализировать сервис PHP-FPM и забирать информацию с помощью Zabbix
С чем имеем дело
# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core)
Начнем с того, что PHP-FPM имеет встроенный инструмент для предоставления статистики. Для того что бы активировать необходимо задать соответствующий параметр в конфигурационном файле
# vim /etc/php-fpm.d/www.conf +/pm.status
Тут мы видим строку
;pm.status_path = /status
Необходимо раскоментировать её и по желанию изменить этот URL
Описание говорит нам вот что
; The URI to view the FPM status page. If this value is not set, no URI will be
; recognized as a status page. By default, the status page shows the following
; information
Я изменил значение на
pm.status_path = /phpfpm_status
После этого необходимо применить настройки
# systemctl reload php-fpm
Теперь в конфигурацию nginx добавляем соответствующий локейшн
location ~ ^/(phpfpm_status|ping)$ { access_log off; allow 127.0.0.1; allow 1.2.3.4; deny all; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; }
Применим конфигурацию
# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # nginx -s reload
Сразу же и проверим
# curl http://127.0.0.1/phpfpm_status pool: www process manager: dynamic start time: 18/Aug/2016:15:48:36 +0300 start since: 465 accepted conn: 81 listen queue: 0 max listen queue: 0 listen queue len: 0 idle processes: 5 active processes: 1 total processes: 6 max active processes: 2 max children reached: 0 slow requests: 0
Отлично, статистику мы получаем. А это означает что пока что всё настроено должным образом
Подготовительные работы и скрипты для заббикса
# mkdir /etc/zabbix/scripts/php-fpm # cd /etc/zabbix/scripts/php-fpm/ # touch php-fpm_discovery.sh # touch php-fpm_value.sh # touch /etc/zabbix/zabbix_agentd.d/php-fpm.conf # chown -R zabbix:zabbix /etc/zabbix/scripts/ # chmod +x /etc/zabbix/scripts/php-fpm/php-fpm_discovery.sh # chmod +x /etc/zabbix/scripts/php-fpm/php-fpm_value.sh
Теперь листинг скриптов
1) Получение статистики через Low Level Discovery
# cat /etc/zabbix/scripts/php-fpm/php-fpm_discovery.sh #!/bin/bash LOG="/etc/zabbix/scripts/php-fpm/log" curl -s http://127.0.0.1/phpfpm_status > $LOG
2) Парсинг данных для zabbix
# cat /etc/zabbix/scripts/php-fpm/php-fpm_value.sh #!/bin/bash LOG="/etc/zabbix/scripts/php-fpm/log" case $1 in 'pool' ) grep pool $LOG | cut -d":" -f 2 | sed -e 's/ //g';; 'process_manager' ) grep 'process manager' $LOG | cut -d":" -f 2 | sed -e 's/ //g';; 'start_time' ) grep 'start time' $LOG | cut -d":" -f 2,3,4,5 | sed -e 's/ //g' | sed -e 's/+/\ +/';; 'start_since' ) grep 'start since' $LOG | cut -d":" -f 2 | sed -e 's/ //g';; 'accepted_conn' ) grep 'accepted conn' $LOG | cut -d":" -f 2 | sed -e 's/ //g';; 'listen_queue' ) grep 'listen queue' $LOG | grep -v max | grep -v len | cut -d":" -f 2 | sed -e 's/ //g';; 'max_listen_queue' ) grep 'max listen queue' $LOG | cut -d":" -f 2 | sed -e 's/ //g';; 'listen_queue_len' ) grep 'listen queue len' $LOG | cut -d":" -f 2 | sed -e 's/ //g';; 'idle_processes' ) grep 'idle processes' $LOG | cut -d":" -f 2 | sed -e 's/ //g';; 'active_processes' ) grep 'active processes' $LOG | grep -v max | cut -d":" -f 2 | sed -e 's/ //g';; 'total_processes' ) grep 'total processes' $LOG | cut -d":" -f 2 | sed -e 's/ //g';; 'max_active_processes' ) grep 'max active processes' $LOG | cut -d":" -f 2 | sed -e 's/ //g';; 'max_children_reached' ) grep 'max children reached' $LOG | cut -d":" -f 2 | sed -e 's/ //g';; 'slow_requests' ) grep 'slow requests' $LOG | cut -d":" -f 2 | sed -e 's/ //g';; esac
3) Новые метрики для Zabbix
# cat /etc/zabbix/zabbix_agentd.d/php-fpm.conf UserParameter=php-fpm-discovery[*],/etc/zabbix/scripts/php-fpm/php-fpm_discovery.sh UserParameter=php-fpm-value[*],/etc/zabbix/scripts/php-fpm/php-fpm_value.sh "$1"
теперь перезапускаем zabbix-agent
# systemctl restart zabbix-agent
Скачиваем и импортируем готовый шаблон
После этого прикрепляем шаблон к хосту и через некоторое время пойдут данные
Что бы не ждать и проверить работоспособность можно выполнить следующие команды
# sudo -u zabbix zabbix_agentd -t 'php-fpm-discovery' php-fpm-discovery [t|] # sudo -u zabbix zabbix_agentd -t 'php-fpm-value[accepted_conn]' php-fpm-value[accepted_conn] [t|6860]
На выходе получаем вот такую картину