每个传感器芯片在sysfs的/sys/devices树状结构中都有其专属目录。 要查找所有传感器芯片,更简便的方法是跟踪来自/sys/class/hwmon/hwmon*的设备符号链接, 其中*代表实际数字(0,1,2,...)。
传感器读数位于虚拟设备的/sys/class/hwmon/hwmon*/目录, 或非虚拟设备的/sys/class/hwmon/hwmon*/device目录中。一个名为file的文件, 位于hwmon*或hwmon*/device目录内,包含芯片名称, 对应传感器芯片所使用的内核驱动名称。
每个file仅包含一个传感器读数值。上述任一目录中, 包含传感器读数的文件命名通用规则为: <类型><编号>_<监控项>,其中
type - 对传感器芯片而言是"in"(电压)、"temp"(温度)、 "fan"(风扇)等,
监控项 - "input"(测量值)、"max"(高阈值)、"min" (低阈值)等,
number - 始终用于可能存在多个元素的场景
once (usually starts from 1, except for voltages which start from 0). If files do not refer to a specific element they have a simple name with no number.
关于主机上可用传感器的信息可通过 sensor-detect和sensors工具(lm-sensors包: http://lm-sensors.org/)获取。Sensors-detect帮助确定 可用传感器所需的模块。加载模块后, sensors程序可显示所有传感器芯片的读数。该程序使用的 传感器读数标签可能不同于通用命名规则 (<类型><编号>_<监控项>):
若存在名为<类型><编号>_label的file, 则该file内的标签将替代 <类型><编号><监控项>名称;
若不存在<类型><编号>_label的file,则
program searches inside the /etc/sensors.conf (could be also /etc/sensors3.conf, or different) for the name substitution.
这种标签机制使用户能确定所用硬件类型。如果 既无<类型><编号>_label的file也无配置file中的标签, 硬件类型可通过name属性(hwmon*/device/name)确定。zabbix_agent 接受的传感器实际名称可通过带-u参数运行sensors程序 (sensors -u)获取。
在sensor程序中,可用传感器按总线类型分隔 (ISA适配器、PCI适配器、SPI适配器、虚拟设备、ACPI 接口、HID适配器)。
(传感器读数从/proc/sys/dev/sensors目录获取)
device - 设备名称(若使用<mode>参数,则作为正则表达式);
sensor - 传感器名称(若使用<mode>参数,则作为正则表达式);
mode - 可选值: avg, max, min (若指定此参数
omitted, device and sensor are treated verbatim).
示例键值: sensor[w83781d-i2c-0-2d,temp1]
在Zabbix 1.8.4版本之前,使用sensor[temp1]格式。
(传感器读数从/sys/class/hwmon目录获取)
device - 设备名称(非正则表达式)。设备名称可以是实际设备名称(如0000:00:18.3)或使用sensors程序获取的名称(如k8temp-pci-00c3)。用户可自行选择使用哪种名称;
sensor - 传感器名称(非正则表达式);
mode - 可选值: avg, max, min (如果该参数是
omitted, device and sensor are treated verbatim).
示例键值:
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)
其中只有一个标签可以直接使用:
尝试使用其他标签(如Vcore或+12V)将无法生效。
要获取Zabbix可用的实际传感器名称(用于读取传感器数据),需执行run 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)数据。