8 传感器

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

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

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

  • type - 对传感器芯片而言是"in"(电压)、"temp"(温度)、 "fan"(风扇)等,

  • 监控项 - "input"(测量值)、"max"(高阈值)、"min" (低阈值)等,

  • number - 始终用于可能存在多个元素的场景

    once (usually starts from 1, except for voltages which start from 0). If files do not refer to a specific element they have a simple name with no number.

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

  • 若存在名为<类型><编号>_label的file, 则该file内的标签将替代 <类型><编号><监控项>名称;

  • 若不存在<类型><编号>_label的file,则

    program searches inside the /etc/sensors.conf (could be also /etc/sensors3.conf, or different) for the name substitution.

这种标签机制使用户能确定所用硬件类型。如果 既无<类型><编号>_label的file也无配置file中的标签, 硬件类型可通过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 (若指定此参数

    omitted, device and sensor are treated verbatim).

示例键值: 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 (如果该参数是

    omitted, device and sensor are treated verbatim).

示例键值:

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  (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可用的实际传感器名称(用于读取传感器数据),需执行run 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)数据。