8 传感器

每个传感器芯片在sysfs的/sys/devices目录树中都有其专属目录。要查找所有传感器芯片,更简便的方法是跟踪/sys/class/hwmon/hwmon(其中代表实际数字0、1、2等)下的设备符号链接。

传感器读数位于虚拟设备的/sys/class/hwmon/hwmon目录,或非虚拟设备的/sys/class/hwmon/hwmon/device目录中。hwmon或hwmon/device目录下的name文件包含芯片名称,对应传感器芯片使用的内核驱动名称。

每个文件仅包含一个传感器读数。上述目录中传感器读数文件的通用命名规则为: <类型><编号>_<监控项>,其中:

  • 类型 - 传感器芯片类型如"in"(电压)、"temp"(温度)、"fan"(风扇)等
  • 监控项 - "input"(测量值)、"max"(高阈值)、"min"(低阈值)等
  • 编号 - 用于可能重复出现的元件(通常从1开始,电压除外,从0开始)。若文件不特指某个元件,则使用不含编号的简单名称。

可通过sensor-detectsensors工具(lm-sensors包:http://lm-sensors.org/)获取主机上的传感器信息。sensors-detect帮助确定可用传感器所需的模块。加载模块后,sensors程序可显示所有传感器芯片的读数。该程序使用的传感器读数标签可能不同于通用命名规则(<类型><编号>_<监控项>):

  • 若存在<类型><编号>_label文件,则使用该文件内的标签替代<类型><编号><监控项>名称
  • 若无此文件,程序将在/etc/sensors.conf(也可能是/etc/sensors3.conf等)中查找名称替换

这种标签机制使用户能识别硬件类型。若既无标签文件也无配置文件中的标签,可通过name属性(hwmon*/device/name)确定硬件类型。zabbix_agent接受的传感器实际名称可通过带-u参数的sensors程序(sensors -u)获取。

sensor程序中可用传感器按总线类型分类(ISA适配器、PCI适配器、SPI适配器、虚拟设备、ACPI接口、HID适配器)。

在 Linux 2.4 系统中:

(传感器读数从/proc/sys/dev/sensors目录获取)

  • device - 设备名称(若使用<mode>参数,则作为正则表达式处理);
  • sensor - 传感器名称(若使用<mode>参数,则作为正则表达式处理);
  • mode - 可选值:avg(平均值)、max(最大值)、min(最小值)(若省略此参数,device和sensor将按字面值处理)。

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

在Zabbix 1.8.4版本之前,使用sensor[temp1]格式。

在 Linux 2.6+ 系统上:

(传感器读数从/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]

获取传感器名称

sensors命令输出的传感器标签通常不能直接使用,因为不同传感器芯片厂商对标签的命名方式可能不同。例如,sensors输出可能包含以下内容:

$ sensors
       in0:         +2.24 V  (最小值 =  +0.00 V, 最大值 =  +3.32 V)   
       Vcore:       +1.15 V  (最小值 =  +0.00 V, 最大值 =  +2.99 V)   
       +3.3V:       +3.30 V  (最小值 =  +2.97 V, 最大值 =  +3.63 V)   
       +12V:       +13.00 V  (最小值 =  +0.00 V, 最大值 = +15.94 V)
       M/B Temp:    +30.0°C  (最低值 = -127.0°C, 最高值 = +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。根据specification,这些是芯片引脚上的电压值,通常可能需要进行比例转换。

$ zabbix_get -s 127.0.0.1 -k sensor[lm85-i2c-0-2e,in1]
       1.301000

Zabbix不仅可以获取电压(in)读数,还能获取电流(curr)、温度(temp)和风扇转速(fan)的读数。