Ntp
驗證內部 NTP 伺服器發送的時間是否正確?
我有兩個 NTP 層 3 伺服器正在執行,並且想要創建一個簡單的檢查,我可以判斷其中一個伺服器的時間是否漂移並警告它沒有與公共層 2 伺服器正確同步。
我的第一個想法是從多個第 2 層伺服器中提取時間,並將該時間與我的 ntp 伺服器發送的時間進行比較。然後在漂移超過 X delta 時發出警報。
是否有更標準的方法或更好的方法來驗證 NTP 伺服器是否發送正確的時間?
TL;博士:
長版:
配置
良好的 NTP 監控最重要的基礎是良好的 NTP 配置。為了更好地理解這一點,請閱讀NTP Best Current Practices (BCP 223/RFC 8633)。以下是其配置建議的簡要總結:
- 使您的 NTP 軟體保持最新
- 使用 4 到 10 個來源
- 確保您在這些來源中擁有多種參考時鐘
- 不允許未經身份驗證的遠端控制(應該是大多數發行版的預設設置)
- 負責任地使用池(也應該是大多數發行版的預設設置)
- 不要混合有閏塗和非閏塗來源
- 不要使用未經身份驗證的廣播模式
- 服務時間不要使用任播或負載平衡
在哪裡測量
一旦你有一個良好的本地配置,要記住的主要事情是你的檢查應該查詢本地 NTP 伺服器的指標,而不是嘗試手動測量遠端伺服器的偏移量。主要的 NTP 伺服器(ntpd 和 chronyd)已經收集了您需要的所有指標,因此將時鐘與遠端伺服器進行比較的檢查忽略了 NTP 的許多內置優點。
指標選擇
因此,對於您的問題,您應該最感興趣的指標是:
- 系統偏移:計算出的本地時鐘與一個真實時間的偏移的最佳猜測
- 根色散:計算出的本地時鐘與第 0 層源的最大偏移量
監控
有一些 NTP 監控解決方案 - 根據您已經擁有的監控,有些可能比其他更適合您。我在我的部落格上寫了一個概述,這裡是一個摘要:
- 納吉奧斯:
- check_ntp_peer:不錯的基本檢查;沒有檢查足夠廣泛的指標;它允許的偏移量有點過於自由
- check_ntp_time:不推薦;僅檢查來自給定遠端 NTP 伺服器的偏移量
- check_ntpd:合理的檢查覆蓋率;如果您更喜歡 perl 而不是 python,請使用它。
- ntpmon的 nagios 檢查
- 收集:
- 普羅米修斯/influxdb
- prometheus 節點導出器:不推薦;僅檢查來自給定遠端 NTP 伺服器的偏移量
- telegraf ntpq 輸入外掛:將 ntpq 輸出直接轉換為 telegraf 指標;如果您只想知道“我的 NTP 伺服器好嗎?”,這可能太詳細了。
- 電報模式下的ntpmon
注意事項
- 以上是我在 2016 年 10 月進行警報和遙測審查時的狀態摘要。從那以後情況可能有所改善。
- ntpmon是我的項目,我認為它克服了當時可用的檢查的缺陷。它支持 ntpd 和 chronyd,以及上面列出的警報和遙測系統。