Kernel 2.6 はディスク I/O情報が /proc/diskstat へ移動

新サーバの設定でパフォーマンス監視のために使っていたMRTG をやめて、より高性能で Web インタフェースで管理もできる Cacti ってのに移行を試みていたのですが、どうにもグラフが真っ白のまま更新されず、諦めて MRTG に戻ることにしました。RRDTool 経由で SNMP の情報を MySQL までデータ格納できていることまでは確認済みなのですが・・・
※ 誰か教えて!m(_ _)m

MRTG も一筋縄ではいかず。設定しているのですが、ディスクI/O 情報が取得できなくなってしまいました。原因を調べると /proc/stat から /proc/diskstats へ情報が移動したようです。

- スポンサーリンク -

これにあわせて、MRTG で設定しているディスク I/O 取得用のスクリプトも更新しなくてはなりません。

kernel 2.4 までは、こんな感じで上手くいっていると思います。

mrtg.cfg の設定
Target[disk_io]: `/home/mrtg/diskio.pl`
MaxBytes[disk_io]: 400
Unscaled[disk_io]: dwmy
Title[disk_io]: Disk I/O
PageTop[disk_io]: <H1>Disk I/O on WebServer</H1>
YLegend[disk_io]: Disk I/O
ShortLegend[disk_io]: blocks/s
LegendI[disk_io]:読取ブロック数
LegendO[disk_io]:書込ブロック数

ディスクI/O取得スクリプト(diskio.pl)

#!/usr/bin/perl
use FileHandle;

my $fh = FileHandle->new("cat /proc/stat|");
while(<$fh>){
if(/^disk_io: \([^(]+\([0-9]+,[0-9]+,([0-9]+),[0-9]+,([0-9]+)\)/) {
print "$1\n";
print "$2\n\n\n";
}
}
close($fh);

kernel 2.6 では、ディスクI/O取得スクリプトをこんな感じに変更します。

echo '#!/usr/bin/perl
use FileHandle;

my $fh = FileHandle->new("cat /proc/diskstats|");
while(<$fh>){
if(/md2 [0-9]+ [0-9]+ ([0-9]+) [0-9]+ [0-9]+ [0-9]+ ([0-9]+)/) {
print "$1\n";
print "$2\n\n\n";
}
}
close($fh);

この /proc/diskstats に関する情報が全然なくて困りましたが、パラメータの意味は下記の通りのようです。

Field 1 -- # of reads issued
Field 2 -- # of reads merged
Field 3 -- # of sectors read
Field 4 -- # of milliseconds spent reading
Field 5 -- # of writes completed
Field 6 -- # of writes merged
Field 7 -- # of sectors written
Field 8 -- # of milliseconds spent writing
Field 9 -- # of I/Os currently in progress
Field 10 -- # of milliseconds spent doing I/Os
Field 11 -- weighted # of milliseconds spent doing I/Os
- スポンサーリンク -