ZABBIX 3.4 (三) 监测PHP状态及脚本

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.查看图形

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值