mirror of
https://github.com/munin-monitoring/contrib.git
synced 2025-07-22 02:51:03 +00:00
add btrfs_subvol_usage plugin
Plugin to monitor usage of subvolumes on a BTRFS filesystem.
This commit is contained in:
parent
d42751c908
commit
11e4124ca8
1 changed files with 98 additions and 0 deletions
98
plugins/disk/btrfs_subvol_usage
Normal file
98
plugins/disk/btrfs_subvol_usage
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
#!/usr/bin/perl -w
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
btrfs_subvol_usage - Plugin to monitor usage of BTRFS subvolumes
|
||||||
|
|
||||||
|
=head1 CONFIGURATION
|
||||||
|
|
||||||
|
Must be run as root and you have to specify the path to the filesystem
|
||||||
|
|
||||||
|
[btrfs_usage]
|
||||||
|
user root
|
||||||
|
env.fsroot /path/to/btrfs/filesystem
|
||||||
|
|
||||||
|
=head1 MAGIC MARKERS
|
||||||
|
|
||||||
|
#%# family=auto
|
||||||
|
#%# capabilities=autoconf
|
||||||
|
|
||||||
|
=head1 USAGE
|
||||||
|
|
||||||
|
Link/Copy this plugin to /etc/munin/plugins/ and restart the munin-node.
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Alexander Knöbel <alex@belogy.de>
|
||||||
|
|
||||||
|
=head1 LICENSE
|
||||||
|
|
||||||
|
GPLv2
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use Munin::Plugin;
|
||||||
|
|
||||||
|
if ($ARGV[0] and $ARGV[0] eq 'autoconf') {
|
||||||
|
if (-e "/sbin/btrfs") {
|
||||||
|
print "yes\n";
|
||||||
|
} else {
|
||||||
|
print "no (/sbin/btrfs is missing)\n";
|
||||||
|
}
|
||||||
|
exit 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
my @fsroot;
|
||||||
|
if ( !defined( $ENV{"fsroot"} ) ) {
|
||||||
|
die "No fsroot given! See the manual at top of this plugin file.";
|
||||||
|
}
|
||||||
|
@fsroot = $ENV{"fsroot"};
|
||||||
|
|
||||||
|
# get subvolumes
|
||||||
|
my %subvols;
|
||||||
|
open(SVS, "btrfs subvolume list --sort=path @fsroot |")
|
||||||
|
or die("Failed to run 'btrfs subvolume list': " . $!);
|
||||||
|
while (my $line = <SVS>) {
|
||||||
|
chomp $line;
|
||||||
|
$line =~ s/ID ([0-9]+) gen ([0-9]+) top level ([0-9]+) path (.+)//;
|
||||||
|
$subvols{$1}->{id} = $1;
|
||||||
|
$subvols{$1}->{name} = $4;
|
||||||
|
}
|
||||||
|
close SVS;
|
||||||
|
|
||||||
|
# get sizes from quota
|
||||||
|
open(QGS, "btrfs qgroup show @fsroot |")
|
||||||
|
or die("Failed to run 'btrfs qgroup show': " . $!);
|
||||||
|
while (my $line = <QGS>) {
|
||||||
|
chomp $line;
|
||||||
|
$line =~ s|([0-9]+)/([0-9]+)\s+([0-9]+)\s+([0-9]+)||;
|
||||||
|
if (defined($2) && defined($subvols{$2})) {
|
||||||
|
$subvols{$2}->{rfer} = $3;
|
||||||
|
$subvols{$2}->{excl} = $4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close QGS;
|
||||||
|
|
||||||
|
# print config
|
||||||
|
if ($ARGV[0] and $ARGV[0] eq 'config') {
|
||||||
|
print "btrfs_usage\n";
|
||||||
|
print "graph_title BTRFS Subvolume usage\n";
|
||||||
|
print "graph_args --base 1024 --lower-limit 0\n";
|
||||||
|
print "graph_vlabel Bytes\n";
|
||||||
|
print "graph_category disk\n";
|
||||||
|
|
||||||
|
for my $id (sort { $subvols{$a}->{name} cmp $subvols{$b}->{name} } keys %subvols) {
|
||||||
|
print "$id.label " . $subvols{$id}->{name} . "\n";
|
||||||
|
print "$id.type GAUGE\n";
|
||||||
|
print "$id.draw LINE2\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
exit 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
# print usage
|
||||||
|
print "btrfs_subvol_usage\n";
|
||||||
|
for my $id (sort { $subvols{$a}->{name} cmp $subvols{$b}->{name} } keys %subvols) {
|
||||||
|
print "$id.value " . $subvols{$id}->{rfer} . "\n";
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue