6 Датчик

Обзор

Каждый чип датчика получает собственный каталог в дереве sysfs /sys/devices. Чтобы найти все чипы датчиков, проще перейти по символьным ссылкам устройств из /sys/class/hwmon/hwmon*, где * — это действительное число (0,1,2,...).

Показания датчиков находятся либо в каталоге /sys/class/hwmon/hwmon*/ для виртуальных устройств, либо в каталоге /sys/class/hwmon/hwmon*/device для невиртуальных устройств. Файл с именем name, расположенный внутри каталогов hwmon* или hwmon*/device, содержит имя чипа, которое соответствует имени драйвера ядра, используемого этим чипом датчика.

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

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

Информацию о датчиках, доступных на узле сети, можно получить с помощью инструментов sensors-detect и sensors (пакет lm-sensors). 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, адаптер PCI, адаптер SPI, виртуальное устройство, интерфейс ACPI, адаптер HID).

Получение идентификаторов датчиков

Метки датчиков, выводимые командой 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, а +12Vin4. Согласно спецификации kernel 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 — возможные значения: avg, max, min (если этот параметр опущен, device и sensor обрабатываются буквально)

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

Текущие дистрибутивы

Показания датчиков получаются из каталога /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].