Apache

check_apache2.py

Description:

Script written in Python to check Apache2’s server-status page with warning/critical threshold for req/sec

Current Version

Last Release Date

June 22, 2009

Compatible With


Nagios CSP

Meet The New Nagios Core Services Platform

Built on over 25 years of monitoring experience, the Nagios Core Services Platform provides insightful monitoring dashboards, time-saving monitoring wizards, and unmatched ease of use. Use it for free indefinitely.

Monitoring Made Magically Better

  • Nagios Core on Overdrive
  • Powerful Monitoring Dashboards
  • Time-Saving Configuration Wizards
  • Open Source Powered Monitoring On Steroids
  • And So Much More!
Project Files
Project Notes
Description check_apache2.py is a Python port of my sh compliant script check_apache2.sh, providing less features at the moment. It's main use for me is to get in touch with Python, but you might find it useful. You're able to set a hostname, a port and to define warning/critical thresholds for requests per second. More features will be integrated within the next days when I find the time to do further work on the script. Version Version 1.0, 2009, Mike Adolphs (http://www.matejunkie.com/) -h/--help Output ./check_apache2.py -h Usage: check_apache2.py -H HOSTNAME -p PORT [-w] [-c] Options: --version show program's version number and exit -h, --help show this help message and exit -H HOSTNAME, --hostname=HOSTNAME You may define a hostname with the -H option. Default is: localhost. -p PORT, --port=PORT You may define a port with the -p option. Default is: 80. Warning/critical thresholds: Use these options to set warning/critical thresholds for requests per second served by your Apache. -w WARNING, --warning=WARNING Use this option if you want to use warning/critical 1. Make sure to set a critical value as 2. Default is: -1. -c CRITICAL, --critical=CRITICAL Use this option if you want to use warning/critical 1. Make sure to set a warning value as 2. Default is: -2. Output example user@host $ ./check_apache2.py --version check_apache2.py 1.0 user@host $ ./check_apache2.py -H localhost -p 7001 OK: Apache serves 9.093710 requests per second. 1 busy workers, 49 idle workers. user@host $ ./check_apache2.py -H localhost -p 7001 -w 2 -c 5 CRITICAL: Apache serves 9.082950 requests per second, exceeding critical threshold! 1 busy workers, 49 idle workers. user@host $ ./check_apache2.py -H localhost -p 7001 -w 2 -c 10 WARNING: Apache serves 9.077650 requests per second, exceeding warning threshold! 1 busy workers, 49 idle workers. user@host $ ./check_apache2.py -H localhost -p 7001 -w 10 -c 20 OK: Apache serves 9.073430 requests per second. 1 busy workers, 49 idle workers. user@host $ ./check_apache2.py -H localhost -p 7001 -w 10 -c 5 UNKNOWN: When using thresholds the critical value has to be higher than the warning value. Please adjust your thresholds. user@host $ ./check_apache2.py -H localhost -p 7001 -w 5 UNKNOWN: Please also set a critical value when using warning/critical thresholds! user@host $ ./check_apache2.py -H localhost -p 7001 -c 5 UNKNOWN: Please also set a warning value when using warning/critical thresholds! user@host $ ./check_apache2.py -H localhost -p 7002 CRITICAL: Couldn't fetch the server's status page. Please check given hostname, port or Apache's configuration. We might not be allowed to access server-status due to your server's configuration. Changelog
Reviews (5) Add a Review
Works well
by anordby, December 31, 2016
But did not really do what I wanted: check for minimum idle workers. I want to know they are not all busy. So I added an option to check that and extended this script. It is downloadable from my github repo for plugins: https://github.com/anordby/plugins/blob/master/nagios/check_apache2.py
Helpful? Yes  No 
Optimization needed
by aradovits, July 31, 2016
Optimization: No tmp file needed
In retrieve_status_page() function change this: retrPage = urllib.urlretrieve(statusPage, '/tmp/server-status.log')
to this one: return urllib.urlopen(statusPage)

and modidy parse_status_page() function to parse_status_page(data):
# file = open('/tmp/server-status.log', 'r')
line = data.readline()
...
line = data.readline()

and finally in the main function add this line:
resParse = parse_status_page(retrieve_status_page())
so comment this lines:
#retrieve_status_page()
#resParse = parse_status_page()

Or you can see it:
https://gist.github.com/kajla/bf94e9c520f5cc706eb2e831af17129c
Helpful? Yes  No 
Effective check
by Maquis196, January 31, 2014
Does exactly what it says on the tin, does a couple of things very well.

My only gripe would be that if a box doesn't allow the plugin to talk to the server-status page, it should give a nice error, not the Python traceback you get at the moment.

Otherwise, very very happy. Thanks for this.
Helpful? Yes  No 
need to check.. apache conf
by justin, July 31, 2012
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1


ExtendedStatus On
Helpful? Yes  No 
Problem
by xoroz, February 28, 2011
I had this error:

Traceback (most recent call last):
File "./check_apache2.py", line 189, in ?
result = transform_dict(resParse)
File "./check_apache2.py", line 169, in transform_dict
totalAcc = int(resParse['totalAcc'].strip(" Total Accesses:"))
KeyError: 'totalAcc'
0 of 2 found this review helpful.
Helpful? Yes  No 2
Add a Review

You must be logged in to submit a review.

Thank you for your review!

Your review has been submitted and is pending approval.

Recommend

To:


From:


Thank you for your recommendation!

Your recommendation has been sent.

Project Stats
Rating
4.5 (10)
Favorites
0
Views
105,974