Я отлаживаю проблему с одной из наших систем. Каждое воскресенье он перестает общаться с другим сервером. Если мы перезагрузим оба сервера, связь снова заработает.
Мне было интересно, есть ли какие-нибудь небольшие приложения, которые отслеживают доступность TCP-порта и сетевое подключение, возможно, регистрируют любое время простоя. Я также хотел бы, чтобы это было с открытым исходным кодом, если это возможно, но если есть другое решение, которое является проприетарным, я бы тоже хотел услышать об этом.
Я изменю тенденцию и дам вам сценарий решения.
Возьмите копию netcat для Windows и измените сценарий, указав путь к netcat (или просто выгрузите nc.exe в каталог% SystemRoot% \ system32 и измените эту строку на просто nc.exe). Кроме того, измените сценарий, чтобы сохранить его файл журнала в любом месте.
@echo off
SET NETCAT=c:\path-to-netcat\nc.exe
SET MONITOR_HOST=server-to-monitor
SET MONITOR_PORT=port-number-to-monitor
SET LOGFILE=C:\whatever.log
rem Use netcat to check for host answering on TCP port xxx
%NETCAT% -z %MONITOR_HOST% %MONITOR_PORT%
if errorlevel 1 goto _host_down
echo %DATE% %TIME% %MONITOR_HOST% answered on TCP port %MONITOR_PORT%>>%LOGFILE%
goto end
:_host_down
echo %DATE% %TIME% %MONITOR_HOST% did not answer on TCP port %MONITOR_PORT%>>%LOGFILE%
rem Do something to remote host here...
rem shutdown -r -t 1 -f -m %MONTIOR_HOST%
:end
Вот и все. Вы можете запустить это как «запланированное задание».
Это совсем не фантастика, но это сработает. Если вы хотите сделать его более привлекательным, вы можете использовать дату или время, чтобы изменить имя файла журнала, чтобы вы получали новый журнал каждый день, неделю и т. Д. Вы можете удалять старые журналы и т. Д. Вы можете многое сделать с такой простой скрипт ... хе-хе ...
Дополнение:
Вот более изящная версия «аргументов командной строки». Он входит в любой каталог, который вы укажете в имени файла «MONTIOR_HOST_YYYY-MM-DD.log». Вызов с синтаксисом:
(filename) monitor_host monitor_port log-file-path
monitor.cmd test-srv01 80 "c:\monitor_logs\long filenames do work here\"
Это подходит для вызова из нескольких запланированных задач, сценариев и т. Д. Для мониторинга нескольких серверов или нескольких портов.
@echo off
SET NETCAT=c:\path-to-netcat\nc.exe
SET MONITOR_HOST=%1
SET MONITOR_PORT=%2
SET LOGFILE="%~f3\%1_%DATE:~10,4%-%DATE:~4,2%-%DATE:~7,2%.LOG"
if "%1"=="" goto _syntax
if "%2"=="" goto _syntax
if "%3"=="" goto _syntax
rem Use netcat to check for host answering on TCP port xxx
%NETCAT% -z %MONITOR_HOST% %MONITOR_PORT%
if errorlevel 1 goto _host_down
echo %DATE% %TIME% %MONITOR_HOST% answered on TCP port %MONITOR_PORT%>>%LOGFILE%
goto end
:_host_down
echo %DATE% %TIME% %MONITOR_HOST% did not answer on TCP port %MONITOR_PORT%>>%LOGFILE%
rem Do something to remote host here...
rem shutdown -r -t 1 -f -m %MONTIOR_HOST%
goto end
:_syntax
echo Syntax:
echo.
echo %0 monitor_host monitor_port log-file-path
:end
Мне слишком весело писать сценарии ...
Могу порекомендовать Зеносса. Это довольно обширная, но простая в настройке бесплатная программа, которая может делать все, что вам нужно.
Конечно, вы также можете просто создать несколько скриптов Perl / Shell, но зачем изобретать велосипед?
Мой текущий фаворит - Zabbix. А также есть Nagios и, может быть, еще несколько. Но если бы это была всего лишь одна служба, я бы, вероятно, написал perl-скрипт, чтобы отслеживать ее и регистрировать в sqlite.
Всегда Nagios.
Мне повезло с Что до золота в прошлом. Его легко настроить, и он сохраняет историческую информацию. К сожалению, это не открытый исходный код. Я бы хотел увидеть продукт с открытым исходным кодом с такими же функциями.
У вас есть несколько вариантов с разными вариантами:
Есть и другие, такие как Ганлия и Ксимон, но они даже старше нагиос.
Я бы тоже пошел на zabbix (я использую его, и он отлично работает в распределенной среде), а также splunk это замечательный инструмент.