たわごと


by wakemasa

net-snmpとmrtg、さらに番外編

あれこれやり始めたら、やりたいことが次々に出てきてしまって、、、(笑)

5) CPU 温度と HDD 温度の管理
CPU温度はsysctlで取得。


# /usr/sbin/sysctl -n hw.acpi.thermal.tz0.temperature



で確認可能。Shuttleのマザーは測定ポイントが1つしかないみたい。2つあると、hw.acpi.thermal.tz1.temperature ってのも見えるはず。

HDD温度は、smartmontoolsをインストールして、smartctlで取得。


# /usr/local/sbin/smartctl -a /dev/ad4


この2つを組み合わせてperlスクリプトを作成、データ収集してmrtgに描画。


#!/usr/local/bin/perl
# cpu_temp.pl

$temp=`/sbin/sysctl -n hw.acpi.thermal.tz0.temperature`;
$temp =~ s/C//g;
print "$temp";

# HDD temp
$smart=`/usr/local/sbin/smartctl -a /dev/ad4`;
@smart = split(/\n/, $smart);
foreach $data (@smart){
if($data =~ /Temperature_Celsius(.*?)0x(\d+)(.*?)(\d+)(.*?)(\d+)(.*?)(\d+)(.
*?)(\d+)/){
$hdd_temp = $10;
}
}
print "$hdd_temp";

# UpTime
$uptime=`/sbin/sysctl -n kern.boottime`;
chomp($uptime);
$uptime = `echo "$uptime" | cut -d ' ' -f9-13` ;
$uptime =~ s/,//g;
print "$uptime";

# Host name
$hostname=`/bin/hostname`;
print "$hostname";

exit(0);


uptimeの取得はググって調べたもので妥協。いまは現在時刻を表示しているだけです。ちゃんとしたuptimeに変えたいんだけど、試行錯誤中、、、

あとは、mrtgの設定ファイルに温度情報用の設定を加えて、しばらく待つとグラフが描画されるようになります。


Target[temp]: `cpu_temp.pl`
MaxBytes[temp]: 80
Options[temp]: gauge, growright, nopercent
YLegend[temp]: Temperature (C)
ShortLegend[temp]: degrees (C)
LegendI[temp]: CPU Temp.
LegendO[temp]: HDD temp.
Legend1[temp]: CPU Temperature
Legend2[temp]: HDD Temperature
Title[temp]: Temperature
PageTop[temp]:

Temperature




6) CPU 周波数と電圧の管理
いろいろと調べている中で、powerdを使うとCPU周波数が可変になり、省電力化が可能だという情報を見つけたので、やってみることにした。ついでに数値データなんでmrtg化。

FreeBSDではdefaultでpowerdが入っているので、動かすだけ。

まず、powerdの起動。


# powerd -a adaptive


sysctlで確認すると、cpu.freqが変化した。


dev.cpu.0.freq: 250
dev.cpu.0.freq_levels: 2000/88000 1750/77000 1500/66000 1250/55000 1000/44000 750/33000 500/22000 250/11000


このままだと、サーバを再起動してしまうとpowerdは終了になってしまうので、/etc/rc.confに以下を追加。


powerd_enable="YES"


あとは、sysctlで得られる数値データを取得するperlスクリプト作成なんだけど、ここで困った。perlではswitch文が使えない。5.10以降だとサポートされているみたいなんだけど、インストールしているversionは5.8.8、、、、

あんまり綺麗なコードじゃなくなるけど、if文の嵐で対処。


#!/usr/local/bin/perl
# cpu_freq.pl

$freq=`/sbin/sysctl -n dev.cpu.0.freq`;
print "$freq";

if ($freq == 250) {
$volt = 11000;
}
if ($freq == 500) {
$volt = 22000;
}
if ($freq == 750) {
$volt = 33000;
}
if ($freq == 1000) {
$volt = 44000;
}
if ($freq == 1250) {
$volt = 55000;
}
if ($freq == 1500) {
$volt = 66000;
}
if ($freq == 1750) {
$volt = 77000;
}
if ($freq == 2000) {
$volt = 88000;
}
print "$volt";

# UpTime
$uptime=`/sbin/sysctl -n kern.boottime`;
chomp($uptime);
$uptime = `echo "$uptime" | cut -d ' ' -f9-13` ;
$uptime =~ s/,//g;
print "$uptime";

# Host name
$hostname=`/bin/hostname`;
print "$hostname";

exit(0);


温度情報と同様に、mrtgの設定ファイルを作成して、しばし待つとグラフが描画されます。


Target[cpu_freq]: `cpu_freq.pl`
MaxBytes[cpu_freq]: 100000
Options[cpu_freq]: gauge, growright, nopercent
YLegend[cpu_freq]: CPU Freq. & Volt.
ShortLegend[cpu_freq]: (MHz, V)
LegendI[cpu_freq]: CPU Frequency
LegendO[cpu_freq]: CPU Voltage
Legend1[cpu_freq]: CPU Frequency
Legend2[cpu_freq]: CPU Voltage
Title[cpu_freq]: CPU Frequency and Voltage
PageTop[cpu_freq]:

CPU Frequency and Voltage




人気ブログランキングへ
by wakemasa | 2010-10-22 05:14 | サーバ