merged with puzzle upstream
authormh <mh@d66ca3ae-40d7-4aa7-90d4-87d79ca94279>
Thu, 24 Apr 2008 13:26:14 +0000 (13:26 +0000)
committermh <mh@d66ca3ae-40d7-4aa7-90d4-87d79ca94279>
Thu, 24 Apr 2008 13:26:14 +0000 (13:26 +0000)
git-svn-id: https://svn/ipuppet/trunk/modules/munin@1254 d66ca3ae-40d7-4aa7-90d4-87d79ca94279

files/plugins/nagios_hosts [new file with mode: 0755]
files/plugins/nagios_perf_ [new file with mode: 0755]
files/plugins/nagios_svc [new file with mode: 0755]
files/plugins/xen_traffic_all [new file with mode: 0644]
manifests/client.pp
manifests/host.pp
manifests/init.pp
manifests/plugin.pp
templates/munin-node.conf.Ubuntu.feisty [moved from templates/munin-node.conf.Debian.gutsy with 100% similarity]
templates/munin-node.conf.Ubuntu.gutsy [new symlink]
templates/munin-node.conf.Ubuntu.hardy [new symlink]

diff --git a/files/plugins/nagios_hosts b/files/plugins/nagios_hosts
new file mode 100755 (executable)
index 0000000..04fe8ed
--- /dev/null
@@ -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 '
+nagios2stats --mrtg --data NUMHSTUP
+echo -n 'down.value '
+nagios2stats --mrtg --data NUMHSTDOWN
+echo -n 'unr.value '
+nagios2stats --mrtg --data NUMHSTUNR
+
diff --git a/files/plugins/nagios_perf_ b/files/plugins/nagios_perf_
new file mode 100755 (executable)
index 0000000..f819def
--- /dev/null
@@ -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 " $(nagios2stats --mrtg --data AVGACT${TYPE_ABBR}LAT)
+echo "act_ext_$TYPE_ABBR.value " $(nagios2stats --mrtg --data AVGACT${TYPE_ABBR}EXT)
+
diff --git a/files/plugins/nagios_svc b/files/plugins/nagios_svc
new file mode 100755 (executable)
index 0000000..3938999
--- /dev/null
@@ -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 '
+nagios2stats --mrtg --data NUMSVCOK
+echo -n 'warn.value '
+nagios2stats --mrtg --data NUMSVCWARN
+echo -n 'crit.value '
+nagios2stats --mrtg --data NUMSVCCRIT
+echo -n 'unkn.value '
+nagios2stats --mrtg --data NUMSVCUNKN
+
diff --git a/files/plugins/xen_traffic_all b/files/plugins/xen_traffic_all
new file mode 100644 (file)
index 0000000..1216a7d
--- /dev/null
@@ -0,0 +1,63 @@
+#!/bin/sh
+# Author: mario manno <projects@manno.name>
+# Description: measure traffic for all xen hosts
+#
+#%# 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
+        name=$( echo $dom | sed -e's/-/_/g' )
+        #echo $name"UP.label $name"
+        #echo $name"DOWN.label $name"
+        
+        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
+    exit 0
+fi
+
+DOMAINS=$(xm list | awk '{print $1}' | egrep -v "^(Name|Domain-0)")
+for dom in $DOMAINS; do
+    dev=$( xm network-list $dom |\
+        egrep "^[0-9]+" | sed 's@^.*vif/\([0-9]*\)/\([0-9]*\).*$@vif\1.\2@')
+    name=$( echo $dom | sed -e's/-/_/g' ) 
+    #awk -v name="$name" -v interface="$dev" -F'[: \t]+' \
+    #'{ sub(/^ */,""); if ($1 == interface) \
+    #print name"DOWN.value "$2"\n"name"UP.value "$10; }' /proc/net/dev
+    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
+
index 8181845..69e9f2e 100644 (file)
@@ -11,47 +11,14 @@ 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
-               }
-               gentoo: {
-                       include munin::client::gentoo
-                       include munin::plugins::gentoo
-               }
-               centos: {
-                       include munin::client::centos
-                       include munin::plugins::centos
-               }
-               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
-                               }
-                       }
-               }
-               default: {
-                       err( "Don't know which munin plugins to install for $kernel" )
-               }
-       }
-       case $virtual {
-        physical: { include munin::plugins::physical }
-           xen0: { include munin::plugins::dom0 }
-        xenu: { include munin::plugins::domU }
+    case $operatingsystem {
+        darwin: { include munin::client::darwin }
+        debian: { include munin::client::debian }
+        ubuntu: { include munin::client::ubuntu }
+        centos: { include munin::client::centos }
+        gentoo: { include munin::client::gentoo }
+        default: { include munin::client::base }
     }
-
 }
 
 define munin::register()
@@ -66,7 +33,7 @@ define munin::register()
        @@file { "${NODESDIR}/${name}_${munin_port_real}":
                ensure => present,
                content => template("munin/defaultclient.erb"),
-        tag => 'munin',
+               tag => 'munin',
        }
 }
 
@@ -75,12 +42,34 @@ define munin::register_snmp()
        @@file { "munin_snmp_${name}": path => "${NODESDIR}/${name}",
                ensure => present,
                content => template("munin/snmpclient.erb"),
-        tag => 'munin',
+               tag => 'munin',
        }
 }
 
-class munin::client::darwin 
-{
+class munin::client::base {
+       package { "munin-node": ensure => installed }
+       service { "munin-node":
+               ensure => running, 
+        hasstatus => true,
+        hasrestart => true,
+        require => Package[munin-node],
+       }
+       file {
+               "/etc/munin/":
+                       ensure => directory,
+                       mode => 0755, owner => root, group => 0;
+               "/etc/munin/munin-node.conf":
+                       content => template("munin/munin-node.conf.$operatingsystem.$lsbdistrelease"),
+                       mode => 0644, owner => root, group => 0,
+                       # this has to be installed before the package, so the postinst can
+                       # boot the munin-node without failure!
+                       before => Package["munin-node"],
+       }
+       munin::register { $fqdn: }
+       include munin::plugins::base
+}
+
+class munin::client::darwin {
        file { "/usr/share/snmp/snmpd.conf": 
                mode => 744,
                content => template("munin/darwin_snmpd.conf.erb"),
@@ -102,95 +91,30 @@ class munin::client::darwin
        munin::register_snmp { $fqdn: }
 }
 
-class munin::client::debian 
-{
-       package { "munin-node": ensure => installed }
+class munin::client::debian inherits munin::client::base {
     # the plugin will need that
        package { "iproute": ensure => installed }
 
-       file {
-               "/etc/munin/":
-                       ensure => directory,
-                       mode => 0755, owner => root, group => 0;
-               "/etc/munin/munin-node.conf":
-                       content => template("munin/munin-node.conf.${operatingsystem}.${lsbdistcodename}"),
-                       mode => 0644, owner => root, group => 0,
-                       # 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, 
+       Service["munin-node"]{
                # sarge's munin-node init script has no status
                hasstatus => $lsbdistcodename ? { sarge => false, default => true }
        }
-
-       munin::register { $fqdn: }
-
        # workaround bug in munin_node_configure
-       munin::plugin { "postfix_mailvolume": ensure => absent }
+       plugin { "postfix_mailvolume": ensure => absent }
+       include munin::plugins::debian
 }
 
-class munin::client::gentoo 
-{
-    $acpi_available = "absent"
-    package { 'munin-node':
-                name => 'munin',
-                ensure => present,
-                category => $operatingsystem ? {
-                        gentoo => 'net-analyzer',
-                        default => '',
-                },
-    }
-
-       file {
-               "/etc/munin/":
-                       ensure => directory,
-                       mode => 0755, owner => root, group => 0;
-               "/etc/munin/munin-node.conf":
-                       content => template("munin/munin-node.conf.Gentoo."),
-                       mode => 0644, owner => root, group => 0,
-                       # 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"],
-       }
-
-       service { "munin-node":
-               ensure => running, 
-       }
-
-       munin::register { $fqdn: }
-}
+class munin::client::ubuntu inherits munin::client::debian {}
 
-class munin::client::centos 
-{
-    package { 'munin-node':
-                ensure => present,
+class munin::client::gentoo inherits munin::client::base {
+    Package['munin-node'] {
+        name => 'munin',
+        category => 'net-analyzer',
     }
 
-
-       file {
-               "/etc/munin/":
-                       ensure => directory,
-                       mode => 0755, owner => root, group =>0;
-               "/etc/munin/munin-node.conf":
-                       content => template("munin/munin-node.conf.CentOS."),
-                       mode => 0644, owner => root, group => 0,
-                       # 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, 
-       }
-
-       munin::register { $fqdn: }
-
+       include munin::plugins::gentoo
 }
 
-
+class munin::client::centos inherits munin::client::base {
+       include munin::plugins::centos
+}
index d49c5a2..8f79020 100644 (file)
@@ -4,7 +4,7 @@
 
 class munin::host
 {
-       package { [ "munin", "nmap"]: ensure => installed, }
+       package {"munin": ensure => installed, }
 
        File <<| tag == 'munin' |>>
 
@@ -12,7 +12,7 @@ class munin::host
                dir => $NODESDIR,
                header => "/etc/munin/munin.conf.header",
        }
-
+       
     file { ["/var/log/munin-update.log", "/var/log/munin-limits.log", 
                "/var/log/munin-graph.log", "/var/log/munin-html.log"]:
         ensure => present,
index 9c4b1de..6b6cd08 100644 (file)
@@ -1,7 +1,8 @@
 # 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.
-
+# adapted by Puzzle ITC - haerry+puppet(at)puzzle.ch
+#
 # the port is a parameter so vservers can share IP addresses and still be happy
 
 # Define where the individual nodes' configs are stored
@@ -16,4 +17,3 @@ import "plugin.pp"
 case $operatingsystem {
     debian,ubuntu: { include assert_lsbdistcodename }
 }
-
index ac25abf..6a92c56 100644 (file)
@@ -93,8 +93,9 @@ define munin::remoteplugin($ensure = "present", $source, $config = '') {
        }
 }
 define munin::plugin::deploy ($source = '', $ensure = 'present', $config = '') {
+    $plugin_src = $ensure ? { "present" => $name, default => $ensure }
     $real_source = $source ? {
-        ''  =>  "munin/plugins/$name",
+        ''  =>  "munin/plugins/$plugin_src",
         default => $source
     }
     include munin::plugin::scriptpaths
@@ -142,6 +143,21 @@ class munin::plugins::base {
                    }
                }
        }
+    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 }
+        xenu: { include munin::plugins::domU }
+    }
 }
 
 # handle if_ and if_err_ plugins
@@ -195,6 +211,7 @@ class munin::plugins::dom0 inherits munin::plugins::physical {
     munin::plugin::deploy { "xen-cpu": config => "user root"}
     munin::plugin::deploy { "xen_memory": config => "user root"}
     munin::plugin::deploy { "xen_vbd": config => "user root"}
+    munin::plugin::deploy { "xen_traffic_all": config => "user root"}
 }
 
 class munin::plugins::physical inherits munin::plugins::base {
@@ -229,3 +246,11 @@ class munin::plugins::postgres inherits munin::plugins::base {
     munin::plugin::deploy { "pg__connections": ensure => false }
     munin::plugin::deploy { "pg__locks": ensure => false }
 }
+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';
+    }
+}
diff --git a/templates/munin-node.conf.Ubuntu.gutsy b/templates/munin-node.conf.Ubuntu.gutsy
new file mode 120000 (symlink)
index 0000000..e0646b9
--- /dev/null
@@ -0,0 +1 @@
+munin-node.conf.Debian.etch
\ No newline at end of file
diff --git a/templates/munin-node.conf.Ubuntu.hardy b/templates/munin-node.conf.Ubuntu.hardy
new file mode 120000 (symlink)
index 0000000..e0646b9
--- /dev/null
@@ -0,0 +1 @@
+munin-node.conf.Debian.etch
\ No newline at end of file