6 传感器
概述
每个传感器芯片都会在 sysfs /sys/devices 树中拥有自己的目录。
要查找所有传感器芯片,最简单的方法是跟随 /sys/class/hwmon/hwmon* 中的设备符号链接,其中 * 是一个实际数字(0、1、2、...)。
传感器读数位于虚拟设备的 /sys/class/hwmon/hwmon*/ 目录中,或位于非虚拟设备的 /sys/class/hwmon/hwmon*/device 目录中。
位于 hwmon* 或 hwmon*/device 目录中的名为 name 的文件包含芯片名称,该名称对应于传感器芯片所使用的内核驱动程序名称。
每个文件只包含一个传感器读数值。
上述任一目录中包含传感器读数的文件,其通用命名格式为:<type><number>_<item>,其中
- type - 对于传感器芯片而言,表示 "in"(电压)、"temp"(温度)、"fan"(风扇)等。
- item - "input"(测量值)、"max"(高阈值)、"min"(低阈值)等。
- number - 始终用于可能出现多次的元素(通常从 1 开始,但电压从 0 开始)。 如果文件不对应某个特定元素,则它们只有一个简单名称,不带编号。
主机上可用的传感器信息可以通过 sensors-detect 和 sensors 工具获取(lm-sensors package)。
sensors-detect 有助于确定可用传感器所需的模块。
加载模块后,可以使用 sensors 程序显示所有传感器芯片的读数。
该程序使用的传感器读数标签可能与通用命名格式(<type><number>_<item>)不同:
- 如果存在名为
<type><number>_label的文件,则会使用该文件中的标签,而不是<type><number><item>名称; - 如果不存在
<type><number>_label文件,则程序会在/etc/sensors.conf(也可能是/etc/sensors3.conf,或其他位置)中查找名称替换。
这种标签机制使用户能够确定所使用的硬件类型。
如果既没有 <type><number>_label 文件,也没有配置文件中的标签,则可以通过名称属性(hwmon*/device/name)确定硬件类型。
zabbix_agent 可接受的传感器实际名称,可以通过使用 -u 参数运行 sensors 程序获得(sensors -u)。
在 sensors 程序中,可用传感器按总线类型进行分组(ISA adapter、PCI adapter、SPI adapter、Virtual device、ACPI interface、HID adapter)。
获取传感器标识符
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。
根据内核 hwmon sysfs 规范,这些是芯片引脚上的电压,通常可能需要进行缩放。
zabbix_get -s 127.0.0.1 -k sensor[lm85-i2c-0-2e,in1]
1.301000
Zabbix 不仅可以获取电压(in),还可以获取电流(curr)、温度(temp)和风扇转速(fan)读数。
兼容性
旧版发行版
传感器读数从 /proc/sys/dev/sensors 目录获取:
- device - 设备名称(如果使用 <mode>,则为正则表达式)
- sensor - 传感器名称(如果使用 <mode>,则为正则表达式)
- mode - 可选值:
avg、max、min(如果省略此参数,则 device 和 sensor 按字面值处理)
示例键:sensor[w83781d-i2c-0-2d,temp1]。
当前发行版
传感器读数从 /sys/class/hwmon 目录获取:
- device - 设备名称(非正则表达式)。
设备名称可以是设备的实际名称(例如
0000:00:18.3),也可以是使用 sensors 程序获取的名称(例如k8temp-pci-00c3)。 由用户自行选择使用哪种名称。 - sensor - 传感器名称(非正则表达式)。
- mode - 可能的值:
avg、max、min(如果省略此参数,则按原样处理 device 和 sensor)。
示例键:
sensor[k8temp-pci-00c3,temp,max] 或 sensor[0000:00:18.3,temp1]。
sensor[smsc47b397-isa-0880,in,avg] 或 sensor[smsc47b397.2176,in1]。