增加 rsyslog/syslog 精度以包括小數秒?
我使用 syslog 和 rsyslog 來處理我的 Linux 和 FreeBSD 系統上的日誌記錄。
時間戳目前以秒為單位,但我想提高這些時間戳的精度以包括毫秒。這是否可以在 FreeBSD 上使用諸如 rsyslog(RedHat、Ubuntu)或 Syslog 之類的 syslog 變體?
如果我確實增加了記錄時間戳以包含微秒,那麼這些時間戳的準確性如何?如果事件發生在 03:37:02:001 ,這是否意味著事件實際上發生在那個精確的毫秒,或者 syslog 寫入事件時是否存在延遲?
大多數現代Syslog 守護程序(包括 rsyslog 和 syslog-ng)都支持高精度時間戳。如果您正在使用其中一種工具,那麼配置它應該沒有困難。
至於它的準確性。. . 這取決於。首先,它將取決於硬體。大多數現代硬體都支持高精度時間,但不是全部。假設硬體支持它,仍然存在一些挑戰。首要任務是確保您的時鐘設置準確,並且任何其他登錄到它的機器具有匹配的時間(假設您從所有系統發送日誌到中央日誌主機)。 ntpd是維護準確時鐘時間的標準工具(通常同步到ntp.org 池)。
最後,我們來到事件本身。簡短的回答是幾乎總是會有一點點漂移,即使它非常輕微。根據其他因素,這裡仍然會有一些可變性。很大程度上取決於事件的來源以及獲取方式。例如,如果我有一個執行 foo 的應用程序,然後向 syslog 發送一條日誌,說明該應用程序執行了 foo,則從 foo 完成到發送日誌之間可能需要 100 毫秒。syslog() 系統呼叫可能需要另外 20 毫秒才能完成。
我不記得 syslog 的低級細節,但我不相信該事件在送出到 syslog 時帶有時間戳,我認為它在被提取時由 syslog 守護程序添加時間戳。這又增加了幾毫秒的時間。
基本上,除非您正在處理具有實時日誌記錄功能的實時系統,否則我認為您永遠不會獲得 100% 的完美準確度。即便如此,你可能會有(微觀)水平的漂移,但至少你有限制知道你的誤差範圍。同時,除非您有這種級別的要求,否則您的時間戳可能會足夠準確。