Скрипт мониторинга (работает, но небольшая доработка не помешает)

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить

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

нет, это баловство
0
Голосов нет
да, у меня свой скрипт это очень удобно
1
100%
попробую твой скрипт
0
Голосов нет
 
Всего голосов: 1
kirifunlp
Сообщения: 1
Зарегистрирован: 08 май 2024, 15:17

Добрый день! Есть скрипт мониторинга устройств в локальной сети. Сразу скажу что я не программист(что-то подглядел здесь, что-то где-то еще, что-то придумал сам методом тыка), потому и косяков вы тут можете найти миллион, и скорее всего найдёте, я тут как раз за этим :-): Скрипт вполне себе работает, но есть неприятные моменты, которые я сам устранить не могу, уже всю голову сломал. Можете брать на тест кому интересно, делиться своими мыслями по этому поводу.

Что не нравится:
1)если ненадолго(пара секунд) теряется связь с хостом, то (по задумке) он должен подождать, всё перепроверить, не появился ли хост, и если появился то ничего не отправлять, а если надолго то должен присылать уведомление. Задержки специально стоят большие, чтобы было меньше ложных оповещений, но они всё равно иногда бывают, вот это бы хотелось как-то устранить
2)иногда upscript спотыкается об downscript, и может не прислать уведомление о появлении хоста в сети после отвала, случается такое когда быстро происходит смена статуса хоста в netwatch up->down->up, пинал такие хосты в netwatch через шедульку, но это прям всем костылям костыль, честно говоря.

Код: Выделить всё

:local kolich 4;
:local zaderzhka 4;
:local interv 2s;
#zaderzhka должна быть больше чем interv!!!

:local Chat "-710445623";
:local BotToken "5073467164:AAHXyZZhqCbfhbOkACuIwERFG9IY7wOZak";

:foreach k,v in={"host1"=192.168.88.1; "host2"=192.168.88.2; "host3"=192.168.8.3; "host4"=192.168.88.4} do={delay 0.1;
:do {:put [ip firewall address-list get value-name=list [find list="netwatch_$k"]]} on-error={ip firewall address-list add list="netwatch_$k" address=$v};
/ip firewall address-list set comment=start [find list="netwatch_$k"];
:local PingTest [/ping $v count=1];
if ($PingTest = 0) do={/ip firewall address-list set comment=unavailable [find list="netwatch_$k"];} else={/ip firewall address-list set comment=on [find list="netwatch_$k"];};
/tool netwatch remove [/tool netwatch find host=$v];
/tool netwatch
add comment=$k down-script="/ip firewall address-list set comment=work [find list=\"netwatch_$k\"];\r\
    \n:delay $zaderzhka;\r\
    \n:local hostStatus [tool netwatch get [find host=$v] status];\
    \r\
    \nif (\$hostStatus = \"up\") do={} else={\r\
    \n:delay 1;\r\
    \n:local Pinger [/ping $v count=$kolich];\r\
    \n:delay 1;\r\
    \n:local state [ip firewall address-list get value-name=comment [find list\
    =netwatch_$k]];\r\
    \n:local hostStatus [tool netwatch get [find host=$v] status];\
    \r\
    \nif (\$Pinger = 0 and \$hostStatus = \"down\" and \$state = \"work\") do=\
    {\r\
    \n/tool fetch url=\"https://api.telegram.org/bot$BotToken/sendMessage\\\?chat_id=$Chat&text=\\E2\\9D\\8C $k $v\" keep-result=no; /ip firewall address-list s\
    et comment=unavailable [find list=\"netwatch_$k\"];} else={/ip\
    \_firewall address-list set comment=on [find list=\"netwatch_$k\"];}}" host=$v interval=$interv up-script=":local state [ip firew\
    all address-list get value-name=comment [find list=netwatch_$k\
    ]];\r\
    \nif (\$state = \"unavailable\") do={\r\
    \n/ip firewall address-list set comment=on [find list=\"netwatch_$k\"];\r\
    \n/tool fetch url=\"https://api.telegram.org/bot$BotToken/sendMessage\\\?chat_id=$Chat&text=\\E2\\9C\\85 $k $v\" keep-result=no;} else={/ip firewall address\
    -list set comment=on [find list=\"netwatch_$k\"];}"
}
#/tool fetch url="https://api.telegram.org/bot$BotToken/sendMessage\?chat_id=$Chat&text=Monitoring started" keep-result=no;
коротко о работе скрипта: добавляете названия хостов и адреса в массив через точку с запятой, и добавляете свой токен телеграм бота и id своей группы, запускаете, он создаёт нетвочи на каждый хост, и адрес-листы так же на каждый хост в firewall (ради того чтобы записать туда состояние устройства, поскольку netwatch в глобальные переменные не умеет)

P.S.: раньше у меня крутился аналогичный скрипт, но без netwatch, а через шедулер, но при большом количестве хостов он очень сильно грузил проц, поэтому таки пришел к нетвоч


Ответить