[21] | 1 | #!/usr/bin/perl |
---|
| 2 | # |
---|
| 3 | # Plugin to monitor the number of apache-processes running on the |
---|
| 4 | # machine, and (in addition to a simple process count), separate then |
---|
| 5 | # into "busy" or "idle" servers. |
---|
| 6 | # |
---|
| 7 | # Requirements: |
---|
| 8 | # - Needs access to http://localhost/server-status?auto (or modify the |
---|
| 9 | # address for another host). See your apache documentation on how to |
---|
| 10 | # set up this url in your httpd.conf. |
---|
[22] | 11 | # - also requires libcrypt-ssleay-perl |
---|
[21] | 12 | # |
---|
| 13 | # Tip: To see if it's already set up correctly, just run this plugin |
---|
| 14 | # with the parameter "autoconf". If you get a "yes", everything should |
---|
| 15 | # work like a charm already. |
---|
| 16 | # |
---|
| 17 | # Parameters supported: |
---|
| 18 | # |
---|
| 19 | # config |
---|
| 20 | # autoconf |
---|
| 21 | # |
---|
| 22 | # Configurable variables |
---|
| 23 | # |
---|
| 24 | # urls - Override default status-url (SSL) |
---|
| 25 | # ports - HTTPS ports numbers (SSL) |
---|
| 26 | # |
---|
| 27 | # $Log$ |
---|
| 28 | # Revision 1.8 2006/03/07 20:30:00 fra519 |
---|
| 29 | # modified for Apache SSL Server. |
---|
| 30 | # |
---|
| 31 | # Revision 1.7.2.1 2005/02/24 17:51:08 jimmyo |
---|
| 32 | # modified graph_args of generic/apache_processes, to work around an rrdtool bug (Deb#296528). |
---|
| 33 | # |
---|
| 34 | # Revision 1.7 2004/05/20 13:57:11 jimmyo |
---|
| 35 | # Set categories to some of the plugins. |
---|
| 36 | # |
---|
| 37 | # Revision 1.6 2004/05/14 21:16:46 jimmyo |
---|
| 38 | # "Upped" som plugins from contrib/manual to auto. |
---|
| 39 | # |
---|
| 40 | # Revision 1.5 2004/04/27 08:46:57 jimmyo |
---|
| 41 | # Fixed broken autoconf in apache-* plugins (Deb#236144). |
---|
| 42 | # |
---|
| 43 | # Revision 1.4 2004/02/03 17:17:25 jimmyo |
---|
| 44 | # Generic/apache-plugins have been modified to properly to report the correct autoconf value. Also, bugfixes in _processes and _volume. |
---|
| 45 | # |
---|
| 46 | # Revision 1.3 2004/01/29 18:47:30 jimmyo |
---|
| 47 | # Made plugins apache_* compatible with older versions of LWP::UserAgent (SF#881411). |
---|
| 48 | # |
---|
| 49 | # Revision 1.2 2004/01/29 18:26:12 jimmyo |
---|
| 50 | # Bugfix, apache_processes now takes port numbers into account. (SF#882263) |
---|
| 51 | # |
---|
| 52 | # Revision 1.1 2004/01/02 18:50:00 jimmyo |
---|
| 53 | # Renamed occurrances of lrrd -> munin |
---|
| 54 | # |
---|
| 55 | # Revision 1.1.1.1 2004/01/02 15:18:07 jimmyo |
---|
| 56 | # Import of LRRD CVS tree after renaming to Munin |
---|
| 57 | # |
---|
| 58 | # Revision 1.4 2003/12/18 16:55:45 jimmyo |
---|
| 59 | # Enabled multiple ports |
---|
| 60 | # |
---|
| 61 | # Revision 1.3 2003/12/18 16:35:33 jimmyo |
---|
| 62 | # fail more gracefully when using uninstalled perl modules. |
---|
| 63 | # |
---|
| 64 | # Revision 1.2 2003/11/07 17:43:16 jimmyo |
---|
| 65 | # Cleanups and log entries |
---|
| 66 | # |
---|
| 67 | # |
---|
| 68 | # |
---|
| 69 | # Magic markers: |
---|
| 70 | #%# family=auto |
---|
| 71 | #%# capabilities=autoconf |
---|
| 72 | |
---|
| 73 | my $ret = undef; |
---|
| 74 | if (! eval "require LWP::UserAgent;") |
---|
| 75 | { |
---|
| 76 | $ret = "LWP::UserAgent not found"; |
---|
| 77 | } |
---|
| 78 | if (! eval "require Crypt::SSLeay;") |
---|
| 79 | { |
---|
| 80 | $ret = "Crypt::SSLeay not found"; |
---|
| 81 | } |
---|
| 82 | |
---|
| 83 | my $URLS = exists $ENV{'urls'} ? $ENV{'urls'} : "https://127.0.0.1:%d/server-status?auto"; |
---|
| 84 | my @PORTS = exists $ENV{'ports'} ? split(' ', $ENV{'ports'}) : (443); |
---|
| 85 | |
---|
| 86 | if ( exists $ARGV[0] and $ARGV[0] eq "autoconf" ) |
---|
| 87 | { |
---|
| 88 | if ($ret) |
---|
| 89 | { |
---|
| 90 | print "no ($ret)\n"; |
---|
| 91 | exit 1; |
---|
| 92 | } |
---|
| 93 | my $ua = LWP::UserAgent->new(timeout => 30); |
---|
| 94 | my @badports; |
---|
| 95 | |
---|
| 96 | foreach my $port (@PORTS) { |
---|
| 97 | my $url = sprintf $URLS, $port; |
---|
| 98 | my $response = $ua->request(HTTP::Request->new('GET',$url)); |
---|
| 99 | push @badports, $port unless $response->is_success and $response->content =~ /Idle(?:Servers|Workers)/im; |
---|
| 100 | } |
---|
| 101 | |
---|
| 102 | if (@badports) |
---|
| 103 | { |
---|
| 104 | print "no (no apache server-status on ports @badports)\n"; |
---|
| 105 | exit 1; |
---|
| 106 | } |
---|
| 107 | else |
---|
| 108 | { |
---|
| 109 | print "yes\n"; |
---|
| 110 | exit 0; |
---|
| 111 | } |
---|
| 112 | } |
---|
| 113 | |
---|
| 114 | if ( exists $ARGV[0] and $ARGV[0] eq "config" ) |
---|
| 115 | { |
---|
| 116 | print "graph_title ApacheSSL processes\n"; |
---|
| 117 | print "graph_args --base 1000 -l 0\n"; |
---|
| 118 | print "graph_category apache\n"; |
---|
| 119 | print "graph_order "; |
---|
| 120 | foreach my $port (@PORTS) { |
---|
| 121 | print "busy$port idle$port "; |
---|
| 122 | } |
---|
| 123 | print "\n"; |
---|
| 124 | print "graph_vlabel processes\n"; |
---|
| 125 | print "graph_total total\n"; |
---|
| 126 | foreach my $port (@PORTS) { |
---|
| 127 | print "busy$port.label busy servers $port\n"; |
---|
| 128 | if (@PORTS == 1) { |
---|
| 129 | print "busy$port.draw AREA\n"; |
---|
| 130 | } |
---|
| 131 | else |
---|
| 132 | { |
---|
| 133 | print "busy$port.draw LINE2\n"; |
---|
| 134 | } |
---|
| 135 | print "idle$port.label idle servers $port\n"; |
---|
| 136 | print "idle$port.draw STACK\n"; |
---|
| 137 | } |
---|
| 138 | exit 0; |
---|
| 139 | } |
---|
| 140 | |
---|
| 141 | foreach my $port (@PORTS) |
---|
| 142 | { |
---|
| 143 | my $ua = LWP::UserAgent->new(timeout => 30); |
---|
| 144 | my $url = sprintf $URLS, $port; |
---|
| 145 | my $response = $ua->request(HTTP::Request->new('GET',$url)); |
---|
| 146 | if ($response->content =~ /^Busy(?:Servers|Workers):\s+(.+)$/im) { |
---|
| 147 | print "busy$port.value $1\n"; |
---|
| 148 | } else { |
---|
| 149 | print "busy$port.value U\n"; |
---|
| 150 | } |
---|
| 151 | if ($response->content =~ /^Idle(?:Servers|Workers):\s+(.+)$/im) { |
---|
| 152 | print "idle$port.value $1\n"; |
---|
| 153 | } else { |
---|
| 154 | print "idle$port.value U\n"; |
---|
| 155 | } |
---|
| 156 | } |
---|
| 157 | |
---|
| 158 | # vim:syntax=perl |
---|