2012-08-30 14:49:22 +02:00
|
|
|
#!/usr/bin/python
|
|
|
|
#requires log format as below
|
|
|
|
#log_format cache '$remote_addr - $host [$time_local] "$request" $status '
|
|
|
|
# '$body_bytes_sent "$http_referer" '
|
|
|
|
# 'rt=$request_time ut="$upstream_response_time" '
|
|
|
|
# 'cs=$upstream_cache_status';
|
|
|
|
|
|
|
|
#License BSD
|
|
|
|
#Created by Simon Whittaker simon+github@swbh.net
|
|
|
|
#based on nginx_cache_hit_rate
|
|
|
|
|
|
|
|
from __future__ import with_statement
|
|
|
|
import re
|
|
|
|
import sys
|
|
|
|
fname = "/var/log/nginx/access.log" # File to check
|
|
|
|
|
|
|
|
if len(sys.argv) > 1:
|
|
|
|
if sys.argv[1]=="config":
|
|
|
|
print "graph_args --base 1000 -l 0"
|
|
|
|
print "graph_title NGINX Upstream times"
|
2017-02-21 17:11:23 +01:00
|
|
|
print "graph_category webserver"
|
2012-08-30 14:49:22 +02:00
|
|
|
print "graph_vlabel milliseconds"
|
|
|
|
print "upstream.label upstream"
|
|
|
|
print "upstream.warning 5000"
|
|
|
|
print "upstream.critical 10000"
|
|
|
|
print "graph_info Shows the average time of connections to upstream servers for the primary site"
|
|
|
|
sys.exit(0)
|
|
|
|
|
|
|
|
with open(fname, "r") as f:
|
|
|
|
f.seek (0, 2) # Seek @ EOF
|
|
|
|
fsize = f.tell() # Get Size
|
|
|
|
f.seek (max (fsize-20480, 0), 0) # Set pos @ last n chars
|
|
|
|
lines = f.readlines() # Read to end
|
|
|
|
|
|
|
|
lines = lines[-1000:] #last 1000 lines you might want to change this
|
|
|
|
|
|
|
|
re1='.*?' # Non-greedy match on filler
|
|
|
|
re2='(ut)' # Word 1
|
|
|
|
re3='(=)' # Any Single Character 1
|
|
|
|
re4='([+-]?\\d*\\.\\d+)(?![-+0-9\\.])' # Float 1
|
|
|
|
|
|
|
|
rg = re.compile(re1+re2+re3+re4,re.IGNORECASE|re.DOTALL)
|
|
|
|
totaltimeforrequests=0
|
|
|
|
numberofrequests=0
|
|
|
|
for line in lines:
|
|
|
|
m = rg.search(line)
|
|
|
|
if m:
|
|
|
|
word1=m.group(1)
|
|
|
|
c1=m.group(2)
|
|
|
|
float1=m.group(3)
|
|
|
|
numberofrequests=numberofrequests+1
|
|
|
|
totaltimeforrequests=totaltimeforrequests+float(float1)
|
|
|
|
|
|
|
|
upstream=(totaltimeforrequests/numberofrequests)*1000
|
|
|
|
upstream=int(upstream)
|
|
|
|
print "upstream.value "+str(upstream)
|