Zabbix添加nginx-php监控

以源码安装为例:

目录环境:

/usr/local/php/etc/php-fpm.conf

/usr/local/nginx/conf/nginx.conf

------------------------------------------------------------

一、修改配置

# vim /usr/local/php/etc/php-fpm.conf
末行添加:
pm.status_path = /phpfpm_status
# pkill php-fpm
# /usr/local/php/sbin/php-fpm# vim /usr/local/nginx/conf/nginx.conf

添加:

server {
listen 127.0.0.1:80;
server_name 127.0.0.1;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
allow 10.1.12.0/24;
deny all;
}
location ~ ^/(phpfpm_status)$ {
include fastcgi_params;
fastcgi_pass unix:/tmp/php-cgi.sock;
            fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
}
}

重启nginx

# /usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf -s reload

二、监控脚本

(1)nginx监控脚本

#!/usr/bin/env python
#__*__coding:utf8__*__
import urllib2,sys,os
def Nginx_status():
nginx_stats_dirt = {}
nginx_url = "http://127.0.0.1/nginx_status"
req = urllib2.Request(nginx_url)
response = urllib2.urlopen(req)
request_list = response.read().split("\n")
nginx_stats_dirt["active"] = request_list[0].split()[2]
nginx_stats_dirt["accepts"] = request_list[2].split()[0]
nginx_stats_dirt["handled"] = request_list[2].split()[1]
nginx_stats_dirt["requests"] = request_list[2].split()[2]
nginx_stats_dirt["reading"] = request_list[3].split()[1]
nginx_stats_dirt["writing"] = request_list[3].split()[3]
nginx_stats_dirt["waiting"] = request_list[3].split()[5]
if len(sys.argv) is not 2 or str(sys.argv[1]) not in nginx_stats_dirt.keys():
print "Usage: nginx_stauts.py $1 {active|accepts|handled|requests|reading|writing|waiting}"
exit(1)
else:
print nginx_stats_dirt[str(sys.argv[1])]
if __name__ == '__main__':
try:
Nginx_status()
except urllib2.URLError,e:
print "%s,there may be something wrong with nginx!" %e

(2)php监控脚本

#!/usr/bin/env python

#__*__coding:utf8__*__

import urllib2,sys,os

def Php_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","slow_requests"]

php_url = 'http://127.0.0.1/phpfpm_status'

req = urllib2.Request(php_url)

response = urllib2.urlopen(req)

request_list = response.read().split()

position=[1,4,11,14,17,21,25,28,31,34,38,42,45]

for i in position:

request_status_list.append(request_list[i])

for i in range(len(php_status_list)):

php_status_dirt[php_status_list[i]] = request_status_list[i]

if len(sys.argv) is not 2 or str(sys.argv[1]) not in php_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|slow_requests}"

exit(1)

else:

print php_status_dirt[str(sys.argv[1])]

if __name__ == '__main__':

try:

Php_status()

except urllib2.URLError,e:

print "%s,there may be something wrong with php!" %e

三、配置监控扩展

被监控主机端,zabbix_agentd.conf文件中添加上这个:

UserParameter=phpfpm[*],/etc/zabbix/scripts/phpfpm_status.py $1
UserParameter=nginx[*],/etc/zabbix/scripts/nginx_status.py $1

四、测试

[root@zabbix_server-12-155 ~]# zabbix_get -s 10.1.12.177 -k phpfpm[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 -s 10.1.12.177 -k phpfpm[pool]
www