diff options
Diffstat (limited to 'etc/munin/plugins')
-rwxr-xr-x | etc/munin/plugins/munin_stats | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/etc/munin/plugins/munin_stats b/etc/munin/plugins/munin_stats new file mode 100755 index 00000000..2a4f0b15 --- /dev/null +++ b/etc/munin/plugins/munin_stats @@ -0,0 +1,113 @@ +#!/usr/bin/perl +# -*- perl -*- +# FIXME: this copy of the munin_stats munin plugin includes the fix for #767032 +# Copyright (C) 2006-2009 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# $Id$ +# +# Magic markers (used by munin-node-configure and some installation scripts): +#%# family=auto +#%# capabilities=autoconf + +use strict; +use warnings; + +use Munin::Plugin; + +my @logs = qw/update html limits/; +use Munin::Master::GraphOld; +my $conffile = "$Munin::Common::Defaults::MUNIN_CONFDIR/munin.conf"; +if (! graph_check_cron() ) { + push (@logs, "graph"); +} + +my $logdir = ($ENV{'logdir'} || $ENV{'MUNIN_LOGDIR'} || '/var/log/munin'); + +if ($ARGV[0] and $ARGV[0] eq 'autoconf') { + my $munin_update_location = + "$Munin::Common::Defaults::MUNIN_LIBDIR/munin-update"; + + if (! -e $munin_update_location) { + print "no (munin-update was not found at $munin_update_location)\n"; + exit 0; + } + + if (! -x $munin_update_location) { + print "no ($munin_update_location was found, but is not executable)\n"; + exit 0; + } + else { + print "yes\n"; + exit 0; + } +} + +if ($ARGV[0] and $ARGV[0] eq "config") { + print "graph_title Munin processing time\n"; + if (! graph_check_cron() ) { + print "graph_info This graph shows the run time of the four different processes making up a munin-master run. Munin-master is run from cron every 5 minutes and we want each of the programmes in munin-master to complete before the next instance starts. Especially munin-update and munin-graph are time consuming and their run time bears watching. If munin-update uses too long time to run please see the munin-update graph to determine which host is slowing it down. If munin-graph is running too slow you need to get clever (email the munin-users mailing list) unless you can buy a faster computer with better disks to run munin on.\n"; + } else { + print "graph_info This graph shows the run time of the thre different processes making up a munin-master run. Munin-master is run from cron every 5 minutes and we want each of the programmes in munin-master to complete before the next instance starts. Especially munin-update is time consuming and its run time bears watching. If munin-update uses too long time to run please see the munin-update graph to determine which host is slowing it down.\n"; + } + print "graph_args --base 1000 -l 0\n", + "graph_scale yes\n", + "graph_vlabel seconds\n", + "graph_category munin\n"; + foreach my $log (@logs) { + print "$log.label munin $log\n"; + print "$log.draw AREASTACK\n"; + } + print "update.warning 240\n"; + print "update.critical 285\n"; + if (! graph_check_cron() ) { + print "graph.warning 240\n"; + print "graph.critical 285\n"; + } + exit 0; +} + +my %positions = restore_state(); +my %times; + +foreach my $log (@logs) { + my $logfile = "$logdir/munin-$log.log"; + my $time = 'U'; + + if (! -r $logfile) { + print "$log.extinfo Can't open $logfile for reading\n"; + print "$log.value $time\n"; + next; + } + + if (exists $positions{$log}) { + my ($LOGFILE, undef) = tail_open($logfile, $positions{$log}); + while (<$LOGFILE>) { + $time = $1 if (/finished \((\d+\.\d+)\ssec\)$/); + } + $positions{$log} = tail_close($LOGFILE); + } + else { + # Do nothing on first run except find the current file end. + $positions{$log} = (stat $logfile)[7]; + } + + print "$log.value $time\n"; +} + +save_state(%positions); + +# vim: ft=perl : ts=4 : expandtab |