2011-06-23 21:08:31 +02:00
|
|
|
#!/usr/bin/perl
|
|
|
|
# -*- perl -*-
|
|
|
|
#
|
|
|
|
#
|
|
|
|
##############################################################################
|
|
|
|
#
|
|
|
|
#
|
|
|
|
# This munin plugin watches the sizes of the given directories.
|
|
|
|
# @author Kevin Fischer
|
|
|
|
# @version 2010/08/05
|
|
|
|
# @website http://kevin-fischer.de
|
|
|
|
#
|
|
|
|
# Copy this to your node's config file (default: plugin-conf.d/munin-node):
|
|
|
|
# [dirsizes]
|
|
|
|
# user root
|
|
|
|
# env.watchdirs /var/www,/tmp
|
|
|
|
#
|
|
|
|
# Change the env.watchdirs-variable according to your wishes.
|
2017-04-17 22:43:38 +02:00
|
|
|
# DON'T FORGET TO RUN AS ROOT!
|
2011-06-23 21:08:31 +02:00
|
|
|
#
|
|
|
|
# You can test this plugin by calling it with params "test" and your watchdirs:
|
|
|
|
# ./dirsizes test /dir1,/tmp/dir2
|
|
|
|
#
|
|
|
|
#
|
|
|
|
##############################################################################
|
|
|
|
#
|
|
|
|
|
|
|
|
use strict;
|
2017-02-17 09:54:23 +01:00
|
|
|
use Munin::Plugin;
|
2011-06-23 21:08:31 +02:00
|
|
|
my @watchdirs;
|
|
|
|
|
|
|
|
if ( exists $ARGV[0] and $ARGV[0] eq "test" ) {
|
|
|
|
|
|
|
|
# Split the watchdirs string
|
|
|
|
@watchdirs = split( ",", $ARGV[1] );
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
|
|
|
|
# If no dirs are given, exit.
|
|
|
|
if ( !defined( $ENV{"watchdirs"} ) ) {
|
|
|
|
die "No directories given! See the manual at top of this plugin file.";
|
|
|
|
}
|
|
|
|
|
|
|
|
# Split the watchdirs string
|
|
|
|
@watchdirs = split( ",", $ENV{"watchdirs"} );
|
|
|
|
}
|
|
|
|
|
|
|
|
# Config or read request?
|
|
|
|
if ( exists $ARGV[0] and $ARGV[0] eq "config" ) {
|
|
|
|
|
|
|
|
# Munin basic info
|
|
|
|
print "graph_title Directory sizes\n";
|
|
|
|
print "graph_args --base 1024 --lower-limit 0\n";
|
|
|
|
print "graph_vlabel directory size\n";
|
|
|
|
print "graph_info Displays the sizes of all configured directories.\n";
|
|
|
|
print "graph_category disk\n";
|
|
|
|
print "graph_total Total\n";
|
|
|
|
|
|
|
|
# All available directories
|
|
|
|
foreach my $dir (@watchdirs) {
|
|
|
|
|
|
|
|
# Remove illegal characters
|
2017-02-17 09:54:23 +01:00
|
|
|
my $label = clean_fieldname($dir);
|
2011-06-23 21:08:31 +02:00
|
|
|
|
|
|
|
# Print name
|
|
|
|
print "dir", $label, ".label ", $dir, "\n";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# Read request, output the directory sizes
|
|
|
|
else {
|
|
|
|
|
|
|
|
# All available directories
|
|
|
|
foreach my $dir (@watchdirs) {
|
|
|
|
# Remove illegal characters
|
2017-02-17 09:54:23 +01:00
|
|
|
my $label = clean_fieldname($dir);
|
2011-06-23 21:08:31 +02:00
|
|
|
|
|
|
|
# Get the dirsize
|
|
|
|
my $dirsize = getSize($dir);
|
|
|
|
|
|
|
|
# Print name
|
|
|
|
print "dir", $label, ".value ", $dirsize, ".0\n";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# Function: getSize($dir)
|
|
|
|
sub getSize {
|
|
|
|
my ($dir) = @_;
|
|
|
|
|
|
|
|
# Get the size via `du`
|
|
|
|
my @dirsize = split( ' ', `du -cb $dir | grep "total" | tail -1 ` );
|
|
|
|
return @dirsize[0];
|
|
|
|
}
|
|
|
|
|
|
|
|
exit 0;
|
|
|
|
|