我使用syslog和rsyslog处理我的Linux和FreeBSD系统上的日志记录。
时间戳目前以秒为单位,但我希望将这些时间戳的提高精度包括毫秒。这是否可以使用syslog变体,如rsyslog (RedHat,Ubuntu)或FreeBSD上的Syslog?
如果我确实增加了日志时间戳以包括微秒,这些时间戳的准确性如何?如果事件发生在03:37:02:001,这是否意味着事件实际上发生在精确的毫秒内,还是在syslog编写事件时出现了延迟?
发布于 2012-03-26 21:57:13
大多数现代的Syslog守护进程(包括rsyslog和syslog-ng)都支持高精度的时间戳。如果您正在使用这些工具之一,那么配置它应该是没有困难的。
至于它的准确性。。。那得看情况。首先,它将依赖于硬件。大多数现代硬件支持高精度时间,但不是全部。假设硬件支持它,仍然存在一些挑战。首要任务是确保您的时钟被正确设置,并且任何其他正在登录到它的机器都有匹配的时间(假设您从您的所有系统发送日志是一个中央日志)。ntpd是维护精确时钟时间的标准工具(通常与ntp.org池同步)。
最后,我们来到活动本身。简单的回答是,即使是非常轻微的漂移,也几乎总是会有一点漂移。这里也会有一些变化,取决于其他因素。这在很大程度上取决于事件从何而来,以及它是如何被捕获的。例如,如果我有一个执行foo的应用程序,然后向syslog发送一个日志,说明应用程序执行foo,则在foo完成和发送日志之间可能需要100 ms。还需要20 to才能完成syslog()系统调用。
我不记得syslog的底层细节,但我不认为事件提交到syslog时是时间戳的,我认为它是由syslog守护进程在被捕获时时间戳的。这又增加了几毫秒的混合时间。
基本上,除非你处理的实时系统与实时日志设施,我不认为你永远不会得到100%完美的准确性。即使如此,你也可能有(微观)水平的漂移,但至少你要知道你的误差范围是有限制的。同时,除非您有这样的要求,否则您的时间戳可能会足够准确。
发布于 2012-04-07 00:20:44
Christopher介绍了技术方面的考虑:运行ntpd,将其指向可靠的源,并注意漂移。我想补充几个注意事项:
syslog()
libc函数调用设置。这是uClibc的实现。一个典型的syslog()
调用将在1ms以下完成。下面是用0.15ms包装syslog()
的Ruby : Benchmark.measure { logger.info 'narf‘}.real => 0.000149965286254883ntpdate
作为一个夜间的cron作业运行是不够的。https://serverfault.com/questions/373627
复制相似问题