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

    Отправка почты при сбое BGP. Ошибка скрипта.

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Отправка почты при сбое BGP. Ошибка скрипта., RouterOS
     
    operat0r
    Guest
    #1
    0
    26.03.2018 12:34:00
    Здравствуйте, недавно я внедрил скрипт (нашёл в интернете) для мониторинга BGP-пиров, чтобы при падении одного из них получать уведомление на почту. Проблема в том, что скрипт, похоже, не работает (не отправляет письма). Почтовый инструмент настроен и работает, если отправлять письма вручную. Ниже сам скрипт:

    # EDIT HERE  
    :local arrEmails [:toarray "mail@mail.com"];
    :local debug false  
    # EDIT END  

    # Определение переменных  
    :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 "";  

    if ($debug = true) do={  
      :log info ("=============НАЧАЛО ПРОВЕРКИ СТАТУСА BGP ПИРОВ=============" )  
    }  

    # Инициализация глобального массива — немного корявая реализация :P  
    :if ( [:len $arrBgpState] =0 ) do={
      :set $arrBgpState {"false"="false"}  
    }  

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

    # Цикл по массиву пирингов  
    :local arrPos  
    :for arrPos from=0 to=([:len $arrBgpPeers]-1) do={

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

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

               # Лог для отладки  
               if ($debug = true) do={  
                  :log error ("Статус BGP-пира ". $peerX ." — " . $peerStatusX . ". Отправляю уведомление по почте!")  
               }  

               # Тема письма  
               :set mailSubjectX ("BGP-пир ". $peerX ." на ". $hostNameX . " НЕ установлен!");  
               
               # Цикл по массиву email для отправки всем получателям  
               :local arrPos2  
               :for arrPos2 from=0 to=([:len $arrEmails]-1) do={
                  :set mailToX [:pick $arrEmails $arrPos2]
                  :log error ("Статус BGP-пира " . $peerX . " — " .$peerStatusX. "! Отправка Email уведомления на " . $mailToX . "." )  
                  /tool e-mail send to=$mailToX subject=$mailSubjectX body=$mailBodyX start-tls=yes;  
               }        

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

         } else={  
           
            # Проверяем, если пир только что восстановился, отправляем уведомление  
            if ($statusX = "down") do={  
               
               :set mailSubjectX ("BGP-пир ". $peerX ." на ". $hostNameX . " восстановился!");  
                       
               :local arrPos2  
               :for arrPos2 from=0 to=([:len $arrEmails]-1) do={
                  :set mailToX [:pick $arrEmails $arrPos2]
                  :log warning ("Статус BGP-пира " . $peerX . " восстановился! Отправляю информирующее письмо на " . $mailToX . "." )  
                  /tool e-mail send to=$mailToX subject=$mailSubjectX body=$mailBodyX start-tls=yes;  
               }            
            }  
           
            if ($debug = true) do={  
               :log info ("BGP-пир " . $peerX . " работает. Делать ничего не надо!")  
            }  
           
            # Устанавливаем статус пира в up  
            :set ($arrBgpState->$peerX) "up"  
         }      
         
      } else={  
         if ($debug = true) do={  
            :log warning ("BGP-пир " . $peerX . " отключён. Пропускаю!")  
         }  
      }  
         
    }  

    if ($debug = true) do={  
      :log info ("==============КОНЕЦ ПРОВЕРКИ СТАТУСА BGP ПИРОВ===============" )  
    }  

    В логах выскакивает такая ошибка:  
    Topics script error  
    Message: BGP Peer status is idle! Sending Email alert to > mail@mail.com > .

    Кто-нибудь может помочь разобраться, в чём проблема?  
    Модель роутера: CCR1072-1G-8S+  
    Версия RouterOS: 6.39.2
     
     
     
    deanp
    Guest
    #2
    0
    17.11.2020 19:27:00
    Привет! Твой скрипт сработал у меня идеально, единственное, что я изменил:  
    Send Email /tool e-mail send to=$mailToX subject=$mailSubjectX body=$mailBodyX start-tls=yes;  
    на  
    Send Email /tool e-mail send to=$mailToX subject=$mailSubjectX body=$mailBodyX start-tls=tls-only;
     
     
     
    deanp
    Guest
    #3
    0
    26.03.2023 17:01:00
    Привет, есть у кого-нибудь скрипт ошибки BGP is down для версии v7?
     
     
     
    chubbs596
    Guest
    #4
    0
    29.05.2023 13:58:00
    Привет, я тоже ищу похожий скрипт для V7.
     
     
     
    kerfuffle
    Guest
    #5
    0
    19.06.2023 04:39:00
    Я написал небольшую программу на Python, которая запускается прямо на роутере с моего хоста для мониторинга. Она также уведомит вас, если сессия указана в /routing/bgp/connection, но при этом не отображается в /routing/bgp/sessions, а ещё покажет сессии, которые в /routing/bgp/sessions не установлены. https://github.com/edgenative/mikrotik-bgpmon
     
     
     
    ditud
    Guest
    #6
    0
    11.09.2023 07:32:00
    Здравствуйте, может кто-нибудь подсказать решение: я использую этот скрипт, и он отправляет предупреждения на электронную почту; время от времени у меня сбиваются BGP-сессии, и в таких случаях мне приходится вручную отключать и включать BGP-пира, чтобы восстановить сессию; хотелось бы, чтобы этот скрипт автоматически выключал и включал пира при обнаружении разрыва BGP-сессии; есть какие-нибудь предложения? Заранее спасибо за помощь. Даниэль
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры