配置nginx开启stub_status模块
结果为:
后台获取数据的脚本:
#!/usr/bin/env python
from optparse import OptionParser
import sys
import httplib
import re
class NginxStatsPlugin:
def __init__(self, host, port, ssl, url):
self.host = host
self.port = port
self.ssl = ssl
self.url = url
def run(self):
metrics = {}
if self.ssl:
conn = httplib.HTTPSConnection(self.host, self.port)
else:
conn = httplib.HTTPConnection(self.host, self.port)
try:
conn.request('GET', self.url)
response = conn.getresponse()
if response.status != 200:
print 'Server replied: %d %s to action GET %s' % (
response.status, response.reason, self.url)
sys.exit(1)
data = response.read()
line_regex = re.compile(r'^([^:]+): (.+)$')
datalist=data.split("\n")
for line in datalist:
if datalist.index(line)==0:
match = line_regex.search(line)
if not match: continue
name, value = match.groups()
if name == 'Active connections':
metrics['ActiveConnections'] = value
elif datalist.index(line)==2:
linelist=line.split("")
if len(linelist)==3:
metrics['Server']=linelist[0]
metrics['Accepts']=linelist[1]
metrics['HandledRequests']=linelist[2]
elif datalist.index(line)==3:
linelist=line.split("")
for i in linelist:
match = line_regex.search(i)
if not match: continue
name, value = match.groups()
if name == 'Reading':
metrics['Reading'] = value
if name == 'Writing':
metrics['Writing'] = value
if name == 'Waiting':
metrics['Waiting'] = value
except SystemExit:
sys.exit(1)
except Exception, e:
print str(e)
sys.exit(1)
if not metrics:
print "no metrics were returned"
sys.exit(1)
print "STATUS OK|%s" % (' '.join([ "%s=%s" % (m[0],m[1]) \
for m in metrics.items() ]))
if __name__ == "__main__":
parser = OptionParser()
parser.add_option('-H', '--host', dest='host',
help='Hostname of Nginx server')
parser.add_option('-p', '--port', dest='port',
type='int', default=80,
help='Port of Nginx server')
parser.add_option('-s', '--ssl', dest='ssl',
action='store_true', default=False,
help='Use HTTPS for the connection')
parser.add_option('-u', '--url', dest='url',
default='/server-status?auto',
help='Relative URL of server status page')
options, args = parser.parse_args()
if not options.host:
print "You must specify the host parameter."
sys.exit(1)
cmd = NginxStatsPlugin(
options.host, options.port, options.ssl, options.url)
cmd.run()