Nagios-check_ntp_time-偏移量未知

Nagios-check_ntp_time-偏移量未知

我在子网上运行了一个本地 NTP 服务器,用于保持其他子网节点同步,而无需每个节点都与上游服务器同步。但是,在check_ntp_time为 Nagios 实现插件时,我注意到一个令人沮丧的问题,即 nagios 不断报告本地节点与本地 ntp 服务器同步的严重错误。

这是本地 ntp 服务器上的 ntp 配置,请注意上游服务器条目和限制条目,根据我的研究,这使节点有资格作为本地节点可以同步的 ntp 服务器。

driftfile /var/lib/ntp/drift

# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
restrict default kod limited nomodify notrap nopeer noquery
restrict -6 default kod limited nomodify notrap nopeer noquery

# Permit all access over the loopback interface.  This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
restrict -6 ::1

# Makes me able to answer requests from local nodes
restrict 10.0.0.0 mask 255.255.192.0 nomodify notrap

# My source
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org
server 2.centos.pool.ntp.org

logfile /var/log/ntp/server.log

statistics loopstats
statsdir /var/log/ntp/
filegen peerstats file peers type day link enable
filegen loopstats file loops type day link enable

在本地非 ntp 服务器节点上,除了限制条目被删除,并且服务器条目仅引用本地 ntp 服务器:server ntp.example.com iburst

每个本地节点都可以解析ntp.example.com

我遇到的问题是当我从 nagios 服务器运行以下命令时:

/usr/lib64/nagios/plugins/check_ntp_time -H node-a-1 -v

输出结果如下:

sending request to peer 0
response from peer 0: offset -0.002921819687
sending request to peer 0
response from peer 0: offset -0.0001939535141
sending request to peer 0
re-sending request to peer 0
re-sending request to peer 0
re-sending request to peer 0
re-sending request to peer 0
re-sending request to peer 0
re-sending request to peer 0
discarding peer 0: stratum=0
overall average offset: 0
NTP CRITICAL: Offset unknown|  

除引用上游服务器的本地 ntp 服务器外,所有节点都会发生这种情况。起初我以为是 IPTables 问题,但我在每个本地 ntp 节点上都锁定了端口(以允许 nagios 访问以检查时间差异):

ACCEPT     udp  --  eth0   *       10.0.0.0/18          0.0.0.0/0           multiport dports 123 /* 777 allow ntp access */ state NEW

版本:

nagios-plugins-ntp: 1.4.16
ntp: 4.2.6p5-1.el6.centos

非常感谢您的帮助,在解决这个问题之前我真的无法提交 nagios 工作,因为您知道保持服务器时间同步是第一要务。

- 编辑 -

根据评论,以下是ntpq -p在各个节点上的结果:

# Actual NTP Server (10.0.0.2)
==============================================================================
+propjet.latt.ne 241.199.164.101  2 u  105  128  337   14.578   12.954   7.138
+x2la01.hostigat 63.145.169.2     3 u   21  128  377   16.037   13.546   4.090
*pacific.latt.ne 241.199.164.101  2 u   72  128  377   15.148   24.434   7.403

# Local node 1
==============================================================================
*service-a-1.sn1 204.2.134.163    3 u    9  128  377    0.228    5.217   1.296

# Local node 2
==============================================================================
*service-a-1.sn1 204.2.134.163    3 u   91  128  377    0.200    3.608   1.167

答案1

这里的关键是这一行:

丢弃对等体 0:stratum=0

NTP 服务器将自己标识为 0 层违反了规范(它是为原子钟或类似的东西保留的)。几年前,我在一些 BSD 和 Mac OS X 主机上遇到过这个问题。我最终破解了源代码中的层检查,并为“有问题的”主机维护了一个单独的插件版本。

违规行是 254-257(至少目前是这样),如果你想要删除它。这是一个 hack,但对我来说很管用 ;-)

我发现此主题在邮件列表存档中。我记得还有另一个我建议添加命令行选项来忽略层检查的邮件,但我认为它没有得到任何支持。

还有一个错误报告但据我所知,它并没有产生任何有用的结果。

答案2

我通过禁用 NTP 服务器上的 KOD(死亡之吻)功能解决了该问题。

check_ntp 快速连续发送(至少)4 个请求,以计算统计上合理的平均偏移量。第三个及所有后续请求均被视为服务器的拒绝服务攻击,并以 KOD 消息(无效层,即 0)进行答复。事实上,这种行为应被视为 check_ntp 的一个错误,因为客户端必须正确处理 KOD。

相关内容