案例現象 這天收到監控平臺發來的告警,說有台機器程式崩潰了 因為以前也有過相關的錯誤,根據經驗,用 dmesg命令看下內核信息 發現有點不對勁,報錯信息的時間跟告警時間不一致,正常來講報錯時間應該跟告警時間一致 使用 date 命令查看一下當前系統時間 然後我們查看一下系統日誌 由上面的輸出可以看到 ...
案例現象
這天收到監控平臺發來的告警,說有台機器程式崩潰了
因為以前也有過相關的錯誤,根據經驗,用 dmesg
命令看下內核信息
發現有點不對勁,報錯信息的時間跟告警時間不一致,正常來講報錯時間應該跟告警時間一致
使用 date
命令查看一下當前系統時間
然後我們查看一下系統日誌
由上面的輸出可以看到:
dmesg 顯示錯誤信息的時間跟系統日誌 /var/log/messages
顯示錯誤信息的時間不一致
定位問題
我們知道, dmesg
和 /var/log/messages
都是用來記錄伺服器啟動、運行期間的日誌的
當機器出現問題時,運維人員可以從這兩個日誌輸出中進行初步排查
我們來看下 dmesg
輸出和 /var/log/messages
的區別:
-
dmesg
顯示內核和內核模塊的相關信息,/var/log/messages
不但顯示內核信息,還顯示系統活動信息 -
可以說
dmesg
輸出的信息是/var/log/messages
的子集,dmesg
輸出的信息在 ring buffer 中維護,大小有限制 -
/var/log/messages
包含所有系統消息以及dmesg
中的信息
那為什麼這台機器上 dmesg
顯示錯誤信息的時間跟系統日誌 /var/log/messages
顯示錯誤信息的時間不一致呢?
由上面得知,我在查看 dmesg 信息的時候使用了 -T 參數,我們來看一下這個參數的含義
這個 -T 參數可以直接轉換為人類可讀時間(即年月日時分秒),但是不一定精確,如果系統掛起或者恢復之後,日誌使用的時間源是不會更新的
也就是說,dmesg -T
輸出的內核信息並不能保證時間的準確性
又因為 dmesg -T
中記錄的時間是系統啟動時間到事件發生時間的時間差,這台機器每天都會進行 NTP 時間同步以及每隔一段時間會進行重啟
所以就會出現內核日誌的時間與系統日誌時間不一致的現象
解決方案
關於dmesg -T
時間戳不精確的情況,我查了好多資料都說沒有解決方法
所以在這裡我建議大家如果想要獲得準確的時間信息,就去查看系統日誌——/var/log/messages
如果有小伙伴知道該如何解決的,可以告訴我
最後附上相關 issue 鏈接:
-
https://serverfault.com/questions/576139/dmesg-time-vs-system-time-time-isnt-correct
-
https://bugzilla.redhat.com/show_bug.cgi?id=895909
-
https://blog.tankywoo.com/2015/02/03/about-timestamp-in-dmesg.html
感謝閱讀,喜歡作者就動動小手[一鍵三連],關註公眾號【鹹魚運維雜談】,這是我寫作最大的動力