Archive: 2014/05/13

sensors再整備

メディアサーバのUbuntu 10.04 LTS@GT110bからUbuntu 14.04 LTS@ProLiant ML110 G7への移行作業。apache2php5のバージョンアップが心配の種だったのだが、

$ sudo apt-get install apache2 apache2-utils libapache2-mod-php5 php5 php5-cli mysql-server mysql-client php5-mysql
$ sudo apt-get install yasm zlib1g-dev libfaac-dev libx264-dev
$ sudo apt-get install dovecot-core postfix nkf
あたりを入れた後、設定方法が若干異なったくらいでepgrecffmpeg 1.2.1も特に問題無く導入完了。

エンコードの確認もできたので、sensors関連ツールも再整備。

まずはcronな定期収集スクリプト/etc/cron.sh/sensors.cron。タイムスタンプとコア毎の温度を1行に出力するが、タイムスタンプはrsyslogと同じく「日付と時刻をTで繋ぐ」RFC3339形式で出力させる為、date"--rfc-3339=ns"を付与したのがポイント。

#!/bin/sh

LANG=C
LOGFILE=/var/log/sensors.log

TEMPERATURE=`/usr/bin/sensors | \
awk '/Core /{i=substr($2,1,length($2)-1);temp[i]=$3;};END{for(j=0;j<=i;j++){printf "\\\t%s", temp[j]}print}' | \
sed -e 's/\+//g'`

/bin/echo -e `date --rfc-3339=ns` ${TEMPERATURE} >> ${LOGFILE};
そして/etc/cron.d/sensorsで、cronから1分周期で起動し、温度をロギングするよう設定。
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

* * * * * root /etc/cron.sh/sensors.cron

続いて/etc/logrotate.d/sensorsでログファイルを月単位で分割し、12ヶ月分の履歴を保持する設定。

"/var/log/sensors.log" {
monthly
rotate 12
missingok
compress
}
最後に、分析スクリプト~/bin/logsensor.sh。コア毎の温度を集計し、最低、平均、最高温度を算出する。
#!/bin/bash

awk '
BEGIN {
min=999;max=0;sum=0;cnt=0;
}
{
for (i = 3; i <= NF; i++ ){
if($i < min){min=$i};
if(max < $i){max=$i};
sum += $i;
cnt++;
}

date=$1;
if(!length(start)){start=date;}
}
END {
printf "%s, %s, %f, %f, %f\n", start, date, min, sum/cnt, max;
}
' $*
で、こんな風にやれば
$ logsensor.sh /var/log/sensors.log
2014-05-01, 2014-05-13, 29.750000, 39.770078, 59.500000
$ logsensor.sh /var/log/sensors.log.1 /var/log/sensors.log
2014-04-01, 2014-05-13, 25.750000, 38.719467, 59.500000
という具合にログ期間の最低、平均、最高温度を出力する。