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 1. 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.2

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

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


  1. Пакет lm-sensors: http://lm-sensors.org/↩︎

  2. В соответствии со спецификацией, это значения вольт на ножках чипов и, проще говоря, возможно нуждаются в масштабировании.↩︎