Wednesday, August 05th, 2009 | Author: Nico
Disclaimer : this work is mostly based upon DavidS work, available on his git repo. In the scope of my work I needed to have munin support for freeBSD & Solaris. I also wrote a class for snmp_plugins & custom plugins. Some things are quite dependant from my infrastructure, like munin.conf generation script but it can easily be adapted to yours, by extracting data from your CMDB.
It requires the munin_interfaces fact published here (and merged into DavidS repo, thanks to him), and Volcane’s extlookup function to store some parameters. Enough talking, this is the code :
# Munin config class # Many parts taken from David Schmitt's http://git.black.co.at/ # FreeBSD & Solaris + SNMP & custom plugins support by Nicolas Szalay <nico@gcu.info> class munin::node { case $operatingsystem { openbsd: {} debian: { include munin::node::debian} freebsd: { include munin::node::freebsd} solaris: { include munin::node::solaris} default: {} } } class munin::node::debian { package { "munin-node": ensure => installed } file { "/etc/munin": ensure => directory, mode => 0755, owner => root, group => root; "/etc/munin/munin-node.conf": source => "puppet://$fileserver/files/apps/munin/munin-node-debian.conf", owner => root, group => root, mode => 0644, before => Package["munin-node"], notify => Service["munin-node"], } service { "munin-node": ensure => running } include munin::plugins::linux } class munin::node::freebsd { package { "munin-node": ensure => installed, provider => freebsd } file { "/usr/local/etc/munin/munin-node.conf": source => "puppet://$fileserver/files/apps/munin/munin-node-freebsd.conf", owner => root, group => wheel, mode => 0644, before => Package["munin-node"], notify => Service["munin-node"], } service { "munin-node": ensure => running } include munin::plugins::freebsd } class munin::node::solaris { # "hand made" install, no package. file { "/etc/munin/munin-node.conf": source => "puppet://$fileserver/files/apps/munin/munin-node-solaris.conf", owner => root, group => root, mode => 0644 } include munin::plugins::solaris } class munin::gatherer { package { "munin": ensure => installed } # custom version of munin-graph : forks & generates many graphs in parallel file { "/usr/share/munin/munin-graph": owner => root, group => root, mode => 0755, source => "puppet://$fileserver/files/apps/munin/gatherer/munin-graph", require => Package["munin"] } # custon version of debian cron file. Month & Year cron are generated once daily file { "/etc/cron.d/munin": owner => root, group => root, mode => 0644, source => "puppet://$fileserver/files/apps/munin/gatherer/munin.cron", require => Package["munin"] } # Ensure cron is running, to fetch every 5 minutes service { "cron": ensure => running } # Ruby DBI for mysql package { "libdbd-mysql-ruby": ensure => installed } # config generator file { "/opt/scripts/muningen.rb": owner => root, group => root, mode => 0755, source => "puppet://$fileserver/files/apps/munin/gatherer/muningen.rb", require => Package["munin", "libdbd-mysql-ruby"] } # regenerate munin's gatherer config every hour cron { "munin_config": command => "/opt/scripts/muningen.rb > /etc/munin/munin.conf", user => "root", minute => "0", require => File["/opt/scripts/muningen.rb"] } include munin::plugins::snmp include munin::plugins::linux include munin::plugins::custom::gatherer } # define to create a munin plugin inside the right directory define munin::plugin ($ensure = "present") { case $operatingsystem { freebsd: { $script_path = "/usr/local/share/munin/plugins" $plugins_dir = "/usr/local/etc/munin/plugins" } debian: { $script_path = "/usr/share/munin/plugins" $plugins_dir = "/etc/munin/plugins" } solaris: { $script_path = "/usr/local/munin/lib/plugins" $plugins_dir = "/etc/munin/plugins" } default: { } } $plugin = "$plugins_dir/$name" case $ensure { "absent": { debug ( "munin_plugin: suppressing $plugin" ) file { $plugin: ensure => absent, } } default: { $plugin_src = $ensure ? { "present" => $name, default => $ensure } file { $plugin: ensure => "$script_path/${plugin_src}", require => Package["munin-node"], notify => Service["munin-node"], } } } } # snmp plugin define, almost same as above define munin::snmp_plugin ($ensure = "present") { $pluginname = get_plugin_name($name) case $operatingsystem { freebsd: { $script_path = "/usr/local/share/munin/plugins" $plugins_dir = "/usr/local/etc/munin/plugins" } debian: { $script_path = "/usr/share/munin/plugins" $plugins_dir = "/etc/munin/plugins" } solaris: { $script_path = "/usr/local/munin/lib/plugins" $plugins_dir = "/etc/munin/plugins" } default: { } } $plugin = "$plugins_dir/$name" case $ensure { "absent": { debug ( "munin_plugin: suppressing $plugin" ) file { $plugin: ensure => absent, } } "present": { file { $plugin: ensure => "$script_path/${pluginname}", require => Package["munin-node"], notify => Service["munin-node"], } } } } class munin::plugins::base { case $operatingsystem { debian: { $plugins_dir = "/etc/munin/plugins" } freebsd: { $plugins_dir = "/usr/local/etc/munin/plugins" } solaris: { $plugins_dir = "/etc/munin/plugins" } default: {} } file { $plugins_dir: source => "puppet://$fileserver/files/empty", ensure => directory, checksum => mtime, ignore => ".svn*", mode => 0755, recurse => true, purge => true, force => true, owner => root } } class munin::plugins::interfaces { $ifs = gsub(split($munin_interfaces, " "), "(.+)", "if_\\1") $if_errs = gsub(split($munin_interfaces, " "), "(.+)", "if_err_\\1") plugin { $ifs: ensure => "if_"; $if_errs: ensure => "if_err_"; } include munin::plugins::base } class munin::plugins::linux { plugin { [ cpu, load, memory, swap, irq_stats, df, processes, open_files, ntp_offset, vmstat ]: ensure => "present" } include munin::plugins::base include munin::plugins::interfaces } class munin::plugins::nfsclient { plugin { "nfs_client": ensure => present } } class munin::plugins::snmp { # initialize plugins $snmp_plugins=extlookup("munin_snmp_plugins") snmp_plugin { $snmp_plugins: ensure => present } # SNMP communities used by plugins file { "/etc/munin/plugin-conf.d/snmp_communities": owner => root, group => root, mode => 0644, source => "puppet://$fileserver/files/apps/munin/gatherer/snmp_communities" } } define munin::custom_plugin($ensure = "present", $location = "/etc/munin/plugins") { $plugin = "$location/$name" case $ensure { "absent": { file { $plugin: ensure => absent, } } "present": { file { $plugin: owner => root, mode => 0755, source => "puppet://$fileserver/files/apps/munin/custom_plugins/$name", require => Package["munin-node"], notify => Service["munin-node"], } } } } class munin::plugins::custom::gatherer { $plugins=extlookup("munin_custom_plugins") custom_plugin { $plugins: ensure => present } } class munin::plugins::freebsd { plugin { [ cpu, load, memory, swap, irq_stats, df, processes, open_files, ntp_offset, vmstat ]: ensure => "present", } include munin::plugins::base include munin::plugins::interfaces } class munin::plugins::solaris { # Munin plugins on solaris are quite ... buggy. Will need rewrite / custom plugins. plugin { [ cpu, load, netstat ]: ensure => "present", } include munin::plugins::base include munin::plugins::interfaces }

Wednesday, 10. April 2013
When I initially commented I clicked the “Notify me when new comments are added” checkbox and now each time a comment is added I get three emails with the same comment. Is there any way you can remove people from that service? Thanks a lot!