Датчики

Каждый контроллер имеет свою собственную директорию в дереве 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). 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). В Linux 2.4 показания датчиков извлекаются из директории /proc/sys/dev/sensors:
  • устройство – имя устройства (если используется <режим>, это регулярное выражение);
  • сенсор – имя датчика (если используется <режим>, это регулярное выражение);
  • режим – возможные значения: avg, max, min (если этот параметр не указан, устройство и сенсор обрабатываются буквально).

Пример ключа:

sensor[w83781d-i2c-0-2d,temp1]

В Linux 2.6 и более поздних показания датчиков извлекаются из директории /sys/class/hwmon:

  • device – имя устройства (не регулярное выражение). Имя устройства может быть фактическим именем устройства (например, 0000:00:18.3) или именем, полученным при использовании утилиты sensors (например, k8temp-pci-00c3). Выбор того, какое из этих имен использовать, оставлен за пользователем;
  • sensor – имя датчика (не регулярное выражение);
  • mode – возможные значения: 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

Чтобы найти фактическое имя датчика, которое можно использовать в Подсистеме для получения его показаний, запускают "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).