1

Тема: Раз в пять минут надо опрашивать сервер на жизнь и на нагрузку на нем

Здравствуйте, не ругайте сильно, так как не являюсь админом и ни разу не создавал аналогичных скриптов, ниже по советам и при помощи примеров смогу написать данный скрипт, есть ошибки в нём
Задача состоит в следующем:
1 - раз в пять минут надо опрашивать сервера на жизнь (ping 3 пакета) и на нагрузку на нем
2 - как создать список серверов и выполнять на каждом задачу 1
3 - как записать логи с серверов в ping.txt с их ip и информацией ответа по пингу и нагрузки на нём и отсылать раз в день отчёт ping.txt на почту


@echo off
ServersList = "192.168.0.1, 176.155.211.1, 215.232.155.2"
ping -n 3 217.69.139.202 >> ping.txt | find /i "TTL=">nul
if %errorlevel%==0 (
send-mailmessage -from "ip сервера" -to "MainS <test@example.ru>", "MainS1 <test1@example.com>" -subject "Ошибка с пингом или нагрузкой на сайт" -Attachments "ping.txt"
) else (
//выполнять и проверять очередной ping и нагрузку на сервер каждые 5 минут
)

2 (изменено: Rumata, 2015-12-23 15:44:18)

Re: Раз в пять минут надо опрашивать сервер на жизнь и на нагрузку на нем

Для этого есть специализированные средства удаленного мониторинга систем, но это не значит, что нельзя писать свое. начните с общего описания задачи и двигайтесь по нисходящей, углубляясь в детали реализации.

А. Мониторинг доступности внешних систем и ежедневная оправка уведлмлений на почту

Это две отдельные и не связанные друг с другом задачи (хотя и могут быть выполнены одним приложением)

Б.1. Мониторинг доступности внешних систем из списка
Б.2. Ежедневная оправка почтовых сообщений

Идем дальше, рассмотрим подзадачу Б.1.

В.1.1. организуем список проверяемых систем (например, текстовый файл - одна строка один хост)
В.1.2. скрипт читает файл и для каждого хоста проверяет его доступность
в.1.3. для каждой проверки ведется журнал (время выполнения, команда, результат)

Важный момент: данные (список проверямых хостов) и программа, читающая этот список, расположены в разных файлах. Это хорошо, потому что позволяет отделить данные и логику. А изменение файла данных, не отражается на приложении (при неизменности логики приложения).

Вот первый вариант:


@echo off

setlocal

set "MONITOR_LSTFILE=%~dpn0.txt"
set "MONITOR_LOGFILE=%~dpn0.log"
set "PING_COUNT=3"

call :monitor.list "%MONITOR_LSTFILE%" >"%MONITOR_LOGFILE%"

endlocal
goto :EOF

:monitor.list
if not exist "%~а1" (
	echo:%~n0: %~f1: File not found
	goto :EOF
)

(
	for /f "usebackq" %%h in ( "%~1" ) do (
		call :monitor.host "%~f"
	) 
) | find /i "TTL="
goto :EOF

:monitor.host
ping -n %PING_COUNT% "%~1"
goto :EOF

И так далее... Теперь можно проверить работоспособность скрипта (хосты пигуются, не пингуются, файл-списко читается, лог файл создается). Дальше в этот скрипт можно добавить логику отправки писем. Это очень просто.

( 2 * b ) || ! ( 2 * b )

3 (изменено: dreamt, 2015-12-23 16:26:29)

Re: Раз в пять минут надо опрашивать сервер на жизнь и на нагрузку на нем

Rumata Спасибо большое!!!
вызов хосты пигуются, не пингуются через каждые 5 минут в моём случае timeout после цикла нужно установить?

for /f "usebackq" %%h in ( "%~1" ) do (
		call :monitor.host "%~f"
	) 
timeout /t 300

А как записывать данные о нагрузке на сервере? или же тут постоянный мониторинг происходит, насколько вижу по коду

4

Re: Раз в пять минут надо опрашивать сервер на жизнь и на нагрузку на нем

Задача скрипта - выполнить пинг и записать в лог-файл. Когда и как часто вызывать - задача системы, в случае Windows это Планировщик задач.

Еще по коду:


set "MONITOR_LSTFILE=%~dpn0.txt"
set "MONITOR_LOGFILE=%~dpn0.log"

Эти строки утвеждают, что файл-списко хостов и лог-файл располагаются в одном со скриптом каталоге.

( 2 * b ) || ! ( 2 * b )

5 (изменено: dreamt, 2015-12-23 16:34:49)

Re: Раз в пять минут надо опрашивать сервер на жизнь и на нагрузку на нем

Rumata Понял значит, нужно использовать крон или любое другое. А отправка логов на почту test@example.ru согласно справочнику макрософта происходит так ?

:monitor.list
if not exist "%~а1" (
	echo:%~n0: %~f1: File not found
    send-mailmessage -to "MainS <test@example.ru>" -subject "Ошибка с пингом или нагрузкой на сайт" -Attachments %~dpn0.log
	goto :EOF
)

6

Re: Раз в пять минут надо опрашивать сервер на жизнь и на нагрузку на нем

Идея проста.


@echo off

setlocal

set "MONITOR_LSTFILE=%~dpn0.txt"
set "MONITOR_LOGFILE=%~dpn0.log"
set "PING_COUNT=3"
set "MAIL_ADDRESS=test@example.ru"

if /i "%~1" == "monitor" call :monitor.list "%MONITOR_LSTFILE%" >"%MONITOR_LOGFILE%"
if /i "%~1" == "sendmail" call :monitor.sendmal "%MAIL_ADDRESS%" "%MONITOR_LOGFILE%"

echo:Usage: %~n0 monitor
echo:Usage: %~n0 sendmail

endlocal
goto :EOF

...

Дальше разберетесь сами.

( 2 * b ) || ! ( 2 * b )