#!/usr/bin/perl # # apache http status code monitoring # # luis peralta - luis@11870.com # http://www.ziritione.org # # Installing: configure apache blackbox and set the logfile to /var/log/blackbox.log # or change the BLACKBOXLOG setting below. # # Dependencies: apache mod_logio, apache blackbox # http://www.devco.net/archives/2008/03/05/detailed_apache_stats.php # # Last version available at: http://www.ziritione.org/http_status # # Parameters: # # config # autoconf # #%# family=auto #%# capabilities=autoconf use strict; my $BLACKBOXLOG = "/var/log/blackbox.log"; my %WANTED = ( "apache.status.200" => "_200", "apache.status.301" => "_301", "apache.status.302" => "_302", "apache.status.404" => "_404", "apache.status.5xx" => "_5xx", ); my $arg = shift(); if ($arg eq 'config') { print_config(); exit(); } elsif ($arg eq 'autoconf') { print "yes\n"; exit(); } open(SERVICE, "<$BLACKBOXLOG") or die("Could not open '$BLACKBOXLOG': $!"); while () { my ($k, $v) = (m/(apache.status.*)=(\d+)/); next unless ($k); if (exists $WANTED{$k} ) { print("$WANTED{$k}.value $v\n"); } } close(SERVICE); sub print_config { my $num = 0; print("graph_title HTTP requests status graph_args --base 1000 graph_vlabel requests / second graph_category webserver graph_total total\n"); for my $key (sort { $WANTED{$a} cmp $WANTED{$b} } (keys %WANTED)) { my $title = $WANTED{$key}; print("$title.label ${title}\n", "$title.min 0\n", "$title.type DERIVE\n", "$title.max 500000\n", #"$title.draw ", ($num) ? "STACK" : "AREA" , "\n", "$title.draw ", ($num) ? "AREA" : "AREA" , "\n", ); $num++; } }