参考:http://www.ttlsa.com/php/use-php-fpm-status-page-detail/
参考:https://yq.aliyun.com/articles/336483
非常有用的文章
生产中开启php-fpm状态页然后用zabbix监控php总进程数和php空闲进程数
用zabbix监控php进程数的流程:(默认zabbix没有这个监控项)
第一步、在zabbix agent端添加监控项
在/etc/zabbix/zabbix_agentd.d/目录中自定义一个文件,写入监控项,格式要对
root@web1:/etc/zabbix/zabbix_agentd.d# cat userparameter_php_fpm.conf
UserParameter=php-fpm[*], /opt/zabbix/php_fpm_check.sh $1
格式为UserParameter=key,commend
key值必须是唯一的,不能和zabbix自带的监控项名字一样,commend一般就是我们自定义的脚本路径,我们通过自己写的脚本监控服务器一些东西,获取返回值进行判断
第二步、脚本的内容
root@web1:/etc/zabbix/zabbix_agentd.d# cat /opt/zabbix/php_fpm_check.sh
#!/bin/bash
curl -s "http://127.0.0.1:2333/ping?xml" | grep "<$1>" | awk -F '>|<' '{print $3}'
脚本的意思是访问本机的2333端口,通过过滤关键字,获取一些内容作为返回值,老鸟一看就懂。
所以我们是通过nginx或http监听了一个端口。。。
修改完很明显是要重启zabbix_agent服务的,不用废话
root@-web1:~# /etc/init.d/zabbix-agent restart
第三步、nginx配置文件
我也就不废话了,贴上这个配置文件
root@web1:~# cat /etc/nginx/sites-enabled/ping
server {
listen 127.0.0.1:2333;
server_name 127.0.0.1;
location ~ ^/ping$ {
include fastcgi_params;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
allow 127.0.0.1;
deny all;
}
location ~ /.git
{
deny all;
}
}
我也不是很懂,我是小白,可以参考文章上面的参考链接去看
不用多说,nginx肯定也是要重载的
root@web1:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@web1:~# nginx -s reload
第四步、开启php-fpm状态
定位php-fpm.conf位置
root@web1:~# locate php-fpm.conf
/etc/php/7.0/fpm/php-fpm.conf
其实直接找www.conf文件就行了,本来就是子配置文件
root@web1:~# locate php-fpm.conf
/etc/php/7.0/fpm/php-fpm.conf
root@web1:~# grep "include" /etc/php/7.0/fpm/php-fpm.conf
; Include one or more files. If glob(3) exists, it is used to include a bunch of
include=/etc/php/7.0/fpm/pool.d/*.conf
root@web1:~# ls /etc/php/7.0/fpm/pool.d/*.conf
/etc/php/7.0/fpm/pool.d/www.conf
root@web1:~# grep "pm.status_path" /etc/php/7.0/fpm/pool.d/www.conf
pm.status_path = /ping
root@web1:~#
说白了就是改www.conf文件,加上一行pm.status_path = ... 即可,随便你等于什么,你写的等于什么就在nginx配置文件中配置什么!
一定要改对了,尤其是生产服务器,我之前不小心删掉了一行注释的注释符,导致重启报错,由于也不懂,搞了十几分钟才搞好,血淋淋的代价!
不用多说,重启php-fpm
root@web1:~# /etc/init.d/php7.0-fpm restart
第五步、本地测试
root@web1:~# curl http://127.0.0.1:2333/ping?xml
<?xml version="1.0" ?>
<status>
<pool>www</pool>
<process-manager>dynamic</process-manager>
<start-time>1535087158</start-time>
<start-since>5976123</start-since>
<accepted-conn>41186632</accepted-conn>
<listen-queue>0</listen-queue>
<max-listen-queue>0</max-listen-queue>
<listen-queue-len>0</listen-queue-len>
<idle-processes>179</idle-processes>
<active-processes>1</active-processes>
<total-processes>180</total-processes>
<max-active-processes>243</max-active-processes>
<max-children-reached>0</max-children-reached>
<slow-requests>261714</slow-requests>
</status>root@web1:~#
至于为什么是?xml,去看参考文章吧,我也是似懂非懂
第六步、在zabbix_server服务器测试
root@zabbix2:~# zabbix_get -s 10x.x.x.x -p 10050 -k php-fpm[idle-processes]
178
root@zabbix2:~# zabbix_get -s 106.x.x.x -p 10050 -k php-fpm[total-processes]
180
IP为啥打码你懂的,不然你来一刀他来一刀服务器就垮啦!
第七步、zabbix的web界面添加监控项
不用多说,注意键值填对就行,键值为php-fpm[...]
第八步、创建触发器
不用多说,触发器的表达式应该都会写
{web1:php-fpm[total-processes].last(0)}<0
{web1:php-fpm[idle-processes].avg(#2)}<2