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
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> ):
<type><number>_label, then the label inside this file will be used instead of <type><number><item> name;<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).
Sensor labels, as printed by the sensors command, cannot always be used directly because labeling varies between chip vendors. For example, sensors output might contain the following lines:
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)Out of these, only one display name corresponds directly to an internal identifier:
Attempting to use other display labels (like Vcore or +12V) will not work:
To find the internal sensor identifier that Zabbix accepts, run sensors -u. In the output, the following may be observed:
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
...So the Vcore label corresponds to identifier in1, and +12V corresponds to in4. According to the kernel hwmon sysfs specification, these are voltages on chip pins and generally speaking may need scaling.
Not only voltage (in), but also current (curr), temperature (temp) and fan speed (fan) readings can be retrieved by Zabbix.
Sensor readings are obtained from /proc/sys/dev/sensors directory:
Example key: sensor[w83781d-i2c-0-2d,temp1].
Sensor readings are obtained from /sys/class/hwmon directory:
0000:00:18.3) or the name acquired using sensors program (e.g. k8temp-pci-00c3). It is up to the user to choose which name to use.avg, max, min (if this parameter is omitted, device and sensor are treated verbatim).Example keys:
sensor[k8temp-pci-00c3,temp,max] or sensor[0000:00:18.3,temp1].
sensor[smsc47b397-isa-0880,in,avg] or sensor[smsc47b397.2176,in1].