Nagios NTP 时间:未知:主机 $ARG1$ (us.pool.ntp.org) 查找失败

Nagios NTP 时间:未知:主机 $ARG1$ (us.pool.ntp.org) 查找失败

我们目前正在使用 Nagios 来监控我工作场所的生产服务器。我们的 Nagios 实例配置在 Linux 服务器上,我们同时监控 Linux 和 Windows 计算机。

一段时间以来,在我们的几台 Windows 服务器上,我一直遇到有关 NTP 时间的以下 Nagios 问题:

在此处输入图片描述

请查看下面给我带来麻烦的命令:

在此处输入图片描述

check_windows_time!us.pool.ntp.org!3000!6000

看来 $ARG1$ 是“us.pool.ntp.org”。主机 $ARG1$ 查找失败对应的是什么?这些服务器是否在解析 NTP 主机 (us.pool.ntp.org) 时遇到问题?如果是这样,我只是好奇为什么有些服务器在解析此主机时遇到问题,而其他服务器却没有?我在许多其他服务器上使用相同的命令,没有问题。

需要注意的是,在出现此问题的服务器上,所有其他监控语句均运行正常(磁盘空间、CPU 使用率、RAM 使用率等)。似乎只是 NTP 命令给我带来了麻烦。

我在许多其他服务器上以相同的方式配置了 NTP,但我没有遇到此问题,因此我不知道是什么原因导致了此问题。

以前有人遇到过类似的错误吗?

如果您需要任何其他信息,请告诉我,我会很乐意为您解答。

谢谢你!

编辑 1:如果有帮助的话,我可以从受影响的服务器中 nslookup“us.pool.ntp.org”。因此有问题的服务器能够解析该 DNS 名称。

编辑2:NSC.ini'check_windows_time'配置:

check_windows_time=check_windows_time.bat $ARG1$ $ARG2$ $ARG3$

检查windows时间.bat:

@echo off
SETLOCAL
rem ***************************************************
rem Check_Windows_Time.bat
rem
rem Author: Michael van den Berg
rem Copyright 2012 - PCS-IT Services B.V. (www.pcs-it.nl)
rem
rem This Nagios plugin will check the time offset
rem against a specified time server.
rem ***************************************************

if [%1]==[] (goto usage) else (set time_server=%1)
if [%1]==[/?] (goto usage) else (set time_server=%1)
if [%2]==[] (set warn_offset=nul) else (set warn_offset=%2)
if [%2]==[$ARG2$] set warn_offset=nul
if [%3]==[] (set crit_offset=nul) else (set crit_offset=%3)
if [%3]==[$ARG3$] set crit_offset=nul

for /f "tokens=*" %%t in ('w32tm /stripchart /computer:%time_server% /samples:1 /dataonly') do set output=%%t

if not "x%output:0x80072af9=%"=="x%output%" goto host_error
if not "x%output:0x800705B4=%"=="x%output%" goto comm_error
if not "x%output:error=%"=="x%output%" goto unknown_error
if not "x%output:)=%"=="x%output%" goto unknown_error

set time_org=%output:*, =%
set time=%time_org:~1,-9%

if %warn_offset% == nul (set warn_perf=0) else (set warn_perf=%warn_offset%)
if %crit_offset% == nul (set crit_perf=0) else (set crit_perf=%crit_offset%)
set perf_data='Offset'=%time%s;%warn_perf%;%crit_perf%;0

if %time% geq %crit_offset% goto threshold_crit
if %time% geq %warn_offset% goto threshold_warn
if %time% lss %warn_offset% goto okay
goto unknown_error

:usage
echo %0 - Nagios plugin that checks time offset against a specified ntp server.
echo.
echo Usage:    %0 ^<timeserver^> ^<warning threshold in seconds^> ^<critical threshold in seconds^>
echo Examples: %0 us.pool.ntp.org 120 300
echo           %0 my-domain-controller.local 120 300
exit /b 3

:host_error
echo UNKNOWN: Lookup failure for host %time_server%
exit /b 3

:comm_error
echo UNKNOWN: Unable to query NTP service at %time_server% (Port 123 blocked/closed)
exit /b 3

:threshold_crit
echo CRITICAL: Time is %time_org% from %time_server%^|%perf_data%
exit /b 2

:threshold_warn
echo WARNING: Time is %time_org% from %time_server%^|%perf_data%
exit /b 1

:okay
echo OK: Time is %time_org% from %time_server%^|%perf_data%
exit /b 0

:unknown_error
echo UNKNOWN: Unable to check time (command error)
exit /b 3

编辑 3:我收到的错误消息看起来是由于满足以下条件而导致的:

if not "x%output:0x80072af9=%"=="x%output%" goto host_error

有人知道这意味着什么或者我该如何解决这个问题吗?

答案1

我终于能够让这些 NTP 错误消失。

首先,由于我们启用了 Windows 防火墙,因此我在出站连接设置 (123) 中解锁了检查 NTP 时间所需的端口。我注意到这是问题所在,因为我尝试从命令行运行“check_windows_time.bat”文件并收到错误。

我要向上述评论中的用户“Sorcha”致谢,感谢他建议我进行此项测试。

然后,我将有问题的 NSC.ini 实例与我知道正常运行的版本进行了比较。正常工作的 .ini 文件和出现问题的服务器之间存在一些差异。我修改了有问题的 .ini 文件以匹配正常工作的文件,然后重新启动了 NSClient++ 服务。

我还重新启动了 Nagios。过了一会儿,错误就消失了!

感谢您的帮助。

相关内容