Сбор статистики PHP-FPM в Zabbix

Мониторинг сервисов позволяет не только узнать о проблемах, но и даёт возможность оптимизировать конфигурацию и нагрузку. В данном материале я расскажу как анализировать сервис 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]

На выходе получаем вот такую картину
php-fpm Statistic

Добавить комментарий