Этот скрипт MikroTik отправит уведомление при превышении полосы пропускания на интерфейсе (превышение скорости загрузки или отдачи). Скрипт отправит электронное письмо или Telegram сообщение, но вы можете назначить исполнение других событий.
У вас может быть большая пропускная способность канала интернета, но даже при настроенных политиках управления трафиком возможности канала могут быть исчерпаны. Своевременно обнаружьте источник проблемы, используя скрипт проверки превышения полосы пропускания, установив триггер срабатывания на 85% от ширины полосы пропускания.
Скрипт является диагностическим, уведомляя о проблемах с исчерпанием ширина канала связи, нет необходимости запуска с большой частотой.
Содержание
Статья на других языках:
?? — MikroTik script: Bandwidth excess notification
?? — Script MikroTik: Notificación de exceso de ancho de banda
?? — Script MikroTik: Notification d’excès de bande passante
?? — MikroTik-Script: Benachrichtigung über Bandbreite Überschritten
?? — MikroTik-script: Melding van overmatige bandbreedte
Описание скрипта
Скрипт использует функции:
Скрипт использует настроенный триггер в Traffic Monitor, где указываем интерфейс и порог превышения трафика.
Триггер срабатывает при каждом превышении порогового значения и может генерировать большое количество уведомлений, поэтому скрипт контролирует частоту отправки уведомлений. Скрипт отправит уведомление при превышении порогового значения, если за указанный промежуток времени (NotifyPeriod) уведомление еще не отправлялось.
Укажите в скрипте значения:
- NotifyPeriod — интервал отправки уведомлений;
- Interface — интерфейс проверки (укажите значение из триггера Traffic Monitor);
- Threshold — порог срабатывания триггера (укажите значение из триггера Traffic Monitor).
Создать триггер
В примере название интерфейса интернет подключения — MyInternetProvider, полная полоса пропускания 40 Мbits/s, уведомление при превышении (above) порогового значения — 30 Мbits/s (30М).
[Tools] -> [Traffic Monitor] -> [+] -> [Name=MyISP, Interface=MyInternetProvider, Traffic=received, Trigger=above, Threshold=30M, OnEvents=/system script run TrafficMonitorExtIntefaceNotify;]
Создать скрипт
Для запуска скрипта необходимы разрешения: read, write, test, policy.
[System] -> [Scripts] -> [+] -> [Name: TrafficMonitorExtIntefaceNotify] -> [Policy: read, write, test, policy]
Код скрипта
# Name: BandwidthExceededNotification v1
# Description: Bandwidth Exceeded Notification
# Author: Yun Sergey, MHelp.pro 2020
# License: GPL-3.0 License
# Description, purpose and questions: https://mhelp.pro/mikrotik-script-bandwidth-excess-notification/
# More scripts Mikrotik: https://mhelp.pro/tag/mikrotik-scripts/
:local NotifyPeriod [:totime "00:05:00"];
:local Interface "MyInternetProvider";
:local Threshold "30M";
:local DeviceName [/system identity get name];
:local Time [/system clock get time];
:local Date [/system clock get date];
:global TMonExtIntefaceNotifyLastTime;
:local CurrentTime [/system clock get time];
:local TimeShift ($CurrentTime - $TMonExtIntefaceNotifyLastTime);
#:log info "Script BandwidthExceededNotification - start.";
:if ($TimeShift > $NotifyPeriod) do={
#:log info "Script BandwidthExceededNotification - Bandwidth excess, send message.";
:local EmailMessageText "Interface: $Interface - bandwidth exceeded ($Threshold). See Traffic Monitor";
:local TelegramMessageText "Interface: $Interface - bandwidth exceeded ($Threshold). See Traffic Monitor";
# START SEND EMAIL
:local SendTo "notify@mhelp.pro";
:local Subject "\F0\9F\93\88 Bandwidth Exceeded: $DeviceName [$Date $Time]";
:local MessageText "$EmailMessageText";
:local FileName "";
:local SendEmail [:parse [/system script get EMailSendMessageFunction source]];
$SendEmail SendTo=$SendTo TextMail=$MessageText Subject=$Subject FileName=$FileName;
# END SEND EMAIL
# START SEND TELEGRAM
:local MessageText "\F0\9F\93\88 <b>$DeviceName: Bandwidth Exceeded</b> %0D%0A $TelegramMessageText";
:local SendTelegramMessage [:parse [/system script get TGBotSendMessageFunction source]];
$SendTelegramMessage MessageText=$MessageText;
# END SEND TELEGRAM
:set TMonExtIntefaceNotifyLastTime $CurrentTime;
};
#:log info "Script BandwidthExceededNotification - end.";
Решение проблем
Скрипт не работает при запуске
Проверьте права запуска скрипта, они должны соответствовать указанным в статье (в ROS 6.47.8 замечена ошибка — максимальные права установленные по умолчанию, могут вызывать ошибку доступа).
Диагностика работы скрипта
Раскомментируйте строки :log info (удалите символ # в начале строки).
- «Script BandwidthExceededNotification — start.» — скрипт запущен успешно;
- «Script BandwidthExceededNotification — Bandwidth excess, send message.» — обнаружено ограничение, период уведомления истек, отправка уведомлений.
- «Script BandwidthExceededNotification — end.» — работа скрипта успешно завершена.
Если вы получили 1 и 3 сообщение — скрипт работает нормально, интервал уведомления не истек.
Если вы получили 1 и 2 уведомление, но не получили 3 — проблема в тексе отправленного сообщения (использование спец символов в названии устройства или тексте сообщения).
? Скрипт MikroTik — уведомление о превышении полосы пропускания (скорости загрузки, отдачи), обсуждалось в этой статье. Я надеюсь, что контролируя использование канала интернет поможет вам улучшить работу ваших устройств MikroTik. Однако, если вы столкнетесь с каким-то проблемами при настройке, не стесняйтесь написать в комментариях. Я постараюсь помочь.
✅ Скрипт проверен: MikroTik hAP ac lite (RouterBOARD 952Ui-5ac2nD), RouterOS 6.48 (stable).