从零安装 lm-sensors 硬件监控的完整实战
从零安装 lm-sensors 硬件监控的完整实战
【免费下载链接】lm-sensorslm-sensors repository项目地址: https://gitcode.com/gh_mirrors/lm/lm-sensors
3 点 17 分,机房服务器自己重启了。查内核日志,是 CPU 过热触发的保护机制,而风扇转速早就不对劲。要是那天就能直接读到温度和风扇数据,这事本可以提前发现。lm-sensors 就是干这个的:一个开源的 Linux 硬件监控工具,实时采集 CPU 温度、风扇转速、电压等传感器数据。下面带你从零装好、跑通、用起来。
数据是怎么流起来的
内核里的传感器驱动(coretemp、k10temp、nct6775 这类)先把每颗芯片的读数暴露成 /sys/class/hwmon/ 下的一组 sysfs 文件。libsensors 库负责读这些文件,再按配置文件里的 label、compute 规则把原始值换算成人能看懂的标签和单位,核心解析代码在 lib/ 里。最上层的 sensors 命令、sensord 守护进程、fancontrol 风扇调速工具全都从这个库取数,各管一种输出形态。一句话:内核 sysfs → libsensors 加工 → 各工具输出。
3 行命令装好
主流发行版直接用包管理器,两条命令任选其一:
apt install lm-sensors # Debian / Ubuntu dnf install lm_sensors # RHEL / Fedora只有发行版版本太旧、或要跟踪最新代码时才走源码编译:
git clone https://gitcode.com/gh_mirrors/lm/lm-sensors cd lm-sensors make all && sudo make install # 需要 gcc、make、bison、flex装完主要用这几个东西:/usr/bin/sensors 看读数,/usr/bin/sensors-detect 扫硬件,/etc/sensors3.conf 存主配置。仓库里还有一份带注释的样例配置,在 etc/sensors.conf.eg。
第一次跑通:检测与加载驱动
先跑检测脚本,一路按提示选 Y:
sudo sensors-detect它会逐条扫 I2C/SMBus 总线,最后列出缺哪些内核模块。照推荐加载,Intel 机器最常见的是:
sudo modprobe coretemp然后验证:
sensors输出里出现这样的芯片块,温度是具体数字,就算通了:
coretemp-isa-0000 Core 0: +45.0 °C (high = +85.0 °C)改配置让输出可读
主配置在 /etc/sensors3.conf,自己写的板卡配置放 /etc/sensors.d/ 目录更干净。最常改两样:label 重命名,compute 换算公式。一个最小可运行片段:
chip "nct6775-*" label in0 "VCore" label in3 "+12V" compute in3 ((6.8/10)+1)*@, @/((6.8/10)+1) set temp1_max 85存盘后把阈值写进硬件并验证:
sensors -s && sensorsin3 应该从 1.8V 左右的原始值变成稳定的 +12V 上下,标签也换了名字。
自动化:守护监控、阈值报警、风扇联动 🔧
三个方向各一条命令。后台守护:
sudo sensord -c /etc/sensord.conf它按固定周期把传感器读数写进日志或 RRD 数据库,不用每次手动敲 sensors。阈值报警不用单独起服务:配置里写 set temp1_max 85,温度一旦越线,sensors 输出里对应数值旁自动挂上 ALARM 标记。风扇联动先交互式生成配置,再启动:
sudo pwmconfig sudo fancontrol它按映射表把温度转成转速写进 pwm 文件,核心字段只有三个:FCTEMPS(参考哪路温度)、FCFANS(控制哪路风扇)、MINTEMP/MAXTEMP(温度区间边界)。
排错:按症状找药 ⚠️
读数一直是空,或提示找不到芯片
驱动多半没加载。确认 sysfs 里有芯片目录:
ls /sys/class/hwmon/是空的就按 sensors-detect 推荐列表逐个 modprobe。
检测脚本什么都扫不到
内核 I2C 子系统可能没开。看总线是否枚举出来了:
ls /sys/bus/i2c/devices/一条 I2C 总线都没有,就得重编内核把 I2C 驱动和板载总线打开。
电压读数明显不对
缺 compute 公式,或者公式和实际分压电阻对不上。翻仓库的 configs/ 目录按主板型号找现成配置抄过来,比对一下公式。
普通用户跑 sensors 报权限错误
用户没有读 sysfs 文件的组权限。看一眼文件属组:
ls -l /sys/class/hwmon/hwmon0/把用户加进对应组(常见的是 i2c),重新登录生效。
进阶:接进监控系统,或自己写脚本 ⚙️
已有监控栈的话,入口都只有一句话。Prometheus:node_exporter 的 textfile collector 可以直接吐 sensors 数据。Zabbix:定义一个 UserParameter 调用 sensors -j 拿 JSON。最轻的玩法:挂个 cron 定时跑小脚本。直接能用的监控脚本,15 行以内:
#!/bin/bash THRESHOLD=75 LOG=/var/log/cpu-temp.log while true; do t=$(sensors -j | jq -r '.["coretemp-isa-0000"].temp1.temp1_input // 0') if [ "$t" -ge "$THRESHOLD" ]; then echo "$(date) temp ${t}C too high" >> "$LOG" logger -t sens "CPU temp ${t}C" fi sleep 30 done行动清单
- 包管理器装好 lm-sensors,跑一次 sudo sensors-detect,按推荐把驱动加载上。
- 执行 sensors,确认输出里能看到温度和风扇转速两个块。
- 在 /etc/sensors3.conf 写 label 和 compute 规则,sensors -s 把阈值写回硬件。
- 机器多的话部署 sensord 持续落盘,数据接进 Prometheus 或 Zabbix。
- 读数还不对,就到 configs/ 目录里按板型搜现成配置对照。
参考资料:配置文件语法 sensors.conf.5,库接口说明 libsensors-API.txt。
【免费下载链接】lm-sensorslm-sensors repository项目地址: https://gitcode.com/gh_mirrors/lm/lm-sensors
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
