6 センサー

概要

各センサーチップは、sysfs の /sys/devices ツリー内にそれぞれ専用のディレクトリを持ちます。 すべてのセンサーチップを見つけるには、/sys/class/hwmon/hwmon* からデバイスのシンボリックリンクをたどる方が簡単です。ここで * は実際の数値 (0,1,2,...) です。

センサーの読み取り値は、仮想デバイスの場合は /sys/class/hwmon/hwmon*/ ディレクトリに、非仮想デバイスの場合は /sys/class/hwmon/hwmon*/device ディレクトリにあります。 hwmon* または hwmon*/device ディレクトリ内にある name という名前のファイルにはチップ名が含まれており、これはそのセンサーチップで使用されているカーネルドライバー名に対応します。

1 つのファイルには 1 つのセンサー読み取り値しか含まれません。 上記のいずれのディレクトリ内でも、センサー読み取り値を含むファイルの一般的な命名規則は <type><number>_<item> です。ここで

  • type - センサーチップでは "in" (電圧)、"temp" (温度)、"fan" (ファン) などです。
  • item - "input" (測定値)、"max" (上限しきい値)、"min" (下限しきい値) などです。
  • number - 複数存在し得る要素には常に使用されます (通常は 1 から始まりますが、電圧は 0 から始まります)。 ファイルが特定の要素を参照しない場合は、番号のない単純な名前になります。

ホストで利用可能なセンサーに関する情報は、sensors-detect および sensors ツール (lm-sensors package) を使用して取得できます。 Sensors-detect は、利用可能なセンサーに必要なモジュールを判別するのに役立ちます。 モジュールがロードされると、sensors プログラムを使用してすべてのセンサーチップの読み取り値を表示できます。 このプログラムで使用されるセンサー読み取り値のラベルは、一般的な命名規則 (<type><number>_<item> ) と異なる場合があります。

  • <type><number>_label というファイルがある場合、<type><number><item> 名の代わりに、そのファイル内のラベルが使用されます。
  • <type><number>_label ファイルがない場合、プログラムは /etc/sensors.conf (または /etc/sensors3.conf、あるいは別の場所) 内で名前の置換を検索します。

このラベル付けにより、ユーザーはどの種類のハードウェアが使用されているかを判断できます。 <type><number>_label ファイルも設定ファイル内のラベルも存在しない場合、ハードウェアの種類は name 属性 (hwmon*/device/name) によって判別できます。 zabbix_agent が受け付ける実際のセンサー名は、sensors プログラムを -u パラメータ付きで実行することで取得できます (sensors -u)。

sensors プログラムでは、利用可能なセンサーはバスの種類ごとに分けて表示されます (ISA adapter、PCI adapter、SPI adapter、Virtual device、ACPI interface、HID adapter)。

センサー識別子の取得

sensors コマンドで表示されるセンサーラベルは、チップベンダーによってラベル付けが異なるため、常にそのまま直接使用できるとは限りません。 例えば、sensors の出力には次のような行が含まれる場合があります。

sensors
in0:         +2.24 V  (min =  +0.00 V, max =  +3.32 V)   
Vcore:       +1.15 V  (min =  +0.00 V, max =  +2.99 V)   
+3.3V:       +3.30 V  (min =  +2.97 V, max =  +3.63 V)   
+12V:       +13.00 V  (min =  +0.00 V, max = +15.94 V)
M/B Temp:    +30.0°C  (low  = -127.0°C, high = +127.0°C)

これらのうち、表示名が内部識別子に直接対応しているのは 1 つだけです。

zabbix_get -s 127.0.0.1 -k sensor[lm85-i2c-0-2e,in0]
2.240000

他の表示ラベル(Vcore+12V など)を使用しようとしても動作しません。

zabbix_get -s 127.0.0.1 -k sensor[lm85-i2c-0-2e,Vcore]
ZBX_NOTSUPPORTED

Zabbix が受け付ける内部センサー識別子を確認するには、sensors -u を実行します。 出力には次のような内容が表示される場合があります。

sensors -u
...
Vcore:
  in1_input: 1.15
  in1_min: 0.00
  in1_max: 2.99
  in1_alarm: 0.00
...
+12V:
  in4_input: 13.00
  in4_min: 0.00
  in4_max: 15.94
  in4_alarm: 0.00
...

したがって、Vcore ラベルは識別子 in1 に対応し、+12Vin4 に対応します。 カーネルの hwmon sysfs 仕様によると、これらはチップのピン上の電圧であり、一般的にはスケーリングが必要になる場合があります。

zabbix_get -s 127.0.0.1 -k sensor[lm85-i2c-0-2e,in1]
1.301000

Zabbix では、電圧(in)だけでなく、電流(curr)、温度(temp)、ファン速度(fan)の読み取り値も取得できます。

互換性

レガシーディストリビューション

センサーの読み取り値は、/proc/sys/dev/sensors ディレクトリから取得されます。

  • device - デバイス名(<mode> が使用されている場合は、正規表現です)
  • sensor - センサー名(<mode> が使用されている場合は、正規表現です)
  • mode - 使用可能な値: avgmaxmin(このパラメータが省略された場合、device と sensor はそのままの文字列として扱われます)

キーの例: sensor[w83781d-i2c-0-2d,temp1]

現在のディストリビューション

センサーの読み取り値は /sys/class/hwmon ディレクトリから取得されます。

  • device - デバイス名(正規表現ではありません)。 デバイス名には、実際のデバイス名(例: 0000:00:18.3)または sensors プログラムを使用して取得した名前(例: k8temp-pci-00c3)を指定できます。 どちらの名前を使用するかはユーザーが選択します。
  • sensor - センサー名(正規表現ではありません)。
  • mode - 指定可能な値: avgmaxmin(このパラメータを省略した場合、device と sensor はそのままの値として扱われます)。

キーの例:

sensor[k8temp-pci-00c3,temp,max] または sensor[0000:00:18.3,temp1]

sensor[smsc47b397-isa-0880,in,avg] または sensor[smsc47b397.2176,in1]