From cbbedb7cb8ee52652b11bba8e334abfbb3e739db Mon Sep 17 00:00:00 2001 From: Roberto Rodriguez Date: Sun, 9 Feb 2014 16:18:19 +0200 Subject: [PATCH] Initial commit of this total requests by status code for virtual hosts. It was written in bash to avoid any dependencies TODO: Add a better clasification of status codes (Short and useful) --- plugins/vhost_requests_ | 104 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100755 plugins/vhost_requests_ diff --git a/plugins/vhost_requests_ b/plugins/vhost_requests_ new file mode 100755 index 00000000..cecc859f --- /dev/null +++ b/plugins/vhost_requests_ @@ -0,0 +1,104 @@ +#!/bin/bash +# -*- sh -*- + +: < to this file. + +E.g. + +# ln -s /usr/share/munin/plugins/vhost_requests_ \ + /etc/munin/plugins/vhost_requests_host.org-access_log + +=head1 AUTHOR + +Roberto Rodriguez + +END + +# This is the format that date will use to generate access_log like entries +date_format='+%d/%b/%Y:%R' +# This is where apache stores logfiles +logdir=/var/log/apache2 + +# By default process the whole logfile, but you can set a value different than 0 to limit the lines to process. +# This is useful if the plugin is hurting your performance, a way to calculate this could be: +# The expected requests in five minutes (you can grab this from the maximum value in the y legend) +# / 5 * 6 (Because we left the last minute to the next round) +# times how high can an unexpected peak be (Example 3 times) +# So, if we have 1000 requests every five minutes max_lines could be: +# 1000 / 5 * 6 * 3 = 3600 +# It should improve performance because at 1000 requests per 5 minutes you have 288000 per day but it will only read 3600 each time. +max_lines=0 +# If your http status code comes in a different column, you can change it here: (Assuming ' ' is the column separator) +status_column=9 + +file_name=`basename $0 | sed 's/^vhost_requests_//g'` + +case $1 in + config) +echo graph_category vhosts +echo graph_title Requests by Status Code $file_name +echo graph_vlabel Nr of Requests +echo S200.label 200 OK +echo S206.label 206 Partial Content +echo S301.label 301 Moved Permanently +echo S302.label 302 Found +echo S303.label 303 See Other +echo S304.label 304 Not Modified +echo S400.label 400 Bad Request +echo S403.label 403 Forbidden +echo S404.label 404 Not Found +echo S405.label 405 Method Not Allowed +echo S500.label 500 Internal Server Error +echo S502.label 502 Bad Gateway +echo S503.label 503 Service Unavailable +echo S200.draw AREA +echo S206.draw STACK +echo S301.draw STACK +echo S302.draw STACK +echo S303.draw STACK +echo S304.draw STACK +echo S400.draw STACK +echo S403.draw STACK +echo S404.draw STACK +echo S405.draw STACK +echo S500.draw STACK +echo S502.draw STACK +echo S503.draw STACK + exit 0;; +esac + +if [ $max_lines -eq 0 ] +then + for f in $(seq 5); do grep $(date $date_format -d "-$f min") $logdir/$file_name; done | cut -d' ' -f $status_column | sort | uniq -c | awk '{ print "S"$2".value "$1; }' +else + for f in $(seq 5); do tail -n $max_lines $logdir/$file_name | grep $(date $date_format -d "-$f min"); done | cut -d' ' -f $status_column | sort | uniq -c | awk '{ print "S"$2".value "$1; }' +fi