# 7 Сенсор

Каждый сенсор получает имеет собственную папку в 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). Если файлы
    не ссылаются на определенные элементы, они имеют простое
    наименование без цифр.

Информация в отношении сенсоров доступна на хосте и её можно получить
утилитами **sensor-detect** и **sensors** (пакет lm-sensors:
<http://lm-sensors.org/>). **Sensors-detect** помогает определить, какие
модули необходимы для доступных сенсоров. Когда модули загружены, можно
использовать утилиту **sensors**, чтобы получить значения со всех
сенсоров. Маркировка значений сенсоров используемая данной утилитой,
может отличаться от приведенной выше схемы
(<тип><номер>\_<элемент>).

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

Данная маркировка позволяет пользователям определить, какой тип
оборудования используется. Если там нет ни
<тип><номер>\_метка файл, ни метка в файле конфигурации,
тогда тип оборудования можно определить по имени атрибута
(hwmon\*/device/name). Фактические имена сенсоров, которые принимает
zabbix\_agent, можно получить, запустив программу **sensors** c -u
параметром (**sensors -u**).

В программе **sensor** доступные сенсоры разделены по типу шины (ISA
adapter, PCI adapter, SPI adapter, Virtual device, ACPI interface, HID
adapter).

##### В Linux 2.4:

(Значения сенсоров извлекаются из папки /proc/sys/dev/sensors)

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

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

До версии Zabbix 1.8.4, использовался следующий формат sensor\[temp1\].

##### В Linux 2.6+:

(Значения сенсоров извлекаются из директории /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\]

#### Получение имен сенсоров

Метки сенсоров, согласно вывода программы *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)

В этом случае, может быть использована только одна метка:

    $ 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*, и *+12V* следует
опрашивать как *in4*.[^1]

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

Не только напряжение (in), но а также значения тока (curr), температуры
(temp) и скорости вращения вентилятора (fan) можно получать в Zabbix.

[^1]: В соответствии со
    [спецификацией](https://www.kernel.org/doc/Documentation/hwmon/sysfs-interface),
    это значения вольт на ножках чипов и, проще говоря, возможно
    нуждаются в масштабировании.
