diff --git a/plugins/other/nginx_vhost_traffic b/plugins/other/nginx_vhost_traffic new file mode 100755 index 00000000..439111ae --- /dev/null +++ b/plugins/other/nginx_vhost_traffic @@ -0,0 +1,103 @@ +#!/bin/sh +# +# Script for monitoring nginx Virtual host output traffic +# +# Requierements: logtail awk +# one unique access log file with $bytes_sent value for more accuracy +# check http://wiki.nginx.org/NginxHttpLogModule +# +# Configuration Options (all options have defauts) +# [nginx_vhost_traffic] +# +# Virtual host list +# env.vhosts "example.com example.net example.org" +# +# Log path +# env.logdir = /var/log/nginx +# env.flogfile = access.log +# +# Position of the $bytes_sent in the access.log file +# env.bparam 11 +# +# Aggregate subdomains +# ex: example.com will match www.example.com, webmail.example.com and *example.com +# BUG: will also match also www.bad-example.com +# env.aggregate true #change to false to disable aggregation +# +# To report bugs, improvements or get updates +# see http://github.com/joanpc/nginix_vhost_traffic +# +# inspired in postfix_filtered_awk +# Copyright (c) 2010, Joan Perez i Cauhe + +LOGDIR=${logdir:-/var/log/nginx} +ACCESS_LOG=$LOGDIR/${logfile:-access.log} +LOGTAIL=${logtail:-`which logtail`} +STATEFILE=/var/lib/munin/plugin-state/nginx_vhost_traffic.state +VHOSTS=${vhosts:-`hostname`} +AGGREGATE=${aggregate:true} + +BPARAM=${bparam:-11} + +case $1 in + config) + DRAW=AREA + echo 'graph_title Nginx Virtual host traffic' + echo 'graph_vlabel bits out / ${graph_period}' + echo 'graph_args --base 1000 -l 0' + echo 'graph_category Nginx' + + i=0 + for vhost in $VHOSTS + do + i=$(($i + 1)) + echo vhost$i.label $vhost + echo vhost$i.type ABSOLUTE + echo vhost$i.cdef vhost$i,8,* + echo vhost$i.draw $DRAW + DRAW=STACK + done + + echo rest.label Rest + echo rest.type ABSOLUTE + echo rest.cdef rest,8,* + echo rest.draw STACK + exit 0;; +esac + +export BPARAM +export VHOSTS +export AGGREGATE + +# Awk Script +$LOGTAIL ${ACCESS_LOG} $STATEFILE | awk ' + +BEGIN { +split(ENVIRON["VHOSTS"], hosts) +for (host in hosts) { track[hosts[host]] = host} +} +{ + cn[$2]+=ENVIRON["BPARAM"] +} +END { + for (host in cn) { + if (match(ENVIRON["AGGREGATE"], "true")) { + found = 0 + for (vhost in track) { + if (index(host, vhost)) { + res[vhost] += cn[host] + found = 1 + break + } + } + if (! found) rest+=cn[host] + } else { + if (host in track) { + res[host] += cn[host] + } else rest+=cn[host] + } + } + print "agregate: " ENVIRON["AGGREGATE"] + for (vhost in track) print "vhost" track[vhost] ".value " res[vhost]+0 + print "rest.value " rest + 0 +}' \ No newline at end of file