Linux dmesg 命令 5 大实战场景:从硬件排查到内核日志实时监控 📅 2026/7/6 11:56:23 Linux dmesg 命令 5 大实战场景从硬件排查到内核日志实时监控1. 硬件故障快速定位硬盘/USB设备问题排查当服务器硬盘出现异常读写或USB设备无法识别时dmesg往往是第一个发出警报的工具。通过以下组合命令可以快速锁定硬件问题# 查看所有存储设备错误包括SATA/SCSI/USB dmesg -T | grep -E sd[a-z]|usb|error|fail|timeout典型输出示例[2023-08-15 14:23:45] sd 2:0:0:0: [sdb] FAILED Result: hostbyteDID_OK driverbyteDRIVER_SENSE [2023-08-15 14:23:45] sd 2:0:0:0: [sdb] Sense Key : Medium Error [current] [2023-08-15 14:23:45] sd 2:0:0:0: [sdb] Add. Sense: Unrecovered read error关键过滤技巧设备类型过滤关键词常见问题特征硬盘sd[a-z]、SATAI/O错误、SMART告警、重试操作USB设备usb、xhci设备重置、带宽超额、驱动加载失败内存memory、EDACECC错误、地址校验失败网络设备eth[0-9]、enp链接状态变化、驱动异常提示添加-T参数显示人类可读时间戳便于与系统事件日志交叉分析。对于持续性硬件问题建议配合watch -n 5 dmesg | tail -20实现动态监控。2. 内核模块加载失败深度排查当modprobe或insmod命令报错时dmesg能揭示底层真实原因。以下是专业排查流程# 1. 查看最近内核模块相关日志 dmesg -l err,crit,alert,emerg -f kern # 2. 按时间范围过滤假设问题发生在10分钟前 dmesg --since 10 minutes ago --facilitykern --levelerr常见错误类型及解决方案符号版本不匹配[ 0.000003] module: disagrees about version of symbol some_symbol解决方法重新编译模块或安装匹配内核头文件内存分配失败[ 0.000127] some_module: page allocation failure: order:4解决方法调整vm.min_free_kbytes或减少模块内存需求依赖缺失[ 0.000045] some_module: Unknown symbol some_dependency解决方法使用modprobe --show-depends检查依赖树高级技巧对于复杂的内核模块问题可以启用动态调试echo module some_module p /sys/kernel/debug/dynamic_debug/control dmesg -wH3. 实时监控内核日志的三种高阶方法方法一类tail -f的实时跟踪# 保持彩色输出且人类可读时间格式 dmesg -wH --coloralways --time-formatctime方法二关键事件触发告警# 监控OOM事件并触发邮件报警 dmesg -w | grep --line-buffered Out of memory | while read line; do echo $line | mail -s OOM Alert on $(hostname) adminexample.com done方法三结构化日志分析管道# 将日志转为JSON格式并过滤关键事件 dmesg -J | jq select(.level err or .level crit) | {time: .timestamp, message: .message}性能对比表监控方式资源占用延迟适用场景dmesg -w低1s通用实时监控tail -f /dev/kmsg极低毫秒级高性能环境syslog转发中1-5s需要持久化存储的场景4. 精准日志过滤设施与级别的高级应用dmesg支持按设施(facility)和级别(level)的精细过滤这是大多数开发者未充分利用的强大功能# 组合过滤仅显示内核(kern)和系统守护进程(daemon)的警告及以上级别日志 dmesg -f kern,daemon -l warn,err,crit,alert,emerg完整设施和级别参考表设施类型说明常用级别含义kern内核消息emerg (0)系统不可用user用户级消息alert (1)必须立即采取行动mail邮件系统crit (2)紧急条件daemon系统服务err (3)错误条件auth安全认证warn (4)警告条件syslogsyslogd内部消息notice (5)正常但重要的事件lpr打印系统info (6)信息性消息news网络新闻debug (7)调试级消息实战案例排查系统启动时的服务失败# 查看所有在启动阶段(crit及以上级别)失败的服务 dmesg -T -f daemon -l crit5. 持久化关键启动信息的自动化方案默认情况下dmesg的环形缓冲区会在系统运行过程中被覆盖。以下是三种持久化方案方案一系统启动日志归档脚本#!/bin/bash # 保存为 /etc/rc.local LOG_DIR/var/log/kernel mkdir -p $LOG_DIR dmesg -T $LOG_DIR/$(date %Y%m%d-%H%M%S)-boot.log find $LOG_DIR -type f -mtime 30 -delete方案二systemd服务单元创建/etc/systemd/system/dmesg-archive.service[Unit] DescriptionArchive dmesg boot logs Aftersyslog.target [Service] Typeoneshot ExecStart/bin/sh -c dmesg -T /var/log/dmesg-$(date %%F).log ExecStartPost/bin/gzip /var/log/dmesg-$(date %F).log [Install] WantedBymulti-user.target方案三ELK集成方案使用Filebeat收集dmesg日志并发送到ELK栈# filebeat.yml 配置片段 filebeat.inputs: - type: log paths: - /var/log/dmesg* fields: type: kernel json.keys_under_root: true json.add_error_key: true性能影响对比方案启动延迟增加存储需求查询便利性简单归档0.1s低差systemd服务0.2-0.5s中一般ELK集成1-2s高优秀