增加 rsyslog/syslog 精度以包括小数秒?

Ste*_*ski 5 time syslog rsyslog

我使用 syslog 和 rsyslog 来处理我的 Linux 和 FreeBSD 系统上的日志记录。

时间戳目前以秒为单位,但我想增加这些时间戳的精度以包括毫秒。这是否可以使用 syslog 变体,例如 rsyslog(RedHat、Ubuntu)或 FreeBSD 上的 Syslog?

如果我确实增加了日志时间戳以包含微秒,那么这些时间戳有多准确?如果事件发生在 03:37:02:001 ,这是否意味着该事件实际上发生在那个精确的毫秒,或者系统日志写入事件时是否有延迟?

Chr*_*ell 8

大多数现代Syslog 守护进程(包括 rsyslog 和 syslog-ng)都支持高精度时间戳。如果您正在使用这些工具之一,那么配置它应该没有困难。

至于它的准确性。. . 这取决于。首先,这将取决于硬件。大多数现代硬件支持高精度时间,但不是全部。假设硬件支持它,仍然存在一些挑战。首要任务是确保您的时钟设置准确,并且任何其他记录到它的机器都有匹配的时间(假设您将所有系统的日志传送到中央日志主机)。 ntpd是保持准确时钟时间的标准工具(通常同步到ntp.org 池)。

最后,我们来到事件本身。简短的回答是几乎总会有一点点漂移,即使它非常轻微。这里仍然会有一些变化,这取决于其他因素。在很大程度上将取决于事件的来源以及它是如何被接收的。例如,如果我有一个应用程序执行 foo,然后将日志发送到 syslog 说该应用程序执行了 foo,则在 foo 完成和发送日志之间可能需要 100 毫秒。syslog() 系统调用可能还需要 20 毫秒才能完成。

我不记得 syslog 的低级细节,但我不相信该事件在提交到 syslog 时带有时间戳,我认为它是由 syslog 守护进程在它被拾取时加上时间戳的。这又增加了几毫秒的时间。

基本上,除非您正在处理具有实时日志记录功能的实时系统,否则我认为您永远不会获得 100% 的完美准确度。即便如此,您可能会有(微观)水平的漂移,但至少您会受到限制,无法知道自己的误差幅度。同时,除非您有那个级别的要求,否则您的时间戳可能会足够准确。