打印 dmesg/kmsg/printk 时间戳的实用程序,考虑到漂移。
项目描述
以本地时间和日期、UTC 或纪元秒查看 kmsg/printk/dmesg 时间戳的实用程序,这些时间戳解释了漂移。
printk 时钟与本地时钟(一个 ntp 提供的)相比,通常会漂移很多。如果直接转换,这可能会导致完全不同和不正确的值(例如在某些 dmesg 上使用 dmesg -T)。此应用程序支持记录和标记漂移,并使用它来计算更准确的时间戳。
为什么不使用“dmesg -T”
如前所述,dmesg -T 与 dmesg_format_dates –drift=0 相同,并且随着时间的推移变得不准确,因为滴答时钟受频率缩放等影响。
因此,建议有一个运行printk_mark_drift的 cron 作业,如下所述,可能每隔半天运行一次,以保持准确。或多或少取决于所需的精度和系统的平均漂移。
您可以使用dmesg_get_drifts应用程序显示所有当前标记的漂移,以衡量您的系统时钟有多不准确。
样本
这是一个示例,显示了可能会出现的不准确性:
一、说明dmesg不能处理printk漂移
[cmd]$ 日期;sudo bash -c 'echo “Hello World” > /dev/kmsg'; dmesg -T | grep '你好世界' | 尾-n1
2015 年 9 月 9 日星期三 01:13:56 EDT
[2015 年 9 月 9 日星期三 01:14:31] 你好世界
接下来,显示 dmesg_format_dates 确实适用于 printk 漂移
[cmd]$ 日期;sudo bash -c 'echo “Hello World” > /dev/kmsg'; ./dmesg_format_dates | grep '你好世界' | 尾-n1
2015 年 9 月 9 日星期三 01:14:11 EDT
[2015 年 9 月 9 日星期三 01:14:11] 你好世界
应用
dmesg_format_dates
此应用程序运行“dmesg”(或者您可以通过管道输入预先记录的 dmesg,例如从日志中)并使用计算出的漂移来获得准确的时间戳。
运行此命令以输出内核日志,将 printk 时间戳替换为计算出的时间戳(采用多种格式之一),同时考虑漂移。
输出
支持的输出模式有:
当地时间(默认) -l 或 --local 。标准“ctime”格式,包括本地时区信息
UTC -u 或 --utc 。以 UTC 给出的标准“ctime”格式(无时区,也称为 GMT 或 Zulu)
纪元-e 或 --epoch 。UNIX 纪元时间。自 1970 年 1 月 1 日以来的秒数
亚秒级
本地时间和 UTC 的输出以 ctime 格式给出,其分辨率为 1 秒。
您也可以传递-s或--subsec以在输出中添加亚秒。
这将输出 2 位有效数字的亚秒(精度 +- 10 毫秒),这是正常运行时间时钟可用的最大值。
Epoch 模式始终输出亚秒级。
printk_mark_drift
向 kmsg 日志添加漂移标记。这些用于计算漂移。您拥有的这些越多,您的时间戳就越准确。
在使用 dmesg_format_dates 时,您应该考虑让 cron 作业每隔几个小时标记一次日志,以获得最新的准确性
dmesg_get_drifts
此应用程序将显示 dmesg 日志中的漂移(时间戳,时钟在该点漂移了多少)。
使用它来分析您的机器漂移了多少,以确定您应该多久标记一次漂移(以获得准确的时间戳)
printk_time_convert
此应用程序采用单个时间戳并将其转换为本地 ctime、utc ctime 或纪元时间戳。如果最近的一个不可用,它将添加一个漂移注释。
输出
printk_time_convert 的输出模式与 dmesg_format_dates 相同。有关使用选项,请参见上文,或 --help。
如何配置我的 kmsg 以记录时间戳?
将 /sys/module/printk/parameters/time 的值设置为“Y”(例如 echo “Y” > /sys/module/printk/parameters/time)
模块
这个包提供了 printk_timestamp_converter,这是一个可以直接使用的 python 模块。
pydoc 文档可在此处获得:http ://htmlpreview.github.io/?https://github.com/kata198/printk-timestamp-formatter/blob/master/doc/printk_timestamp_converter.html
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。