[comment]: # translation:outdated

[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` для невиртуальных устройств.
Файл с именем `name`, расположенный в папках `hwmon*` или `hwmon*/device`, содержит имя чипа, которое соответствует имени драйвера ядра, используемого контроллером датчика.

В каждом файле имеется только одно значение показания датчика.
Общая схема именования файлов, которые содержат показания датчиков, внутри любой из вышеупомянутых папок: <тип><номер>_<элемент>, где

-   **тип** — для чипов датчиков «in» (напряжение), «temp» (температура), «fan» (скорость вентилятора) и т.д.
-   **элемент** — «input» (измеренное значение), «max» (верхний порог), «min» (нижний порог) и т.д.
-   **номер** — всегда используется для экземпляров, которые могут присутствовать более одного раза (обычно начинается с 1, за исключением датчиков напряжения, которые начинаются с 0).
Если файлы не относятся к конкретным экземплярам, они имеют простое наименование без номера.

Информацию о датчиках, доступных на хосте, можно получить с помощью инструментов **sensors-detect** и **sensors** ([пакет lm-sensors \[en\]](https://docs.kernel.org/hwmon/sysfs-interface.html)).
**Sensors-detect** помогает определить, какие модули необходимы для доступных датчиков.
Когда модули загружены, можно использовать утилиту  **sensors**, чтобы отобразить показания со всех контроллеров.
Маркировка показаний датчиков, используемая данной утилитой, может отличаться от общепринятой схемы именования (`<тип><номер>_<элемент>` ):

-   если имеется файл с именем `<тип><номер>_метка`, то вместо имени `<тип><номер>_<элемент>` будет использоваться метка внутри этого файла;
-   если файл `<тип><номер>_метка` отсутствует, то для подстановки имени утилита выполняет поиск внутри `/etc/sensors.conf` (также может быть `/etc/sensors3.conf` или другой).

Эта маркировка позволяет пользователю определить тип используемого оборудования.
Если нет ни файла `<тип><номер>_метка`, ни метки внутри файла конфигурации, то тип оборудования может быть определён по атрибуту имени (`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)
```

Из них только одно отображаемое имя напрямую соответствует внутреннему идентификатору:

```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`.
Согласно [спецификации \[en\]](https://docs.kernel.org/hwmon/sysfs-interface.html) hwmon sysfs ядра, это напряжения на выводах микросхемы и, в общем случае, может понадобиться масштабирование.

```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`:

-   **устройство** — имя устройства (если <режим> используется, это регулярное выражение)
-   **датчик** — имя датчика (если используется <режим>, это регулярное выражение)
-   **режим** — возможные значения: avg, max, min (если этот параметр не указан, устройство и сенсор обрабатываются буквально)

Пример ключа: `sensor[w83781d-i2c-0-2d,temp1]`.

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

[comment]: # ({9e54fe4b-2e1edda6})
##### Текущие дистрибутивы

Показания датчиков извлекаются из папки `/sys/class/hwmon`:

-   **устройство** — имя устройства (не регулярное выражение).
Имя устройства может быть фактическим именем устройства (например, `0000:00:18.3`) или именем, полученным при использовании утилиты sensors (например, `k8temp-pci-00c3`).
Выбор того, какое из этих имён использовать, оставлен за пользователем.
-   **датчик** — имя датчика (не регулярное выражение).
-   **режим** — возможные значения: `avg`, `max`, `min` (если этот параметр не указан, устройство и сенсор обрабатываются буквально).

Примеры ключей:

`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})
