Home Directory Plugins Web Servers Apache check_apache_status

Search Exchange

Search All Sites

Nagios Live Webinars

Let our experts show you how Nagios can help your organization.

Contact Us

Phone: 1-888-NAGIOS-1
Email: sales@nagios.com

Login

Remember Me

check_apache_status

Rating
2 votes
Favoured:
0
Hits
110424
Files:
FileDescription
check_apache_statusUnknown Tag: 'FileDesc1'
Network Monitoring Software - Download Nagios XI
Log Management Software - Nagios Log Server - Download
Netflow Analysis Software - Nagios Network Analyzer - Download
[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
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
Reviews (2)
bypatyx7, November 7, 2013
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
byjulyusito, November 4, 2011
0 of 1 people found this review helpful
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);
}