Build precise queries to find exactly what you need
Press ESC to close
Join our next live webinar: “Advanced Nagios Monitoring Techniques” – Register Now
Your review has been submitted and is pending approval.
[perl] Yet Another (more generic) parser for Apache’s server-status handler. Fetches the server-status page of an apache, extracts some information and evaluates them. Tested with Apache 2.0 – not (yet) working with Apache 1.x
Current Version
Last Release Date
June 3, 2009
Owner
Nagios Exchange
Website
http://www.pro-md.de/nagios/check_apache_status
Compatible With
Unknown Tag: 'FileDesc1'
I know there are other plugins for the same. But I think this one is a bit more flexible, as it checks on several different values. **usage: check_apache_status -H HOSTNAME -v VARNAME -c LIMIT -w LIMIT** If called without -v, it will check all values based on internal defined -c and -w values and will return the "worst" result. VARNAME might be one of: * traffic (provided in MB) * requests_per_second * bytes_per_request * accesses * bytes_per_second * idle_worker * current_requests * uptime will always deliver UNKNOWN
I've tried to contact the owner, but to no avail. I will be keeping a wip version here: https://github.com/patyx7/nagios-plugins , if any are interested. I aim to get it working with Apache 1, add some more vars to it, and have also fixed the traffic issue with little modification. Thanks
Hi, I fix the problem with measure in KB, MB and GB from traffic. Thank's for the script These is the new script: #!/usr/bin/perl use Getopt::Std; my %options=(); getopts("H:v:w:c:",%options); ### CONFIGURATION %monitor_type = ( 'traffic' => 'LiB', 'requests_per_second' => 'LiB', 'bytes_per_request' => 'LiB', 'accesses' => 'LiB', 'bytes_per_second' => 'LiB', 'idle_worker' => 'HiB', 'uptime' => 'LiB', 'current_requests' => 'LiB' ); %critical = ( 'traffic' => '60', #MB 'requests_per_second' => '6', 'bytes_per_request' => '1024', 'accesses' => '100000', 'bytes_per_second' => '1000', 'idle_worker' => '50', 'current_requests' => '150' ); %warning = ( 'traffic' => '50', #MB 'requests_per_second' => '4', 'bytes_per_request' => '768', 'accesses' => '50000', 'bytes_per_second' => '800', 'idle_worker' => '150', 'current_requests' => '70' ); my @pretext = ('APACHE OK','APACHE WARNING','APACHE CRITICAL','APACHE UNKNOWN'); my $server = $options{'H'}; my $mon = $options{'v'}; $warning{$mon} = $options{'w'} if ($options{'w'}); $critical{$mon} = $options{'c'} if ($options{'c'}); help() if (! $options{'H'}); my %data = get_apache_status($server); if (! keys(%data)) { print $pretext[3].": $server did not deliver information.n"; exit(3); } if ($mon) { ($status,$text) = CheckValue($mon,%data); } else { ($status,$text) = CheckAll(%data); } print $pretext[$status].":".$text."n"; exit($status); sub CheckAll(%) { my $data = shift(); my %stati = (); my $fin_status = 0; foreach my $mon (keys(%monitor_type)) { my ($status,$txt) = CheckValue($mon,$data); $stati{$status}{$mon} = $txt; $fin_status = $status if ($status > $fin_status); } if ($fin_status == 2) { map{ $text .= " $_"; }keys(%{$stati{2}}); } elsif ($fin_status == 1) { map{ $text .= " $_"; }keys(%{$stati{1}}); } $text .= ' ('.scalar(keys(%{$stati{2}})).'c/'.scalar(keys(%{$stati{1}})).'w/'.scalar(keys(%{$stati{0}})).'o)'; return($fin_status,$text); } sub help() { print = $warning{$mon}) { # status WARNING for "lower = better" $ret = 1; } else { # status OK for "lower = better" $ret = 0; } } elsif ($monitor_type{$mon} eq 'HiB') { # Higher is better if ($$data{$mon} 'STAMPBrowser/1.0'); my $ua = new LWP::UserAgent; my $url = new URI::URL($uri); my $req = new HTTP::Request(GET, $url, $hdrs); my $resp = $ua->request($req); my $code = $resp->content; # Server Version: Apache/2.0.59 (Win32) PHP/5.1.6 # Server Built: Jul 27 2006 15:55:03 # # Current Time: Friday, 11-Apr-2008 09:16:25 W. Europe Daylight Time # Restart Time: Friday, 11-Apr-2008 06:01:18 W. Europe Daylight Time # Parent Server Generation: 38 # Server uptime: 3 hours 15 minutes 7 seconds # Total accesses: 30554 - Total Traffic: 4.9 MB # 2.61 requests/sec - 439 B/second - 168 B/request # 3 requests currently being processed, 597 idle workers my %results = (); while ($code =~ /([^bytes } elsif ( $line =~ m/.*MB/) { $results{'traffic'} = $trafc; # MB->bytes } elsif ( $line =~ m/.[kK]B/) { $results{'traffic'} = eval( $2 / 1024 ); # MB->bytes } } elsif ( $line =~ /([d.]+) requests/sec - ([d.]+) [k]?B/second - ([d.]+) [k]?B/request/) { $results{'requests_per_second'} = $1; $results{'bytes_per_second'} = $2; $results{'bytes_per_request'} = $3; } elsif ( $line =~ /(d+) requests currently being processed, (d+) idle workers/) { $results{'current_requests'} = $1; $results{'idle_worker'} = $2; } } return(%results); }
You must be logged in to submit a review.
To:
From: