root / plugins / nginx / nginx_upstream @ a7139bca
Historique | Voir | Annoter | Télécharger (1,96 ko)
| 1 | a7139bca | Lars Kruse | #!/usr/bin/env python |
|---|---|---|---|
| 2 | 4b836355 | Simon Whittaker | #requires log format as below |
| 3 | #log_format cache '$remote_addr - $host [$time_local] "$request" $status ' |
||
| 4 | # '$body_bytes_sent "$http_referer" ' |
||
| 5 | # 'rt=$request_time ut="$upstream_response_time" ' |
||
| 6 | # 'cs=$upstream_cache_status'; |
||
| 7 | |||
| 8 | #License BSD |
||
| 9 | #Created by Simon Whittaker simon+github@swbh.net |
||
| 10 | #based on nginx_cache_hit_rate |
||
| 11 | |||
| 12 | from __future__ import with_statement |
||
| 13 | import re |
||
| 14 | import sys |
||
| 15 | fname = "/var/log/nginx/access.log" # File to check |
||
| 16 | |||
| 17 | if len(sys.argv) > 1: |
||
| 18 | if sys.argv[1]=="config": |
||
| 19 | print "graph_args --base 1000 -l 0" |
||
| 20 | print "graph_title NGINX Upstream times" |
||
| 21 | 3c98d069 | dipohl | print "graph_category webserver" |
| 22 | 4b836355 | Simon Whittaker | print "graph_vlabel milliseconds" |
| 23 | print "upstream.label upstream" |
||
| 24 | print "upstream.warning 5000" |
||
| 25 | print "upstream.critical 10000" |
||
| 26 | print "graph_info Shows the average time of connections to upstream servers for the primary site" |
||
| 27 | sys.exit(0) |
||
| 28 | |||
| 29 | with open(fname, "r") as f: |
||
| 30 | f.seek (0, 2) # Seek @ EOF |
||
| 31 | fsize = f.tell() # Get Size |
||
| 32 | f.seek (max (fsize-20480, 0), 0) # Set pos @ last n chars |
||
| 33 | lines = f.readlines() # Read to end |
||
| 34 | |||
| 35 | lines = lines[-1000:] #last 1000 lines you might want to change this |
||
| 36 | |||
| 37 | re1='.*?' # Non-greedy match on filler |
||
| 38 | re2='(ut)' # Word 1 |
||
| 39 | re3='(=)' # Any Single Character 1 |
||
| 40 | re4='([+-]?\\d*\\.\\d+)(?![-+0-9\\.])' # Float 1 |
||
| 41 | |||
| 42 | rg = re.compile(re1+re2+re3+re4,re.IGNORECASE|re.DOTALL) |
||
| 43 | totaltimeforrequests=0 |
||
| 44 | numberofrequests=0 |
||
| 45 | for line in lines: |
||
| 46 | m = rg.search(line) |
||
| 47 | 17f78427 | Lars Kruse | if m: |
| 48 | 4b836355 | Simon Whittaker | word1=m.group(1) |
| 49 | c1=m.group(2) |
||
| 50 | float1=m.group(3) |
||
| 51 | numberofrequests=numberofrequests+1 |
||
| 52 | totaltimeforrequests=totaltimeforrequests+float(float1) |
||
| 53 | |||
| 54 | upstream=(totaltimeforrequests/numberofrequests)*1000 |
||
| 55 | upstream=int(upstream) |
||
| 56 | print "upstream.value "+str(upstream) |
