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-detectsensors 工具获取(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 - 可选值:avgmaxmin(如果省略此参数,则 device 和 sensor 按字面值处理)

示例键:sensor[w83781d-i2c-0-2d,temp1]

当前发行版

传感器读数从 /sys/class/hwmon 目录获取:

  • device - 设备名称(非正则表达式)。 设备名称可以是设备的实际名称(例如 0000:00:18.3),也可以是使用 sensors 程序获取的名称(例如 k8temp-pci-00c3)。 由用户自行选择使用哪种名称。
  • sensor - 传感器名称(非正则表达式)。
  • mode - 可能的值:avgmaxmin(如果省略此参数,则按原样处理 device 和 sensor)。

示例键:

sensor[k8temp-pci-00c3,temp,max]sensor[0000:00:18.3,temp1]

sensor[smsc47b397-isa-0880,in,avg]sensor[smsc47b397.2176,in1]