每个传感器芯片在sysfs的/sys/devices目录树中都有其专属目录。要查找所有传感器芯片,更简便的方法是跟踪/sys/class/hwmon/hwmon(其中代表实际数字0、1、2等)下的设备符号链接。
传感器读数位于虚拟设备的/sys/class/hwmon/hwmon目录,或非虚拟设备的/sys/class/hwmon/hwmon/device目录中。hwmon或hwmon/device目录下的name文件包含芯片名称,对应传感器芯片使用的内核驱动名称。
每个文件仅包含一个传感器读数。上述目录中传感器读数文件的通用命名规则为: <类型><编号>_<监控项>,其中:
可通过sensor-detect和sensors工具(lm-sensors包:http://lm-sensors.org/)获取主机上的传感器信息。sensors-detect帮助确定可用传感器所需的模块。加载模块后,sensors程序可显示所有传感器芯片的读数。该程序使用的传感器读数标签可能不同于通用命名规则(<类型><编号>_<监控项>):
这种标签机制使用户能识别硬件类型。若既无标签文件也无配置文件中的标签,可通过name属性(hwmon*/device/name)确定硬件类型。zabbix_agent接受的传感器实际名称可通过带-u参数的sensors程序(sensors -u)获取。
sensor程序中可用传感器按总线类型分类(ISA适配器、PCI适配器、SPI适配器、虚拟设备、ACPI接口、HID适配器)。
(传感器读数从/proc/sys/dev/sensors目录获取)
示例键值:sensor[w83781d-i2c-0-2d,temp1]
在Zabbix 1.8.4版本之前,使用sensor[temp1]格式。
(传感器读数从/sys/class/hwmon目录获取)
示例键值:
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 (最小值 = +0.00 V, 最大值 = +3.32 V)
Vcore: +1.15 V (最小值 = +0.00 V, 最大值 = +2.99 V)
+3.3V: +3.30 V (最小值 = +2.97 V, 最大值 = +3.63 V)
+12V: +13.00 V (最小值 = +0.00 V, 最大值 = +15.94 V)
M/B Temp: +30.0°C (最低值 = -127.0°C, 最高值 = +127.0°C)
其中只有一种标签可以直接使用:
尝试使用其他标签(如Vcore或+12V)将无法正常工作:
要查找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。根据specification,这些是芯片引脚上的电压值,通常可能需要进行比例转换。
Zabbix不仅可以获取电压(in)读数,还能获取电流(curr)、温度(temp)和风扇转速(fan)的读数。