Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    RouterOS
    Монитор трафика с отчетом в Telegram

    Монитор трафика с отчетом в Telegram

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Монитор трафика с отчетом в Telegram, RouterOS
     
    ploquets
    Guest
    #1
    0
    24.10.2017 19:47:00
    Привет. Недавно нам понадобился скрипт, который бы сигнализировал, если интерфейс передаёт трафик больше X. Всё работало нормально с traffic-monitor… но стоило появиться пиковому трафику всего на 1 секунду — и мне тут же пришло уведомление. Поэтому я сделал скрипт, который запускается через traffic-monitor и начинает анализ. Если условия выполняются — отправляет отчёт на Telegram-аккаунт. И решил им поделиться. Так что те, кому нужно что-то подобное, смогут использовать это легко.

    Пример учитывает:  
    ether1-wan как интерфейс  
    WAN как алиас интерфейса  
    100Mbps — лимит трафика  
    90 секунд — длительность непрерывного трафика для отчёта  
    10 минут — интервал между повторными отчётами (если трафик продолжается)  
    wan-monitor — имя триггера (traffic-monitor)  
    monitor-ether1 — имя скрипта

    Этот скрипт проверяет входящий трафик (то есть RX).

    Вам нужно создать traffic-monitor вот так:  
    Это будет триггером для запуска скрипта  
    /tool traffic-monitor  
    add interface=ether1-wan name=wan-monitor on-event=monitor-ether1 traffic=received threshold=100M

    Теперь создайте скрипт в /system script с выбранным вами именем и вставьте в него следующий код (замените переменные по необходимости):

    # ------------------- header -------------------------------------------  
    # Сценарий анализа трафика и отчёт в Telegram  
    # Автор: Andre Almeida  
    # Тестировался на RouterOS 6.40.3  
    # Создан 23/10/2017  
    # Пожалуйста, не удаляйте этот заголовок, если используете скрипт. Спасибо  
    # ------------------- end header ---------------------------------------

    #-----------------------------------------------------------------------  
    #      ЗДЕСЬ ОПРЕДЕЛИТЕ ВАШИ ПЕРЕМЕННЫЕ  
    #-----------------------------------------------------------------------

    # Имя интерфейса для мониторинга  
    :local intmon "ether1-wan";  
    # Дружелюбное имя интерфейса  
    :local ifalias "WAN";  
    # Лимит трафика в Mbps  
    :local limittraffic "100";  
    # Время в секундах для непрерывного превышения трафика для отчёта  
    :local limittime "90";  
    # Интервал между отчётами в минутах  
    :local reportinterval "10";  
    # Имя триггера из /tool traffic-monitor  
    :local triggers "wan-monitor";  
    # ChatID в Telegram, куда будут слаться отчёты  
    :local chat "0123456789";  
    # API токен Telegram BOT  
    :local bot "01234567:AbcdEfGhijklmnOPQrstuvXWY-z";

    #-----------------------------------------------------------------------  
    #         ДАЛЬШЕ НЕ РЕДАКТИРУЙТЕ  
    #-----------------------------------------------------------------------

    # Отключаем триггер  
    /tool traffic-monitor set [find name="$triggers"] disabled=yes;
    #-----------------------------------------------------------------------  
    # Начинается сам скрипт анализа трафика  
    #-----------------------------------------------------------------------  
    # Сбрасываем счётчик  
    :local counter 0;  

    :local recbits;  

    # Получаем текущее значение трафика  
    :set $recbits ([/interface monitor-traffic [find name="$intmon"] as-value once]->"rx-bits-per-second");

    :while ($recbits > ($limittraffic * 1000000)) do={  

    :while ($counter < $limittime) do={  
    # Обновляем трафик  
    :set $recbits ([/interface monitor-traffic [find name="$intmon"] as-value once]->"rx-bits-per-second");

    # Проверяем, что трафик всё ещё высокий  
    :if ($recbits > ($limittraffic * 1000000)) do={  
    :set $counter ( $counter + 1);  
    :delay 1s;} else={  
    :set $counter ($limittime + 10);  
    };  
    }; #  <--- Конец второго цикла while

    # Снова проверяем трафик  
    :set $recbits ([/interface monitor-traffic [find name="$intmon"] as-value once]->"rx-bits-per-second");
    # Проверяем счётчик  
    :if ($counter < ($limittime + 10)) do={  
    # Сбрасываем счётчик  
    :set $counter 0;  
    # Отправляем сообщение в Telegram, если условие выполнено  
    # НЕ ЗАМЕНЯЙТЕ НИЧЕГО ЗДЕСЬ  
    # Формируем сообщение  
    :local initel "https://api.telegram.org/bot";  
    :local endtel "&text=";  
    :local newline "%0D%0A";  
    :local who "$[/system identity get name]";
    :local datetime "$[/system clock get date] $[/system clock get time]";
    :local message "Интерфейс $ifalias превысил $newline $limittraffic Mbps в течение $limittime секунд$newline Текущий трафик $($recbits / 1000000) Mbps";  

    :local messagefinal " $who ОТЧЁТ$newline $newline $message $newline $newline $datetime $newline $newline Если трафик сохранится, новый отчёт придёт через $reportinterval минут";  

    /tool fetch url="$initel$bot/sendMessage\?chat_id=$chat$endtel$messagefinal" keep-result=no;  

    :log warning "Интерфейс $ifalias превысил $limittraffic Mbps на протяжении $limittime секунд -- Текущий трафик $($recbits / 1000000) Mbps";  

    :delay ((($reportinterval * 60) - $limittime) . s);  
    }; # <--- Конец проверки счётчика  

    }; #  <--- Конец внешнего цикла while  

    # Включаем триггер обратно  
    /tool traffic-monitor set [find name="$triggers"] disabled=no;

    #-----------------------------------------------------------------------  
    #                      К О Н Е Ц    
    #-----------------------------------------------------------------------

    Для каждого интерфейса, который хотите мониторить, переименуйте триггер в уникальное имя и измените его в скрипте. Отчёты будут приходить на ваш Telegram-аккаунт (тот, что указан в chat ID) в таком виде:
     
     
     
    MiroAlex1987
    Guest
    #2
    0
    17.04.2018 12:06:00
    Можно ли использовать этот скрипт через прокси? В связи с последними событиями в Российской Федерации доступ к порталу api.telegram.org ограничен, поэтому многие важные оповещения перестали работать. В этом плане хотел бы уточнить, можно ли изменить скрипт так, чтобы он работал через прокси. Например: / tool fetch url = “ https://api.telegram.org/bot ***” через “socks5.proxy.server:1050”.
     
     
     
    SirPrikol
    Guest
    #3
    0
    17.08.2018 15:36:00
    Есть одна проблема: в этой конфигурации скрипт НЕ включает обратные триггеры. Необходимо либо в планировщике автоматически включать триггеры через 2-3 минуты, либо добавить в скрипт параметр, отвечающий за включение триггера по номеру.
     
     
     
    ploquets
    Guest
    #4
    0
    17.08.2018 17:06:00
    Извините, я не понял. Не могли бы вы объяснить немного подробнее, чего не хватает? Спасибо.
     
     
     
    Trustful
    Guest
    #5
    0
    19.08.2018 13:02:00
    Привет, этот скрипт работает на последней версии ROS? У меня не запускается, и никаких предупреждений не появляется.
     
     
     
    ploquets
    Guest
    #6
    0
    19.08.2018 20:09:00
    Да, работает. Я уже тестирую на версии 6.40.8 с исправлением ошибок.
     
     
     
    faisalreza
    Guest
    #7
    0
    10.06.2019 00:06:00
    Привет, классный скрипт и спасибо, что поделился. Кстати, можно ли его модифицировать, чтобы он определял pps и отправлял уведомления? Например, если на указанном интерфейсе будет 75kpps, то пришло бы оповещение в Telegram. Это могло бы помочь обнаружить возможный DDoS-атаку. Спасибо и с уважением, Реза.
     
     
     
    Jotne
    Guest
    #8
    0
    10.06.2019 08:37:00
    @ploquets Ты можешь убрать точку с запятой в конце всех строк скрипта. Сейчас это не обязательно. Только если в одной строке больше одной команды.
     
     
     
    ploquets
    Guest
    #9
    0
    10.06.2019 12:42:00
    Думаю, это можно сделать с помощью правил фаервола, чтобы совпадать с api.telegram.org и перенаправлять через прокси-сервер… не обязательно при этом напрямую связываться с прокси-сервером через CLI.
     
     
     
    jonathanxpeers
    Guest
    #10
    0
    04.03.2020 13:18:00
    Спасибо за скрипт. Можно ли его изменить, чтобы использовать mail? Чтобы отправлять напрямую в службу поддержки.
     
     
     
    ploquets
    Guest
    #11
    0
    04.03.2020 13:57:00
    Думаю, можно использовать этот # ------------------- заголовок -------------------------------------------
    # Скрипт анализа трафика и отчет по E-mail
    # Автор: Andre Almeida
    # Протестировано в RouterOS 6.45.8
    # Создано: 04/03/2020
    # Пожалуйста, сохраняйте этот заголовок при использовании скрипта. Спасибо
    # ------------------- конец заголовка ---------------------------------------


    #-----------------------------------------------------------------------
    #      З Д Е С Ь    О П Р Е Д Е Л Я Ю Т С Я    П Е Р Е М Е Н Н Ы Е
    #-----------------------------------------------------------------------

    # Имя интерфейса для мониторинга
    :local intmon "ether1-wan";
    # Дружелюбное имя для интерфейса выше
    :local ifalias "WAN";
    # Лимит трафика в Мбит/с
    :local limittraffic "100";
    # Время в секундах, которое учитывается для постоянного трафика и отчета
    :local limittime "90";
    # Интервал между отчетами в минутах
    :local reportinterval "10";
    # Имя триггера внутри /tool traffic-monitor
    :local triggers "wan-monitor";
    # E-mail, на который будут отправляться отчеты
    # пожалуйста, правильно настройте ваш /tool e-mail
    # Смотрите https://wiki.mikrotik.com/wiki/Manual:Tools/email
    :local emailtoreport "test@example.com";


    #-----------------------------------------------------------------------
    #         Д А Л Ь Ш Е     Р Е Д А К Т И Р О В А Т Ь   Н Е   Н А Д О  
    #-----------------------------------------------------------------------

    # Отключаем триггер
    /tool traffic-monitor set [find name="$triggers"] disabled=yes;
    #-----------------------------------------------------------------------
    # Начинается скрипт анализа трафика
    #-----------------------------------------------------------------------
    # Сброс счетчика
    :local counter 0;

    :local recbits;

    # Проверяем трафик
    :set $recbits ([/interface monitor-traffic [find name="$intmon"] as-value once]->"rx-bits-per-second");

    :while ($recbits > ($limittraffic * 1000000)) do={

    :while ($counter < $limittime) do={
    # Проверяем трафик
    :set $recbits ([/interface monitor-traffic [find name="$intmon"] as-value once]->"rx-bits-per-second");

    # Проверяем, высокий ли трафик
    :if ($recbits > ($limittraffic * 1000000)) do={
    :set $counter ( $counter + 1);
    :delay 1s;
    } else {
    :set $counter ($limittime + 10);
    };
    }; #  <--- Конец второго цикла while

    # Повторная проверка трафика
    :set $recbits ([/interface monitor-traffic [find name="$intmon"] as-value once]->"rx-bits-per-second");
    # Проверяем счетчик
    :if ($counter < ($limittime + 10)) do={
    # Сброс счетчика
    :set $counter 0;
    # Отправляем сообщение на e-mail, если счетчик достигнут
    # ЗДЕСЬ НЕ ЗАМЕНЯЙТЕ НИЧЕГО
    # Формируем сообщение
    :local who "$[/system identity get name]";
    :local datetime "$[/system clock get date] $[/system clock get time]";

    /tool e-mail send to=$emailtoreport subject="Traffic Report by $who" body="\
    ******   ОТЧЕТ ОТ $who   ******\r\n\
    -------------------------------------------------------------------------
    Интерфейс $ifalias превысил \r\n\r\n\
    $limittraffic Мбит/с в течение $limittime секунд\r\n\r\n\
    Текущий трафик $($recbits / 1000000) Мбит/с \r\n\
    --------------------------------------------------------------------------
    \r\n\r\n\
    Письмо отправлено $datetime"

    :log warning "Интерфейс $ifalias превысил $limittraffic Мбит/с в течение $limittime секунд \
    -- Текущий трафик $($recbits / 1000000) Мбит/с";

    :delay ((($reportinterval * 60) - $limittime) . s);
    }; # <--- Конец проверки счетчика

    }; #  <--- Конец первого цикла while

    # ВКЛЮЧАЕМ ТРИГГЕР СНОВА
    /tool traffic-monitor set [find name="$triggers"] disabled=no;

    #-----------------------------------------------------------------------
    #                      К О Н Е Ц    
    #-----------------------------------------------------------------------
     
     
     
    PortalNET
    Guest
    #12
    0
    13.02.2025 22:41:00
    Можно ли использовать это наоборот? Если трафик на интерфейсе опускается ниже 1 Мб в течение, скажем, 30 секунд, чтобы отправить уведомление в Telegram?
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры