Projet

Général

Profil

Paste
Télécharger au format
Statistiques
| Branche: | Révision:

root / plugins / disk / lvm_usage @ 64089240

Historique | Voir | Annoter | Télécharger (2,73 ko)

1 623e1ebb Gabor Gombas
#! /usr/bin/perl -w
2
3
=head1 NAME
4
5
lvm_usage - Plugin to monitor usage of LVM volume groups
6
7
=head1 CONFIGURATION
8
9
Must be run as root:
10
11
  [lvm_usage]
12
    user root
13
14
=head1 MAGIC MARKERS
15
16
 #%# family=auto
17
 #%# capabilities=autoconf
18
19
=head1 AUTHOR
20
21
Gábor Gombás <gombasg@sztaki.hu>
22
23
=head1 LICENSE
24
25
GPLv2 or later
26
27
=cut
28
29
use strict;
30
use Munin::Plugin;
31
use Carp;
32
33
need_multigraph();
34
35
if ($ARGV[0] and $ARGV[0] eq 'autoconf') {
36
	if (-c "/dev/mapper/control") {
37
		print "yes\n";
38
	}
39
	else {
40
		print "no (/dev/mapper/control is missing)\n";
41
	}
42
	exit 0;
43
}
44
45
my %vgs;
46
47
open(VGS, "vgs --units b --nosuffix --noheadings -o vg_name,vg_size,vg_free |")
48
	or croak("Failed to run 'lvs': " . $!);
49
while (my $line = <VGS>) {
50
	chomp $line;
51
	$line =~ s/^\s+//;
52
	my ($vg_name, $vg_size, $vg_free) = split(/\s+/, $line);
53
	$vgs{$vg_name}->{size} = $vg_size unless $vgs{$vg_name}->{size};
54
	$vgs{$vg_name}->{free} = $vg_free unless $vgs{$vg_name}->{free};
55
	$vgs{$vg_name}->{lvs} = {};
56
}
57
close VGS;
58
59
open(LVS, "lvs --units b --nosuffix --noheadings -o vg_name,lv_name,lv_size |")
60
	or croak("Failed to run 'lvs': " . $!);
61
while (my $line = <LVS>) {
62
	chomp $line;
63
	$line =~ s/^\s+//;
64
	my ($vg_name, $lv_name, $lv_size) = split(/\s+/, $line);
65
	$vgs{$vg_name}->{lvs}->{$lv_name} = $lv_size;
66
}
67
close LVS;
68
69
if ($ARGV[0] and $ARGV[0] eq 'config') {
70
	print "multigraph lvm_usage\n";
71
	print "graph_title LVM volume group usage\n";
72
	print "graph_args --base 1024 --lower-limit 0 --upper-limit 100\n";
73
	print "graph_vlabel %\n";
74
        print "graph_category disk\n";
75
	print "graph_order " . join(' ', map { clean_fieldname($_) } (sort keys %vgs)) . "\n";
76
	for my $vg (sort keys %vgs) {
77
		my $id = clean_fieldname($vg);
78
		print "$id.label $vg\n";
79
		print "$id.type GAUGE\n";
80
		print "$id.draw LINE2\n";
81
	}
82
83
	for my $vg (sort keys %vgs) {
84
		my $id = clean_fieldname($vg);
85
86
		print "multigraph lvm_usage.$id\n";
87
		print "graph_title Volume group usage ($vg)\n";
88
		print "graph_args --base 1024 --lower-limit 0\n";
89
		print "graph_vlabel bytes\n";
90
        	print "graph_category disk\n";
91
		print "__free.label Free space\n";
92
		print "__free.draw AREA\n";
93
94
		foreach my $lv (sort keys %{$vgs{$vg}->{lvs}}) {
95
			my $id = clean_fieldname($lv);
96
			print "$id.label $lv\n";
97
			print "$id.draw STACK\n";
98
		}
99
	}
100
101
	exit 0;
102
}
103
104
print "multigraph lvm_usage\n";
105
for my $vg (sort keys %vgs) {
106
	my $id = clean_fieldname($vg);
107
	my $used = $vgs{$vg}->{'size'} - $vgs{$vg}->{'free'};
108
	print "$id.value " . int($used * 100 / $vgs{$vg}->{'size'}) . "\n";
109
}
110
111
for my $vg (sort keys %vgs) {
112
	my $id = clean_fieldname($vg);
113
	print "multigraph lvm_usage.$id\n";
114
	print "__free.value " . $vgs{$vg}->{free} . "\n";
115
116
	foreach my $lv (sort keys %{$vgs{$vg}->{lvs}}) {
117
		my $id = clean_fieldname($lv);
118
		print "$id.value " . $vgs{$vg}->{lvs}->{$lv} . "\n";
119
	}
120
}