zabbix添加php监控
本文主要是针对与添加php-fpm方法,生产环境有个坑,填下,初始环境不是我做的,我是来填坑的,
!
以源码安装为例:
目录环境:
/usr/local/php/etc/php-fpm.conf
/usr/local/nginx/conf/nginx.conf
------------------------------------------------------------
一、开始按照书上配的,发现没有sock文件,当然访问就报错了
server{listen127.0.0.1:80;server_name127.0.0.1;location/nginx_status{stub_statuson;access_logoff;allow127.0.0.1;denyall;}location~^/(phpfpm_status)${includefastcgi_params;fastcgi_passunix:/tmp/php-cgi.sock;fastcgi_paramSCRIPT_FILENAME$fastcgi_script_name;}}#curl127.0.0.1/phpfpm_status
502报错
查看了一下nginx的error日志:
*100011connect()tounix:/tmp/php-fcgi.sockfailed(2:Nosuchfileordirectory)whileconnectingtoupstream,client:127.0.0.1,server:127.0.0.1,request:"GET/phpfpm_statusHTTP/1.1",upstream:"fastcgi://unix:/tmp/php-fcgi.sock:",host:"127.0.0.1"
二、查了查网上发现:
其中fastcgi_pass为配置nginx与php-fpm的交互路径,一般有两种方式
sock方式:fastcgi_passunix:/tmp/php-cgi.sock;http方式:fastcgi_pass127.0.0.1:9000;
任选其中一种即可,但必须和php-fpm的配置一致。
三、解决方法:
重启nginx#vim/usr/local/nginx/conf/nginx.confserver{listen127.0.0.1:80;server_name127.0.0.1;location/nginx_status{stub_statuson;access_logoff;allow127.0.0.1;denyall;}location~^/(phpfpm_status)${includefastcgi_params;fastcgi_pass127.0.0.1:9000;fastcgi_paramSCRIPT_FILENAME$fastcgi_script_name;}}#/usr/local/nginx/sbin/nginx-c/usr/local/nginx/conf/nginx.conf-sreload#curl127.0.0.1/phpfpm_statuspool:wwwprocessmanager:dynamicstarttime:20/Jun/2017:17:22:19+0800startsince:2245acceptedconn:40listenqueue:0maxlistenqueue:0listenqueuelen:128idleprocesses:1activeprocesses:1totalprocesses:2maxactiveprocesses:2maxchildrenreached:0slowrequests:0可以了php-fpmstatus状态值详解pool:fpm池子名称,大多数为wwwprocessmanager:进程管理方式,值:static,dynamicorondemandstarttime:启动日期,如果reload了php-fpm,时间会更新startsince:运行时长acceptedconn:当前池子接受的请求数listenqueue:请求等待队列,如果这个值不为0,那么要增加FPM的进程数量maxlistenqueue:请求等待队列最高的数量listenqueuelen:socket等待队列长度idleprocesses:空闲进程数量activeprocesses:活跃进程数量totalprocesses:总进程数量maxactiveprocesses:最大的活跃进程数量(FPM启动开始算)maxchildrenreached:进程最大数量限制的次数,如果这个数量不为0,那说明你的最大进程数量太小了,需要设置大点
四、监控脚本:
(1)shell脚本,此脚本是抄袭的
#!/bin/bashsource/etc/bashrc>/dev/null2>&1source/etc/profile>/dev/null2>&1LOG=/var/log/zabbix/phpfpmstatus.logcurl-shttp://localhost/phpfpmstatus>$LOGpool(){awk'/pool/{print$NF}'$LOG}process_manager(){awk'/processmanager/{print$NF}'$LOG}start_since(){awk'/startsince:/{print$NF}'$LOG}accepted_conn(){awk'/acceptedconn:/{print$NF}'$LOG}listen_queue(){awk'/^(listenqueue:)/{print$NF}'$LOG}max_listen_queue(){awk'/maxlistenqueue:/{print$NF}'$LOG}listen_queue_len(){awk'/listenqueuelen:/{print$NF}'$LOG}idle_processes(){awk'/idleprocesses:/{print$NF}'$LOG}active_processes(){awk'/^(activeprocesses:)/{print$NF}'$LOG}total_processes(){awk'/totalprocesses:/{print$NF}'$LOG}max_active_processes(){awk'/maxactiveprocesses:/{print$NF}'$LOG}max_children_reached(){awk'/maxchildrenreached:/{print$NF}'$LOG}case"$1"inpool)pool;;process_manager)process_manager;;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;;*)echo"Usage:$1{pool|process_manager|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
(2)python脚本,这个是自己写的,写的不好,还望海涵。
#!/usr/bin/envpython#__*__coding:utf8__*__importurllib2,sys,osdefPhp_status():php_status_dirt={}request_status_list=[]php_status_list=["pool","process_manager","start_since","accepted_conn","listen_queue","max_listen_queue","listen_queue_len","idle_processes","active_processes","total_processes","max_active_processes","max_children_reached"]php_url='http://127.0.0.1/phpfpm_status'req=urllib2.Request(php_url)response=urllib2.urlopen(req)request_list=response.read().split()#request_status_list=[request_list[1],request_list[4],request_list[11],request_list[14],request_list[17],request_list[21],request_list[25],request_list[28],request_list[31],request_list[34],request_list[38],request_list[42],request_list[45]]#以下数字位置都是上面截出来的,为了美观,将位置作为了列表,在用位置列表定位request_list中的值['www','dynamic','57795','5424','0','0','128','2','1','3','3','0','0','www','dynamic','57795','5424','0','0','128','2','1','3','3','0','0'],并追加到request_status_list里面#position--->request_list--->(request_status_list+php_status_list)--->php_status_dirtposition=[1,4,11,14,17,21,25,28,31,34,38,42,45]foriinposition:request_status_list.append(request_list[i])foriinrange(len(php_status_list)):php_status_dirt[php_status_list[i]]=request_status_list[i]iflen(sys.argv)isnot2orstr(sys.argv[1])notinphp_status_dirt.keys():print"Usage:php_stauts.py$1{pool|process_manager|start_since|accepted_conn|listen_queue|max_listen_queue|listen_queue_len|idle_processes|active_processes|total_processes|max_active_processes|max_children_reached}"exit(1)else:printphp_status_dirt[str(sys.argv[1])]if__name__=='__main__':try:Php_status()excepturllib2.URLError,e:print"%s,theremaybesomethingwrongwithphp!"%e
五、配置监控扩展
被监控主机端,zabbix_agentd.conf文件中添加上这个:
UserParameter=phpfpm[*],/etc/zabbix/scripts/phpfpm_status.py$1
或者
UserParameter=phpfpm[*],/etc/zabbix/scripts/phpfpm_status.sh$1
六、将脚本放置在/etc/zabbix/scripts/目录下
chmod+xphpfpm.py
七、测试
[root@zabbix_server-12-155~]#zabbix_get-s10.1.12.177-kphpfpm[s]Usage:php_stauts.py$1{pool|process_manager|start_since|accepted_conn|listen_queue|max_listen_queue|listen_queue_len|idle_processes|active_processes|total_processes|max_active_processes|max_children_reached}[root@zabbix_server-12-155~]#zabbix_get-s10.1.12.177-kphpfpm[pool]www
接下来就是添加监控项了,模版我是在这下的https://www.ttlsa.com/zabbix/zabbix-monitor-php-fpm-status/
参考并鸣谢:
技术贴:
http://www.cnblogs.com/metasequoia/p/5806582.html
http://www.linuxidc.com/Linux/2015-04/116301.htm
https://www.ttlsa.com/zabbix/zabbix-monitor-php-fpm-status/
书籍:《zabbix企业级分布式监控系统》
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。