2015/07/14

サーバPCの温度収集プログラムの作成

暑くなってきてサーバPCの温度が気になったので温度の収集を行うプログラムを作成しました。
仕組みはPerlでsensorsコマンドを実行し、得られた結果をテキストに保存するだけの簡単な処理です。

lm_sensorsのインストールは前回の記事を参考にしてください。
centos7で温度取得

1.動作テスト

次のPerlコードを実行してsensorsコマンドの結果を取得できるか確認する。
#!usr/bin/perl

$ret = `sensors`;
print $ret;
実行結果
acpitz-virtual-0
Adapter: Virtual device
temp1:        +40.0ーC  (crit = +60.0ーC)

k10temp-pci-00c3
Adapter: PCI adapter
temp1:        +43.5ーC  (high = +70.0ーC)

it8716-isa-0e80
Adapter: ISA adapter
in0:          +1.87 V  (min =  +0.00 V, max =  +4.08 V)
in1:          +1.18 V  (min =  +0.00 V, max =  +3.06 V)
in2:          +3.38 V  (min =  +0.00 V, max =  +4.08 V)
+5V:          +2.98 V  (min =  +0.00 V, max =  +4.08 V)
in4:          +2.99 V  (min =  +0.00 V, max =  +4.08 V)
in5:          +1.07 V  (min =  +0.00 V, max =  +4.08 V)
in6:          +1.09 V  (min =  +0.00 V, max =  +4.08 V)
in7:          +4.08 V  (min =  +0.00 V, max =  +4.08 V)  ALARM
Vbat:         +3.42 V  
fan1:        1527 RPM  (min =    0 RPM)
fan2:           0 RPM  (min =   10 RPM)  ALARM
fan3:           0 RPM  (min =   10 RPM)  ALARM
temp1:        +47.0ーC  (low  = +127.0ーC, high = +112.0ーC)  sensor = thermal diode
temp2:        +42.0ーC  (low  = +127.0ーC, high = +112.0ーC)  sensor = thermistor
temp3:        +74.0ーC  (low  = +127.0ーC, high = +112.0ーC)  sensor = thermal diode
cpu0_vid:    +0.375 V
intrusion0:  ALARM

2.センサ名と温度を取得

sensorsコマンドの結果からセンサ名(acpitz-virtual-0やk10temp-pci-00c3など)と温度の値を取得。
#!usr/bin/perl

$ret = `sensors`;
while($ret =~ m/(.*?)\n\n/gs){
 $block = $1;
 if($block =~ /(^.*)\n/){
  $sensorName = $1;
  print $sensorName,"\n";

  %temp;
  while($block =~ m/(temp\d): *+(.*?)ーC/g){
   $temp{$1} = $2;
  }
  print %temp,"\n";
 }
}
実行結果
$ perl Temperature.pl
acpitz-virtual-0
temp1+40.0
k10temp-pci-00c3
temp1+42.9
it8716-isa-0e80
temp1+45.0temp3+73.0temp2+42.0

3.ファイルに保存

CSV形式でファイルに保存
#!usr/bin/perl

use Time::Piece;

$ENV{'TZ'} = "JST-9";

$t=localtime;
$tStr = $t->strftime('%F %T');

$ret = `sensors`;

while($ret =~ m/(.*?)\n\n/gs){
 $block = $1;
 if($block =~ /(^.*)\n/){
  $sensorName = $1;
  print $sensorName,"\n";

  %temp;
  while($block =~ m/(temp\d): *+(.*?)ーC/g){
   $temp{$1} = $2;
  }
  print %temp,"\n";

  open(DATA,'>>',$sensorName.'.csv');
  print DATA $tStr;
  foreach (sort(keys(%temp))){
   print DATA ',',($temp{$_}+0.0);
  }
  print DATA "\n";
  close(DATA);
 }
}

4.プログラムを一定間隔で実行させる

systemdのtimerを使用してプログラムを5分間隔で実行させる。

4.1 serviceファイルを作成する。

/etc/systemd/system/にserviceファイルtempe-monitor.serviceを作成する。
$ sudo vi /etc/systemd/system/tempe-monitor.service
tempe-monitor.serviceの内容
[Unit]
Description=Temperature Monitoring service

[Service]
Type=simple
ExecStart=/usr/bin/perl /home/User/monitoringScripts/Temperature.pl
User=User
WorkingDirectory=/home/User/monitoringScripts/

[Install]
WantedBy=multi-user.target
サービスを実行してファイルに温度が書き込まれるか確認する。
$ sudo systemctl daemon-reload
$ sudo systemctl start tempe-monitor.service

4.2 timerファイルを作成する

/etc/systemd/system/にtimerファイルtempe-monitor.timerを作成する。
$ sudo vi /etc/systemd/system/tempe-monitor.timer
tempe-monitor.timerの内容
[Unit]
Description=Temperature 5min monitoring

[Timer]
OnBootSec=5min
OnUnitActiveSec=5min

[Install]
WantedBy=timers.target
タイマーを実行してファイルに温度が5分間隔で書き込まれるか確認する。
$ sudo systemctl daemon-reload
$ sudo systemctl start tempe-monitor.timer
動作することを確認したら、PC起動時に自動的にタイマーが実行するように設定する。
$ sudo systemctl enable tempe-monitor.timer
以上。

0 件のコメント:

コメントを投稿