#!/usr/bin/perl # # Plugin to monitor the number of apache-processes running on the # machine, and (in addition to a simple process count), separate then # into "busy" or "idle" servers. # # Requirements: # - Needs access to http://localhost/server-status?auto (or modify the # address for another host). See your apache documentation on how to # set up this url in your httpd.conf. # # Tip: To see if it's already set up correctly, just run this plugin # with the parameter "autoconf". If you get a "yes", everything should # work like a charm already. # # Parameters supported: # # config # autoconf # # Configurable variables # # urls - Override default status-url (SSL) # ports - HTTPS ports numbers (SSL) # # $Log$ # Revision 1.8 2006/03/07 20:30:00 fra519 # modified for Apache SSL Server. # # Revision 1.7.2.1 2005/02/24 17:51:08 jimmyo # modified graph_args of generic/apache_processes, to work around an rrdtool bug (Deb#296528). # # Revision 1.7 2004/05/20 13:57:11 jimmyo # Set categories to some of the plugins. # # Revision 1.6 2004/05/14 21:16:46 jimmyo # "Upped" som plugins from contrib/manual to auto. # # Revision 1.5 2004/04/27 08:46:57 jimmyo # Fixed broken autoconf in apache-* plugins (Deb#236144). # # Revision 1.4 2004/02/03 17:17:25 jimmyo # Generic/apache-plugins have been modified to properly to report the correct autoconf value. Also, bugfixes in _processes and _volume. # # Revision 1.3 2004/01/29 18:47:30 jimmyo # Made plugins apache_* compatible with older versions of LWP::UserAgent (SF#881411). # # Revision 1.2 2004/01/29 18:26:12 jimmyo # Bugfix, apache_processes now takes port numbers into account. (SF#882263) # # Revision 1.1 2004/01/02 18:50:00 jimmyo # Renamed occurrances of lrrd -> munin # # Revision 1.1.1.1 2004/01/02 15:18:07 jimmyo # Import of LRRD CVS tree after renaming to Munin # # Revision 1.4 2003/12/18 16:55:45 jimmyo # Enabled multiple ports # # Revision 1.3 2003/12/18 16:35:33 jimmyo # fail more gracefully when using uninstalled perl modules. # # Revision 1.2 2003/11/07 17:43:16 jimmyo # Cleanups and log entries # # # # Magic markers: #%# family=auto #%# capabilities=autoconf my $ret = undef; if (! eval "require LWP::UserAgent;") { $ret = "LWP::UserAgent not found"; } if (! eval "require Crypt::SSLeay;") { $ret = "Crypt::SSLeay not found"; } my $URLS = exists $ENV{'urls'} ? $ENV{'urls'} : "https://127.0.0.1:%d/server-status?auto"; my @PORTS = exists $ENV{'ports'} ? split(' ', $ENV{'ports'}) : (443); if ( exists $ARGV[0] and $ARGV[0] eq "autoconf" ) { if ($ret) { print "no ($ret)\n"; exit 1; } my $ua = LWP::UserAgent->new(timeout => 30); my @badports; foreach my $port (@PORTS) { my $url = sprintf $URLS, $port; my $response = $ua->request(HTTP::Request->new('GET',$url)); push @badports, $port unless $response->is_success and $response->content =~ /Idle(?:Servers|Workers)/im; } if (@badports) { print "no (no apache server-status on ports @badports)\n"; exit 1; } else { print "yes\n"; exit 0; } } if ( exists $ARGV[0] and $ARGV[0] eq "config" ) { print "graph_title ApacheSSL processes\n"; print "graph_args --base 1000 -l 0\n"; print "graph_category apache\n"; print "graph_order "; foreach my $port (@PORTS) { print "busy$port idle$port "; } print "\n"; print "graph_vlabel processes\n"; print "graph_total total\n"; foreach my $port (@PORTS) { print "busy$port.label busy servers $port\n"; if (@PORTS == 1) { print "busy$port.draw AREA\n"; } else { print "busy$port.draw LINE2\n"; } print "idle$port.label idle servers $port\n"; print "idle$port.draw STACK\n"; } exit 0; } foreach my $port (@PORTS) { my $ua = LWP::UserAgent->new(timeout => 30); my $url = sprintf $URLS, $port; my $response = $ua->request(HTTP::Request->new('GET',$url)); if ($response->content =~ /^Busy(?:Servers|Workers):\s+(.+)$/im) { print "busy$port.value $1\n"; } else { print "busy$port.value U\n"; } if ($response->content =~ /^Idle(?:Servers|Workers):\s+(.+)$/im) { print "idle$port.value $1\n"; } else { print "idle$port.value U\n"; } } # vim:syntax=perl