黑帽联盟
标题: zabbix3.0 监控php服务器性能实战,精华篇 [打印本页]
作者: 定位 时间: 2017-3-24 18:27
标题: zabbix3.0 监控php服务器性能实战,精华篇
相关链接:zabbix3.0 监控mysql服务器性能实战,精华篇
图文讲解zabbix安装全过程
1.配置所有Agent(标准化目录结构)
- [root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf #编辑配置文件引用key
- Include=/etc/zabbix/zabbix_agentd.d/*.conf
- [root@linux-node1 ~]# mkdir /etc/zabbix/scripts #存放Shell脚本
2.PHP-FPM工作模式通常与Nginx结合使用,修改php-fpm.conf(找到自己的php-fpm.conf存放路径)
- [root@linux-node1 ~]# vim /etc/php-fpm.d/www.conf #我php-fpm存放路径
- pm.status_path = /php_status
之后重启服务
service php-fpm restart
3.修改nginx.conf的配置文件,通过Nginx访问PHP-FPM状态。
- location ~ ^/(php_status)$ {
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi_params;
- fastcgi_pass unix:/tmp/php-cgi.sock;
- }
之后重启服务
service nginx restart
4.访问测试phpfpm_status
- [root@linux-node4 conf.d]# curl http://127.0.0.1/php_status
访问结果,如图:
- #PHP-FPM状态解释:
- pool #fpm池名称,大多数为www
- process manager #进程管理方式dynamic或者static
- start time #启动日志,如果reload了fpm,时间会更新
- start since #运行时间
- accepted conn #当前池接受的请求数
- listen queue #请求等待队列,如果这个值不为0,那么需要增加FPM的进程数量
- max listen queue #请求等待队列最高的数量
- listen queue len #socket等待队列长度
- idle processes #空闲进程数量
- active processes #活跃进程数量
- total processes #总进程数量
- max active processes #最大的活跃进程数量(FPM启动开始计算)
- max children reached #程最大数量限制的次数,如果这个数量不为0,那说明你的最大进程数量过小,可以适当调整。
- slow requests – 启用了php-fpm slow-log,缓慢请求的数量
4.编写php-fpm的Shell脚本(如果端口不一致,只需要修改脚本端口即可)- #!/bin/bash
- ############################################################
- # $Name: php_status.sh
- # $Version: v1.0
- # $Function: Nginx and Php Status
- # $Author: dingwei
- # $organization: 127.0.0.1
- # $Create Date: 2017-03-24
- # $Description: Monitor Nginx and Php Service Status
- ############################################################
- PHPFPM_COMMAND=$1
- PHPFPM_PORT=80 #根据监听不同端口进行调整
- start_since(){
- result=`/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^start since:/ {print $NF}'`
- echo $result
- }
- accepted_conn(){
- result=`/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^accepted conn:/ {print $NF}'`
- echo $result
- }
- listen_queue(){
- result=`/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^listen queue:/ {print $NF}'`
- echo $result
- }
- max_listen_queue(){
- result=`/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^max listen queue:/ {print $NF}'`
- echo $result
- }
- listen_queue_len(){
- result=`/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^listen queue len:/ {print $NF}'`
- echo $result
- }
- idle_processes(){
- result=`/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^idle processes:/ {print $NF}'`
- echo $result
- }
- active_processes(){
- result=`usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^active processes:/ {print $NF}'`
- echo $result
- }
- total_processes(){
- result=`/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^total processes:/ {print $NF}'`
- echo $result
- }
- max_active_processes(){
- result=`/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^max active processes:/ {print $NF}'`
- echo $result
- }
- max_children_reached(){
- result=`/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^max children reached:/ {print $NF}'`
- echo $result
- }
- slow_requests(){
- result=`/usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^slow requests:/ {print $NF}'`
- echo $result
- }
- 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
复制代码
5. 给脚本添加执行权限
- [root@linux-node1 scripts]# chmod +x php_status.sh
6. 改变用户和用户组:
1. [root@linux-node1 scripts]# chown -R zabbix.zabbix /usr/local/zabbix/php_status.sh
7. 然后在zabbix_agentd.conf文件里面添加如下内容:
UserParameter=php.curl,curl -s 127.0.0.1:80/php_status | awk '/^pool:/ {print $NF}' | wc -l
UserParameter=php.status,/etc/zabbix/scripts/php_status.sh $1
之后保存内容并重启zabbix_agentd服务
service zabbix_agentd restart
8.测试一定使用Zabbix_get来获取值
- [root@linux-node1 zabbix_agentd.d]# zabbix_get -s 192.168.90.11 -k php.status[accepted_conn]
- 45
最后就是添加模板、添加应用、添加项目、最后针对相应的项目做触发器,就按照这个顺序来。针对这类教程我会单独给大家写出来的,敬请期待!
以下是我的实战测试结果图:
把php-fpm服务给停了
把php-fpm服务给启动起来
欢迎光临 黑帽联盟 (https://bbs.cnblackhat.com/) |
Powered by Discuz! X2.5 |