dmesg 时间误差现象

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: dmesg 时间误差现象

1.案例现象

这天收到监控平台发来的告警,说有台机器程序崩溃了

因为以前也有过相关的错误,根据经验,用 dmesg命令看下内核信息
image.png
发现有点不对劲,报错信息的时间跟告警时间不一致,正常来讲报错时间应该跟告警时间一致

使用 date 命令查看一下当前系统时间
image.png
然后我们查看一下系统日志

grep error /var/log/messages
Mar 28 09:12:01  kernel: error info
Mar 30 10:36:00   kernel: error info

由上面的输出可以看到:dmesg 显示错误信息的时间跟系统日志 /var/log/messages显示错误信息的时间不一致

2.定位问题

我们知道, dmesg/var/log/messages 都是用来记录服务器启动、运行期间的日志的

当机器出现问题时,运维人员可以从这两个日志输出中进行初步排查

我们来看下 dmesg 输出和 /var/log/messages 的区别:

  • dmesg 显示内核和内核模块的相关信息,/var/log/messages 不但显示内核信息,还显示系统活动信息
  • 可以说 dmesg 输出的信息是 /var/log/messages 的子集, dmesg 输出的信息在 ring buffer 中维护,大小有限制
  • /var/log/messages 包含所有系统消息以及dmesg 中的信息

那为什么这台机器上 dmesg 显示错误信息的时间跟系统日志 /var/log/messages显示错误信息的时间不一致呢?

由上面得知,我在查看 dmesg 信息的时候使用了 -T 参数,我们来看一下这个参数的含义

       -T, --ctime
           Print human-readable timestamps.

           Be aware that the timestamp could be inaccurate! The time
           source used for the logs is not updated after system
           SUSPEND/RESUME. Timestamps are adjusted according to current
           delta between boottime and monotonic clocks, this works only
           for messages printed after last resume

这个 -T 参数可以直接转换为人类可读时间(即年月日小时分钟秒),但是不一定精确,如果系统挂起或者恢复之后,日志使用的时间源是不会更新的

也就是说,dmesg -T 输出的内核信息并不能保证时间的准确性

又因为 dmesg -T 中记录的时间是系统启动时间到事件发生时间的时间差,这台机器每天都会进行 NTP 时间同步以及每隔一段时间会进行重启

所以就会出现内核日志的时间与系统日志时间不一致的现象

3.解决问题

关于dmesg -T 时间戳不精确的情况,我查了好多资料都说没有解决方法
image-20230330151155041.png
image-20230330151226584.png
所以在这里我建议大家如果想要获得准确的时间信息,就去查看系统日志——/var/log/messages

最后附上相关 issue 链接:

  1. https://serverfault.com/questions/576139/dmesg-time-vs-system-time-time-isnt-correct
  2. https://bugzilla.redhat.com/show_bug.cgi?id=895909
  3. https://blog.tankywoo.com/2015/02/03/about-timestamp-in-dmesg.html
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
存储 关系型数据库 块存储
Ceph 磁盘损坏现象和解决方法
Damaged disks 对于存储系统,磁盘是消耗品,损坏是很常见的,所以这篇文章记录一下 Ceph 中出现磁盘损坏时的现象,以及如何定位和更换损坏的磁盘。
2188 0
|
1月前
|
存储 运维 监控
机器的coredump文件过多处理
【10月更文挑战第1天】
64 4
|
Linux API
linux cpu飙高原因排查(有手就行)
其实我们现在已经知道是谁把cpu拉高了,但还不够细,只知道哪个项目出的问题远远不够,我们应该找到罪魁祸首,到底是哪个方法的多少行导致的问题,这才能让老大直呼内行
2288 1
linux cpu飙高原因排查(有手就行)
Linux 执行 df -h 卡着不动,HANG 住了,怎么破?
最近,查看磁盘空间时,执行 df -h 时,命令 hang 住了,一直没有反应!
Linux 执行 df -h 卡着不动,HANG 住了,怎么破?
|
API Windows 关系型数据库
一个Bug 差点让服务器的文件系统崩溃
昨天,公司的美国客户发邮件给我,说我的软件出问题了,我查来查去,发现居然是服务器上一个目录无法删除,一删除就报 cannot read from the source file or disk. 如果用命令行方式删除,则报  cannot find the specified path。
918 0