我有两个正在运行的 NTP 层 3 服务器,并且想要创建一个简单的检查,以便我可以判断其中一个服务器是否出现时间漂移,并提醒它未与公共层 2 服务器正确同步。
我的第一个想法是从多个 stratum 2 服务器获取时间,并将该时间与我的 ntp 服务器发送的时间进行比较。然后,如果漂移超过 X delta,则发出警报。
是否有更标准的方式或更好的方法来验证 NTP 服务器是否发送正确的时间?
答案1
总结:
长版本:
配置
良好 NTP 监控最重要的基础是良好的 NTP 配置。为了更好地理解这一点,请阅读NTP 最佳当前实践 (BCP 223/RFC 8633)。以下是其配置建议的简要摘要:
- 保持 NTP 软件为最新版本
- 使用 4 至 10 个来源
- 确保这些来源中有多种参考时钟
- 不允许未经身份验证的远程控制(应该是大多数发行版的默认设置)
- 负责任地使用池(也应该是大多数发行版的默认设置)
- 不要混合带有跳跃式攻击痕迹和非跳跃式攻击痕迹的来源
- 不要使用未经身份验证的广播模式
- 提供服务时不要使用任播或负载平衡
测量位置
一旦你有了良好的本地配置,要记住的主要事情是你的检查应该查询本地 NTP 服务器以获取其指标,而不是尝试手动测量远程服务器的偏移量。主要的 NTP 服务器(ntpd 和 chronyd)已经收集了您需要的所有指标,因此将时钟与远程服务器进行比较的检查忽略了 NTP 的许多内置优点。
指标选择
对于您的问题,您最感兴趣的指标是:
- 系统偏移:计算出的本地时钟与真实时间之间的偏移量的最佳猜测值
- 根色散:计算出的本地时钟与层 0 源的最大偏移量
监控
NTP 监控解决方案有多种 - 根据您已部署的监控方案,有些可能比其他更适合您。我在上面写了一篇概述我的博客,以下是摘要:
- Nagios:
- check_ntp_peer:不错的基本检查;没有检查足够多的指标;在允许的偏移量方面有点过于宽松
- check_ntp_time:不推荐;仅检查来自给定远程 NTP 服务器的偏移量
- check_ntpd:合理的检查覆盖范围;如果您更喜欢 perl 而不是 python,请使用它。
- 监控的 nagios 检查
- 收集:
- prometheus/influxdb
- prometheus 节点导出器:不推荐;仅检查来自给定远程 NTP 服务器的偏移量
- 电讯报ntpq 输入插件:将 ntpq 输出直接翻译为 telegraf 指标;如果您只是想知道“我的 NTP 服务器是否正常?”,这可能太详细了。
- 监控处于电报模式
注意事项
- 以上是我在 2016 年 10 月进行警报和遥测审查时的情况总结。此后情况可能有所改善。
- 监控是我的项目,我认为它克服了当时可用的检查的不足。它支持 ntpd 和 chronyd,以及上面列出的警报和遥测系统。
答案2
当然,标准方法是使用捆绑的 NTP 客户端国家邮政局。此实用程序可用于显示已连接的服务器、其可达性、时差和抖动。以下是示例:
# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*metasntp12.admi .MRS. 1 u 274 1024 377 64.445 1.086 0.450
+cecar.ddg.lth.s 130.149.17.8 2 u 811 1024 377 48.143 -0.810 0.175
dir.mcc.ac.uk 85.199.214.100 2 u 7d 1024 0 76.708 -1.654 0.000
这里你可以看到配置了三台服务器,两台正常(377 可达性扩展为二进制 11 111 1111,其中 1 表示成功应答,0 表示无应答 - 因此 377 表示可达性 100%),最后一台可能由于某种原因已死机。Offset 表示时间偏移(以毫秒为单位),jitter 表示可变性。