用于打印dmesg/kmsg/printk时间戳的实用程序,考虑到漂移。
printk-timestamp-converter的Python项目详细描述
用于查看本地时间和日期、UTC或epoch秒中的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
Wed Sep 9 01:13:56 EDT 2015
[Wed Sep 9 01:14:31 2015] Hello World
接下来,显示dmesg格式的日期确实与printk drift一起工作
[cmd]$ date; sudo bash -c ‘echo “Hello World” > /dev/kmsg’; ./dmesg_format_dates | grep ‘Hello World’ | tail -n1
Wed Sep 9 01:14:11 EDT 2015
[Wed Sep 9 01:14:11 2015] Hello World
应用程序
dmesg_格式的日期
此应用程序运行“dmesg”(或者您可以通过管道输入预先记录的dmesg,例如从日志中),并使用计算的偏移量来导出准确的时间戳。
运行此命令以输出内核日志,将printk时间戳替换为计算的时间戳(以多种格式之一),同时考虑到漂移。
输出
支持的输出模式有:
- local time(默认值)-l或–local。标准“CTIME”格式,包括本地时区信息
- utc-u或–utc。以UTC(无时区,也称为GMT或ZULU)表示的标准“CTIME”格式
- epoch-e或–epoch。Unix纪元时间。以1970年1月1日起的秒数表示
子秒
本地时间和UTC的输出采用CTIME格式,分辨率为1秒。
您还可以传递-s或-subsec以向输出添加子秒。
这将输出2秒的有效位数(精度+-10ms),这是从实时时钟中获得的最大值。
epoch模式总是输出子秒。
printk_mark_drift
将漂移标记添加到kmsg日志。这些是用来计算漂移的。你拥有的这些越多,你的时间戳就越精确。
当使用dmesg_格式的日期时,您应该考虑让cron作业每隔几个小时标记一次日志,以达到第二个精度
dmesg_get_漂移
此应用程序将显示DMESG日志中的偏移量(时间戳,时钟在该点偏移了多少)。
使用此项分析机器漂移的程度,以确定标记漂移的频率(以获得准确的时间戳)
printk_time_convert
此应用程序采用单个时间戳并将其转换为本地CTIME、UTC CTIME或Epoch时间戳。如果最近的一个不可用,它将添加一个漂移注释。
输出
printk_time_convert的输出模式与dmesg_format_dates相同。请参阅上面的使用选项,或–帮助。
如何配置kmsg以记录时间戳?
将/sys/module/printk/parameters/time的值设置为“y”(e.x.echo“y”>;/sys/module/printk/parameters/time)
模块
这个包提供printk_timestamp_转换器,这是一个可以直接使用的python模块。