作用:
监控php-fpm的状态,
可以对(slow requests)缓慢请求的做告警处理,
可以对(max children reached )大到进程最大数量限制的次数也做 告警处理等
相关工具的版本和系统信息
系统:CentOS6.8
zabbix-agent :4.0
zabbix-server: 4.2.3
nginx:1.6
php:5.4
准备工作
1、进入到php目录:cd /data/software/php
2、查看有没有log目录,没有就创建 mkdir log
3、先检查有没有打开php-fpm_status,没有自己加上下面这句
pm.status_path = /php_status
4、为了更新详细给开发查看,打开慢日志请求
slowlog = log/slow_log.log # 日志文件
request_slowlog_timeout = 1 # 多少秒才算是慢请求
5、保存退出,重新加载php,service php-fpm reload,加载过程注意看看有没有报错
6、然后检查状态 ps ax | grep php
7、进入nginx目录:cd /data/software/nginx
8、添加php-fpm状态网页
server {
listen 80;
server_name empty;
root /dev/null;
location ~ \.php|^/php_status$ {
include fastcgi.conf;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_connect_timeout 180;
fastcgi_read_timeout 600;
fastcgi_send_timeout 600;
allow 127.0.0.1;
deny all;
expires off;
access_log off;
}
}
9、重新加载nginx,service nginx reload
10、检查网页:curl http://127.0.0.1/php_status
pool: nobody # PHP用户
process manager: static # 进程管理方式,现今大多都为dynamic,不要使用static
start time: 11/Jul/2019:09:57:01 +0800
start since: 3563 # 已运行了多少秒
accepted conn: 1682 # pool接收到的请求数
listen queue: 0 # 处于等待状态中的连接数
max listen queue: 0 # 从php-fpm启动到现在处于等待连接的最大数量
listen queue len: 128 # 处于等待连接队列的套接字大小
idle processes: 79 # 处于空闲状态的进程数
active processes: 1 # 处于活动状态的进程数
total processes: 80 # 进程总数
max active processes: 6 # 从php-fpm启动到现在最多有几个进程处于活动状态
max children reached: 0 # 当php-fpm试图启动更多的children进程时,却达到了进程数的限制,达到一次记录一次,如果不为0,需要增加php-fpm pool进程的最大数
slow requests: 0 # php-fpm慢请求数
配置zabbix
1、检查配置目录放在哪
grep 'Include=' /etc/zabbix/zabbix_agentd.conf
# Include=
Include=/data/software/zabbix/conf/*.conf
# Include=/usr/local/etc/zabbix_agentd.userparams.conf
# Include=/usr/local/etc/zabbix_agentd.conf.d/
# Include=/usr/local/etc/zabbix_agentd.conf.d/*.conf
2、进入该目录/data/software/zabbix/conf/
3、添加配置信息 vim php-fpm_status.conf
UserParameter=php_status[*],/bin/bash /data/software/zabbix/scripts/php_status.sh "$1"
4、添加获取php-fpm的状态信息脚本:vim /data/software/zabbix/scripts/php_status.sh
#!/bin/bash
PHPFPM_COMMAND=$1
PHPFPM_PORT=80 #根据监听不同端口进行调整
function start_since() {
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^start since:/ {print $NF}'
}
function accepted_conn() {
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^accepted conn:/ {print $NF}'
}
function listen_queue() {
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^listen queue:/ {print $NF}'
}
function max_listen_queue() {
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^max listen queue:/ {print $NF}'
}
function listen_queue_len() {
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^listen queue len:/ {print $NF}'
}
function idle_processes() {
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^idle processes:/ {print $NF}'
}
function active_processes() {
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^active processes:/ {print $NF}'
}
function total_processes() {
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^total processes:/ {print $NF}'
}
function max_active_processes() {
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^max active processes:/ {print $NF}'
}
function max_children_reached() {
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^max children reached:/ {print $NF}'
}
function slow_requests() {
/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_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|slow_requests}"
esac
5、测试:sh /data/software/zabbix/scripts/php_status.sh max_children_reached
6、重启zabbix-agent:service zabbix-agent restart
7、添加模板
8、添加监控项
9、添加触发器
添加的结果如下
10、添加所需要监控的服务器,然后就完成了