zabbix监测php,可以使用php-fpm自有的查询工作状态页面数据。
1.启用php-fpm的状态功能
因为我的php-fpm.conf配置文件中有----include=/etc/php-fpm.d/*.conf,所以修改----www.conf。去掉status的分号注释,可以根据需要将其改名。我用的是默认的----status。网上还有改名为----phpfpm_status,这样在nginx.conf配置中也需要修改对应的名称。
vi /etc/php-fpm.d/www.conf
pm.status_path = /status
2.修改nginx配置文件
之前配置过nginx_status,可以在下面接着写或者重写新的server。如果前面修改为----phpfpm_status,可以使用第二个方法。
location ~ ^/(status|ping)$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
location ~ ^/(phpfpm_status)$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
}
3.重启nginx,php-fpm服务
systemctl restart nginx
systemctl restart php-fpm
4.查看php-fpm status页面
php-fpm status的含义
pool php-fpm pool(资源池)的名称,大多数情况下为www
process manager 进程管理方式,现今大多都为dynamic,不要使用static
start time 上次启动的时间
start since 已运行了多少秒
accepted conn pool 接收到的请求数
listen queue 处于等待状态中的连接数,如果不为0,需要增加php-fpm进程数
max listen queue 从php-fpm启动到现在处于等待连接的最大数量
listen queue len 处于等待连接队列的套接字大小
idle processes 处于空闲状态的进程数
active processes 处于活动状态的进程数
total processess 进程总数
max active process 从php-fpm启动到现在最多有几个进程处于活动状态
max children reached 当php-fpm试图启动更多的children进程时,却达到了进程数的限制,达到一次记录一次,如果不为0,需要增加php-fpm pool进程的最大数
slow requests 当启用了php-fpm slow-log功能时,如果出现php-fpm慢请求这个计数器会增加,一般不当的Mysql查询会触发这个值
5.配置zabbix-agent
查看zabbix_agent.conf中UnsafeUserParameters参数是不是已经修改为1。 去zabbix脚本路径下写php配置文件。php-fpm的参数key为----phpfpm_status[*];路径为----/etc/zabbix/zabbix_agentd.d/phpfpm_status.sh。
vi /etc/zabbix/zabbix_agentd.d/phpfpm_status.conf
UserParameter=phpfpm_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/phpfpm_status.sh "$1"
6.编写脚本
vi /etc/zabbix/zabbix_agentd.d/phpfpm_status.sh
#!/bin/bash
PHPFPM_COMMAND=$1
#根据监听不同端口进行调整
PHPFPM_PORT=80
start_since(){
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/status" |awk '/^start since:/ {print $NF}'
}
accepted_conn(){
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/status" |awk '/^accepted conn:/ {print $NF}'
}
listen_queue(){
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/status" |awk '/^listen queue:/ {print $NF}'
}
max_listen_queue(){
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/status" |awk '/^max listen queue:/ {print $NF}'
}
listen_queue_len(){
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/status" |awk '/^listen queue len:/ {print $NF}'
}
idle_processes(){
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/status" |awk '/^idle processes:/ {print $NF}'
}
active_processes(){
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/status" |awk '/^active processes:/ {print $NF}'
}
total_processes(){
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/status" |awk '/^total processes:/ {print $NF}'
}
max_active_processes(){
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/status" |awk '/^max active processes:/ {print $NF}'
}
max_children_reached(){
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/status" |awk '/^max children reached:/ {print $NF}'
}
slow_requests(){
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/status" |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
如果之前使用的是默认status_path,可以直接使用该代码。如果改成----phpfpm_status,需要修改“$PHPFPM_PORT”后面的参数。例如:
start_since(){
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/phpfpm_status" |awk '/^start since:/ {print $NF}'
}
7.赋权
chmod a+x phpfpm_status.sh
8.重启zabbix-agent服务
systemctl restart zabbix-agent
9.在server端使用zabbix_get测试数据
zabbix_get -s 192.168.236.130 -k phpfpm_status[accepted_conn]
10.配置zabbix web页面
在模板中新建模板。
11.新建应用集
12.创建监控项
名称可以自定义,能标识就可以。键值需要自己手动输入,前面phpfpm_status.conf中用的什么名称,这里需要写什么,例如:phpfpm_status[*];方括号里面的关键字写函数名称或者case里面的选择项。填写完成后点击【更新】即可。
13.创建图形
点击【添加】,选择上一步新建的监控项,然后点击【选择】,填写完成后点击【更新】。
14.关联主机
选择主机,点击【模板】,点击【选择】,在弹出页面中勾选php的模板名称,点击【选择】,然后点击【添加】,上面的连接模板出现php模板名称后,点击【更新】即可。
15.查看图形