文章目录
14. 案例:配置 php-fpm 监控
14.1. 安装 php-fpm
# 使用 yum 安装
yum -y install php php-fpm php-gd php-mysql php-common php-pear php-mbstring php-mcrypt
# 启动并设置开机自启
systemctl status php-fpm
systemctl start php-fpm
systemctl enable php-fpm
14.2 修改 PHP 配置文件
[root@demo ~]# whereis php-fpm
php-fpm: /usr/sbin/php-fpm /etc/php-fpm.conf /etc/php-fpm.d /usr/share/man/man8/php-fpm.8.gz
[root@demo ~]# cd /etc/php-fpm.d/
[root@demo php-fpm.d]# ll
总用量 12
-rw-r--r-- 1 root root 10021 5月 22 15:42 www.conf
[root@demo php-fpm.d]# vim www.conf
pm.status_path = /php_status
14.3. 修改 nginx 配置文件
[root@demo ~]# whereis nginx
nginx: /usr/local/nginx
[root@demo ~]# cd /usr/local/nginx/
[root@demo nginx]# ll
总用量 4
drwx------ 2 nobody root 6 5月 19 23:01 client_body_temp
drwxr-xr-x 2 root root 4096 5月 22 15:43 conf
drwx------ 2 nobody root 6 5月 19 23:01 fastcgi_temp
drwxr-xr-x 2 root root 40 5月 19 23:00 html
drwxr-xr-x 2 root root 58 5月 20 11:36 logs
drwx------ 2 nobody root 6 5月 19 23:01 proxy_temp
drwxr-xr-x 2 root root 53 5月 20 11:30 sbin
drwx------ 2 nobody root 6 5月 19 23:01 scgi_temp
drwx------ 2 nobody root 6 5月 19 23:01 uwsgi_temp
[root@demo nginx]# cd conf/
[root@demo conf]# ll
总用量 60
-rw-r--r-- 1 root root 1077 5月 19 23:00 fastcgi.conf
-rw-r--r-- 1 root root 1077 5月 20 11:25 fastcgi.conf.default
-rw-r--r-- 1 root root 1007 5月 19 23:00 fastcgi_params
-rw-r--r-- 1 root root 1007 5月 20 11:25 fastcgi_params.default
-rw-r--r-- 1 root root 2837 5月 20 11:25 koi-utf
-rw-r--r-- 1 root root 2223 5月 20 11:25 koi-win
-rw-r--r-- 1 root root 3957 5月 19 23:00 mime.types
-rw-r--r-- 1 root root 3957 5月 20 11:25 mime.types.default
-rw-r--r-- 1 root root 2701 5月 20 11:36 nginx.conf
-rw-r--r-- 1 root root 2656 5月 20 11:25 nginx.conf.default
-rw-r--r-- 1 root root 636 5月 19 23:00 scgi_params
-rw-r--r-- 1 root root 636 5月 20 11:25 scgi_params.default
-rw-r--r-- 1 root root 664 5月 19 23:00 uwsgi_params
-rw-r--r-- 1 root root 664 5月 20 11:25 uwsgi_params.default
-rw-r--r-- 1 root root 3610 5月 20 11:25 win-utf
[root@demo conf]# vim nginx.conf
location /php_status {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
修改完成后,重启 nginx php-fpm
14.4 浏览器查看数据
14.4.1 状态解释说明
字段 | 说明 |
---|---|
poll | 大多数为www,在 www.conf 文件中可以查看 |
process manager | 进程管理方式,值:static(静态), dynamic(动态) or ondemand(按需要), dynamic |
start time | 启动日期,如果reload了php-fpm,时间会更新 |
start since | php-fpm已运行了多少秒 |
accepted conn | 当前pool接收到的请求数 |
listen queue | 处于等待状态中的连接数,如果这个值不为0,需要增加php-fpm进程数量 |
max listen queue | php-fpm启动到现在处于等待连接的最大数量 |
listen queue len | socket等待队列长度 |
idle processes | 空闲进程数量 |
active processes | 活跃进程数量 |
total processes | 总进程数量 |
max active processes | 从php-fpm启动到现在最多有几个进程处于活动状态 |
max children reached | 进程最大数量限制的次数,如果这个数量不为0,那说明你的最大进程数量太小了,请改大一点 |
slow requests | 当启用了php-fpm slow-log功能时,如果出现php-fpm慢请求这个计数器会增加,一般使用不恰当的Mysql查询会触发这个值或者开发过程中存在bug也会触发这个值 |
14.5 编写 php-fpm 监控脚本
#!/bin/bash
#check php-fpm status
case $1 in
ping) #检测php-fpm进程是否存在
/sbin/pidof php-fpm | wc -l
;;
start_since) #提取status中的start since数值
/usr/bin/curl localhost/php_status 2>/dev/null | awk 'NR==4{print $3}'
;;
conn) #提取status中的accepted conn数值
/usr/bin/curl localhost/php_status 2>/dev/null | awk 'NR==5{print $3}'
;;
listen_queue) #提取status中的listen queue数值
/usr/bin/curl localhost/php_status 2>/dev/null | awk 'NR==6{print $3}'
;;
max_listen_queue) #提取status中的max listen queue数值
/usr/bin/curl localhost/php_status 2>/dev/null | awk 'NR==7{print $4}'
;;
listen_queue_len) #提取status中的listen queue len
/usr/bin/curl localhost/php_status 2>/dev/null | awk 'NR==8{print $4}'
;;
idle_processes) #提取status中的idle processes数值
/usr/bin/curl localhost/php_status 2>/dev/null | awk 'NR==9{print $3}'
;;
active_processes) #提取status中的active processes数值
/usr/bin/curl localhost/php_status 2>/dev/null | awk 'NR==10{print $3}'
;;
total_processes) #提取status中的total processess数值
/usr/bin/curl localhost/php_status 2>/dev/null | awk 'NR==11{print $3}'
;;
max_active_processes) #提取status中的max active processes数值
/usr/bin/curl localhost/php_status 2>/dev/null | awk 'NR==12{print $4}'
;;
max_children_reached) #提取status中的max children reached数值
/usr/bin/curl localhost/php_status 2>/dev/null | awk 'NR==13{print $4}'
;;
slow_requests) #提取status中的slow requests数值
/usr/bin/curl localhost/php_status 2>/dev/null | awk 'NR==14{print $3}'
;;
*)
echo "Usage: $0 {conn|listen_queue|max_listen_queue|listen_queue_len|idle_processes|active_processess|total_processes|max_active_processes|max_children_reached|slow_requests}"
exit 1
;;
esac
14.6 修改 zabbix 配置文件
vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
# 增加
UserParameter=php_fpm_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d \$1
# 修改完成重启 zabbix-agent
systemctl restart zabbix-agent.service
14.7 服务端验证
[root@zabbix ~]# zabbix_get -s 192.168.169.131 -k php_fpm_status[start_since]
4749
14.8 添加模板
配置 --> 模板
模板名称:Template php-fpm Status Monitor
群组:Linux servers
14.9 创建应用集
14.10 配置监控项
名称:PHP_FPM_Status_Ping
键值:php_fpm_status[ping]
按以上格式将如下内容添加到监控项中:
名称:
PHP_FPM_Status_start_since
PHP_FPM_Status_accepted_conn
PHP_FPM_Status_listen_queue
PHP_FPM_Status_max_listen_queue
PHP_FPM_Status_listen_queue_len
PHP_FPM_Status_idle_processes
PHP_FPM_Status_active_processes
PHP_FPM_Status_total_processes
PHP_FPM_Status_max_active_processes
PHP_FPM_Status_max_children_reached
PHP_FPM_Status_slow_requests
键值:
php_fpm_status[start_since]
php_fpm_status[conn]
php_fpm_status[listen_queue]
php_fpm_status[max_listen_queue]
php_fpm_status[listen_queue_len]
php_fpm_status[idle_processes]
php_fpm_status[active_processess]
php_fpm_status[total_processes]
php_fpm_status[max_active_processes]
php_fpm_status[max_children_reached]
php_fpm_status[slow_requests]
14.11 配置触发器
这里可以参考上面 14.4.1 状态解释说明 中的字段含义添加触发器