lm-sensorsでLinuxサーバーの温度管理をマスターする:CPUが「火を吹く」前に対策を

Monitoring tutorial - IT technology blog
Monitoring tutorial - IT technology blog

サーバーが「火を吹く」とどうなるか?

数年前、私は小規模なデータセンターでサーバー群を管理していました。ある週末の昼下がり、システムが異常に重くなり、突然シャットダウンしてしまいました。iDRAC経由でログインして確認したところ、CPU温度が95°Cに達しているのを見て愕然としました。原因は、埃が詰まっていつの間にか回転が止まっていた冷却ファンでした。

皮肉なことに、topやhtopだけを見ていても、どのソフトウェアがどれだけRAMやCPUを消費しているかしか分かりません。マシンの物理的な健康状態については全くの盲目なのです。サーバーが熱で「悲鳴」を上げていたり、電圧が不安定だったりしても、監視ツールがなければ手遅れになるまで気づくことはできません。

なぜLinuxは事前に教えてくれないのか?

現代のマザーボードには、温度や電圧を測定するためのセンサーが多数搭載されています。しかし、Linuxはデフォルトでこれらの数値を直感的に表示してくれるわけではありません。

主な原因はハードウェアの断片化です。ITE、Winbond、Fintekといった各センサーチップメーカーは、I2CやSMBusを介した独自の通信方法を持っています。Linuxカーネルがデータを読み取るには、適切なドライバーが必要です。適切なモジュールがロードされていないと、オペレーティングシステムはそれらの数値が何を意味するのか理解できないのです。

一般的な3つの温度監視方法

システム管理者は通常、以下のいずれかの方法を選択します:

  • BIOS/IPMI経由で確認: 精度は完璧ですが、再起動が必要だったり、リモート管理カード(iDRAC、ILO)が必要だったりします。OS稼働中にリアルタイムで監視するには不向きです.
  • /sys/class/hwmon/ から直接ファイルを読み取る: 上級者向けの方法です。ミリ摂氏で値が格納されているファイルを探し出し、1000で割る必要があります。非常に覚えにくく、手間がかかります。
  • lm-sensorsを使用する: これが標準的な解決策です。センサーを自動的に検出し、ドライバーをロードして、データを整理して表示してくれます。

5分でできるlm-sensorsのインストールと設定

lm-sensorsは軽量で、ZabbixやGrafanaのような大規模なシステムにも統合しやすいため、私はこれをお勧めしています。

ステップ1:パッケージのインストール

DebianまたはUbuntuの場合は、次のコマンドを使用します:

sudo apt update && sudo apt install lm-sensors

CentOS/RHELまたはAlmaLinuxを使用している場合:

sudo yum install lm_sensors

ステップ2:センサーの検出 (Sensor Detection)

インストールしただけでは、sensorsコマンドを実行しても何も表示されません。マザーボード全体をスキャンするために検出ウィザードを実行する必要があります。

sudo sensors-detect

インストーラーが対話形式で一連のYes/Noの質問をしてきます。私の経験上、最後まで YES と入力(またはEnterを押す)し続けて問題ありません。最後の /etc/modules にモジュールを自動追加するかどうかの質問には、再起動時にセンサーが自動的にロードされるよう YES を選択してください。

ステップ3:ドライバーの即時ロード

サーバーを再起動せずに、検出されたドライバーモジュールをロードするには、次のコマンドを実行します:

sudo systemctl restart kmod

または、センサーチップが分かっている場合は sudo modprobe [モジュール名] で手動ロードすることも可能です。

ステップ4:結果の読み取り

では、次のコマンドを入力してみましょう:

sensors

結果は以下のように詳細に表示されます:

coretemp-isa-0000
Package id 0:  +45.0°C  (high = +80.0°C, crit = +100.0°C)
Core 0:         +42.0°C  (high = +80.0°C, crit = +100.0°C)

it8728-isa-0a30
fan1:        1200 RPM  (min =    0 RPM)
temp1:        +35.0°C  (low  = +127.0°C, high = +127.0°C)

Package id 0(CPU全体の温度)と crit(危険しきい値)に注目してください。温度がcritに達すると、CPUはハードウェア保護のために自動的にクロック周波数を下げます(スロットリング)。

実践的なアドバイス:「通知慣れ」の罠を避ける

私が過去に犯した典型的な失敗は、アラートを敏感にしすぎたことです。CPUが70°Cを超えるたびにTelegramに通知が飛ぶように設定したことがありました。

その結果、docker-compose build を実行するたびにスマートフォンが鳴り続けました。1週間後、私は通知に嫌気がさしてオフにしてしまいました。そして、本当にサーバーが異常過熱した時に、その通知を見逃してしまったのです。

アドバイス: 1週間ほど平均温度(ベースライン)を観察してください。通常50°Cで動作しているサーバーなら、警告(Warning)を80°C、緊急アラート(Critical)を90°Cに設定しましょう。一時的な変動で重要な情報が埋もれないようにすることが大切です。

超軽量Bashスクリプトによる自動化

大掛かりな監視システムがなくても、自分専用の小さな「観測所」を作ることができます。これは私がログを記録するためによく使っているスクリプトです:

#!/bin/bash
# CPU温度チェック用スクリプト
THRESHOLD=85
CURRENT_TEMP=$(sensors | grep "Package id 0" | grep -oE '[0-9]{2,3}' | head -1)
LOG_FILE="/var/log/cpu_temp.log"

echo "$(date): $CURRENT_TEMP°C" >> $LOG_FILE

if [ "$CURRENT_TEMP" -gt "$THRESHOLD" ]; then
    echo "警告: CPU温度が $CURRENT_TEMP°C に達しました" | mail -s "CPU温度アラート" [email protected]
fi

chmod +x で実行権限を与え、crontab に登録して5分ごとに実行するようにすれば、安心して枕を高くして眠ることができます。

ハードウェアの監視は、決して無駄にはなりません。このガイドが、24時間365日稼働し続けるあなたのマシンをより良く管理する助けになれば幸いです。

Share: