前几天弄了个Nginx 服务监控,今天再试试php服务的监控

操作系统: CentOS 7.2 

PHP版本:5.6.30

zabbix版本:2.2.5

发现php-fpm和Nginx一样都有自身就具备可提供查看的状态页面,所以我们就可以在配置档案里开启它


首先查看你的php设定档是否开启了状态页面查看的功能

# cat  /data0/php/etc/php-fpm.conf | grep status_path 
;pm.status_path = /status


如果情况同上,那说明还没有开启,故我们就修改配置,让它支持查看php-fpm status

# vim  /data0/php/etc/php-fpm.conf 
pm.status_path = /status   ---去掉;号注释

保存退出


重启php-fpm服务,让查看status功能生效

# pkill -9 php-fpm
# /data0/php/sbin/php-fpm

在Nginx配置上添加支持获取PHP status的设定

# vim  /data0/nginx/conf/nginx.conf
##在server模块内添加即可
server {
    listen 80;
     server_name  www.sss.com;
     #20170701 php-fpm status for zabbix to fetch data
      location ~ ^/(status|ping)$ {
          include fastcgi_params;
          fastcgi_pass   172.17.0.2:9000;
          fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
          }
     #20170701 php-fpm status for zabbix to fetch data end
}

注:因为我的PHP是在docker内运行的,所以上面的fatstcgi_pass 要根据你自己的情况而定

设置完毕,保存退出,重启Nginx服务,让设定生效

# /data0/nginx/sbin/nginx -t
nginx: the configuration file /data0/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /data0/nginx/conf/nginx.conf test is successful
# /data0/nginx/sbin/nginx -s reload

至此,PHP、Nginx准备工作完毕,现在可以开始查看成效

查看你的status页面

有两种方式:

1.在本地访问

curl http://网址/status

# curl http://www.sss.com/status
pool:                 www
process manager:      dynamic
start time:           30/Jun/2017:14:14:02 +0800
start since:          94540
accepted conn:        75834
listen queue:         0
max listen queue:     2
listen queue len:     128
idle processes:       99
active processes:     1
total processes:      100
max active processes: 9
max children reached: 0
slow requests:        122


2.打开浏览器访问

http://网址/status

wKioL1la7OahgXjQAAAjtPcLJ64868.png

内容解释:

pool:         www --php-fpm池名
process manager:    dynamic  --进程管理方式
start time:      30/Jun/2017:14:14:02 +0800 --启动日期,一旦你对php-fpm服务更新,它也同样会更新
start since:      94540 --运行至现在的时长
accepted conn:     75834 --当前池所接受的请求数
listen queue:     0 --请求等待队列数,若此值大于0,就要增加php-fpm进程数了
max listen queue:   2 --最高的请求等待队列数
listen queue len:   128 --socket等待队列长度
idle processes:    99 --空闲进程数
active processes:   1 --活动的进程数
total processes:    100 --总进程数
max active processes: 9 --最大活动进程数
max children reached: 0 --大道进程最大数限制次数,同样若此值不为0,需要将最大进行时进程扩大来满足需求
slow requests:     122 --缓慢请求数

php-fpm status 页面非常友善的地方是在配合zabbix监控时,不在需要你编写shell脚本来获取数据了,不错吧,又可以偷懒了!

不信,在你的被监控主机(即PHP-fpm主机)上试下下面的做法

1.访问URL末尾添加?xml

curl http://www.sss.com/status?xml
<?xml version="1.0" ?>
<status>
<pool>www</pool>
<process-manager>dynamic</process-manager>
<start-time>1498803242</start-time>
<start-since>95730</start-since>
<accepted-conn>77180</accepted-conn>
<listen-queue>0</listen-queue>
<max-listen-queue>2</max-listen-queue>
<listen-queue-len>128</listen-queue-len>
<idle-processes>99</idle-processes>
<active-processes>1</active-processes>
<total-processes>100</total-processes>
<max-active-processes>9</max-active-processes>
<max-children-reached>0</max-children-reached>
<slow-requests>122</slow-requests>

wKiom1la7YnjxJigAABKVw_KNfc578.png

2.访问URL末尾添加?html

curl http:/www.sss.com/devopsfjjerpstatus?html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head><title>PHP-FPM Status Page</title></head>
<body>
<table>
<tr><th>pool</th><td>www</td></tr>
<tr><th>process manager</th><td>dynamic</td></tr>
<tr><th>start time</th><td>30/Jun/2017:14:14:02 +0800</td></tr>
<tr><th>start since</th><td>95954</td></tr>
<tr><th>accepted conn</th><td>77437</td></tr>
<tr><th>listen queue</th><td>0</td></tr>
<tr><th>max listen queue</th><td>2</td></tr>
<tr><th>listen queue len</th><td>128</td></tr>
<tr><th>idle processes</th><td>99</td></tr>
<tr><th>active processes</th><td>1</td></tr>
<tr><th>total processes</th><td>100</td></tr>
<tr><th>max active processes</th><td>9</td></tr>
<tr><th>max children reached</th><td>0</td></tr>
<tr><th>slow requests</th><td>122</td></tr>
</table>
</body></html>

wKioL1la7a3gvfyrAAAzeo2PQWM462.png

3.访问URL末尾添加?json

# curl http://www.sss.com/status?json
{"pool":"www","process manager":"dynamic","start time":1498803242,"start since":96133,"accepted conn":77639,"listen queue":0,"max listen queue":2,"listen queue len":128,"idle processes":99,"active processes":1,"total processes":100,"max active processes":9,"max children reached":0,"slow requests":122}

wKioL1la7fSwXJnNAAAfXT-YvxU968.png

在被监控机的zabbix agent 的配置里添加自定义的parameter

vim  /data0/zabbix/etc/zabbix_agentd.conf
##monitoring for php-fpm status
UserParameter=php-fpm.status[*],/usr/bin/curl -s "http://www.sss.com/devopsfjjerpstatus?xml" | grep "<$1>"| awk -F '>|<' '{ print $$3}'

为了让修改的配置生效,我们要重启下zabbix_agentd服务

# pkill -9 zabbix_agentd
# /data0/zabbix/sbin/zabbix_agentd


目前在被监控机器上的设定已经基本结束,现在转战zabbix server,跟之前的操作一样,只要在zabbix web管理界面上导入PHP-fpm监控模板

注:有需要的朋友,可以在本文章末尾下载我的zabbix php-fpm监控模板

wKioL1la7zXSnLmqAABBJK1MKJU635.png

wKioL1la7zbQgONsAACVE2acj7E116.png

wKiom1la7zfwy_r3AACVQTxn2_Q223.png

wKiom1la76nzuDgwAACZzXCM5mo993.png

出现上面的汇入成功后,在你的模板列表里查找是否已经汇入

wKioL1la7-7z_ExEAAAOGOYC4Xo350.png

从上面的图中可以看出有个叫做Template App PHP-FPM的模板已经存在了。


查看监控项目内容

wKioL1lbC-ujxVleAAET-TUuEyg658.png


查看监控触发器

wKiom1lbDA6hzobPAAB51BgiDno471.png


查看监控图形内容

wKioL1lbDDihu-PrAACDfuMe3rE453.png


接下来将这个模板链接到你需要监控php-fpm服务的主机即可,最简单的方法是把主机纳入到监控模板内

wKioL1la_p6xv87LAAC5-9cP0nc367.png


可以再到你的主机上看看,它是否已经被连接到你的主机上

wKiom1lbC3OR5i7PAAClrvJuMLU538.png

发现Template App PHP_FPM已经在主机的连结模板内了


如果模板不合适,可以自己一步一步建立监控模板,可能zabbix监控版本不同,但是大体是一样的,根据自己的需求进行设定即可。

  1. 首先创建监控模板

wKioL1la9Bzy7ogDAAA_8qBOJ8I032.png

wKioL1la9DiTvl9jAACtGiDFSlw824.png

选好群组模板,然后填入想要的模板名称以及需要纳入到监控模板内的主机

wKiom1la_dWSdUwKAABNq_6RvQk772.png


2.配置好模板后,创建应用集

wKioL1la9quiz7LuAAA-YrewPVY443.png

wKioL1la9l6iKBa2AAAYOfCmg6M539.png


3.在应用集内添加监控项目

注:关于监控项目可以参考我在上面贴出监控项目内容里的监控项目名称和键值作为参考

wKiom1la9uyRwgeRAAA-hMDd778111.png

wKioL1la9uzQkjW0AAB-hhJou2w747.png

wKioL1la-5rjwpccAABhfBv-9f8647.png

其他监控项目和上面内容,除了名称、键值、备注描述信息,其他都是一样的。


4.添加监控告警

wKioL1la96iQSUMwAABGcua_keM434.png

wKiom1la96mTUlWPAABey5oyC9U998.png

上面的告警是当php-fpm进程为零时,进行严重告警


5.添加监控项目查看图形

注:关于监控图形可以参考我在上面贴出监控图形内容里的监控图形名称作为参考,主要根据你自己的需求进行设定会比较精准

wKioL1la-p-wsvQHAAA97XT7C98179.png

wKiom1la-qDAscrdAACPUvoUAOg476.png

在名称上填入你想要的监控名称,在监控项选择你已经添加好的项目,反正就是根据你个人的需求进行设定即可


设定好上面的东西,那你就可以直接在监控内查看你的监控图形是否有数据产生了

wKioL1lbK4eSr2raAAD_uMDz1r0217.png

wKioL1lbKyPiCPiiAAD67wwLqpM027.png

wKiom1lbKySwHm-gAAD3ICk44vI168.png

至此所有创建动作结束,如果出图,则说明设定成功啦!