zacker330
11/14/2017 - 12:53 AM

nginx监控

UserParameter=Nginx.Accepted-Connections,python /etc/zabbix/zabbix_agentd.d/scripts/nginx_status.py -h 127.0.0.1 -p 80 -a accepted
UserParameter=Nginx.Active-Connections,python /etc/zabbix/zabbix_agentd.d/scripts/nginx_status.py -h 127.0.0.1 -p 80 -a active
UserParameter=Nginx.Handled-Connections,python /etc/zabbix/zabbix_agentd.d/scripts/nginx_status.py -h 127.0.0.1 -p 80 -a handled
UserParameter=Nginx.Reading-Connections,python /etc/zabbix/zabbix_agentd.d/scripts/nginx_status.py -h 127.0.0.1 -p 80 -a reading
UserParameter=Nginx.Total-Requests,python /etc/zabbix/zabbix_agentd.d/scripts/nginx_status.py -h 127.0.0.1 -p 80 -a requests
UserParameter=Nginx.Waiting-Connections,python /etc/zabbix/zabbix_agentd.d/scripts/nginx_status.py -h 127.0.0.1 -p 80 -a waiting
UserParameter=Nginx.Writting-Connections,python /etc/zabbix/zabbix_agentd.d/scripts/nginx_status.py -h 127.0.0.1 -p 80 -a writing
Active connections:当前活动的连接数
server accepts handled requests:服务器处理的连接数
这里有三个数字,分别是:连接数、握手数和请求数
Reading:成功读取到客户端Header的数量
Writing:返还给客户端Header的数量
Waiting:如果服务器开启了keep-alive
那么这个数值应该为:active – (reading + writing)
#!/bin/env python
###  nginx_status.py -h 127.0.0.1 -p 123456 -a handled
#
# Options:
#
# -a active 
# -a accepted
# -a handled 
# -a requests
# -a reading
# -a writing
# -a waiting
#


import urllib2, base64, sys, getopt
import re

##

def Usage ():
        print "Usage: getNginxInfo.py  -h 127.0.0.1 -p 80 -a [active|accepted|handled|request|reading|writing|waiting]"
        sys.exit(2)

##

def main ():

	# Default values
	host = "localhost"
	port = "80"
	getInfo = "None"

	if len(sys.argv) < 2:
		Usage()

	try:
        	opts, args = getopt.getopt(sys.argv[1:], "h:p:a:")
	except getopt.GetoptError:
                Usage()

	# Assign parameters as variables
	for opt, arg in opts :
		if opt == "-h" :
        		host = arg
	        if opt == "-p" :
        	        port = arg
	        if opt == "-a" :
        	        getInfo = arg

	url="http://" + host + ":" + port + "/nginx_status/"
	request = urllib2.Request(url)
	result = urllib2.urlopen(request)

	buffer = re.findall(r'\d{1,8}', result.read())

## Format:
## Active connections: 196
## server accepts handled requests
## 272900 272900 328835
## Reading: 0 Writing: 6 Waiting: 190

	if ( getInfo == "active"):
        	print buffer[0]
	elif ( getInfo == "accepted"):
		print buffer[1]
	elif ( getInfo == "handled"):
	        print buffer[2]
	elif ( getInfo == "requests"):
	        print buffer[3]
	elif ( getInfo == "reading"):
	        print buffer[4]
	elif ( getInfo == "writing"):
	        print buffer[5]
	elif ( getInfo == "waiting"):
	       	print buffer[6]
	else:
        	print "unknown"
	        sys.exit(1)

if __name__ == "__main__":
    main()
server {
	 #监听80端口
    listen                  58565;
 
    #指定域名
    server_name             127.0.0.1;
 
    location /nginx_status {
    	#开启stub_status
        stub_status on;
        #关闭访问日志
        access_log   off;
        #允许访问的IP
        allow 127.0.0.1;
        #禁止其他IP访问
        deny all;
    }
 
}
#!/bin/bash
############################################################
# $Name:         nginx_status.sh
# $Version:      v1.0
# $Function:     Nginx Status
# $Author:       xuliangwei
# $organization: www.xuliangwei.com,www,bjstack.com
# $Create Date:  2016-06-23
# $Description:  Monitor Nginx Service Status
############################################################
NGINX_PORT=80  #如果端口不同仅需要修改脚本即可,否则修改xml很麻烦
NGINX_COMMAND=$1
nginx_active(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Active/ {print $NF}'
}
nginx_reading(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Reading/ {print $2}'
}
nginx_writing(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Writing/ {print $4}'
       }
nginx_waiting(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Waiting/ {print $6}'
       }
nginx_accepts(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $1}'
       }
nginx_handled(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $2}'
       }
nginx_requests(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $3}'
       }
  case $NGINX_COMMAND in
	active)
		nginx_active;
		;;
	reading)
		nginx_reading;
		;;
	writing)
		nginx_writing;
		;;
	waiting)
		nginx_waiting;
		;;
	accepts)
		nginx_accepts;
		;;
	handled)
		nginx_handled;
		;;
	requests)
		nginx_requests;
		;;
	      *)
		echo $"USAGE:$0 {active|reading|writing|waiting|accepts|handled|requests}"
    esac