Build precise queries to find exactly what you need
Press ESC to close
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
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:
We’ve completely redesigned the world’s largest repository of Nagios plugins and monitoring tools. Join thousands of users sharing monitoring solutions for servers, applications, and everything in between.
Due to our redesign, all existing accounts require a password reset to access your account again.
Ready to explore 6,100+ projects and contribute to the community?
Reset Password Create Account
Happy Monitoring!