注: 文章中的示例代码都在 Ubuntu 系统中执行,其他 Linux 发行版操作类似。
场景描述
在日常的运维工作中,不可避免的会遇到服务器故障的问题。虽然在应用运维或SRE岗,不必亲自去维修服务器,但是有必要去排查导致问题的原因,以便后续提交报修工单。
在各种类型的服务器故障中,有一种是这样的:
某一天,服务器突然无法登录,服务器重启后又恢复正常。
服务器重启恢复正常后,我们登录到服务器上,需要去判断这次故障是否是由于硬件问题导致的,如果是硬件有问题的话,通常会在 dmesg 日志中有所体现。
问题是,每次服务器重启之后,登录到机器上执行 dmesg 命令,都只能展示本次重启后的日志,重启之前的日志就看不到了。而我们为了排查服务器故障的原因,就必须要看到重启之前的 dmesg 日志。
Ubuntu < 15.04
现在使用小于 Ubuntu 15.04 版本的人应该很少了,不过如果你在使用这些旧的 Ubuntu 系统的话,在你的 /var/log/ 目录下,会有如下名称的日志文件:
dmesg
dmesg.0
dmesg.1.gz
...
dmesg 日志文件中保存的是本次重启后的日志,而 dmesg.0 是这次重启前的 dmesg 日志,dmesg.1.gz 是上次重启前的 dmesg 日志,依次类推。
通过查看 dmesg.0 日志文件中的内容,就可以看到服务器重启前的 dmesg 日志了。
Ubuntu >= 15.04
现在更多人用的 Ubuntu 应该是 15.04 以后的版本了。Ubuntu 从 15.04 开始使用 systemd, systemd 中有一个日志服务,名为 journald,通过命令行工具 journalctl 可以方便的获取 journald 记录下来的日志,这其中就包括 dmesg 日志。
要查看服务器重启前的 dmesg 日志,可以使用如下命令:
journalctl -k -b -1
-k: 表示要查看 dmesg 日志
-b -1: 表示查看服务器重启前的日志
结束语
排查服务器故障时,dmesg 日志是一个很有用的信息源。如果你使用的是 Ubuntu 15.04 之前的系统,/var/log/dmesg.0 就是重启前的 dmesg 日志;如果你用的时 Ubuntu 15.04 之后的系统,通过 journalctl 命令你可以很方便地查看到服务器重启前的 dmesg 日志。
一如既往,如果你对文章中的内容有任何疑问,或者是发现文章中有任何错误,都可以通过留言告诉我;如果你喜欢我的文章,欢迎关注我的微信公众号 Tech For Geek。