diff options
author | mh <mh@immerda.ch> | 2013-02-28 20:32:41 +0100 |
---|---|---|
committer | mh <mh@immerda.ch> | 2013-02-28 20:32:41 +0100 |
commit | 80c3e890becd31f704f3409094d6da1c137b844e (patch) | |
tree | ac638751e51aad10a9a4eda3d8685c27feb1f3d9 | |
parent | 6c5c5942e3626f2686112b7d760a296dc54fbe48 (diff) |
add munin plugin to this module
-rwxr-xr-x | files/munin/apache_activity | 99 | ||||
-rw-r--r-- | manifests/munin.pp | 8 | ||||
-rw-r--r-- | manifests/status.pp | 6 |
3 files changed, 110 insertions, 3 deletions
diff --git a/files/munin/apache_activity b/files/munin/apache_activity new file mode 100755 index 0000000..65fc072 --- /dev/null +++ b/files/munin/apache_activity @@ -0,0 +1,99 @@ +#!/usr/bin/perl +# +# Parameters supported: +# +# config +# autoconf +# +# Configurable variables +# +# url - Override default status-url +# +# Magic markers: +#%# family=auto +#%# capabilities=autoconf + +my $ret = undef; +if (!eval "require LWP::UserAgent;") { + $ret = "LWP::UserAgent not found"; +} + +my $URL = exists $ENV{'url'} ? $ENV{'url'} : "http://127.0.0.1:%d/server-status?auto"; +my @PORTS = exists $ENV{'ports'} ? split(' ', $ENV{'ports'}) : (80); +my %chars = ( + # '\_' => 'Waiting', + # 'S' => 'Starting up', + 'R' => 'Reading request', + 'W' => 'Sending reply', + 'K' => 'Keepalive', + 'D' => 'DNS lookup', + 'C' => 'Closing', + # 'L' => 'Logging', + # 'G' => 'Gracefully finishing', + # 'I' => 'Idle cleanup', + # '\.' => 'Open slot', + ); + +# "_" Waiting for Connection, "S" Starting up, "R" Reading Request, +# "W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup, +# "C" Closing connection, "L" Logging, "G" Gracefully finishing, +# "I" Idle cleanup of worker, "." Open slot with no current process + +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 $URL, $port; + my $response = $ua->request(HTTP::Request->new('GET',$url)); + push @badports, $port unless $response->is_success and $response->content =~ /Scoreboard/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 Apache activity\n"; + print "graph_args --base 1000 -l 0\n"; + print "graph_category apache\n"; + print "graph_vlabel processes\n"; + foreach my $port (@PORTS) { + while (my ($char, $val) = each (%chars)) { + $char =~ s/\\\./dot/; + $char =~ s/\\\_/underline/; + print "activity_${port}_${char}.label "; + print $val, "\n"; + print "activity_${port}_${char}.type GAUGE\n"; + } + } + exit 0; +} + +foreach my $port (@PORTS) { + my $ua = LWP::UserAgent->new (timeout => 30); + my $url = sprintf $URL, $port; + my $response = $ua->request (HTTP::Request->new('GET',$url)); + if ($response->content =~ /^Scoreboard\:\s?(.*)$/sm) { + my $string = $1; + chomp $string; + my @act = split (//, $string); + foreach my $char (keys (%chars)) { + my $num = scalar (grep (/$char/, @act)); + $char =~ s/\\\./dot/; + $char =~ s/\\\_/underline/; + print "activity_${port}_${char}.value $num\n"; + } + } +} + + diff --git a/manifests/munin.pp b/manifests/munin.pp new file mode 100644 index 0000000..8b5bda1 --- /dev/null +++ b/manifests/munin.pp @@ -0,0 +1,8 @@ +# manage apache monitoring things +class apache::munin { + munin::plugin{ [ 'apache_accesses', 'apache_processes', 'apache_volume' ]: } + munin::plugin::deploy { 'apache_activity': + source => 'apache/munin/apache_activity', + seltype => 'munin_services_plugin_exec_t', + } +} diff --git a/manifests/status.pp b/manifests/status.pp index 735414c..1f7ca89 100644 --- a/manifests/status.pp +++ b/manifests/status.pp @@ -1,12 +1,12 @@ -# manifests/status.pp - +# enable apache status page +# manage munin plugins if requested class apache::status { case $::operatingsystem { centos: { include apache::status::centos } defaults: { include apache::status::base } } if $apache::manage_munin { - include munin::plugins::apache + include apache::munin } } |