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

という具合にログ期間の最低、平均、最高温度を出力する。

参照

UbuntuによるEco Linuxサーバ構築記 http://eco.senritu.net/

Ubuntu Wiki https://wiki.ubuntu.com/

Wikipedia http://ja.wikipedia.org/wiki/