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 文件,配置文件中也没有标签,则可以通过 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 - 可能的值: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]