地方在住IT系ニート

bkds

Linuxノードの温度管理のメモ

はじめに

物理サーバにProxmoxを導入している。 Proxmoxノードのハードウェアについて温度管理をしたい。 今回は、lm-sensorstelegrafsmartctlnvmeを利用してGrafanaで閲覧できるようにする。

lm-sensorsとは

lm-sensorsは、CPUやマザーボード上のセンサーチップから情報を取得し、以下のようなハードウェアの状態を確認できるツールです。

  • CPU温度
  • マザボ温度
  • ファン回転数
  • GPU温度

telegrafとは

InfluxDataが作成したツールで、以下のような用途でりようされます。

  • システムリソースの監視(CPU、メモリ、ディスクなど)
  • 外部アプリやサービスからのメトリクス取得
  • 取得したデータの InfluxDB などへの転送
  • スクリプト出力やログファイルの取り込みにも対応

smartctl・nvmeとは

smartctlは、SATA HDD/SSDなどのS.M.A.R.T対応デバイスの状態を確認できるツールです。 nvmeは、NVMeインターフェースのSSDに対応したデバイスの状態を確認できるツールです。

ツールの導入

監視に利用するツールをインストールしていきます。

# influxdata-archive_compat.key GPG fingerprint:
#     9D53 9D90 D332 8DC7 D6C8 D3B9 D8FF 8E1F 7DF8 B07E
wget -q https://repos.influxdata.com/influxdata-archive_compat.key
echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null
echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | tee /etc/apt/sources.list.d/influxdata.list
apt-get update

# ツールのインストール
apt install telegraf lm-sensors smartmontools nvme-cli

インストール後は、telegrafの設定を進めます。 lm-sensorsやsmartctlなどは、telegrafのプラグインとして利用しています。 今回はSATA SSDのみが対象であったため、nvmeは利用していません。 収集した状況はinfluxdbに追加しています。influxdbについてはこちらを参考にインストールしてください。

# コメントアウトされているものを有効に
[inputs.sensors](/posts/inputs.sensors)

[inputs.smart](/posts/inputs.smart)
  devices = ["/dev/sda"]
  attributes = true

[outputs.influxdb_v2](/posts/outputs.influxdb_v2)
	urls = ["http://192.168.0.1:8086"]
	token = "xxxxxxxxxxxxxxxxxxxxxxxx"
	organization = "org"
	bucket = "buc"

データ取得にsudo権限だが、sudoが利用できない環境のためrootで実行するように変更します。

User=root

設定が完了したので、telegrafを起動します。

systemctl start telegraf
systemctl status telegraf

ダッシュボードの作成

ダッシュボードはGrafanaに作成します。インストール方法はこちらを参考にしてください。 クエリとその結果が以下になります。

SELECT mean("temp_input") FROM "sensors" WHERE $timeFilter GROUP BY time($__interval) fill(previous)

linux_cpu_temperature

SELECT mean("temp_c") FROM "smart_device" WHERE $timeFilter GROUP BY time($__interval) fill(previous)

linux_ssd_temperature

<-- Back to home
にほんブログ村 IT技術ブログ IT技術メモへPVアクセスランキング にほんブログ村