4
# Plugin for watching io-bound traffic (in blocks) on disks.
6
# Usage: Link or copy into /etc/lrrd/client.d/
11
# autoconf (optional - used by lrrd-config)
13
# Magic markers (optional - used by lrrd-config and some installation
22
use Storable qw(store retrieve);
25
# (c) 2004 - Per Andreas Buer
28
use constant STATEFILE => '@@STATEDIR@@/iostat-aw.state';
31
if ($ARGV[0] eq 'config') {
42
($old_r) = get_state();
49
print "No historic data present\n";
56
my ($major, $minor, $tmpnam);
57
return 0 if ($major == 1); # RAM devices
58
return 0 if ($major == 9); # MD devices
59
return 0 if ($major == 58); # LVM devices
60
return 0 if ($major == 254); # LVM2 devices
61
return 0 if ($tmpnam =~ /part\d+$/);
62
return 0 if ($tmpnam =~ /^\s*(?:sd|hd)[a-z]\d+\s*$/);
76
if (-r "/proc/diskstats") {
78
$parts = new IO::File("/proc/diskstats") || die();
81
$parts = new IO::File("/proc/partitions");
82
die("kernel $kernel not supported yet\n");
86
print "Could not gather statistics\n";
91
my ($maj, $min, $name, $rio, $rtime, $wio, $wtime);
94
$rio, $rtime, $wio, $wtime) =
95
(split(/\s+/, $_ ))[1,2,3,4,7,8,11];
97
next unless( defined($min) && defined($maj));
98
next unless ($wio and $rio and $rtime and $wtime);
100
next if ( filter($maj, $min, $name) == 0);
102
$R{$maj}{$min}{rio} = $rio;
103
$R{$maj}{$min}{rtime} = $rtime;
105
$R{$maj}{$min}{wio} = $wio;
106
$R{$maj}{$min}{wtime} = $wtime;
107
push(@dev, "dev${maj}_${min}");
120
print("graph_title IO Service time\n",
121
"graph_args --base 1000\n",
122
"graph_vlabel ms\n");
124
for my $d ( @{ get_ios(1) } ) {
125
print("$d.label $d\n",
133
my ($old_io, $new_io) = @_;
136
for my $maj (sort keys %{$new_io} ) {
137
for my $min (sort keys %{ $new_io->{$maj} } ) {
138
my $rio_diff = $$new_io{$maj}{$min}{rio} - $$old_io{$maj}{$min}{rio};
139
my $rtime_diff = $$new_io{$maj}{$min}{rtime} - $$old_io{$maj}{$min}{rtime};
142
my $wio_diff = $$new_io{$maj}{$min}{wio} - $$old_io{$maj}{$min}{wio};
143
my $wtime_diff = $$new_io{$maj}{$min}{wtime} - $$old_io{$maj}{$min}{wtime};
145
my $dev = "dev${maj}_${min}";
147
print("${dev}_rtime.value ", ($rtime_diff != 0) ? ($rio_diff / $rtime_diff) : 0, "\n",
148
"${dev}_wtime.value ", ($wtime_diff != 0) ? ($wio_diff / $wtime_diff) : 0, "\n",
157
store($R, STATEFILE);
162
return(undef) unless ( -r STATEFILE);
163
$R = retrieve( STATEFILE );