对于不可恢复或打印较多导致没有留意到的错误,通过log日志进行信息查找是个很好的方法。
近期工作中需要对Linux服务器的宕机重启等异常问题排查,对错误原因进行查找,在此对自己用到的和了解到的日志相关以及日志中的一部分纠错机制做一个总结。通过日志发现问题原因并解决问题是一个越用越熟练的过程。作者会随着工作的不断深入和学习,随时更新该篇文章。
- /var/log/messages
/var/log目录下有多个日志文件,比如记录启动信息的boot.log、邮件信息的maillog、登录账户信息的utmp,而对于查询错误而言,messages文件是一个很好很全的记录文件。在/etc/rsyslog.conf文件中,我们可以看到是这样描述messages的:
即记录除了mail以外的所有高于info级别的信息。包含了系统启动时的引导信息,以及系统运行时的其他状态消息。I/O 错误、网络错误和其他系统错误都会记录到此文件中。 - dmesg
dmesg命令显示Linux内核的环形缓冲区信息,内核在其中存储各种消息。从中我们可以在多个操作级别获得大量系统信息,如系统架构、CPU、安装的硬件、ram等,dmesg的输出可以结合less或grep查看。
dmesg 命令主要用来显示内核信息。使用 dmesg 可以有效诊断机器硬件故障或者添加硬件出现的问题。另外,使用 dmesg 可以确定服务器安装了哪些硬件。每次系统重启,系统都会检查所有硬件并将信息记录下来。
另外,可以通过 cat /proc/kmsg实时显示内核缓冲区信息。 - journalctl
journalctl:查看systemd日志。不是通常意义上的单个日志文件的简单“日志文件”,但该日志代表了有关用户和内核活动的重要信息集合。从系统上的各种源检索信息。可以通过-k参数只查看来自内核&此次启动的日志,等于dmesg。
systemd用来启动系统并管理进程。 - BMC的黑匣子记录log
每个厂家的服务器有自己的独有的功能,用于对带外(out-of-band)信息的保存和读取。 - 板载卡厂家提供的信息获取工具,往往能获取更多卡的相关信息,并且有的报错信息保存在卡上,不会因为系统的重装而丢失。
如PMC的raid卡,可以通过
./arcconf savesupportarchive 指定生成目录
来生成日志压缩文件,当硬盘或卡出现问题导致系统无法启动时,重装系统后从这里获取日志可以获取有用的日志信息;
再如mellanox(已被NVIDIA收购)的网卡,可以通过 sysinfo 工具可以收集完整的系统信息,包含系统配置,网卡配置,FW 版本,驱动日志等,如果用户已经安装了完整的 OFED 包,则该工具已自动安装,存在于/usr/sbin/目录下,直接执行sysinfo-snapshot.py 脚本即可;否则需要下载:
git clone https://github.com/Mellanox/linux-sysinfo-snapshot.git
脚本执行完成后会在/tmp 目录下生成日志包, 比如:/tmp/sysinfo-snapshot-v3.6.5.5-dell01-20220824-080934.tgz.