Добрый день, дорогие читатели!
Кто то из вас мог уже прочитать мою предыдущую статью, где я представил скрипт для роутеров MikroTik на базе RouterOS для мониторинга подключенного ПК и перезагрузки LAN порта в случае необходимости. Сегодня речь пойдет о мониторинге домашнего интернета и любого внешнего узла, например вашего сервера, причем с оповещением по СМС или в Телеграм.
Для начала рассмотрим скрипт по частям:
1 2 3 4 5 6 7 |
:global inetdown :global vdsdown :local checkdns [/ping 8.8.8.8 count=5] :local checkvds [/ping 0.0.0.0 count=5] :local time [/sys clock get time] :local downsms "VDS+0.0.0.0+is+DOWN+$time" :local upsms "VDS+0.0.0.0+is+UP+$time" |
Здесь мы объявили глобальные переменные - IP публичного Google DNS, IP вашего сервера, время и шаблоны текстов для СМС. Для мониторинга интернета вы можете использовать любой DNS - просто замените IP. Также вам нужно заменить IP 0.0.0.0 на IP вашего сервера.
1 2 3 4 5 |
:if (checkdns = 0) do={ :if ($inetdown != true) do={ /log error "INTERNET is DOWN" :set $inetdown true } |
Здесь пингуется DNS и если он недоступен, переменная отсутствия интернета принимает значение true и пишется запись в лог.
1 2 3 4 5 |
else={ :if ($inetdown = true) do={ /log warning "INTERNET is UP" :set $inetdown false } |
Далее, если пинг DNS успешено, но до этого не был успешен, переменная изменяет значение и делается запись в лог INTERNET is UP.
1 2 3 4 5 6 7 |
:if (checkvds = 0) do={ :if ($vdsdown != true) do={ /log error "VDS 0.0.0.0 is DOWN" /tool fetch url="http://sms.ru/sms/send?api_id=YOUR_API_KEY&to=79012345678&text=$downsms" keep-result=no :set $vdsdown true } } |
В коде выше начинается самое интересное - если DNS доступны, т.е. интернет есть, но ваш сервер не пингуется, то в лог пишется сообщение, а вам отправляется СМС. Здесь вам нужно заменить 0.0.0.0 на IP вашего сервера, YOUR_API_KEY на ваш API ключ на сайте SMS.RU и 79012345678 на ваш номер телефона. После регистрации на сайте SMS.RU вы получите свой API ключ и сможете бесплатно отправлять 5 СМС в день на свой номер телефона (тот, который использовали для регистрации). Очень полезный сервис.
Кстати строка текста сообщения не поддерживает пробелы, так что в переменных downsms и upsms используйте знак "+" вместо пробела, как показано в коде моего скрипта. При этом на телефон вам будет приходить СМС с пробелами, вместо знака "+".
1 2 3 4 5 6 |
else={ :if ($vdsdown = true) do={ /log warning "VDS 0.0.0.0 is UP" /tool fetch url="http://sms.ru/sms/send?api_id=YOUR_API+KEY&to=79012345678&text=$upsms" keep-result=no :set $vdsdown false } |
В последней части кода, если ваш сервер был недоступен (глобальная переменная помнит об этом), но снова стал пинговаться, отправляется СМС на ваш номер с оповещением об этом событии. Что тут нужно заменить вы уже знаете.
Для использования оповещения в Телеграм вместо СМС, вам просто необходимо создать бота, получить chat_id с вашим аккаунтом и вместо запроса к API сервиса SMS.RU прописать запрос к API Телеграм бота:
1 |
/tool fetch url=”https://api.telegram.org/bot153358077:AAF4qYdUNIcWfp-SLtduVR18DuzqtXwEQAs/sendMessage?chat_id=-175202495&text=VDS_0.0.0.0_is_DOWN” |
Более детально процесс создания бота в Телеграм для использования в роутерах Микротик описан в этой статье.
Полный текст скрипта:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
:global inetdown :global vdsdown :local checkdns [/ping 8.8.8.8 count=5] :local checkvds [/ping 0.0.0.0 count=5] :local time [/sys clock get time] :local downsms "VDS+0.0.0.0+is+DOWN+$time" :local upsms "VDS+0.0.0.0+is+UP+$time" :if (checkdns = 0) do={ :if ($inetdown != true) do={ /log error "INTERNET is DOWN" :set $inetdown true } } else={ :if ($inetdown = true) do={ /log warning "INTERNET is UP" :set $inetdown false } :if (checkvds = 0) do={ :if ($vdsdown != true) do={ /log error "VDS 0.0.0.0 is DOWN" /tool fetch url="http://sms.ru/sms/send?api_id=YOUR_API_KEY&to=79012345678&text=$downsms" keep-result=no :set $vdsdown true } } else={ :if ($vdsdown = true) do={ /log warning "VDS 0.0.0.0 is UP" /tool fetch url="http://sms.ru/sms/send?api_id=YOUR_API_KEY&to=79012345678&text=$upsms" keep-result=no :set $vdsdown false } } } |
Если у вас несколько серверов, вы можете разделить скрипт и сделать один скрипт для мониторинга домашнего интернета с логированием на роутере и другой скрипт для мониторинга IP адресов ваших серверов. Для удобства используйте циклы и массивы.
Полный текст скрипта после редактирования добавляете в System->Scripts и даете ему название. Для запуска скрипта каждую минуту или другой удобный вам промежуток времени добавляете его в System->Scheduler.
В On Event пишете:
1 |
system script run inet-vds |
где inet-vds - название вашего скрипта, указанное в System->Scripts.
P.S. Как вы понимаете, Микротик не может отправить вам СМС, о том что пропал интернет, ведь интернета нет и к API SMS.RU обратиться не получится. Вы можете дописать в скрипт сохранение времени, когда интернет пропал в глобальную переменную и отправку СМС после появления интернета, с указанием промежутка времени, когда интернет отсутствовал. Но я предпочитаю мониторить домашний интернет с оповещением по СМС со своего VDS, ведь это удобно: Микротик мониторит VDS, а VDS мониторит Микротик. В этом случае вы 100% будете мгновенно оповещены о проблемах. Об этом я напишу в следующей статье.