监控PHP-FPM
PHP-FPM监控原理
PHP-FPM程序提供了其运行状态的数据,通过修改配置文件即可获取数据。
PHP-FPM状态数据配置的开启
开启PHP-FPM状态数据配置,需要修改/etc/php-fpm.conf的配置
vim /etc/php-fpm.d/www.conf
pm.status_path = /phpfpmstatus
重启php服务
systemctl restart php-fpm.service
修改/etc/nginx/nginx.conf配置文件
通过Nginx访问PHP-FPM的状态。
vim /etc/nginx/conf.d/monitor.conf
server {
listen 127.0.0.1:80;
server_name 127.0.01;
location /nginxstatus {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
location ~ ^/ (phpfpmstatus)$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
}
}
PHP-FPM监控脚本的实现
1.PHP-FPM监控脚本1
vim /etc/zabbix/monitor_phpfpm_status.sh
#!/bin/bash
source /etc/bashrc >/dev/null 2>&1
source /etc/profile >/dev/null 2>&1
PHPFPM_FILE=/var/log/zabbix/phpfpmstatus.tmp
CMD () {
curl http://127.0.0.1/phpfpmstatus >${PHPFPM_FILE} 2>&1
}
if [ -e ${PHPFPM_FILE} ];then
TIMEFROM='stat -c %Y ${TMP_MYSQL_STATUS}'
TIMENOW='data +%s'
if [ 'expr $TIMENOW - $TIMEFROM' -gt 60 ];then
rm -f ${PHPFPM_FILE}
CMD
fi
else
CMD
fi
pool() {
awk '/pool/ {print $NF}' ${PHPFPM_FILE}
}
process_manager() {
awk '/process manager/ {print $NF}' ${PHPFPM_FILE}
}
start() {
awk '/^start since:/ {print $NF}' ${PHPFPM_FILE}
}
accepted_conn() {
awk '/^accepted conn:/ {print $NF}' ${PHPFPM_FILE}
}
listen_queue() {
awk '/^listen queue:/ {print $NF}' ${PHPFPM_FILE}
}
max_listen_queue() {
awk '/^max listen queue:/ {print $NF}' ${PHPFPM_FILE}
}
listen_queue_len() {
awk '/^listen queue len:/ {print $NF}' ${PHPFPM_FILE}
}
idle_processes() {
awk '/^idle processes:/ {print $NF}' ${PHPFPM_FILE}
}
active_processes() {
awk '/^active processes:/ {print $NF}' ${PHPFPM_FILE}
}
total_processes() {
awk '/^total processes:/ {print $NF}' ${PHPFPM_FILE}
}
max_active_processes() {
awk '/^max active processes:/ {print $NF}' ${PHPFPM_FILE}
}
max_children_reached() {
awk '/^max children reached:/ {print $NF}' ${PHPFPM_FILE}
}
case "$1" in
pool)
pool
;;
process_manager)
process_manager
;;
start_since)
start_since
;;
listen_queue)
listen_queue
;;
max_listen_queue)
max_listen_queue
;;
listen_queue_len)
listen_queue_len
;;
idle_processes)
idle_processes
;;
active_processes)
active_processes
;;
total_processes)
total_processes
;;
max_active_processes)
max_active_processes
;;
max_children_reached)
max_children_reached
;;
*)
echo "Usage: $0 {pool|process_manager|start_since|max_listen_queue|listen_queue_len|idle_processes|active_processes|total_processes|max_active_processes|max_children_reached}"
esac
PHP-FPM监控脚本2
#!/bin/bash
PHPFPM_COMMAND=$1
PHPFPM_PORT=80
start_since(){
/usr/bin/curl -s "http://localhost:"$PHPFPM_PORT"/phpfpmstatus" |awk '/^start since:/ {print $NF}'
}
accepted_conn(){
/usr/bin/curl -s "http://localhost:"$PHPFPM_PORT"/phpfpmstatus" |awk '/^accepted conn:/ {print $NF}'
}
listen_queue(){
/usr/bin/curl -s "http://localhost:"$PHPFPM_PORT"/phpfpmstatus" |awk '/^listen queue:/ {print $NF}'
}
max_listen_queue(){
/usr/bin/curl -s "http://localhost:"$PHPFPM_PORT"/phpfpmstatus" |awk '/^max listen queue:/ {print $NF}'
}
listen_queue_len(){
/usr/bin/curl -s "http://localhost:"$PHPFPM_PORT"/phpfpmstatus" |awk '/^listen queue len:/ {print $NF}'
}
idle_processes(){
/usr/bin/curl -s "http://localhost:"$PHPFPM_PORT"/phpfpmstatus" |awk '/^idle processes:/ {print $NF}'
}
active_processes(){
/usr/bin/curl -s "http://localhost:"$PHPFPM_PORT"/phpfpmstatus" |awk '/^active processes:/ {print $NF}'
}
total_processes(){
/usr/bin/curl -s "http://localhost:"$PHPFPM_PORT"/phpfpmstatus" |awk '/^total processes:/ {print $NF}'
}
max_active_processes(){
/usr/bin/curl -s "http://localhost:"$PHPFPM_PORT"/phpfpmstatus" |awk '/^max active processes:/ {print $NF}'
}
max_children_reached(){
/usr/bin/curl -s "http://localhost:"$PHPFPM_PORT"/phpfpmstatus" |awk '/^max children reached:/ {print $NF}'
}
slow_requests(){
/usr/bin/curl -s "http://localhost:"$PHPFPM_PORT"/phpfpmstatus" |awk '/^slow requests:/ {print $NF}'
}
case $PHPFPM_COMMAND in
start_since)
start_since;
;;
accepted_conn)
accepted_conn;
;;
listen_queue)
listen_queue;
;;
max_listen_queue)
max_listen_queue;
;;
listen_queue_len)
listen_queue_len;
;;
idle_processes)
idle_processes;
;;
active_processes)
active_processes;
;;
total_processes)
total_processes;
;;
max_active_processes)
max_active_processes;
;;
max_children_reached)
max_children_reached;
;;
slow_requests)
slow_requests;
;;
*)
echo $"USAGE:$0 {start_since|accepted_conn|listen_queue|max_listen_queue|listen_queue_len|idle_processes|active_processes|total_processes|max_active_processes|max_children_reached}"
esac
添加执行权限
cd /etc/zabbix/
chmod +x monitor_phpfpm_status.sh
更改脚本的所有者和所属组
[root@localhost zabbix]# chown zabbix:zabbix monitor_phpfpm_status.sh
编辑zabbix_agentd.conf的配置文件
vim /etc/zabbix/zabbix_agentd.conf
UserParameter=php-fpm.status[*],/bin/bash /etc/zabbix/monitor_phpfpm_status.sh "$1"
重启zabbix-agent修改配置文件必须重启
编译安装客户端重启命令
systemctl restart zabbix_agentd
yum源安装客户端重启命令
systemctl restart zabbix-agent.service
php-fpm状态解释
pool
fpm池子名称,大多数为www
process manager
进程管理方式,值:static, dynamic or ondemand. dynamic
start time
启动日期,如果reload了php-fpm,时间会更新
start since
运行时长
accepted conn
当前池子接受的请求数
listen queue
请求等待队列,如果这个值不为0,那么要增加FPM的进程数量
max listen queue
请求等待队列最高的数量
listen queue len
socket等待队列长度
idle processes
空闲进程数量
active processes
活跃进程数量
total processes
总进程数量
max active processes
最大的活跃进程数量(FPM启动开始算)
max children reached
大道进程最大数量限制的次数,如果这个数量不为0,那说明你的最大进程数量太小了,请改大一点。
slow requests
启用了php-fpm slow-log,缓慢请求的数量
PHP-FPM监控key的配置
zabbix-server端测试获取key
zabbix_get -s 192.168.6.134 -k php-fpm.status[listen_queue_len]
最新数据