現在、Nagiosを使用して、職場の本番サーバーを監視しています。 Nagiosインスタンスは、LinuxマシンとWindowsマシンの両方を監視するLinuxサーバー上に構成されています。
いくつかのWindowsServerで、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:それがまったく役立つ場合は、影響を受けるサーバーから「us.pool.ntp.org」をnslookupできます。したがって、問題が発生しているサーバーは、そのDNS名を解決できます。
編集2:NSC.ini'check_windows_time '構成:
check_windows_time=check_windows_time.bat $ARG1$ $ARG2$ $ARG3$
check_windows_time.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
これが何を意味するのか、またはこれをどのように解決できるのか、誰かが何か考えを持っていますか?
私はついにこれらのNTPエラーを消すことができました。
まず、Windowsファイアウォールを有効にしているので、アウトバウンド接続設定(123)でNTP時間を確認するために必要なポートのブロックを解除しました)。実行しようとしたため、これが問題であることに気付きました。コマンドラインから「check_windows_time.bat」ファイルを取得し、エラーを受け取りました。
このテストを実行することを提案するために、上記のコメントからユーザー「Sorcha」に叫び声が出ます。
次に、問題のあるNSC.iniインスタンスを、正常に機能していることがわかっているバージョンと比較しました。動作中の.iniファイルと問題が発生しているサーバーの間にはいくつかの違いがありました。問題のある.iniファイルを作業ファイルと一致するように変更し、NSClient ++サービスを再起動しました。
Nagiosも再起動しました。しばらくすると、エラーが解消されました。
ご協力ありがとうございました。