用于打印dmesg/kmsg/printk时间戳的实用程序,考虑了漂移。
项目描述
实用程序,用于以本地时间、UTC或纪元秒查看kmsg/printk/dmesg时间戳,并考虑漂移。
printk时钟与本地时钟(由ntp提供)的偏移量很大,通常很大。这会导致直接转换(如某些dmesg的-dmesg -T可用)时出现极大且不正确的时间值。此应用程序支持记录和标记漂移,并使用该信息计算更精确的时间戳。
为什么不是“dmesg -T”
如上所述,dmesg -T与dmesg_format_dates –drift=0相同,并且会随着时间的推移而变得不准确,因为滴答时钟会受到频率缩放等因素的影响。
因此,建议有一个cron作业运行以下printk_mark_drift,可能每半天一次以保持准确性。具体取决于所需的精度和系统的平均漂移。
您可以使用dmesg_get_drifts应用程序显示所有当前标记的漂移,以衡量您的系统时钟的不准确性。
示例
以下是一个示例,说明可能会渗入的不准确性
首先,显示dmesg无法处理printk漂移
[cmd]$ date; sudo bash -c ‘echo “Hello World” > /dev/kmsg’; dmesg -T | grep ‘Hello World’ | tail -n1
2015年9月9日 星期三 01:13:56 EDT
[2015年9月9日 星期三 01:14:31] Hello World
接下来,展示dmesg_format_dates与printk漂移一起工作的效果
[cmd]$ date; sudo bash -c ‘echo “Hello World” > /dev/kmsg’; ./dmesg_format_dates | grep ‘Hello World’ | tail -n1
2015年9月9日 星期三 01:14:11 EDT
[2015年9月9日 星期三 01:14:11] Hello World
应用程序
dmesg_format_dates
该应用程序运行“dmesg”(或您也可以输入预先录制的dmesg,例如从日志中),并使用计算出的漂移来推导准确的日期和时间戳。
运行此命令以输出内核日志,将printk的时间戳替换为计算出的时间戳(以下格式之一),并考虑漂移。
输出
支持以下输出模式:
本地时间(默认)-l 或 --local . 标准的“ctime”格式,包括本地时区信息
UTC -u 或 --utc . 标准的“ctime”格式,以UTC(无时区,也称为GMT或Zulu)给出
纪元 -e 或 --epoch . UNIX纪元时间。给出为自1970年1月1日以来的秒数
秒以下部分
本地时间和UTC的输出都是以ctime格式给出的,分辨率为1秒。
您也可以传递-s 或 --subsec 以向输出添加秒以下部分。
这将输出秒以下部分的两位有效数字(精度±10ms),这是从uptime时钟中可用的最大精度。
纪元模式始终输出秒以下部分。
printk_mark_drift
向kmsg日志添加漂移标记。这些用于计算漂移。这些标记越多,时间戳就越准确。
您应该考虑每小时标记日志几次,以便在使用dmesg_format_dates时获得精确到秒的准确性。
dmesg_get_drifts
此应用程序将显示dmesg日志中的漂移(时间戳,时钟在该点的漂移量)。
使用此功能分析机器的漂移量,以确定应标记漂移的频率(以获得准确的时间戳)。
printk_time_convert
此应用程序将单个时间戳转换为本地ctime、utc ctime或epoch时间戳。如果没有可用的新近漂移,它将添加漂移注释。
输出
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模块。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定要选择哪个,请了解更多关于安装包的信息。