В настоящее время мы используем Nagios для мониторинга наших производственных серверов на моем рабочем месте. Наш экземпляр Nagios настроен на сервере Linux, где мы отслеживаем машины как Linux, так и Windows.
Я уже довольно давно столкнулся со следующей проблемой Nagios, касающейся NTP Time, на нескольких наших серверах Windows:
См. Приведенную ниже команду, которая вызывает у меня проблемы:
check_windows_time!us.pool.ntp.org!3000!6000
Похоже, что $ ARG1 $ - это us.pool.ntp.org. Чему соответствует «Ошибка поиска для хоста $ ARG1 $»? У этих серверов проблемы с разрешением хоста NTP (us.pool.ntp.org)? Если это так, мне просто интересно, почему на некоторых серверах возникают проблемы с разрешением этого хоста, а на других - нет? Я без проблем использую ту же команду на многих других серверах.
Следует отметить, что все остальные операторы мониторинга работают нормально на серверах, на которых возникла эта проблема (дисковое пространство, использование ЦП, использование ОЗУ и т. Д.). Кажется, мне просто мешает команда 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$
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, я разблокировал порт, который необходим для проверки времени NTP, в настройках исходящего соединения (123). Я заметил, что это проблема, потому что я попытался запустить свой файл check_windows_time.bat из командной строки и получил ошибку.
Благодарю пользователя Sorcha из приведенных выше комментариев за предложение провести это тестирование.
Затем я сравнил проблемный экземпляр NSC.ini с версией, которая, как я знал, работает правильно. Между рабочим файлом .ini и серверами, на которых возникли проблемы, было несколько различий. Я изменил проблемные файлы .ini в соответствии с рабочим файлом и перезапустил службу NSClient ++.
Я также перезапустил Nagios. Через некоторое время мои ошибки исчезли!
Спасибо за помощь.