summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMicah Anderson <micah@riseup.net>2009-12-22 19:29:23 -0500
committerMicah Anderson <micah@riseup.net>2009-12-22 19:29:23 -0500
commit42c94b4fad526b25852c7bcaf053f441bac38c9e (patch)
tree89a8da279ba7190a350ade72bc52cda90362c4b7
parent577ff440b791ab67de77b20440b5e385fe1c9572 (diff)
parent76352415fec5c2ab6975e3a8843dd4983f7cae6a (diff)
Merge commit '76352415fec5c2ab6975e3a8843dd4983f7cae6a'
Conflicts: README lib/facter/acpi_available.rb lib/facter/interfaces.rb lib/facter/munin_interfaces.rb manifests/client.pp manifests/host.pp manifests/init.pp manifests/plugin.pp plugins/facter/interfaces.rb templates/defaultclient.erb templates/munin-node.conf.Debian.lenny
-rw-r--r--README6
-rw-r--r--files/config/host/logrotate.CentOS35
-rw-r--r--files/config/host/munin.conf.header.CentOS77
-rw-r--r--files/empty/.ignore1
-rw-r--r--files/openbsd/package/munin_openbsd.tar.gzbin0 -> 116174 bytes
-rwxr-xr-xfiles/plugins/apache_activity99
-rwxr-xr-xfiles/plugins/gentoo_lastupdated71
-rwxr-xr-xfiles/plugins/nagios_hosts28
-rwxr-xr-xfiles/plugins/nagios_perf_35
-rwxr-xr-xfiles/plugins/nagios_svc33
-rwxr-xr-xfiles/plugins/selinux_avcstats111
-rwxr-xr-xfiles/plugins/selinuxenforced30
-rwxr-xr-xfiles/plugins/tinydns172
-rwxr-xr-xfiles/plugins/xen52
-rwxr-xr-xfiles/plugins/xen-cpu125
-rw-r--r--files/plugins/xen_mem77
-rwxr-xr-xfiles/plugins/xen_memory63
-rw-r--r--files/plugins/xen_traffic_all78
-rwxr-xr-xfiles/plugins/xen_vbd109
-rw-r--r--files/plugins/xen_vm67
-rwxr-xr-xlib/facter/interfaces.rb (renamed from lib/facter/munin_interfaces.rb)5
-rw-r--r--manifests/client.pp119
-rw-r--r--manifests/client/base.pp23
-rw-r--r--manifests/client/centos.pp3
-rw-r--r--manifests/client/darwin.pp21
-rw-r--r--manifests/client/debian.pp15
-rw-r--r--manifests/client/gentoo.pp8
-rw-r--r--manifests/client/openbsd.pp43
-rw-r--r--manifests/client/package.pp11
-rw-r--r--manifests/host.pp74
-rw-r--r--manifests/host/cgi.pp16
-rw-r--r--manifests/init.pp31
-rw-r--r--manifests/plugin.pp63
-rw-r--r--manifests/plugin/deploy.pp37
-rw-r--r--manifests/plugin/scriptpaths.pp9
-rw-r--r--manifests/plugins/apache.pp6
-rw-r--r--manifests/plugins/base.pp50
-rw-r--r--manifests/plugins/debian.pp4
-rw-r--r--manifests/plugins/djbdns.pp3
-rw-r--r--manifests/plugins/dom0.pp9
-rw-r--r--manifests/plugins/gentoo.pp3
-rw-r--r--manifests/plugins/interfaces.pp22
-rw-r--r--manifests/plugins/linux.pp10
-rw-r--r--manifests/plugins/muninhost.pp4
-rw-r--r--manifests/plugins/nagios.pp20
-rw-r--r--manifests/plugins/openbsd.pp13
-rw-r--r--manifests/plugins/physical.pp5
-rw-r--r--manifests/plugins/selinux.pp4
-rw-r--r--manifests/plugins/vserver.pp7
-rw-r--r--manifests/register.pp17
-rw-r--r--manifests/register_snmp.pp21
-rw-r--r--manifests/remoteplugin.pp18
-rw-r--r--manifests/snmp_collector.pp14
-rw-r--r--templates/defaultclient.erb5
l---------templates/munin-node.conf.CentOS1
l---------templates/munin-node.conf.CentOS.1
l---------templates/munin-node.conf.CentOS.51
l---------templates/munin-node.conf.Debian1
-rw-r--r--templates/munin-node.conf.Debian.etch5
l---------templates/munin-node.conf.Debian.gutsy1
l---------templates/munin-node.conf.Debian.hardy1
-rw-r--r--templates/munin-node.conf.Debian.lenny18
l---------templates/munin-node.conf.Gentoo1
l---------templates/munin-node.conf.Gentoo.1
l---------templates/munin-node.conf.OpenBSD1
-rw-r--r--templates/munin-node.conf.default46
-rw-r--r--templates/snmpclient.erb10
67 files changed, 1888 insertions, 182 deletions
diff --git a/README b/README
index c79cdf0..10e6136 100644
--- a/README
+++ b/README
@@ -1,3 +1,5 @@
+== Munin ==
+
Munin is a performance monitoring system which creates nice RRD graphs and has
a very easy plugin interface. The munin homepage is http://munin.projects.linpro.no/
@@ -86,3 +88,7 @@ To use this module, follow these directions:
$munin_port = 4948
+ i. If you'd like to do cgi graphing, please note the following page: http://munin.projects.linpro.no/wiki/CgiHowto
+ For CentOS this is enabled in the default header config
+
+ j. Per default (on CentOS) munin will send warnings and critical messages to root
diff --git a/files/config/host/logrotate.CentOS b/files/config/host/logrotate.CentOS
new file mode 100644
index 0000000..411de3f
--- /dev/null
+++ b/files/config/host/logrotate.CentOS
@@ -0,0 +1,35 @@
+/var/log/munin/munin-update.log {
+ daily
+ missingok
+ rotate 7
+ compress
+ notifempty
+ create 640 munin adm
+}
+
+/var/log/munin/munin-graph.log {
+ daily
+ missingok
+ rotate 7
+ compress
+ notifempty
+ create 660 munin apache
+}
+
+/var/log/munin/munin-html.log {
+ daily
+ missingok
+ rotate 7
+ compress
+ notifempty
+ create 640 munin adm
+}
+
+/var/log/munin/munin-limits.log {
+ daily
+ missingok
+ rotate 7
+ compress
+ notifempty
+ create 640 munin adm
+}
diff --git a/files/config/host/munin.conf.header.CentOS b/files/config/host/munin.conf.header.CentOS
new file mode 100644
index 0000000..dcadd6b
--- /dev/null
+++ b/files/config/host/munin.conf.header.CentOS
@@ -0,0 +1,77 @@
+# Example configuration file for Munin, generated by 'make build'
+
+# The next three variables specifies where the location of the RRD
+# databases, the HTML output, and the logs, severally. They all
+# must be writable by the user running munin-cron.
+dbdir /var/lib/munin
+htmldir /var/www/html/munin/
+logdir /var/log/munin
+rundir /var/run/munin
+
+# Where to look for the HTML templates
+tmpldir /etc/munin/templates
+
+# Make graphs show values per minute instead of per second
+#graph_period minute
+
+graph_strategy cgi
+
+# Drop somejuser@fnord.comm and anotheruser@blibb.comm an email everytime
+# something changes (OK -> WARNING, CRITICAL -> OK, etc)
+#contact.someuser.command mail -s "Munin notification" somejuser@fnord.comm
+#contact.anotheruser.command mail -s "Munin notification" anotheruser@blibb.comm
+#
+# For those with Nagios, the following might come in handy. In addition,
+# the services must be defined in the Nagios server as well.
+#contact.nagios.command /usr/sbin/send_nsca -H nagios.host.com -c /etc/send_nsca.cfg
+
+contacts me
+contact.me.command mail -s "Munin notification ${var:group} :: ${var:host} :: ${var:graph_title}" root
+contact.me.always_send warning critical
+
+# a simple host tree
+#[localhost]
+# address 127.0.0.1
+# use_node_name yes
+
+#
+# A more complex example of a host tree
+#
+## First our "normal" host.
+# [fii.foo.com]
+# address foo
+#
+## Then our other host...
+# [fay.foo.com]
+# address fay
+#
+## Then we want totals...
+# [foo.com;Totals] #Force it into the "foo.com"-domain...
+# update no # Turn off data-fetching for this "host".
+#
+# # The graph "load1". We want to see the loads of both machines...
+# # "fii=fii.foo.com:load.load" means "label=machine:graph.field"
+# load1.graph_title Loads side by side
+# load1.graph_order fii=fii.foo.com:load.load fay=fay.foo.com:load.load
+#
+# # The graph "load2". Now we want them stacked on top of each other.
+# load2.graph_title Loads on top of each other
+# load2.dummy_field.stack fii=fii.foo.com:load.load fay=fay.foo.com:load.load
+# load2.dummy_field.draw AREA # We want area instead the default LINE2.
+# load2.dummy_field.label dummy # This is needed. Silly, really.
+#
+# # The graph "load3". Now we want them summarised into one field
+# load3.graph_title Loads summarised
+# load3.combined_loads.sum fii.foo.com:load.load fay.foo.com:load.load
+# load3.combined_loads.label Combined loads # Must be set, as this is
+# # not a dummy field!
+#
+## ...and on a side note, I want them listen in another order (default is
+## alphabetically)
+#
+# # Since [foo.com] would be interpreted as a host in the domain "com", we
+# # specify that this is a domain by adding a semicolon.
+# [foo.com;]
+# node_order Totals fii.foo.com fay.foo.com
+#
+
diff --git a/files/empty/.ignore b/files/empty/.ignore
new file mode 100644
index 0000000..91162ec
--- /dev/null
+++ b/files/empty/.ignore
@@ -0,0 +1 @@
+# just used for git
diff --git a/files/openbsd/package/munin_openbsd.tar.gz b/files/openbsd/package/munin_openbsd.tar.gz
new file mode 100644
index 0000000..17ace1d
--- /dev/null
+++ b/files/openbsd/package/munin_openbsd.tar.gz
Binary files differ
diff --git a/files/plugins/apache_activity b/files/plugins/apache_activity
new file mode 100755
index 0000000..65fc072
--- /dev/null
+++ b/files/plugins/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/files/plugins/gentoo_lastupdated b/files/plugins/gentoo_lastupdated
new file mode 100755
index 0000000..42fd362
--- /dev/null
+++ b/files/plugins/gentoo_lastupdated
@@ -0,0 +1,71 @@
+#!/usr/bin/perl
+# -*- perl -*-
+#
+# (C) 2007 immerda project
+#
+# Plugin to monitor the last update of the gentoo
+#
+# Parameters:
+#
+# config
+# autoconf
+#
+# $Id: users.in 1212 2006-10-29 20:11:58Z janl $
+#
+#%# family=auto
+#%# capabilities=autoconf
+
+# update /etc/munin/plugin-conf.d/munin-node with:
+# [gentoo_*]
+# user root
+# env.logfile /var/log/emerge.log
+# env.tail /usr/bin/tail
+# env.grep /bin/grep
+
+my $logfile = $ENV{'logfile'} || '/var/log/emerge.log';
+my $grep = $ENV{'grep'} || `which grep`;
+my $date = $ENV{'date'} || `which date`;
+my $tail = $ENV{'tail'} || `which tail`;
+chomp($grep);
+chomp($date);
+chomp($tail);
+
+if ( defined($ARGV[0])) {
+ if ($ARGV[0] eq 'autoconf') {
+ print "yes\n";
+ exit 0;
+ }
+
+ if ( $ARGV[0] eq "config" ) {
+ print "graph_title Gentoo: Last update X days ago\n";
+ #print "graph_args --base 1000 -l 0\n";
+ print "graph_vlabel days\n";
+ print "graph_scale no\n";
+ print "graph_category system\n";
+ #print "graph_printf %.1lf\n";
+ print "lastupdated.label last updated [d ago]\n";
+ print "lastupdated.type GAUGE\n";
+ #print "tty.draw AREASTACK\n";
+ #print "tty.colour 00FF00\n";
+ exit 0;
+ }
+}
+
+$days = 0;
+$last = 0;
+$now = 0;
+
+$l=`$grep "emerge" $logfile | $grep world | $grep -v fetchonly | tail -1`;
+
+($last,$rest) = split /:/,$l;
+$now = `$date +%s`;
+if($last eq "" or $last == 0 or $now == 0 or $date eq ""){
+ $days = "";
+}else{
+ $days=($now-$last)/60/60/24; # in tagen
+}
+
+print "lastupdated.value $days\n";
+
+# vim:syntax=perl
+
diff --git a/files/plugins/nagios_hosts b/files/plugins/nagios_hosts
new file mode 100755
index 0000000..842ef43
--- /dev/null
+++ b/files/plugins/nagios_hosts
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+if [ "$1" = "config" ]; then
+ echo 'graph_title Nagios host stats'
+ echo 'graph_args --base 1000 -l 0'
+ echo 'graph_vlabel hosts'
+ echo 'graph_category nagios'
+ echo 'graph_info The number of hosts checked by nagios'
+ echo 'up.label up'
+ echo 'up.draw AREA'
+ echo 'up.info number of hosts UP'
+ echo 'down.label down'
+ echo 'down.draw STACK'
+ echo 'down.info number of hosts DOWN'
+ echo 'unr.label unr'
+ echo 'unr.draw STACK'
+ echo 'unr.info number of hosts UNREACHABLE'
+
+ exit 0
+fi
+
+echo -n 'up.value '
+nagiostats --mrtg --data NUMHSTUP
+echo -n 'down.value '
+nagiostats --mrtg --data NUMHSTDOWN
+echo -n 'unr.value '
+nagiostats --mrtg --data NUMHSTUNR
+
diff --git a/files/plugins/nagios_perf_ b/files/plugins/nagios_perf_
new file mode 100755
index 0000000..4d292c7
--- /dev/null
+++ b/files/plugins/nagios_perf_
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+NAME=$(basename $0)
+
+TYPE=${NAME##nagios_perf_}
+
+[ "x$TYPE" = 'xhosts' ] && TYPE_ABBR=HST
+[ "x$TYPE" = 'xsvc' ] && TYPE_ABBR=SVC
+[ -z "$TYPE_ABBR" ] && echo "unknown type $TYPE" >&2 && exit 1
+
+if [ "$1" = "config" ]; then
+ echo "graph_title Nagios $TYPE performance stats"
+ echo "graph_args --base 1000"
+ echo "graph_vlabel seconds"
+ echo "graph_category nagios"
+ echo "graph_info Check performance statistics"
+
+ echo "act_lat_$TYPE_ABBR.label act lat"
+ echo "act_lat_$TYPE_ABBR.type GAUGE"
+ echo "act_lat_$TYPE_ABBR.draw AREA"
+ echo "act_lat_$TYPE_ABBR.cdef act_lat_$TYPE_ABBR,1000,/"
+ echo "act_lat_$TYPE_ABBR.info average latency of active checks over the last 5 minutes"
+
+ echo "act_ext_$TYPE_ABBR.label act ext"
+ echo "act_ext_$TYPE_ABBR.type GAUGE"
+ echo "act_ext_$TYPE_ABBR.draw LINE1"
+ echo "act_ext_$TYPE_ABBR.cdef act_ext_$TYPE_ABBR,1000,/"
+ echo "act_ext_$TYPE_ABBR.info average execution time of active checks over the last 5 minutes"
+
+ exit 0
+fi
+
+echo "act_lat_$TYPE_ABBR.value " $(nagiostats --mrtg --data AVGACT${TYPE_ABBR}LAT)
+echo "act_ext_$TYPE_ABBR.value " $(nagiostats --mrtg --data AVGACT${TYPE_ABBR}EXT)
+
diff --git a/files/plugins/nagios_svc b/files/plugins/nagios_svc
new file mode 100755
index 0000000..86fcabf
--- /dev/null
+++ b/files/plugins/nagios_svc
@@ -0,0 +1,33 @@
+#!/bin/bash
+
+if [ "$1" = "config" ]; then
+ echo 'graph_title Nagios service stats'
+ echo 'graph_args --base 1000 -l 0'
+ echo 'graph_vlabel services'
+ echo 'graph_category nagios'
+ echo 'graph_info The number of services checked by nagios'
+ echo 'ok.label ok'
+ echo 'ok.draw AREA'
+ echo 'ok.info number of services OK'
+ echo 'warn.label warn'
+ echo 'warn.draw STACK'
+ echo 'warn.info number of services WARNING'
+ echo 'crit.label crit'
+ echo 'crit.draw STACK'
+ echo 'crit.info number of services CRITICAL'
+ echo 'unkn.label unkn'
+ echo 'unkn.draw STACK'
+ echo 'unkn.info number of services UNKNOWN'
+
+ exit 0
+fi
+
+echo -n 'ok.value '
+nagiostats --mrtg --data NUMSVCOK
+echo -n 'warn.value '
+nagiostats --mrtg --data NUMSVCWARN
+echo -n 'crit.value '
+nagiostats --mrtg --data NUMSVCCRIT
+echo -n 'unkn.value '
+nagiostats --mrtg --data NUMSVCUNKN
+
diff --git a/files/plugins/selinux_avcstats b/files/plugins/selinux_avcstats
new file mode 100755
index 0000000..b7d2dbb
--- /dev/null
+++ b/files/plugins/selinux_avcstats
@@ -0,0 +1,111 @@
+#!/bin/sh
+#
+# Plugin to monitor SELinux's Access Vector Cache (AVC).
+#
+# config (required)
+# autoconf (optional - used by munin-config)
+#
+# Lars Strand, 2007
+#
+#
+# Magic markers (used by munin-config and some installation scripts (i.e.
+# optional)):
+#%# family=auto
+#%# capabilities=autoconf
+
+
+AVCSTATS="/selinux/avc/cache_stats"
+
+if [ "$1" = "autoconf" ]; then
+ if [ -r $AVCSTATS ]; then
+ echo yes
+ exit 0
+ else
+ echo no
+ exit 1
+ fi
+fi
+
+if [ "$1" = "config" ]; then
+
+ echo "graph_title SELinux's Access Vector Cache"
+ echo 'graph_args -l 0 --base 1000'
+ echo 'graph_vlabel AVC operations'
+ echo 'graph_category selinux'
+
+ echo 'lookups.label lookups'
+ echo 'lookups.type DERIVE'
+ echo 'lookups.min 0'
+ echo 'lookups.max 1000000000'
+ echo 'lookups.draw AREA'
+ echo 'lookups.colour ff0000' # Red
+ echo 'lookups.info Number of access vector lookups. This number is a good indicator of the load beeing placed on the AVC.'
+
+ echo 'hits.label hits'
+ echo 'hits.type DERIVE'
+ echo 'hits.min 0'
+ echo 'hits.max 1000000000'
+ echo 'hits.draw STACK'
+ echo 'hits.colour 0022ff' # Blue
+ echo 'hits.info Number of access vector hits.'
+
+ echo 'misses.label misses'
+ echo 'misses.type DERIVE'
+ echo 'misses.min 0'
+ echo 'misses.max 1000000000'
+ echo 'misses.draw STACK'
+ echo 'misses.colour 990000' # Darker red
+ echo 'misses.info Number of cache misses.'
+
+ echo 'allocations.label allocations'
+ echo 'allocations.type DERIVE'
+ echo 'allocations.min 0'
+ echo 'allocations.max 100000000'
+ echo 'allocations.draw STACK'
+ echo 'allocations.colour ffa500' # Orange
+ echo 'allocations.info Number of AVC entries allocated.'
+
+ echo 'reclaims.label reclaims'
+ echo 'reclaims.type DERIVE'
+ echo 'reclaims.min 0'
+ echo 'reclaims.max 1000000000'
+ echo 'reclaims.draw STACK'
+ echo 'reclaims.colour 00aaaa' # Darker turquoise
+ echo 'reclaims.info Number of current total reclaimed AVC entries. If this keeps changing, you may need to increase the cache size (/selinux/avc/cache_threshold).'
+
+ echo 'frees.label frees'
+ echo 'frees.type DERIVE'
+ echo 'frees.min 0'
+ echo 'frees.max 1000000000'
+ echo 'frees.draw STACK'
+ echo 'frees.colour 00ff7f' # Spring green
+ echo 'frees.info Number of free AVC entries.'
+
+ exit 0
+fi
+
+if [ -r $AVCSTATS ]; then
+ awk ' NR > 1 {
+ lookups += $1;
+ hits += $2;
+ misses += $3;
+ allocations += $4;
+ reclaims += $5;
+ frees += $6;
+ } END {
+ print "lookups.value " lookups;
+ print "hits.value " hits;
+ print "misses.value " misses;
+ print "allocations.value " allocations;
+ print "reclaims.value " reclaims;
+ print "frees.value " frees;
+ } ' < $AVCSTATS
+else
+ echo "lookups.value U"
+ echo "hits.value U"
+ echo "misses.value U"
+ echo "allocations.value U"
+ echo "reclaims.value U"
+ echo "frees.value U"
+fi
+
diff --git a/files/plugins/selinuxenforced b/files/plugins/selinuxenforced
new file mode 100755
index 0000000..e157e3d
--- /dev/null
+++ b/files/plugins/selinuxenforced
@@ -0,0 +1,30 @@
+#!/bin/sh
+# -*- sh -*-
+#
+# Plugin to monitor the status of selinux
+#
+# Contributed by admin(at)immerda.ch
+
+if [ "$1" = "autoconf" ]; then
+ echo yes
+ exit 0
+fi
+
+if [ "$1" = "config" ]; then
+ echo 'graph_title enforced amount'
+ echo 'graph_args --upper-limit 1 -l 0 '
+ echo 'graph_vlabel Is the system selinux enforced?'
+ echo 'graph_scale no\n';
+ echo 'graph_category selinux'
+ echo 'enforced.label IsEnforced'
+ #echo 'enforced.draw AREA'
+ echo 'enforced.draw LINE2'
+
+ exit 0
+fi
+
+if [ -r /selinux/enforce ]; then
+ echo -n "enforced.value " && cat /selinux/enforce
+else
+ echo "enforced.value 0"
+fi
diff --git a/files/plugins/tinydns b/files/plugins/tinydns
new file mode 100755
index 0000000..0fb78ff
--- /dev/null
+++ b/files/plugins/tinydns
@@ -0,0 +1,172 @@
+#!/usr/bin/perl -T
+
+# tinydns-munin-plugin +
+# Copyright (C) 2007 admin at immerda.ch
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# with the HELP of
+# tinygraph -- a RRDtool frontend for tinydns statistics
+# Copyright (C) 2005 Ulrich Zehl <ulrich@topfen.net>
+
+#use strict; # to activate ....
+
+
+#use Time::TAI64 qw(tai2unix);
+
+$A = 0;
+$NS = 0;
+$CNAME = 0;
+$SOA = 0;
+$PTR = 0;
+$HINFO = 0;
+$MX = 0;
+$TXT = 0;
+$RP = 0;
+$SIG = 0;
+$KEY = 0;
+$AAAA = 0;
+$A6 = 0;
+$IXFR = 0;
+$AXFR = 0;
+$ANY = 0;
+
+$logfile = $ENV{logdir} || "/var/tinydns/log/main/current";
+
+if ( $ARGV[0] and $ARGV[0] eq "config" )
+{
+ print "host_name $ENV{FQDN}\n";
+ print "graph_title tinydns\n";
+ print "graph_args --base 1000 -l 0\n";
+ print "graph_category DNS\n";
+ print "a.type COUNTER\n";
+ print "mx.type COUNTER\n";
+
+ print "a.label A\n";
+ print "ns.label NS\n";
+ print "cname.label CNAME\n";
+ print "soa.label SOA\n";
+ print "ptr.label PTR\n";
+ print "mx.label MX\n";
+ print "aaaa.label AAAA\n";
+ print "any.label ANY\n";
+ print "hinfo.label HINFO\n";
+ print "txt.label TXT\n";
+ print "rp.label RP\n";
+ print "sig.label SIG\n";
+ print "key.label KEY\n";
+ print "a6.label A6\n";
+ print "ixfr.label IXFR\n";
+ print "axfr.label AXFR\n";
+
+ print "a.type COUNTER\n";
+ print "ns.type COUNTER\n";
+ print "cname.type COUNTER\n";
+ print "soa.type COUNTER\n";
+ print "ptr.type COUNTER\n";
+ print "mx.type COUNTER\n";
+ print "aaaa.type COUNTER\n";
+ print "any.type COUNTER\n";
+ print "hinfo.type COUNTER\n";
+ print "txt.type COUNTER\n";
+ print "rp.type COUNTER\n";
+ print "sig.type COUNTER\n";
+ print "key.type COUNTER\n";
+ print "a6.type COUNTER\n";
+ print "ixfr.type COUNTER\n";
+ print "axfr.type COUNTER\n";
+ exit 0;
+}
+
+my %querytypes = (
+ '0001' => 'A',
+ '0002' => 'NS',
+ '0005' => 'CNAME',
+ '0006' => 'SOA',
+ '000c' => 'PTR',
+ '000d' => 'HINFO',
+ '000f' => 'MX',
+ '0010' => 'TXT',
+ '0011' => 'RP',
+ '0018' => 'SIG',
+ '0019' => 'KEY',
+ '001c' => 'AAAA',
+ '0026' => 'A6',
+ '00fb' => 'IXFR',
+ '00fc' => 'AXFR',
+ '00ff' => 'ANY',
+);
+
+my %sum = (
+ (map {$_ => 0} values %querytypes),
+);
+
+sub process_line($)
+{
+ my $line = shift;
+ if ($line =~ /^(@[a-f0-9]{24}) ([a-f0-9]{8}):[a-f0-9]{4}:[a-f0-9]{4} ([\+\-IC\/]) ([a-f0-9]{4}) (.+)$/)
+ {
+ #my $time = tai2unix($1);
+ my $ip = join(".", unpack("C*", pack("H8", $2)));
+ my $rtype = $3;
+ my $qtype = $querytypes{$4};
+ #my $qstring = $5; # currently unused
+
+ if ($rtype eq '+')
+ {
+ if ($qtype eq 'A'){$A++;};
+ if ($qtype eq 'NS'){$NS++;};
+ if ($qtype eq 'CNAME'){$CNAME++;};
+ if ($qtype eq 'SOA'){$SOA++;};
+ if ($qtype eq 'PTR'){$PTR++;};
+ if ($qtype eq 'HINFO'){$HINFO++;};
+ if ($qtype eq 'MX'){$MX++;};
+ if ($qtype eq 'TXT'){$TXT++;};
+ if ($qtype eq 'RP'){$RP++;};
+ if ($qtype eq 'SIG'){$SIG++;};
+ if ($qtype eq 'KEY'){$KEY++;};
+ if ($qtype eq 'AAAA'){$AAAA++;};
+ if ($qtype eq 'A6'){$A6++;};
+ if ($qtype eq 'IXFR'){$IXFR++;};
+ if ($qtype eq 'AXFR'){$AXFR++;};
+ if ($qtype eq 'ANY'){$ANY++;};
+ }
+ }
+}
+
+open(LOG, "<$logfile") or die "Error opening $logfile: $!";
+
+while (<LOG>)
+{
+ process_line($_);
+}
+
+print "a.value $A\n";
+print "ns.value $NS\n";
+print "cname.value $CNAME\n";
+print "soa.value $SOA\n";
+print "ptr.value $PTR\n";
+print "mx.value $MX\n";
+print "aaaa.value $AAAA\n";
+print "any.value $ANY\n";
+print "hinfo.value $HINFO\n";
+print "txt.value $TXT\n";
+print "rp.value $RP\n";
+print "sig.value $SIG\n";
+print "key.value $KEY\n";
+print "a6.value $A6\n";
+print "ixfr.value $IXFR\n";
+print "axfr.value $AXFR\n";
+
diff --git a/files/plugins/xen b/files/plugins/xen
new file mode 100755
index 0000000..575cd3b
--- /dev/null
+++ b/files/plugins/xen
@@ -0,0 +1,52 @@
+#!/bin/sh
+#
+# Script to monitor CPU usage of Xen domains
+#
+# Parameters understood:
+#
+# conifg (required)
+# autoconf (optinal - used by munin-config)
+#
+
+MAXDOMAINS=16
+
+if [ "$1" = "autoconf" ]; then
+ if which xm > /dev/null ; then
+ echo yes
+ exit 0
+ fi
+ echo "no (xm not found)"
+ exit 1
+fi
+
+if [ "$1" = "config" ]; then
+
+ echo 'graph_title Xen Domain Utilerisation'
+ echo 'graph_args --base 1000 -l 0'
+ echo 'graph_scale no'
+ echo 'graph_vlabel mS'
+ echo 'graph_category xen'
+ echo 'graph_info This graph shows of many mS wall time where used by a domain'
+ /usr/sbin/xm list | grep -v "^Name .* Console$" | \
+ while read name domid mem cpu state time console; do
+ name=`echo $name | sed -e"s/-/_/"`
+ echo "$name.label $name"
+ echo "$name.type COUNTER"
+# if [ "$name" = "Domain_0" ]; then
+# echo "$name.draw AREA"
+# else
+# echo "$name.draw STACK"
+# fi
+ echo "$name.min 0"
+ echo "$name.info Wall clock time spend for $name"
+ done
+ exit 0
+fi
+
+/usr/sbin/xm list | grep -v "^Name" | grep -v "^Name .* Console$" | \
+while read name domid mem cpu state time console; do
+ name=`echo $name | sed -e"s/-/_/"`
+ time=`echo $time | sed -e "s/\.//"`
+ echo "$name.value $time"
+done
+
diff --git a/files/plugins/xen-cpu b/files/plugins/xen-cpu
new file mode 100755
index 0000000..0ef301e
--- /dev/null
+++ b/files/plugins/xen-cpu
@@ -0,0 +1,125 @@
+#!/usr/bin/perl -wT
+#
+# Script to minitor the cpu usage of Xen domains
+#
+# Author: Adam Crews <doo <at> shroom <dot> com>
+#
+# License: GPL
+# Based on the origional xen script from Matthias Pfafferodt, syntron at web.de
+#
+# Note: Your munin config must run this as root.
+#
+# Parameters
+# config (required)
+# autoconf (optional - used by munin-config)
+#
+#%# family=auto
+#%# capabilities=autoconf
+
+# Define where to find xm tools
+my $XM = '/usr/sbin/xm';
+my $XMTOP = '/usr/sbin/xentop';
+
+##############
+# You should not need to edit anything below here
+#
+
+use strict;
+
+$ENV{PATH} = '/bin:/usr/bin:/usr/sbin';
+
+my $arg; undef($arg);
+if (defined($ARGV[0])) {
+ $arg = 'config' if ($ARGV[0] eq 'config');
+ $arg = 'autoconf' if ($ARGV[0] eq 'autoconf');
+
+ if ( "$arg" eq 'autoconf') {
+ if ( -e $XM && -e $XMTOP ) {
+ print "yes\n";
+ exit 0;
+ } else {
+ print "no ($XM and/or $XMTOP not found\n";
+ exit 1;
+ }
+ }
+
+ if ( "$arg" eq 'config') {
+ my %cnf; undef(%cnf);
+ %cnf = (
+ 'graph_title' => 'Xen Domain CPU Usage',
+ 'graph_args' => '--base 1000 -l 0 --upper-limit 100 --rigid',
+ 'graph_vlabel' => 'Percent (%)',
+ 'graph_category' => 'xen',
+ 'graph_info' => 'Display the % of CPU Usage for each domain',
+ );
+
+ my @domains = `$XM list`;
+ shift(@domains); # we dont need the header line
+ my $cnt = "0";
+ foreach my $domain ( @domains ) {
+ my ($dom,undef) = split(/\s/, $domain, 2);
+ # we need to change - and . to _ or things get weird with the graphs
+ # some decent quoting would probably fix this, but this works for now
+ $dom =~ s/[-.]/_/g;
+
+ $cnf{ "$dom" . '.label' } = "$dom";
+ $cnf{ "$dom" . '.draw' } = 'STACK';
+ $cnf{ "$dom" . '.min' } = '0';
+ $cnf{ "$dom" . '.max' } = '100';
+ $cnf{ "$dom" . '.info' } = '% CPU used for ' . "$dom";
+
+ if ( "$cnt" == "0") { $cnf{$dom.'.draw'} = 'AREA'; }
+ $cnt++;
+ }
+
+ foreach my $key (sort(keys(%cnf))) {
+ print "$key $cnf{$key}\n";
+ }
+ exit 0;
+ }
+}
+
+# Nothing was passed as an argument, so let's just return the proper values
+
+my @chunks; undef(@chunks);
+
+{
+ # run the xentop command a few times because the first reading is not always accurate
+ local $/ = undef;
+ @chunks = split(/^xentop - .*$/m, `$XMTOP -b -i2 -d2`);
+}
+
+# Take only the last run of xentop
+my @stats = split (/\n/,pop(@chunks));
+
+# remove the first 4 items that are junk that we don't need.
+shift(@stats);
+shift(@stats);
+shift(@stats);
+shift(@stats);
+
+my %vals; undef(%vals);
+
+foreach my $domain (@stats) {
+ # trim the leading whitespace
+ $domain =~ s/^\s+//;
+ my @v_tmp = split(/\s+/, $domain);
+
+ # we need to change - and . to _ or things get weird with the graphs
+ # some decent quoting would probably fix this, but this works for now
+ $v_tmp[0] =~ s/[-.]/_/g;
+
+ $vals{$v_tmp[0]}{'cpu_percent'} = $v_tmp[3];
+ $vals{$v_tmp[0]}{'vcpu'} = $v_tmp[8];
+ if ( $vals{$v_tmp[0]}{'vcpu'} =~ m/n\/a/ ) {
+ my $cpu = `grep -c "processor" < /proc/cpuinfo`;
+ if ( $cpu =~ m/^(\d+)$/ ) {
+ $vals{$v_tmp[0]}{'vcpu'} = $1;
+ }
+ }
+}
+
+foreach my $key (sort(keys(%vals))) {
+ print "$key.value " . ($vals{$key}{'cpu_percent'}/$vals{'Domain_0'}{'vcpu'}), "\n";
+}
+
diff --git a/files/plugins/xen_mem b/files/plugins/xen_mem
new file mode 100644
index 0000000..5e985a5
--- /dev/null
+++ b/files/plugins/xen_mem
@@ -0,0 +1,77 @@
+#!/bin/sh
+#
+# Copyright (C) 2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2 dated June,
+# 1991.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+#
+# Script to monitor affected memory by domain
+#
+# $Log$
+# Revision 1.0 2006/09/08 19:20:19 rodo
+# Created by Rodolphe Quiedeville
+#
+# Need to be run as root, add the following lines ...
+#
+# [xen*]
+# user root
+#
+# to /etc/munin/plugin-conf.d/munin-node
+#
+#
+# Parameters understood:
+#
+# config (required)
+# autoconf (optional - used by munin-config)
+#
+#
+# Magic markers (optional - used by munin-config and installation
+# scripts):
+#
+#%# family=auto
+#%# capabilities=autoconf
+
+XM="/usr/sbin/xm"
+
+if [ "$1" = "autoconf" ]; then
+ echo yes
+ exit 0
+fi
+
+if [ "$1" = "config" ]; then
+
+ echo 'graph_title Xen affected memory'
+ echo 'graph_args --base 1024 --upper-limit 1024 -l 0'
+ echo 'graph_vlabel Memory'
+ echo 'graph_category xen'
+ echo 'graph_total Total'
+ echo 'graph_info This graph shows affected memory for each domain.'
+ echo 'Domain_0.label Domain-0'
+ echo 'Domain_0.draw AREA'
+$XM list | grep -v 'Mem' | grep -v 'Domain-0' | while read i; do
+ name=`echo $i | awk '{ print $1 }' | sed 's/[\/.-]/_/g'`
+ echo -n "$name.label "
+ echo $i | awk '{ print $1 }'
+ echo "$name.draw STACK"
+done
+
+ exit 0
+fi
+
+$XM list | grep -v 'Mem' | while read i; do
+ name=`echo $i | awk '{ print $1 }' | sed 's/[\/.-]/_/g'`
+ echo -n "$name.value "
+ echo $i | awk '{ print $3 * 1024 * 1024 }'
+done
diff --git a/files/plugins/xen_memory b/files/plugins/xen_memory
new file mode 100755
index 0000000..90bc705
--- /dev/null
+++ b/files/plugins/xen_memory
@@ -0,0 +1,63 @@
+#!/bin/sh
+#
+# Script to monitor memory status of the xen host
+#
+# Parameters understood:
+#
+# config (required)
+# autoconf (optional - used by munin-config)
+#
+
+MAXDOMAINS=16
+
+if [ "$1" = "autoconf" ]; then
+ if which xm > /dev/null ; then
+ echo yes
+ exit 0
+ fi
+ echo "no (xm not found)"
+ exit 1
+fi
+
+if [ "$1" = "config" ]; then
+
+ echo 'graph_title Xen Memory'
+ echo 'graph_args --base 1000 -l 0'
+ echo 'graph_scale no'
+ echo 'graph_vlabel MB'
+ echo 'graph_category xen'
+ echo 'graph_info This graph shows of many mS wall time where used by a domain'
+ # xm info | while read name bla value; do echo "$name $value"; done
+ /usr/sbin/xm info | while read name bla value; do
+ #total_memory 2047
+ #free_memory 1476
+ name=`echo $name | sed -e"s/-/_/"`
+
+ if [ "$name" = "total_memory" ]; then
+ echo "$name.label $name"
+ echo "$name.type GAUGE"
+ echo "$name.min 0"
+ echo "$name.info total memory"
+ fi
+ if [ "$name" = "free_memory" ]; then
+ echo "$name.label $name"
+ echo "$name.type GAUGE"
+ echo "$name.draw AREA"
+# echo "$name.draw STACK"
+ echo "$name.min 0"
+ echo "$name.info free memory"
+ fi
+ done
+ exit 0
+fi
+
+/usr/sbin/xm info | while read name bla value; do
+ name=`echo $name | sed -e"s/-/_/"`
+ if [ "$name" = "total_memory" ]; then
+ echo "$name.value $value"
+ fi
+ if [ "$name" = "free_memory" ]; then
+ echo "$name.value $value"
+ fi
+done
+
diff --git a/files/plugins/xen_traffic_all b/files/plugins/xen_traffic_all
new file mode 100644
index 0000000..76d4ded
--- /dev/null
+++ b/files/plugins/xen_traffic_all
@@ -0,0 +1,78 @@
+#!/bin/sh
+# Author: mario manno <projects@manno.name>
+# Description: measure traffic for all xen hosts
+#
+# 16.07.2008: improved the Plugin by Puzzle ITC to
+# enable the traffic monitoring for domains
+# with more than 1 one interface
+# If there is more than one device, the domainname
+# will get the vif name appended.
+#
+#%# family=auto
+#%# capabilities=autoconf
+
+if [ "$1" = "autoconf" ]; then
+ if which xm > /dev/null ; then
+ echo yes
+ else
+ echo "no (xm not found)"
+ exit 1
+ fi
+ if [ -r /proc/net/dev ]; then
+ echo yes
+ else
+ echo "no (/proc/net/dev not found)"
+ exit 1
+ fi
+ exit 0
+fi
+
+if [ "$1" = "config" ]; then
+ echo 'graph_title Xen Traffic'
+ echo 'graph_vlabel bits received (-) / sent (+) per ${graph_period}'
+ echo 'graph_args --base 1024 -l 0'
+ echo 'graph_category xen'
+ DOMAINS=$(xm list | awk '{print $1}' | egrep -v "^(Name|Domain-0)")
+ for dom in $DOMAINS; do
+ devs=$( xm network-list $dom |\
+ egrep "^[0-9]+" | sed 's@^.*vif/\([0-9]*\)/\([0-9]*\).*$@vif\1.\2@')
+ real_name=$( echo $dom | sed -e's/-/_/g' )
+ name=$real_name
+ for dev in $devs; do
+ if [ ${#devs} -gt 1 ]; then
+ name=$real_name"_"`echo $dev | sed 's/\./\_/'`
+ fi
+
+ echo $name'Down.label received'
+ echo $name'Down.type COUNTER'
+ echo $name'Down.graph no'
+ echo "${name}Down.cdef ${name}Down,8,*"
+ echo "${name}Up.label ${name}"
+ echo $name'Up.type COUNTER'
+ echo "${name}Up.negative ${name}Down"
+ echo "${name}Up.cdef ${name}Up,8,*"
+ done
+ done
+ exit 0
+fi
+
+DOMAINS=$(xm list | awk '{print $1}' | egrep -v "^(Name|Domain-0)")
+for dom in $DOMAINS; do
+ devs=$( xm network-list $dom |\
+ egrep "^[0-9]+" | sed 's@^.*vif/\([0-9]*\)/\([0-9]*\).*$@vif\1.\2@')
+ real_name=$( echo $dom | sed -e's/-/_/g' )
+ name=$real_name
+ for dev in $devs; do
+ if [ ${#devs} -gt 1 ]; then
+ name=$real_name"_"`echo $dev | sed 's/\./\_/'`
+ fi
+ awk -v name="$name" -v interface="$dev" \
+ 'BEGIN { gsub(/\./, "\\.", interface) } \
+ $1 ~ "^" interface ":" {
+ split($0, a, /: */); $0 = a[2]; \
+ print name"Down.value " $1 "\n"name"Up.value " $9 \
+ }' \
+ /proc/net/dev
+ done
+done
+
diff --git a/files/plugins/xen_vbd b/files/plugins/xen_vbd
new file mode 100755
index 0000000..238bf08
--- /dev/null
+++ b/files/plugins/xen_vbd
@@ -0,0 +1,109 @@
+#!/usr/bin/perl
+#
+# 2007-06-01 Zoltan HERPAI <wigyori@uid0.hu>
+#
+# Credits goes for:
+# Adam Crews for his xen_cpu plugin
+# Mario Manno for his xen_traffic_all plugin
+#
+# Script to monitor the I/O usage of Xen domains
+# Version 0.1
+#
+#%# family=auto
+#%# capabilities=autoconf
+
+# Location of xm tools
+$XM = '/usr/sbin/xm';
+$XMTOP = '/usr/sbin/xentop';
+
+# ah, parameters coming in
+if ( defined($ARGV[0]))
+{
+ if ($ARGV[0] eq 'config') { $arg = 'config'; }
+ if ($ARGV[0] eq 'autoconf') { $arg = 'autoconf'; }
+
+ if ( $arg eq 'autoconf' )
+ {
+ if ( -e $XM && -e $XMTOP )
+ {
+ print "yes\n";
+ exit 0;
+ }
+ else
+ {
+ print "no ($XM and/or $XMTOP not found\n";
+ exit 0;
+ }
+ }
+
+ if ( $arg eq 'config' )
+ {
+ %cnf = (
+ 'graph_title' => 'Xen Domain I/O usage',
+ 'graph_args' => '--base 1024 -l 0',
+ 'graph_vlabel' => 'read (-), write (+)',
+ 'graph_category' => 'xen',
+ 'graph_info' => 'Display the I/O operations for each domain',
+ );
+
+ @domains = `$XM list`;
+ shift(@domains); # we don't need the header line
+
+ foreach $domain ( @domains )
+ {
+ ($dom, undef) = split(/\s/, $domain);
+ $dom =~ s/[-.]/_/g;
+
+ $cnf{ $dom.'RD' . '.label' } = 'read';
+ $cnf{ $dom.'RD' . '.type' } = 'COUNTER';
+ $cnf{ $dom.'RD' . '.graph' } = 'no';
+ $cnf{ $dom.'RD' . '.cdef' } = $dom.'RD,8,*';
+
+ $cnf{ $dom.'WR' . '.label' } = $dom;
+ $cnf{ $dom.'WR' . '.type' } = 'COUNTER';
+ $cnf{ $dom.'WR' . '.negative' } = $dom.'RD';
+ $cnf{ $dom.'WR' . '.cdef' } = $dom.'WR,8,*';
+
+ if ( "$cnt" == "0" )
+ {
+ $cnf { "$dom" . '.draw' } = 'AREA';
+ }
+ $cnt++;
+ }
+
+ foreach $key ( sort(keys(%cnf)) )
+ {
+ print "$key $cnf{$key}\n";
+ }
+ exit 0;
+
+ }
+}
+
+
+# No args, get rolling
+# NAME STATE CPU(sec) CPU(%) MEM(k) MEM(%) MAXMEM(k) MAXMEM(%) VCPUS NETS NETTX(k) NETRX(k) VBDS VBD_OO VBD_RD VBD_WR SSID
+$tmpfile = "/tmp/munin_xen_vbd_tmp";
+
+system("$XMTOP -b -i1 > $tmpfile");
+open(I,"$tmpfile");
+while(<I>){
+ chomp;
+ s/^\s*//g;
+ @tmp=split(/\s+/, $_);
+ next if $tmp[0] eq "NAME";
+
+ $domname = $tmp[0];
+ $domname =~ s/[-.]/_/g;
+ $vbdrd = $tmp[14];
+ $vbdwr = $tmp[15];
+
+ $vals{$domname."RD"}{'value'} = $vbdrd;
+ $vals{$domname."WR"}{'value'} = $vbdwr;
+}
+
+foreach $key ( sort(keys(%vals)) )
+{
+ print "$key.value " . ($vals{$key}{'value'}) . "\n";
+}
+
diff --git a/files/plugins/xen_vm b/files/plugins/xen_vm
new file mode 100644
index 0000000..a0dc0b7
--- /dev/null
+++ b/files/plugins/xen_vm
@@ -0,0 +1,67 @@
+#!/bin/sh
+#
+# Copyright (C) 2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2 dated June,
+# 1991.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+#
+# Monitor number of vm running on a xen dom0.
+#
+# $Log$
+# Revision 1.0 2006/09/08 19:20:19 rodo
+# Created by Rodolphe Quiedeville
+#
+# Need to be run as root, add the following lines ...
+#
+# [xen*]
+# user root
+#
+# to /etc/munin/plugin-conf.d/munin-node
+#
+#
+# Parameters understood:
+#
+# config (required)
+# autoconf (optional - used by munin-config)
+#
+#
+# Magic markers (optional - used by munin-config and installation
+# scripts):
+#
+#%# family=auto
+#%# capabilities=autoconf
+
+XM="/usr/sbin/xm"
+
+if [ "$1" = "autoconf" ]; then
+ echo yes
+ exit 0
+fi
+
+if [ "$1" = "config" ]; then
+
+ echo 'graph_title Xen Virtual Machines'
+ echo 'graph_args --base 1000 -l 0'
+ echo 'graph_vlabel vm'
+ echo 'graph_category xen'
+ echo 'graph_info This graph shows how many virtual machines runs on dom0.'
+ echo 'domains.label vm'
+ exit 0
+fi
+
+domains=`$XM list | wc -l`
+
+echo -n "domains.value "
+echo $(($domains-2))
diff --git a/lib/facter/munin_interfaces.rb b/lib/facter/interfaces.rb
index f7a3575..a498d64 100755
--- a/lib/facter/munin_interfaces.rb
+++ b/lib/facter/interfaces.rb
@@ -1,14 +1,11 @@
# return the set of active interfaces as an array
-Facter.add("munin_interfaces") do
+Facter.add("interfaces") do
setcode do
`ip -o link show`.split(/\n/).collect do |line|
value = nil
matches = line.match(/^\d*: ([^:]*): <(.*,)?UP(,.*)?>/)
if !matches.nil?
value = matches[1]
- # remove superfluous "underlying interface" specification
- # for VLAN interfaces
- value.gsub!(/@.*/, '')
end
value
end.compact.sort.join(" ")
diff --git a/manifests/client.pp b/manifests/client.pp
index b89877f..d033c28 100644
--- a/manifests/client.pp
+++ b/manifests/client.pp
@@ -1,6 +1,7 @@
# client.pp - configure a munin node
# Copyright (C) 2007 David Schmitt <david@schmitt.edv-bus.at>
# See LICENSE for the full license granted to you.
+# Adapted and improved by admin(at)immerda.ch
class munin::client {
@@ -11,111 +12,15 @@ class munin::client {
default => $munin_host
}
- case $operatingsystem {
- darwin: { include munin::client::darwin }
- debian: {
- include munin::client::debian
- include munin::plugins::debian
- }
- ubuntu: {
- info ( "Trying to configure Ubuntu's munin with Debian class" )
- include munin::client::debian
- include munin::plugins::debian
- }
- default: { fail ("Don't know how to handle munin on $operatingsystem") }
- }
-
- case $kernel {
- linux: {
- case $vserver {
- guest: { include munin::plugins::vserver }
- default: {
- include munin::plugins::linux
- case $virtual {
- xen0: { include munin::plugins::xen }
- }
- }
- }
- }
- default: {
- err( "Don't know which munin plugins to install for $kernel" )
- }
- }
-
-}
-
-define munin::register()
-{
- $munin_port_real = $munin_port ? { '' => 4949, default => $munin_port }
- $munin_host_real = $munin_host ? {
- '' => $fqdn,
- 'fqdn' => $fqdn,
- default => $munin_host
- }
-
- @@file { "${NODESDIR}/${name}_${munin_port_real}":
- ensure => present,
- content => template("munin/defaultclient.erb"),
- tag => 'munin',
- }
-}
-
-define munin::register_snmp()
-{
- @@file { "munin_snmp_${name}": path => "${NODESDIR}/${name}",
- ensure => present,
- content => template("munin/snmpclient.erb"),
- tag => 'munin',
- }
+ case $operatingsystem {
+ openbsd: { include munin::client::openbsd }
+ darwin: { include munin::client::darwin }
+ debian,ubuntu: { include munin::client::debian }
+ gentoo: { include munin::client::gentoo }
+ centos: { include munin::client::package }
+ default: { include munin::client::base }
+ }
+ if $use_shorewall {
+ include shorewall::rules::munin
+ }
}
-
-class munin::client::darwin
-{
- file { "/usr/share/snmp/snmpd.conf":
- mode => 744,
- content => template("munin/darwin_snmpd.conf.erb"),
- group => staff,
- owner => root,
- }
- delete_matching_line{"startsnmpdno":
- file => "/etc/hostconfig",
- pattern => "SNMPSERVER=-NO-",
- }
- line { "startsnmpdyes":
- file => "/etc/hostconfig",
- line => "SNMPSERVER=-YES-",
- notify => Exec["/sbin/SystemStarter start SNMP"],
- }
- exec{"/sbin/SystemStarter start SNMP":
- noop => false,
- }
- munin::register_snmp { $fqdn: }
-}
-
-class munin::client::debian
-{
-
- package { "munin-node": ensure => installed }
-
- file {
- "/etc/munin/":
- ensure => directory,
- mode => 0755, owner => root, group => root;
- "/etc/munin/munin-node.conf":
- content => template("munin/munin-node.conf.${operatingsystem}.${lsbdistcodename}"),
- mode => 0644, owner => root, group => root,
- # this has to be installed before the package, so the postinst can
- # boot the munin-node without failure!
- before => Package["munin-node"],
- notify => Service["munin-node"],
- }
-
- service { "munin-node":
- ensure => running,
- # sarge's munin-node init script has no status
- hasstatus => $lsbdistcodename ? { sarge => false, default => true }
- }
-
- munin::register { $fqdn: }
-}
-
diff --git a/manifests/client/base.pp b/manifests/client/base.pp
new file mode 100644
index 0000000..b3fcc4a
--- /dev/null
+++ b/manifests/client/base.pp
@@ -0,0 +1,23 @@
+class munin::client::base {
+ service { 'munin-node':
+ ensure => running,
+ enable => true,
+ hasstatus => true,
+ hasrestart => true,
+ }
+ file {'/etc/munin':
+ ensure => directory,
+ mode => 0755, owner => root, group => 0;
+ }
+ $real_munin_allow = $munin_allow ? {
+ '' => '127.0.0.1',
+ default => $munin_allow
+ }
+ file {'/etc/munin/munin-node.conf':
+ content => template("munin/munin-node.conf.$operatingsystem"),
+ notify => Service['munin-node'],
+ mode => 0644, owner => root, group => 0,
+ }
+ munin::register { $fqdn: }
+ include munin::plugins::base
+}
diff --git a/manifests/client/centos.pp b/manifests/client/centos.pp
new file mode 100644
index 0000000..46a7e3f
--- /dev/null
+++ b/manifests/client/centos.pp
@@ -0,0 +1,3 @@
+class munin::client::centos inherits munin::client::package {
+ include munin::plugins::centos
+}
diff --git a/manifests/client/darwin.pp b/manifests/client/darwin.pp
new file mode 100644
index 0000000..f6fc95f
--- /dev/null
+++ b/manifests/client/darwin.pp
@@ -0,0 +1,21 @@
+class munin::client::darwin {
+ file { "/usr/share/snmp/snmpd.conf":
+ mode => 744,
+ content => template("munin/darwin_snmpd.conf.erb"),
+ group => 0,
+ owner => root,
+ }
+ delete_matching_line{"startsnmpdno":
+ file => "/etc/hostconfig",
+ pattern => "SNMPSERVER=-NO-",
+ }
+ line { "startsnmpdyes":
+ file => "/etc/hostconfig",
+ line => "SNMPSERVER=-YES-",
+ notify => Exec["/sbin/SystemStarter start SNMP"],
+ }
+ exec{"/sbin/SystemStarter start SNMP":
+ noop => false,
+ }
+ munin::register_snmp { $fqdn: }
+}
diff --git a/manifests/client/debian.pp b/manifests/client/debian.pp
new file mode 100644
index 0000000..a6d677e
--- /dev/null
+++ b/manifests/client/debian.pp
@@ -0,0 +1,15 @@
+class munin::client::debian inherits munin::client::package {
+ # the plugin will need that
+ package { "iproute": ensure => installed }
+
+ Service["munin-node"]{
+ # sarge's munin-node init script has no status
+ hasstatus => $lsbdistcodename ? { sarge => false, default => true }
+ }
+ File["/etc/munin/munin-node.conf"]{
+ content => template("munin/munin-node.conf.$operatingsystem.$lsbdistcodename"),
+ }
+ # workaround bug in munin_node_configure
+ plugin { "postfix_mailvolume": ensure => absent }
+ include munin::plugins::debian
+}
diff --git a/manifests/client/gentoo.pp b/manifests/client/gentoo.pp
new file mode 100644
index 0000000..53d472b
--- /dev/null
+++ b/manifests/client/gentoo.pp
@@ -0,0 +1,8 @@
+class munin::client::gentoo inherits munin::client::package {
+ Package['munin-node'] {
+ name => 'munin',
+ category => 'net-analyzer',
+ }
+
+ include munin::plugins::gentoo
+}
diff --git a/manifests/client/openbsd.pp b/manifests/client/openbsd.pp
new file mode 100644
index 0000000..90bf7df
--- /dev/null
+++ b/manifests/client/openbsd.pp
@@ -0,0 +1,43 @@
+# currently we install munin on openbsd by targz
+# :(
+class munin::client::openbsd inherits munin::client::base {
+ file{'/usr/src/munin_openbsd.tar.gz':
+ source => "puppet://$server/modules/munin/openbsd/package/munin_openbsd.tar.gz",
+ owner => root, group => 0, mode => 0600;
+ }
+ package{ [ 'p5-Compress-Zlib', 'p5-Crypt-SSLeay', 'p5-HTML-Parser',
+ 'p5-HTML-Tagset', 'p5-HTTP-GHTTP', 'p5-LWP-UserAgent-Determined',
+ 'p5-Net-SSLeay', 'p5-Net-Server', 'p5-URI', 'p5-libwww', 'pcre', 'curl' ]:
+ ensure => installed,
+ before => File['/var/run/munin'],
+ }
+ exec{'extract_openbsd':
+ command => 'cd /;tar xzf /usr/src/munin_openbsd.tar.gz',
+ unless => 'test -d /opt/munin',
+ require => File['/usr/src/munin_openbsd.tar.gz'],
+ }
+ file{[ '/var/run/munin', '/var/log/munin' ]:
+ ensure => directory,
+ require => Exec['extract_openbsd'],
+ owner => root, group => 0, mode => 0755;
+ }
+ openbsd::rc_local{'munin-node':
+ binary => '/opt/munin/sbin/munin-node',
+ require => File['/var/run/munin'],
+ }
+ Service['munin-node']{
+ restart => '/bin/kill -HUP `/bin/cat /var/run/munin/munin-node.pid`',
+ stop => '/bin/kill `/bin/cat /var/run/munin/munin-node.pid`',
+ start => '/opt/munin/sbin/munin-node',
+ hasstatus => false,
+ hasrestart => false,
+ require => [ File['/var/run/munin'], File['/var/log/munin'] ],
+ }
+
+ cron{'clean_munin_logfile':
+ command => 'rm /var/log/munin/munin-node.log; kill -HUP `cat /var/run/munin/munin-node.pid`',
+ minute => 0,
+ hour => 2,
+ weekday => 0,
+ }
+}
diff --git a/manifests/client/package.pp b/manifests/client/package.pp
new file mode 100644
index 0000000..84fcf5c
--- /dev/null
+++ b/manifests/client/package.pp
@@ -0,0 +1,11 @@
+class munin::client::package inherits munin::client::base {
+ package { 'munin-node': ensure => installed }
+ Service['munin-node']{
+ require => Package[munin-node],
+ }
+ File['/etc/munin/munin-node.conf']{
+ # this has to be installed before the package, so the postinst can
+ # boot the munin-node without failure!
+ before => Package['munin-node'],
+ }
+}
diff --git a/manifests/host.pp b/manifests/host.pp
index 804bd02..9fd637d 100644
--- a/manifests/host.pp
+++ b/manifests/host.pp
@@ -2,55 +2,45 @@
# Copyright (C) 2007 David Schmitt <david@schmitt.edv-bus.at>
# See LICENSE for the full license granted to you.
-class munin::host
+class munin::host inherits munin
{
- package { [ "munin", "nmap"]: ensure => installed, }
+ package {"munin": ensure => installed, }
File <<| tag == 'munin' |>>
+ file{'/etc/munin/munin.conf.header':
+ source => [ "puppet://$server/modules/site-munin/config/host/${fqdn}/munin.conf.header",
+ "puppet://$server/modules/site-munin/config/host/munin.conf.header.$operatingsystem",
+ "puppet://$server/modules/site-munin/config/host/munin.conf.header",
+ "puppet://$server/modules/munin/config/host/munin.conf.header.$operatingsystem",
+ "puppet://$server/modules/munin/config/host/munin.conf.header" ],
+ notify => Exec['concat_/etc/munin/munin.conf'],
+ owner => root, group => 0, mode => 0644;
+ }
+
concatenated_file { "/etc/munin/munin.conf":
- dir => $NODESDIR,
+ dir => '/var/lib/puppet/modules/munin/nodes',
header => "/etc/munin/munin.conf.header",
}
-
- file {
- "/etc/munin/munin.conf.header":
- source => "/etc/munin/munin.conf",
- replace => no, # only initialise
- mode => 0644, owner => root, group => 0,
- before => File["/etc/munin/munin.conf"];
- }
- file { ["/var/log/munin-update.log", "/var/log/munin-limits.log",
- "/var/log/munin-graph.log", "/var/log/munin-html.log"]:
- ensure => present,
- mode => 640, owner => munin, group => root;
+ file { ["/var/log/munin-update.log", "/var/log/munin-limits.log",
+ "/var/log/munin-graph.log", "/var/log/munin-html.log"]:
+ ensure => present,
+ mode => 640, owner => munin, group => 0;
+ }
+
+ include munin::plugins::muninhost
+
+ case $operatingsystem {
+ centos: { include munin::host::cgi }
+ }
+
+ # from time to time we cleanup hanging munin-runs
+ file{'/etc/cron.d/munin_kill':
+ content => "4,34 * * * * root if $(ps ax | grep -v grep | grep -q munin-run); then killall munin-run; fi\n",
+ owner => root, group => 0, mode => 0644;
+ }
+ if $use_shorewall {
+ include shorewall::rules::out::munin
}
-
-}
-
-class munin::snmp_collector
-{
-
- file {
- "${module_dir_path}/munin/create_snmp_links":
- source => "puppet://$server/modules/munin/create_snmp_links.sh",
- mode => 755, owner => root, group => root;
- }
-
- exec { "create_snmp_links":
- command => "${module_dir_path}/munin/create_snmp_links $NODESDIR",
- require => File["snmp_links"],
- timeout => "2048",
- schedule => daily
- }
-}
-
-define munin::apache_site()
-{
- apache::site {
- $name:
- ensure => present,
- content => template("munin/site.conf")
- }
}
diff --git a/manifests/host/cgi.pp b/manifests/host/cgi.pp
new file mode 100644
index 0000000..aeb0cdf
--- /dev/null
+++ b/manifests/host/cgi.pp
@@ -0,0 +1,16 @@
+class munin::host::cgi {
+ exec{'set_modes_for_cgi':
+ command => 'chgrp apache /var/log/munin /var/log/munin/munin-graph.log && chmod g+w /var/log/munin /var/log/munin/munin-graph.log && find /var/www/html/munin/* -maxdepth 1 -type d -exec chgrp -R apache {} \; && find /var/www/html/munin/* -maxdepth 1 -type d -exec chmod -R g+w {} \;',
+ refreshonly => true,
+ subscribe => File['/etc/munin/munin.conf.header'],
+ }
+
+ file{'/etc/logrotate.d/munin':
+ source => [ "puppet://$server/modules/site-munin/config/host/${fqdn}/logrotate",
+ "puppet://$server/modules/site-munin/config/host/logrotate.$operatingsystem",
+ "puppet://$server/modules/site-munin/config/host/logrotate",
+ "puppet://$server/modules/munin/config/host/logrotate.$operatingsystem",
+ "puppet://$server/modules/munin/config/host/logrotate" ],
+ owner => root, group => 0, mode => 0644;
+ }
+}
diff --git a/manifests/init.pp b/manifests/init.pp
index 4a049a4..578c4bb 100644
--- a/manifests/init.pp
+++ b/manifests/init.pp
@@ -1,17 +1,20 @@
+#
+# munin module
# munin.pp - everything a sitewide munin installation needs
# Copyright (C) 2007 David Schmitt <david@schmitt.edv-bus.at>
-# See LICENSE for the full license granted to you.
-
-# the port is a parameter so vservers can share IP addresses and still be happy
-
-# Define where the individual nodes' configs are stored
-$NODESDIR="${module_dir_path}/munin/nodes"
-
-module_dir { [ "munin", "munin/nodes", "munin/plugins" ]: }
-
-import "host.pp"
-import "client.pp"
-import "plugin.pp"
-
-include assert_lsbdistcodename
+#
+# Copyright 2008, Puzzle ITC GmbH
+# Marcel Härry haerry+puppet(at)puzzle.ch
+# Simon Josi josi+puppet(at)puzzle.ch
+#
+# This program is free software; you can redistribute
+# it and/or modify it under the terms of the GNU
+# General Public License version 3 as published by
+# the Free Software Foundation.
+#
+# the port is a parameter so vservers can share
+# IP addresses and still be happy
+class munin {
+ module_dir { [ "munin", "munin/nodes", "munin/plugins" ]: }
+}
diff --git a/manifests/plugin.pp b/manifests/plugin.pp
index c9bb6e5..75c4423 100644
--- a/manifests/plugin.pp
+++ b/manifests/plugin.pp
@@ -1,12 +1,16 @@
# plugin.pp - configure a specific munin plugin
# Copyright (C) 2007 David Schmitt <david@schmitt.edv-bus.at>
# See LICENSE for the full license granted to you.
+# adapted and improved by admin(at)immerda.ch
+
+### defines
define munin::plugin (
- $ensure = "present",
- $script_path = "/usr/share/munin/plugins",
- $config = '')
+ $ensure = "present",
+ $script_path_in = '',
+ $config = '')
{
+<<<<<<< HEAD
debug ( "munin_plugin: name=$name, ensure=$ensure, script_path=$script_path" )
$plugin = "/etc/munin/plugins/$name"
$plugin_conf = "/etc/munin/plugin-conf.d/$name.conf"
@@ -126,4 +130,57 @@ class munin::plugins::vserver inherits munin::plugins::base {
ensure => present;
}
+=======
+ include munin::plugin::scriptpaths
+ $real_script_path = $script_path_in ? { '' => $munin::plugin::scriptpaths::script_path, default => $script_path_in }
+
+ $plugin_src = $ensure ? { "present" => $name, default => $ensure }
+ $plugin = "/etc/munin/plugins/$name"
+ $plugin_conf = "/etc/munin/plugin-conf.d/$name.conf"
+ case $ensure {
+ "absent": {
+ file { $plugin: ensure => absent, }
+ }
+ default: {
+ case $kernel {
+ openbsd: { $basic_require = File['/var/run/munin'] }
+ default: { $basic_require = Package['munin-node'] }
+ }
+ if $require {
+ $real_require = [ $require, $basic_require ]
+ } else {
+ $real_require = $basic_require
+ }
+ file { $plugin:
+ ensure => "${real_script_path}/${plugin_src}",
+ require => $real_require,
+ notify => Service['munin-node'];
+ }
+
+ }
+ }
+ case $config {
+ '': {
+ file { $plugin_conf: ensure => absent }
+ }
+ default: {
+ case $ensure {
+ absent: {
+ file { $plugin_conf: ensure => absent }
+ }
+ default: {
+ file { $plugin_conf:
+ content => "[${name}]\n$config\n",
+ mode => 0644, owner => root, group => 0,
+ }
+ if $require {
+ File[$plugin_conf]{
+ require +> $require,
+ }
+ }
+ }
+ }
+ }
+ }
+>>>>>>> 76352415fec5c2ab6975e3a8843dd4983f7cae6a
}
diff --git a/manifests/plugin/deploy.pp b/manifests/plugin/deploy.pp
new file mode 100644
index 0000000..846a873
--- /dev/null
+++ b/manifests/plugin/deploy.pp
@@ -0,0 +1,37 @@
+define munin::plugin::deploy($source = '', $ensure = 'present', $config = '') {
+ $plugin_src = $ensure ? {
+ 'present' => $name,
+ 'absent' => $name,
+ default => $ensure
+ }
+ $real_source = $source ? {
+ '' => "munin/plugins/$plugin_src",
+ default => $source
+ }
+ include munin::plugin::scriptpaths
+ file { "munin_plugin_${name}":
+ path => "$munin::plugin::scriptpaths::script_path/${name}",
+ source => "puppet://$server/modules/$real_source",
+ mode => 0755, owner => root, group => 0;
+ }
+
+ case $kernel {
+ openbsd: { $basic_require = File['/var/run/munin'] }
+ default: { $basic_require = Package['munin-node'] }
+ }
+ if $require {
+ File["munin_plugin_${name}"]{
+ require => [ $basic_require, $require ],
+ }
+ } else {
+ File["munin_plugin_${name}"]{
+ require => $basic_require,
+ }
+ }
+ # register the plugin
+ if $require {
+ munin::plugin{$name: ensure => $ensure, config => $config, require => $require }
+ } else {
+ munin::plugin{$name: ensure => $ensure, config => $config }
+ }
+}
diff --git a/manifests/plugin/scriptpaths.pp b/manifests/plugin/scriptpaths.pp
new file mode 100644
index 0000000..ebaa6fa
--- /dev/null
+++ b/manifests/plugin/scriptpaths.pp
@@ -0,0 +1,9 @@
+class munin::plugin::scriptpaths {
+ case $operatingsystem {
+ gentoo: { $script_path = "/usr/libexec/munin/plugins" }
+ debian: { $script_path = "/usr/share/munin/plugins" }
+ centos: { $script_path = "/usr/share/munin/plugins" }
+ openbsd: { $script_path = "/opt/munin/lib/plugins/" }
+ default: { $script_path = "/usr/share/munin/plugins" }
+ }
+}
diff --git a/manifests/plugins/apache.pp b/manifests/plugins/apache.pp
new file mode 100644
index 0000000..ee90de8
--- /dev/null
+++ b/manifests/plugins/apache.pp
@@ -0,0 +1,6 @@
+class munin::plugins::apache inherits munin::plugins::base {
+ munin::plugin{ "apache_accesses": }
+ munin::plugin{ "apache_processes": }
+ munin::plugin{ "apache_volume": }
+ munin::plugin::deploy { "apache_activity": }
+}
diff --git a/manifests/plugins/base.pp b/manifests/plugins/base.pp
new file mode 100644
index 0000000..4658acc
--- /dev/null
+++ b/manifests/plugins/base.pp
@@ -0,0 +1,50 @@
+class munin::plugins::base {
+ file {
+ [ '/etc/munin/plugins', '/etc/munin/plugin-conf.d' ]:
+ source => "puppet://$server/modules/common/empty",
+ ignore => [ '\.ignore', 'snmp_*' ],
+ ensure => directory, checksum => mtime,
+ recurse => true, purge => true, force => true,
+ mode => 0755, owner => root, group => 0,
+ notify => Service['munin-node'];
+ '/etc/munin/plugin-conf.d/munin-node':
+ ensure => present,
+ mode => 0644, owner => root, group => 0,
+ notify => Service['munin-node'],
+ }
+
+ munin::plugin {
+ [ df, cpu, interrupts, load, memory, netstat, open_files,
+ processes, swap, uptime, users, vmstat
+ ]:
+ ensure => present,
+ }
+ include munin::plugins::interfaces
+
+ case $kernel {
+ openbsd: {
+ File['/etc/munin/plugin-conf.d/munin-node']{
+ before => File['/var/run/munin'],
+ }
+ }
+ default: {
+ File['/etc/munin/plugin-conf.d/munin-node']{
+ before => Package['munin-node'],
+ }
+ }
+ }
+ case $kernel {
+ linux: {
+ case $vserver {
+ guest: { include munin::plugins::vserver }
+ default: {
+ include munin::plugins::linux
+ }
+ }
+ }
+ }
+ case $virtual {
+ physical: { include munin::plugins::physical }
+ xen0: { include munin::plugins::dom0 }
+ }
+}
diff --git a/manifests/plugins/debian.pp b/manifests/plugins/debian.pp
new file mode 100644
index 0000000..f239989
--- /dev/null
+++ b/manifests/plugins/debian.pp
@@ -0,0 +1,4 @@
+class munin::plugins::debian inherits munin::plugins::base {
+ munin::plugin { apt_all: ensure => present; }
+}
+
diff --git a/manifests/plugins/djbdns.pp b/manifests/plugins/djbdns.pp
new file mode 100644
index 0000000..37d8ed6
--- /dev/null
+++ b/manifests/plugins/djbdns.pp
@@ -0,0 +1,3 @@
+class munin::plugins::djbdns inherits munin::plugins::base {
+ munin::plugin::deploy { "tinydns": }
+}
diff --git a/manifests/plugins/dom0.pp b/manifests/plugins/dom0.pp
new file mode 100644
index 0000000..8d919c3
--- /dev/null
+++ b/manifests/plugins/dom0.pp
@@ -0,0 +1,9 @@
+class munin::plugins::dom0 inherits munin::plugins::physical {
+ munin::plugin::deploy { "xen": config => "user root"}
+ munin::plugin::deploy { "xen-cpu": config => "user root"}
+ munin::plugin::deploy { "xen_memory": config => "user root"}
+ munin::plugin::deploy { "xen_mem": config => "user root"}
+ munin::plugin::deploy { "xen_vm": config => "user root"}
+ munin::plugin::deploy { "xen_vbd": config => "user root"}
+ munin::plugin::deploy { "xen_traffic_all": config => "user root"}
+}
diff --git a/manifests/plugins/gentoo.pp b/manifests/plugins/gentoo.pp
new file mode 100644
index 0000000..81d0e6b
--- /dev/null
+++ b/manifests/plugins/gentoo.pp
@@ -0,0 +1,3 @@
+class munin::plugins::gentoo inherits munin::plugins::base {
+ munin::plugin::deploy { "gentoo_lastupdated": config => "user portage\nenv.logfile /var/log/emerge.log\nenv.tail /usr/bin/tail\nenv.grep /bin/grep"}
+}
diff --git a/manifests/plugins/interfaces.pp b/manifests/plugins/interfaces.pp
new file mode 100644
index 0000000..99b85ba
--- /dev/null
+++ b/manifests/plugins/interfaces.pp
@@ -0,0 +1,22 @@
+# handle if_ and if_err_ plugins
+class munin::plugins::interfaces inherits munin::plugins::base {
+
+ $ifs = gsub(split($interfaces, " |,"), "(.+)", "if_\\1")
+ munin::plugin {
+ $ifs: ensure => "if_";
+ }
+ case $operatingsystem {
+ openbsd: {
+ $if_errs = gsub(split($interfaces, " |,"), "(.+)", "if_errcoll_\\1")
+ munin::plugin{
+ $if_errs: ensure => "if_errcoll_";
+ }
+ }
+ default: {
+ $if_errs = gsub(split($interfaces, " |,"), "(.+)", "if_err_\\1")
+ munin::plugin{
+ $if_errs: ensure => "if_err_";
+ }
+ }
+ }
+}
diff --git a/manifests/plugins/linux.pp b/manifests/plugins/linux.pp
new file mode 100644
index 0000000..c7beb59
--- /dev/null
+++ b/manifests/plugins/linux.pp
@@ -0,0 +1,10 @@
+class munin::plugins::linux inherits munin::plugins::base {
+ munin::plugin {
+ [ df_abs, forks, df_inode, irqstats, entropy, open_inodes ]:
+ ensure => present;
+ acpi:
+ ensure => $acpi_available;
+ }
+
+ include munin::plugins::interfaces
+}
diff --git a/manifests/plugins/muninhost.pp b/manifests/plugins/muninhost.pp
new file mode 100644
index 0000000..2af4897
--- /dev/null
+++ b/manifests/plugins/muninhost.pp
@@ -0,0 +1,4 @@
+class munin::plugins::muninhost inherits munin::plugins::base {
+ munin::plugin { munin_update: }
+ munin::plugin { munin_graph: }
+}
diff --git a/manifests/plugins/nagios.pp b/manifests/plugins/nagios.pp
new file mode 100644
index 0000000..c07e99d
--- /dev/null
+++ b/manifests/plugins/nagios.pp
@@ -0,0 +1,20 @@
+class munin::plugins::nagios inherits munin::plugins::base {
+
+ munin::plugin::deploy {
+ nagios_hosts: config => 'user root';
+ nagios_svc: config => 'user root';
+ nagios_perf_hosts: ensure => nagios_perf_, config => 'user root';
+ nagios_perf_svc: ensure => nagios_perf_, config => 'user root';
+ }
+
+ exec { 'munin_nagios2stats_link':
+ command => 'ln -s /usr/sbin/nagios2stats /usr/local/sbin/nagiostats',
+ onlyif => ["test ! -e /usr/local/sbin/nagiostats", "test -e /usr/sbin/nagios2stats"],
+ }
+
+ exec { 'munin_nagios3stats_link':
+ command => 'ln -s /usr/sbin/nagios3stats /usr/local/sbin/nagiostats',
+ onlyif => ["test ! -e /usr/local/sbin/nagiostats", "test -e /usr/sbin/nagios3stats"],
+ }
+
+}
diff --git a/manifests/plugins/openbsd.pp b/manifests/plugins/openbsd.pp
new file mode 100644
index 0000000..67cf32d
--- /dev/null
+++ b/manifests/plugins/openbsd.pp
@@ -0,0 +1,13 @@
+class munin::plugins::openbsd inherits munin::plugins::base {
+ munin::plugin {
+ [ df, cpu, interrupts, load, memory, netstat, open_files,
+ processes, swap, users, vmstat
+ ]:
+ ensure => present,
+ }
+ munin::plugin {
+ [ memory_pools, memory_types ]:
+ ensure => present,
+ }
+
+}
diff --git a/manifests/plugins/physical.pp b/manifests/plugins/physical.pp
new file mode 100644
index 0000000..6706711
--- /dev/null
+++ b/manifests/plugins/physical.pp
@@ -0,0 +1,5 @@
+class munin::plugins::physical inherits munin::plugins::base {
+ case $kernel {
+ linux: { munin::plugin { iostat: } }
+ }
+}
diff --git a/manifests/plugins/selinux.pp b/manifests/plugins/selinux.pp
new file mode 100644
index 0000000..6affc86
--- /dev/null
+++ b/manifests/plugins/selinux.pp
@@ -0,0 +1,4 @@
+class munin::plugins::selinux inherits munin::plugins::base {
+ munin::plugin::deploy { "selinuxenforced": }
+ munin::plugin::deploy { "selinux_avcstats": }
+}
diff --git a/manifests/plugins/vserver.pp b/manifests/plugins/vserver.pp
new file mode 100644
index 0000000..bce28a1
--- /dev/null
+++ b/manifests/plugins/vserver.pp
@@ -0,0 +1,7 @@
+class munin::plugins::vserver inherits munin::plugins::base {
+ munin::plugin {
+ [ netstat, processes ]:
+ ensure => present;
+ }
+}
+
diff --git a/manifests/register.pp b/manifests/register.pp
new file mode 100644
index 0000000..e1271e1
--- /dev/null
+++ b/manifests/register.pp
@@ -0,0 +1,17 @@
+define munin::register()
+{
+ $munin_port_real = $munin_port ? { '' => 4949, default => $munin_port }
+ $munin_host_real = $munin_host ? {
+ '' => $fqdn,
+ 'fqdn' => $fqdn,
+ default => $munin_host
+ }
+
+ @@file { "/var/lib/puppet/modules/munin/nodes/${name}_${munin_port_real}":
+ ensure => present,
+ content => template("munin/defaultclient.erb"),
+ tag => 'munin',
+ }
+}
+
+
diff --git a/manifests/register_snmp.pp b/manifests/register_snmp.pp
new file mode 100644
index 0000000..e74ba44
--- /dev/null
+++ b/manifests/register_snmp.pp
@@ -0,0 +1,21 @@
+# snmp_testplugin: the plugin we use to test if it's set
+define munin::register_snmp(
+ $snmpd_testplugin = 'load'
+)
+{
+ $munin_port_real = $munin_port ? { '' => 4949, default => $munin_port }
+ $munin_host_real = $munin_host ? {
+ '' => '*',
+ 'fqdn' => '*',
+ default => $munin_host
+ }
+ exec{"register_snmp_munin_for_${name}":
+ command => "munin-node-configure-snmp ${name} | sh",
+ unless => "test -e /etc/munin/plugins/snmp_${name}_${snmpd_testplugin}",
+ }
+ @@file { "munin_snmp_${name}": path => "/var/lib/puppet/modules/munin/nodes/${name}",
+ ensure => present,
+ content => template("munin/snmpclient.erb"),
+ tag => 'munin',
+ }
+}
diff --git a/manifests/remoteplugin.pp b/manifests/remoteplugin.pp
new file mode 100644
index 0000000..4bca235
--- /dev/null
+++ b/manifests/remoteplugin.pp
@@ -0,0 +1,18 @@
+define munin::remoteplugin($ensure = "present", $source, $config = '') {
+ case $ensure {
+ "absent": { munin::plugin{ $name: ensure => absent } }
+ default: {
+ file {
+ "/var/lib/puppet/modules/munin/plugins/${name}":
+ source => $source,
+ mode => 0755, owner => root, group => 0;
+ }
+ munin::plugin { $name:
+ ensure => $ensure,
+ config => $config,
+ script_path_in => "/var/lib/puppet/modules/munin/plugins",
+ }
+ }
+ }
+}
+
diff --git a/manifests/snmp_collector.pp b/manifests/snmp_collector.pp
new file mode 100644
index 0000000..4f72b95
--- /dev/null
+++ b/manifests/snmp_collector.pp
@@ -0,0 +1,14 @@
+class munin::snmp_collector{
+ file {
+ "/var/lib/puppet/modules/munin/create_snmp_links":
+ source => "puppet://$server/modules/munin/create_snmp_links.sh",
+ mode => 755, owner => root, group => 0;
+ }
+
+ exec { "create_snmp_links":
+ command => "/var/lib/puppet/modules/munin/create_snmp_links /var/lib/puppet/modules/munin/nodes",
+ require => File["snmp_links"],
+ timeout => "2048",
+ schedule => daily
+ }
+}
diff --git a/templates/defaultclient.erb b/templates/defaultclient.erb
index ddce1bb..7d754a7 100644
--- a/templates/defaultclient.erb
+++ b/templates/defaultclient.erb
@@ -11,3 +11,8 @@
address <%= munin_host_real %>
port <%= munin_port_real %>
use_node_name yes
+<<<<<<< HEAD
+=======
+ load.load.warning 5
+ load.load.critical 10
+>>>>>>> 76352415fec5c2ab6975e3a8843dd4983f7cae6a
diff --git a/templates/munin-node.conf.CentOS b/templates/munin-node.conf.CentOS
new file mode 120000
index 0000000..082b30c
--- /dev/null
+++ b/templates/munin-node.conf.CentOS
@@ -0,0 +1 @@
+munin-node.conf.default \ No newline at end of file
diff --git a/templates/munin-node.conf.CentOS. b/templates/munin-node.conf.CentOS.
new file mode 120000
index 0000000..082b30c
--- /dev/null
+++ b/templates/munin-node.conf.CentOS.
@@ -0,0 +1 @@
+munin-node.conf.default \ No newline at end of file
diff --git a/templates/munin-node.conf.CentOS.5 b/templates/munin-node.conf.CentOS.5
new file mode 120000
index 0000000..082b30c
--- /dev/null
+++ b/templates/munin-node.conf.CentOS.5
@@ -0,0 +1 @@
+munin-node.conf.default \ No newline at end of file
diff --git a/templates/munin-node.conf.Debian b/templates/munin-node.conf.Debian
new file mode 120000
index 0000000..e0646b9
--- /dev/null
+++ b/templates/munin-node.conf.Debian
@@ -0,0 +1 @@
+munin-node.conf.Debian.etch \ No newline at end of file
diff --git a/templates/munin-node.conf.Debian.etch b/templates/munin-node.conf.Debian.etch
index 0673937..56da89d 100644
--- a/templates/munin-node.conf.Debian.etch
+++ b/templates/munin-node.conf.Debian.etch
@@ -33,4 +33,7 @@ host_name <%= fqdn %>
# regular expression, due to brain damage in Net::Server, which
# doesn't understand CIDR-style network notation. You may repeat
# the allow line as many times as you'd like
-allow <%= munin_allow %>
+<% real_munin_allow.split(':').each do |val| -%>
+allow <%= '^'+val.gsub(/\./, '\.')+'$' %>
+<% end -%>
+
diff --git a/templates/munin-node.conf.Debian.gutsy b/templates/munin-node.conf.Debian.gutsy
new file mode 120000
index 0000000..e0646b9
--- /dev/null
+++ b/templates/munin-node.conf.Debian.gutsy
@@ -0,0 +1 @@
+munin-node.conf.Debian.etch \ No newline at end of file
diff --git a/templates/munin-node.conf.Debian.hardy b/templates/munin-node.conf.Debian.hardy
new file mode 120000
index 0000000..e0646b9
--- /dev/null
+++ b/templates/munin-node.conf.Debian.hardy
@@ -0,0 +1 @@
+munin-node.conf.Debian.etch \ No newline at end of file
diff --git a/templates/munin-node.conf.Debian.lenny b/templates/munin-node.conf.Debian.lenny
index 07f4980..56da89d 100644
--- a/templates/munin-node.conf.Debian.lenny
+++ b/templates/munin-node.conf.Debian.lenny
@@ -29,15 +29,11 @@ ignore_file \.rpm(save|new)$
#host_name localhost.localdomain
host_name <%= fqdn %>
-# A list of addresses that are allowed to connect.
-<%
-if ! munin_cidr_allow.is_a?(Array) then
- allows = [ munin_cidr_allow ]
-else
- allows = munin_cidr_allow
-end
-
-allows.each do |cidr|
--%>
-cidr_allow <%= cidr %>
+# A list of addresses that are allowed to connect. This must be a
+# regular expression, due to brain damage in Net::Server, which
+# doesn't understand CIDR-style network notation. You may repeat
+# the allow line as many times as you'd like
+<% real_munin_allow.split(':').each do |val| -%>
+allow <%= '^'+val.gsub(/\./, '\.')+'$' %>
<% end -%>
+
diff --git a/templates/munin-node.conf.Gentoo b/templates/munin-node.conf.Gentoo
new file mode 120000
index 0000000..082b30c
--- /dev/null
+++ b/templates/munin-node.conf.Gentoo
@@ -0,0 +1 @@
+munin-node.conf.default \ No newline at end of file
diff --git a/templates/munin-node.conf.Gentoo. b/templates/munin-node.conf.Gentoo.
new file mode 120000
index 0000000..fd16e50
--- /dev/null
+++ b/templates/munin-node.conf.Gentoo.
@@ -0,0 +1 @@
+munin-node.conf.Gentoo \ No newline at end of file
diff --git a/templates/munin-node.conf.OpenBSD b/templates/munin-node.conf.OpenBSD
new file mode 120000
index 0000000..082b30c
--- /dev/null
+++ b/templates/munin-node.conf.OpenBSD
@@ -0,0 +1 @@
+munin-node.conf.default \ No newline at end of file
diff --git a/templates/munin-node.conf.default b/templates/munin-node.conf.default
new file mode 100644
index 0000000..befcae4
--- /dev/null
+++ b/templates/munin-node.conf.default
@@ -0,0 +1,46 @@
+##########
+########## Managed by puppet
+##########
+
+log_level 4
+log_file /var/log/munin/munin-node.log
+pid_file /var/run/munin/munin-node.pid
+
+background 1
+setseid 1
+
+user root
+group 0
+setsid yes
+
+# Regexps for files to ignore
+
+ignore_file ~$
+ignore_file \.bak$
+ignore_file %$
+ignore_file \.dpkg-(tmp|new|old|dist)$
+ignore_file \.rpm(save|new)$
+ignore_file \.pod$
+
+# Set this if the client doesn't report the correct hostname when
+# telnetting to localhost, port 4949
+#
+#host_name localhost.localdomain
+host_name <%= fqdn %>
+
+# A list of addresses that are allowed to connect. This must be a
+# regular expression, due to brain damage in Net::Server, which
+# doesn't understand CIDR-style network notation. You may repeat
+# the allow line as many times as you'd like
+
+<% real_munin_allow.split(':').each do |val| -%>
+allow <%= '^'+val.gsub(/\./, '\.')+'$' %>
+<% end -%>
+
+# Which address to bind to;
+host <%= munin_host_real %>
+# host 127.0.0.1
+
+# And which port
+port <%= munin_port_real %>
+
diff --git a/templates/snmpclient.erb b/templates/snmpclient.erb
new file mode 100644
index 0000000..44ecc6d
--- /dev/null
+++ b/templates/snmpclient.erb
@@ -0,0 +1,10 @@
+<%
+ # Downcase all information
+ dom = domain.downcase
+ host = hostname.downcase
+ fhost = name.downcase
+%>
+### This syntax can be extended, it might get better ...
+#<%= dom %> snmp -> <%= fhost %>
+[<%= fhost %>] # snmp box
+ address <%= munin_host_real %>