root / plugins / nginx / nginx_vhost_traffic @ 17f78427
Historique | Voir | Annoter | Télécharger (2,3 ko)
| 1 |
#!/bin/sh |
|---|---|
| 2 |
# |
| 3 |
# Script for monitoring nginx Virtual host output traffic |
| 4 |
# |
| 5 |
# Requierements: logtail awk |
| 6 |
# one unique access log file with $bytes_sent value for more accuracy |
| 7 |
# check http://wiki.nginx.org/NginxHttpLogModule |
| 8 |
# |
| 9 |
# Configuration Options (all options have defaults) |
| 10 |
# [nginx_vhost_traffic] |
| 11 |
# |
| 12 |
# Virtual host list |
| 13 |
# env.vhosts "example.com example.net example.org" |
| 14 |
# |
| 15 |
# Log path |
| 16 |
# env.logdir = /var/log/nginx |
| 17 |
# env.flogfile = access.log |
| 18 |
# |
| 19 |
# Position of the $bytes_sent in the access.log file |
| 20 |
# env.bparam 11 |
| 21 |
# |
| 22 |
# Aggregate subdomains |
| 23 |
# ex: example.com will match www.example.com, webmail.example.com and *example.com |
| 24 |
# BUG: will also match also www.bad-example.com |
| 25 |
# env.aggregate true #change to false to disable aggregation |
| 26 |
# |
| 27 |
# To report bugs, improvements or get updates |
| 28 |
# see http://github.com/joanpc/nginix_vhost_traffic |
| 29 |
# |
| 30 |
# inspired in postfix_filtered_awk |
| 31 |
# Copyright (c) 2010, Joan Perez i Cauhe |
| 32 |
|
| 33 |
LOGDIR=${logdir:-/var/log/nginx}
|
| 34 |
ACCESS_LOG=$LOGDIR/${logfile:-access.log}
|
| 35 |
LOGTAIL=${logtail:-`which logtail`}
|
| 36 |
STATEFILE=$MUNIN_PLUGSTATE/nginx_vhost_traffic.state |
| 37 |
VHOSTS=${vhosts:-`hostname`}
|
| 38 |
AGGREGATE=${aggregate:true}
|
| 39 |
|
| 40 |
BPARAM=${bparam:-11}
|
| 41 |
|
| 42 |
case $1 in |
| 43 |
config) |
| 44 |
DRAW=AREA |
| 45 |
echo 'graph_title Nginx Virtual host traffic' |
| 46 |
echo 'graph_vlabel bits out / ${graph_period}'
|
| 47 |
echo 'graph_args --base 1000 -l 0' |
| 48 |
echo 'graph_category webserver' |
| 49 |
|
| 50 |
i=0 |
| 51 |
for vhost in $VHOSTS |
| 52 |
do |
| 53 |
i=$(($i + 1)) |
| 54 |
echo vhost$i.label $vhost |
| 55 |
echo vhost$i.type ABSOLUTE |
| 56 |
echo vhost$i.cdef vhost$i,8,* |
| 57 |
echo vhost$i.draw $DRAW |
| 58 |
DRAW=STACK |
| 59 |
done |
| 60 |
|
| 61 |
echo rest.label Rest |
| 62 |
echo rest.type ABSOLUTE |
| 63 |
echo rest.cdef rest,8,* |
| 64 |
echo rest.draw STACK |
| 65 |
exit 0;; |
| 66 |
esac |
| 67 |
|
| 68 |
export BPARAM |
| 69 |
export VHOSTS |
| 70 |
export AGGREGATE |
| 71 |
|
| 72 |
# Awk Script |
| 73 |
$LOGTAIL ${ACCESS_LOG} -o $STATEFILE | awk '
|
| 74 |
|
| 75 |
BEGIN {
|
| 76 |
split(ENVIRON["VHOSTS"], hosts) |
| 77 |
for (host in hosts) { track[hosts[host]] = host}
|
| 78 |
} |
| 79 |
{
|
| 80 |
cn[$2]+=$ENVIRON["BPARAM"] |
| 81 |
} |
| 82 |
END {
|
| 83 |
for (host in cn) {
|
| 84 |
if (match(ENVIRON["AGGREGATE"], "true")) {
|
| 85 |
found = 0 |
| 86 |
for (vhost in track) {
|
| 87 |
if (index(host, vhost)) {
|
| 88 |
res[vhost] += cn[host] |
| 89 |
found = 1 |
| 90 |
break |
| 91 |
} |
| 92 |
} |
| 93 |
if (! found) rest+=cn[host] |
| 94 |
} else {
|
| 95 |
if (host in track) {
|
| 96 |
res[host] += cn[host] |
| 97 |
} else rest+=cn[host] |
| 98 |
} |
| 99 |
} |
| 100 |
print "aggregate: " ENVIRON["AGGREGATE"] |
| 101 |
for (vhost in track) print "vhost" track[vhost] ".value " res[vhost]+0 |
| 102 |
print "rest.value " rest + 0 |
| 103 |
}' |
