Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • 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
    Сообщите мне по электронной почте, если сессия BGP не установлена.

    Сообщите мне по электронной почте, если сессия BGP не установлена.

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Сообщите мне по электронной почте, если сессия BGP не установлена., RouterOS
     
    FearlessRabbitt
    Guest
    #1
    0
    07.08.2012 10:49:00
    Привет всем, я хочу создать скрипт, который будет присылать мне письмо, если сессия BGP не установлена. Это единственное состояние BGP, которое меня интересует. У меня сейчас настроен базовый Netwatch, который отправляет мне письмо, если маршрутизатор ISP недоступен, но этого недостаточно. Можете подсказать, в каком направлении мне двигаться, чтобы это настроить? Пожалуйста, имейте в виду, что мои знания программирования/скриптинга практически отсутствуют. Спасибо.
     
     
     
    FearlessRabbitt
    Guest
    #2
    0
    08.08.2012 10:07:00
    Что мне известно пока: команда, которая нужна – /routing bgp peer print status. Вывод получается примерно такой: name=“tcom” instance=default remote-address=213.149.123.81 remote-as=29453 tcp-md5-key=“” nexthop-choice=default multihop=no route-reflect=no hold-time=3m ttl=default in-filter=“” out-filter=t-com-out address-families=ip default-originate=never remove-private-as=no as-override=no passive=no use-bfd=no remote-id=195.140.164.68 local-address=213.149.123.82 uptime=9w6d7h2m41s prefix-count=1 updates-sent=12 updates-received=1 withdrawn-sent=9 withdrawn-received=0 remote-hold-time=3m used-hold-time=3m used-keepalive-time=1m refresh-capability=yes as4-capability=yes state=established.

    Теперь вот как бы мне сделать скрипт, который бы выполнял эту команду каждые 5 минут и присылал мне письмо, если state не established?
     
     
     
    mrz
    Guest
    #3
    0
    08.08.2012 11:15:00
    Добавить запланированный скрипт: если ([/routing bgp peer get [find name="xxx"] state] != "established") do={ .. отправить письмо сюда...}
     
     
     
    FearlessRabbitt
    Guest
    #4
    0
    08.08.2012 11:16:00
    Пытаюсь отредактировать какой-то похожий скрипт, который нашел на форумах, интересно, я близок? :global bgpest ; :global bgpest “established”; :local bgpstate [/routing bgp peer get [find where state=established]]; :if ($ bgpest != $ bgpstate ) do={ /tool e-mail send from= mikrotikDV@portomontenegro.com server=91.220.187.8 to= mvujkovic@portomontenegro.com subject=“bgp script test” } Становится совсем отчаянно.
     
     
     
    FearlessRabbitt
    Guest
    #5
    0
    08.08.2012 11:38:00
    Спасибо за ответ! Очень ценно! В меню "Система / Скрипты" я создал новый скрипт, состоящий из:
    `:if ([/routing bgp peer get [find name=“mina”] state] != “established”) do={/tool e-mail send from= mikrotikDV@portomontenegro.com server=91.220.187.8 to= mvujkovic@portomontenegro.com subject=“bgp script test”}`

    Потом я отключил пира "mina", запустил скрипт вручную и ждал тестового письма. Ничего не происходит, я что-то делаю не так?
     
     
     
    mrz
    Guest
    #6
    0
    08.08.2012 11:46:00
    Скрипт работает у меня отлично. Если почту не получаете — проверьте настройки почты. Возможно, потребуется ввести имя пользователя и пароль или включить опцию starttls.
     
     
     
    FearlessRabbitt
    Guest
    #7
    0
    08.08.2012 12:14:00
    Может, глупый вопрос: я просто копирую и вставляю код в меню Script (прикреплён)?
     
     
     
    FearlessRabbitt
    Guest
    #8
    0
    08.08.2012 13:43:00
    Попробовал вручную ввести код прямо в командную строку – вылез синтаксис ошибки на “=”. Второй раз попробовал без “=”, а там сообщение, что такого элемента нет. Есть какие-нибудь идеи?
     
     
     
    FearlessRabbitt
    Guest
    #9
    0
    08.08.2012 15:46:00
    И после целого дня возился, и вот победитель! Вот он, если кому-то еще понадобится: `if ([/routing bgp peer get [find name=mina] state] != “established”) do={ – send email --}`. В общем, я использовал `find name= "mina"`, и это не работало с кавычками. Кто бы мог подумать?
     
     
     
    directlogic
    Guest
    #10
    0
    23.05.2013 13:54:00
    Привет всем! Этот скрипт проверяет сессии BGP и, если они не установлены, отправляет письмо. Но если BGP был недоступен дольше, чем положено, то отправляет кучу писем. Как предотвратить такую ситуацию и настроить скрипт, чтобы он отправлял письмо только один раз? Спасибо!
     
     
     
    mrz
    Guest
    #11
    0
    23.05.2013 14:16:00
    Нужна дополнительная проверка. Если состояние не установлено, устанавливай глобальную переменную, что пир отмечен как упавший. В следующий раз, когда скрипт запустится, проверяй и отправляй письмо только если ранее было установлено.
     
     
     
    plisken
    Guest
    #12
    0
    03.05.2014 11:34:00
    Можешь, пожалуйста, показать полный рабочий скрипт, чтобы я мог его скопировать и вставить. Я уже много раз пытался, но пока без успеха. Спасибо!
     
     
     
    plisken
    Guest
    #13
    0
    09.05.2014 12:40:00
    Какой скрипт отключить ether2, если установлен BGP пир?
     
     
     
    plisken
    Guest
    #14
    0
    10.05.2014 10:34:00
    Можешь написать полный скрипт со всеми командами для почты, пожалуйста? Использую POP3 сервер, порт 25.
     
     
     
    Cha0s
    Guest
    #15
    0
    08.08.2015 01:36:00
    Я искал такой же скрипт, чтобы получать оповещения, когда какой-либо BGP-пир отключается. Я ничего готового не нашёл, поэтому написал скрипт на основе того, что было предложено в этой теме. Это один скрипт, поддерживающий несколько пиров и несколько адресов электронной почты для получения оповещений. Предполагается, что /tools email правильно настроен на роутере. Скрипт периодически (запускаю его с планировщиком - запускаю каждые 10 секунд без проблем) проверяет все настроенные BGP-пиры.
    - Если пир отключён, он будет проигнорирован.
    - Если состояние пира 'established', он будет проигнорирован.
    - Если у пира любое другое состояние, кроме 'established', будет отправлено информационное письмо на настроенные адреса электронной почты и это будет залогировано как ошибка (красным) в окне журнала.
    - Если при следующем запуске скрипта пир всё ещё отключён, он запомнит это и больше не будет отправлять никаких писем для этого пира.
    - Если при следующем запуске пиры, которые были отключены, вернутся в состояние 'established', будет отправлено информационное письмо на настроенный адрес электронной почты и это будет залогировано как предупреждение (синим) в окне журнала.
    Скрипт протестирован на v6.29 и v6.30.2. Не знаю, будет ли он работать корректно на старых версиях. (Уверенно знаю, что не работает на 5.x и, вероятно, не будет работать на <=6.3)
    Известные проблемы: Если вы не определяете BGP-пиры с их правильными именами, скрипт не будет работать корректно. Чтобы использовать скрипт, вам нужно отредактировать только первые два массива, чтобы добавить имена ваших BGP-пиров и адреса электронной почты, разделенные запятыми. Также есть опция отладки, чтобы включить больше информации в окне журнала. Установите это значение false, чтобы отключить. Вам не нужно ничего редактировать в скрипте. Просто запустив его, он не должен выдавать никакого вывода (если отладка отключена), когда все пиры находятся в состоянии established.
    ##################################################################
    # СТАТУС BGP-ПИРОВ С ПОЧТОЙ ОПОВЕЩЕНИЙ СЦРИПТ (только для RouterOS v6) #
    # Исходный автор: Cha0s, около 2015 года, с улучшениями от JB172  #
    # Информация: https://forum.mikrotik.com/viewtopic.php?p=494204#p494204 #
    ###################################################################
    # РЕДАКТИРОВАТЬ ЗДЕСЬ
    :local arrBgpPeers [:toarray "peer1,peer2,peer3"];
    :local arrEmails [:toarray "email@example.net,email2@example.net"];
    :local debug true
    # КОНЕЦ РЕДАКТИРОВАНИЯ

    # Определить переменные
    :global arrBgpState;
    :global gotKey false;
    :local hostNameX ([/system identity get name]);
    :local statusX;
    :local peerX;
    :local peerXarrEl;
    :local mailToX;
    :local mailSubjectX;
    :local mailBodyX;
    :local peerStatusX;

    если ($debug = true) do={
    :log info ("=============НАЧАЛО ОБНАРУЖЕНИЯ СТАТУСА BGP-ПИРОВ=============" )
    }

    # Инициализировать глобальный массив – довольно глупый способ это делать :P
    :если ( [:len $arrBgpState] =0 ) do={
    :set $arrBgpState {"false"="false"}
    }

    # Цикл по массиву пиров
    :local arrPos
    :для arrPos от=0 до=([:len $arrBgpPeers]-1) do={

    # Установить peerX в текущее имя пира для этой итерации
    :set peerX [:pick $arrBgpPeers $arrPos];

    # Проверить, включён ли пир, и продолжить
    :если ([/routing bgp peer get [find name=$peerX] disabled ] != true) do={

    # Получить статус пира
    :set peerStatusX [/routing bgp peer get [find name="$peerX"] state]

    # Найти ключ пира в глобальном массиве
    :foreach k,v in=$arrBgpState do={
    если ($k != "false") do={
    если ($gotKey = false) do={
    если ($k = $peerX) do={
    :set gotKey true
    }
    }
    }
    }

    # Инициализировать элемент массива arrBgpState с именем peerX, если он ещё не существует
    :если ($gotKey = false) do={
    :set ($arrBgpState->"$peerX") "up"
    }

    # Сбросить это для следующей итерации
    :set gotKey false

    # Предыдущий статус запуска пира
    :set statusX ($arrBgpState->"$peerX")

    # Подготовить текст письма
    :set mailBodyX ("Имя хоста роутера: " . $hostNameX . "\nСтатус BGP-пира: " . $peerStatusX . "\nИмя BGP-пира: " . $peerX . "\n");

    # Проверить, не находится ли BGP-пир не в состоянии established
    :если ($peerStatusX != "established") do={
       
       # Проверить, это первое время, когда пир отключён
       :если ( $statusX  = "up" ) do={

    # Установить значение в 'down' для глобального ключа пира
    :set ($arrBgpState->$peerX) "down"

    # Информационное логирование
    если ($debug = true) do={
    :log error ("BGP-пир ". $peerX ." состояние " . $peerStatusX . ". Отправка оповещений по электронной почте!")
    }

    # Подготовить тему письма
    :set mailSubjectX ("BGP-пир ". $peerX ." на ". $hostNameX . " НЕ находится в состоянии established!");

    # Цикл по массиву писем, чтобы отправить письма всем получателям в массиве
    :local arrPos2
    :для arrPos2 от=0 до=([:len $arrEmails]-1) do={
    # Установить mailToX в получателя для этой итерации
    :set mailToX [:pick $arrEmails $arrPos2]

    # Информационное логирование
    :log error ("BGP-пир " . $peerX . " статус " .$peerStatusX. "! Отправка оповещения по электронной почте " . $mailToX . "." )

    # Отправить письмо
    /tool e-mail send to=$mailToX subject=$mailSubjectX body=$mailBodyX;
    }      

    } иное={
    # Пир отключён. Уже отправлено уведомление, так что ничего не делайте.
    если ($debug = true) do={
    :log info ("BGP-пир ". $peerX ." уже отключён. Игнорировать!")
    }
    }

    } иное={

    # Проверить, только что вернулся пир в работу и отправить информационное письмо
    если ($statusX = "down") do={

    # Подготовить тему письма
    :set mailSubjectX ("BGP-пир ". $peerX ." на ". $hostNameX . " восстановился!");

    # Цикл по массиву писем, чтобы отправить письма всем получателям в массиве
    :local arrPos2
    :для arrPos2 от=0 до=([:len $arrEmails]-1) do={
    # Установить mailToX в получателя для этой итерации
    :set mailToX [:pick $arrEmails $arrPos2]

    # Информационное логирование
    :log info ("BGP-пир " . $peerX . " работает. Ничего не делать!")
    }

    # Установить статус пира в up
    :set ($arrBgpState->$peerX) "up"
    }
    }

    } иное={
    если ($debug = true) do={
    :log warning ("BGP-пир " . $peerX . " отключён. Игнорировать!")
    }
    }

    }

    если ($debug = true) do={
    :log info ("=============КОНЕЦ ОБНАРУЖЕНИЯ СТАТУСА BGP-ПИРОВ===============" )
    } Я не очень хорошо знаком с языком скриптов RouterOS, поэтому, безусловно, есть возможности для улучшения моего кода! Не стесняйтесь редактировать его по своему вкусу.
     
     
     
    plisken
    Guest
    #16
    0
    08.08.2015 07:10:00
    Работает как по маслу. Очень благодарен! Спасибо.
     
     
     
    Cha0s
    Guest
    #17
    0
    08.09.2015 10:04:00
    Вот перевод текста на русский язык:

    Вот немного измененная версия, которая автоматически найдет все настроенные BGP-пиры и будет их мониторить (вместо того, чтобы определять каждого пира вручную). Спасибо JB172 за патч.
    ##################################################################
    # СТАТУС BGP ПИРОВ - СКРИПТ ОПОЗОРЕНИЯ ПО ЭЛЕКТРОННОЙ ПОЧТЕ (только для RouterOS v6) #
    # Изначальный автор: Cha0s, примерно 2015 год, с улучшениями от JB172 #
    # Информация: http://forum.mikrotik.com/t/email-me-if-bgp-session-status-in-not-established/58669/15 #
    ###################################################################
    # РЕДАКТИРОВАТЬ ЗДЕСЬ
    :local arrEmails [:toarray "email@example.net,email2@example.net"];
    :local debug true
    # КОНЕЦ РЕДАКТИРОВАНИЯ

    # Определяем переменные
    :global arrBgpState;
    :global gotKey false;
    :local hostNameX ([/system identity get name]);
    :local statusX;
    :local peerX;
    :local peerXarrEl;
    :local mailToX;
    :local mailSubjectX;
    :local mailBodyX;
    :local peerStatusX;
    :local arrBgpPeers [:toarray ""];
    :local peername "";
    :local peerTotal "";

    если ($debug = true) то={
      :log info ("=============НАЧАЛО ОБНАРУЖЕНИЯ СТАТУСА BGP ПИРОВ=============" )
    }

    # Инициализируем глобальный массив — довольно нелепый способ, но ничего не поделаешь :P
    :если ( [:len $arrBgpState] = 0 ) то={
      :set $arrBgpState {"false"="false"}
    }

    # Заполняем массив arrBgpPeers именами пиров
    :для i в=[/routing bgp peer find] то={
    :set peername [/routing bgp peer get $i name];
    :set peerTotal ($peerTotal . "," .$peername);
    }
    :set arrBgpPeers [:toarray $peerTotal];

    # Перебираем массив пиров
    :local arrPos
    :для arrPos от=0 до=([:len $arrBgpPeers]-1) то={

      # Присваиваем peerX текущее имя пира для этой итерации
      :set peerX [:pick $arrBgpPeers $arrPos];

      # Проверяем, включен ли пир и переходим к следующему шагу
      :если ([/routing bgp peer get [find name=$peerX] disabled ] != true) то={
         
         # Получаем статус пира
         :set peerStatusX [/routing bgp peer get [find name="$peerX"] state]

         # Ищем ключ пира в глобальном массиве
         :для k,v в=$arrBgpState то={
            если ($k != "false") то={
               :если ($gotKey = false) то={
                  :если ($k = $peerX) то={
                     :set gotKey true
                  }
               }
            }
         }
         
         # Инициализируем элемент массива arrBgpState с именем peerX, если его там еще нет
         :если ($gotKey = false) то={
            :set ($arrBgpState->"$peerX") "up"
         }
         
         # Сбрасываем это для следующей итерации
         :set gotKey false  
         
         # Предыдущий статус пира
         :set statusX ($arrBgpState->"$peerX")
         
         # Подготавливаем текст электронного письма
         :set mailBodyX ("Имя хоста маршрутизатора: " . $hostNameX . "\nСтатус BGP пира: " . $peerStatusX . "\nИмя BGP пира: " . $peerX . "\n");
         
         # Проверяем, установлен ли BGP пир
         :если ($peerStatusX != "established") то={
           
             # Проверяем, является ли это первый раз, когда пир опустился
             :если ( $statusX  = "up" ) то={
               
               # Устанавливаем значение в 'down' для глобального ключа пира
               :set ($arrBgpState->$peerX) "down"

               # Информационный лог
               если ($debug = true) то={
                  :log error ("Состояние BGP пира ". $peerX ." — " . $peerStatusX . ". Отправляем уведомления по электронной почте!")
               }

               # Подготавливаем тему электронного письма
               :set mailSubjectX ("Состояние BGP пира ". $peerX ." на ". $hostNameX . " НЕ установлено!");
               
               # Перебираем массив электронных писем, чтобы отправить электронные письма всем получателям в массиве
               :local arrPos2
               :для arrPos2 от=0 до=([:len $arrEmails]-1) то={
                  # Устанавливаем mailToX получателю для этой итерации
                  :set mailToX [:pick $arrEmails $arrPos2]
                 
                  # Информационный лог
                  :log error ("Состояние BGP пира " . $peerX . " — " .$peerStatusX. "! Отправляем уведомление по электронной почте на " . $mailToX . "." )
                       
                  # Отправляем электронное письмо
                  /tool e-mail send to=$mailToX subject=$mailSubjectX body=$mailBodyX;
               }        

            } иначе={
               # Пир опустился. Уведомление уже было отправлено, поэтому ничего не делаем.
               если ($debug = true) то={
                  :log info ("BGP пир ". $peerX ." уже опустился. Игнорируем!")
               }
            }

         } иначе={
           
            # Проверяем, вернулся ли пир и отправляем информационное электронное письмо
            если ($statusX = "down") то={
               
               # Подготавливаем тему электронного письма
               :set mailSubjectX ("Состояние BGP пира ". $peerX ." на ". $hostNameX . " восстановлено!");
                       
               # Перебираем массив электронных писем, чтобы отправить электронные письма всем получателям в массиве
               :local arrPos2
               :для arrPos2 от=0 до=([:len $arrEmails]-1) то={
                  # Устанавливаем mailToX получателю для этой итерации
                  :set mailToX [:pick $arrEmails $arrPos2]
                 
                  # Информационный лог
                  :log warning ("Состояние BGP пира " . $peerX . " восстановлено! Отправляем информационное электронное письмо на " . $mailToX . "." )
                       
                  # Отправляем электронное письмо
                  /tool e-mail send to=$mailToX subject=$mailSubjectX body=$mailBodyX;
               }            
               
            }
           
            если ($debug = true) то={
               :log info ("Состояние BGP пира " . $peerX . " — в норме. Ничего не делаем!")
            }
           
            # Устанавливаем статус пира в 'up'
            :set ($arrBgpState->$peerX) "up"
         }      
         
      } иначе={
         если ($debug = true) то={
            :log warning ("BGP пир " . $peerX . " отключен. Игнорируем!")
         }
      }  
         
    }

    если ($debug = true) то={
      :log info ("=============ЗАВЕРШЕНИЕ ОБНАРУЖЕНИЯ СТАТУСА BGP ПИРОВ===============" )
    }
     
     
     
    plisken
    Guest
    #18
    0
    08.09.2015 16:13:00
    Работает отлично. Отличная работа!
     
     
     
    ajayyadav941
    Guest
    #19
    0
    15.11.2018 17:48:00
    Привет! Может, кто-нибудь подскажет, как настроить получение уведомления по электронной почте, когда сессия BGP разрывается?
     
     
     
    dsfak
    Guest
    #20
    0
    09.12.2022 08:43:00
    Привет, ребята, @Cha0s! Ваш скрипт работает просто отлично! Есть ли у вас какие-нибудь обновления для версии 7? Потому что он не работает, и я пытаюсь конвертировать его в v7, но без успеха…!
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры