Это перевод страницы документации с английского языка. Помогите нам сделать его лучше.

6. Датчики

Каждый контроллер имеет свой собственный каталог в дереве 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 или другой) для подстановки имени.

Эта маркировка позволяет пользователю определить тип используемого оборудования. Если нет ни файла <тип><номер>_метка, ни метки внутри файла конфигурации, то тип оборудования может быть определён по атрибуту name (hwmon*/device/name). Реальные имена датчиков, которые воспринимает zabbix_agent, можно получить, запустив утилиту sensors с параметром «-u» (sensors -u).

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

Overview

Each sensor chip gets its own directory in the sysfs /sys/devices tree. To find all sensor chips, it is easier to follow the device symlinks from /sys/class/hwmon/hwmon*, where * is a real number (0,1,2,...).

The sensor readings are located either in /sys/class/hwmon/hwmon*/ directory for virtual devices, or in /sys/class/hwmon/hwmon*/device directory for non-virtual devices. A file, named name, located inside hwmon* or hwmon*/device directories contains the name of the chip, which corresponds to the name of the kernel driver used by the sensor chip.

There is only one sensor reading value per file. The common scheme for naming the files that contain sensor readings inside any of the directories mentioned above is: <type><number>_<item>, where

  • type - for sensor chips is "in" (voltage), "temp" (temperature), "fan" (fan), etc.
  • item - "input" (measured value), "max" (high threshold), "min" (low threshold), etc.
  • number - always used for elements that can be present more than once (usually starts from 1, except for voltages which start from 0). If files do not refer to a specific element they have a simple name with no number.

The information regarding sensors available on the host can be acquired using sensors-detect and sensors tools (lm-sensors package). Sensors-detect helps to determine which modules are necessary for available sensors. When modules are loaded the sensors program can be used to show the readings of all sensor chips. The labeling of sensor readings, used by this program, can be different from the common naming scheme (<type><number>_<item> ):

  • if there is a file called <type><number>_label, then the label inside this file will be used instead of <type><number><item> name;
  • if there is no <type><number>_label file, then the program searches inside the /etc/sensors.conf (could be also /etc/sensors3.conf, or different) for the name substitution.

This labeling allows user to determine what kind of hardware is used. If there is neither <type><number>_label file nor label inside the configuration file the type of hardware can be determined by the name attribute (hwmon*/device/name). The actual names of sensors, which zabbix_agent accepts, can be obtained by running sensors program with -u parameter (sensors -u).

In the sensors program the available sensors are separated by the bus type (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)

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

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. Согласно спецификации [en], это напряжения на выводах микросхемы и, в общем случае, может понадобиться масштабирование.

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

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

Compatibility

В Linux 2.4:

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

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

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

В Linux 2.6+:

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

  • устройство — имя устройства (не регулярное выражение). Имя устройства может быть фактическим именем устройства (e.g 0000:00:18.3) или именем, полученным при использовании утилиты sensors (e.g. 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]