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 文件,配置文件中也没有标签,则可以通过 name 属性(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]。