参考: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[...]

zabbix监控iis模板 zabbix监控php_zabbix

第八步、创建触发器

不用多说,触发器的表达式应该都会写

{web1:php-fpm[total-processes].last(0)}<0

{web1:php-fpm[idle-processes].avg(#2)}<2

第九步、然后你把监控项,触发器保存为模板以后就可以随便用了