[comment]: # ({1035fd30-b33b8329})
# 6 センサー

[comment]: # ({/1035fd30-b33b8329})

[comment]: # ({752b9468-eaab320d})
#### 概要

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

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

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

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

ホストで利用可能なセンサーに関する情報は、**sensors-detect** および **sensors** ツール ([lm-sensors package](https://docs.kernel.org/hwmon/sysfs-interface.html)) を使用して取得できます。
**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)。

[comment]: # ({/752b9468-eaab320d})

[comment]: # ({397aa635-0cb28aa9})
#### センサー識別子の取得

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

```bash
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 つだけです。

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

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

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

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

```bash
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` に対応し、`+12V` は `in4` に対応します。
カーネル hwmon sysfs の[仕様](https://docs.kernel.org/hwmon/sysfs-interface.html)によると、これらはチップのピン上の電圧であり、一般的にはスケーリングが必要になる場合があります。

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

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

[comment]: # ({/397aa635-0cb28aa9})

[comment]: # ({5b2a0096-8c111a00})
#### 互換性

[comment]: # ({/5b2a0096-8c111a00})

[comment]: # ({f66e4878-61bf6279})
##### レガシーディストリビューション

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

-   **device** - デバイス名（<mode> を使用する場合は、正規表現です）
-   **sensor** - センサー名（<mode> を使用する場合は、正規表現です）
-   **mode** - 使用可能な値: `avg`、`max`、`min`（このパラメータを省略した場合、device と sensor はそのままの値として扱われます）

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

[comment]: # ({/f66e4878-61bf6279})

[comment]: # ({9e54fe4b-2e1edda6})
##### 現在のディストリビューション

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

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

キーの例:

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

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

[comment]: # ({/9e54fe4b-2e1edda6})
