■ 2008年04月18日
-Linux Style- 2008年04月18日の記事です。
■ 2008年04月18日(金) CPU毎の使用率をMRTGで表示
■ CPU毎の使用率をMRTGで表示
MRTGでサーバの動作状況を閲覧できるようにしているサイトは数多くあり、mrtg.cfgの書き方に至るまで丁寧に解説してあるサイトは数多くあるわけですが、なかなかありそうでなかったのが、CPUの使用率を、マルチCPU時にCPU毎にグラフ表示させる方法。
sarコマンドを使用すれば、CPU毎の使用率がとれます。
sarコマンドは、Cent OS 5.1では、sysstatパッケージに入っています。
ということで、さくっとsysstatをyumでインストール。
sarコマンドの細かい使い方は割愛するとして、/etc/cron.d/sysstatを編集すれば、何分おきに更新とかも変更できます。
うちでは、MRTGは5分間隔で回してるので、そのタイミングとかぶらないようにという意味もこめて、
3-58/5 * * * * root /usr/lib/sa/sa1 1 1
と変更しました(確か標準は*/10 * * * *だったような)。
で、crond再起動。
で、次に、MRTGで読み込むためのスクリプトをPerlで書いてみた。
/usr/local/bin/cpu_sar.cgi
-------------------------------------------------
#!/usr/bin/perl
$machine = "マシン名"; #自分の環境に併せて直す
$cpu0_idle = `/usr/bin/sar -P 0`;
$cpu1_idle = `/usr/bin/sar -P 1`;
@cpu0 = split(/\n/, $cpu0_idle);
@cpu1 = split(/\n/, $cpu1_idle);
@data0 = split(/\s+/, $cpu0[$#cpu0-1]);
$cpu_idle0 = int($data0[7]+0.5);
$cpu_load0 = 100 - $cpu_idle0;
@data1 = split(/\s+/, $cpu1[$#cpu1-1]);
$cpu_idle1 = int($data1[7]+0.5);
$cpu_load1 = 100 - $cpu_idle1;
$utime = `uptime`;
$utime =~ /up(.*?),/;
$uptime = $1;
$uptime =~ s/^\s*//g;
print "$cpu_load0\n";
print "$cpu_load1\n";
print "$uptime\n";
print "$machine\n";
exit;
-------------------------------------------------
mrtg.cfgを編集。
/etc/mrtg/mrtg.cfg こんな感じで追記
-------------------------------------------------
### CPU utilization ###
Target[cpu_uti]: `perl /usr/local/bin/cpu_sar.cgi`
MaxBytes[cpu_uti]: 100
Unscaled[cpu_uti]: dwmy
Options[cpu_uti]: gauge, growright, noinfo, nopercent
YLegend[cpu_uti]: CPU utilization (%)
ShortLegend[cpu_uti]: (%)
LegendI[cpu_uti]: CPU0
LegendO[cpu_uti]: CPU1
Legend1[cpu_uti]: CPU0 utilization (%)
Legend2[cpu_uti]: CPU1 utilization (%)
Title[cpu_uti]: CPU utilization
PageTop[cpu_uti]: <h1>CPU utilization</h1>
-------------------------------------------------
で、index.htmlを更新して、ログ更新させればOK(その辺もめんどいので割愛)。
■ 2008年04月18日の記事に関するコメント
この記事に関するコメントはまだ書かれていません。






