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

    Мониторинг логов Mikrotik через Telegram

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Мониторинг логов Mikrotik через Telegram, RouterOS
     
    katem07
    Guest
    #1
    0
    08.09.2019 10:42:00
    Привет! Если ты хочешь отслеживать конкретные события в логах твоих Mikrotik, такие как: избыточные широковещательные пакеты, зацикливания, падение соединения, ошибки FCS и даже неудачные попытки входа на сервер, этот метод поможет тебе так же, как он помог мне контролировать более 40 серверов Mikrotik в течение года в идеальных условиях. Ты можешь фильтровать параметры своих логов, и этот метод будет отправлять все события в твою группу в Telegram в виде уведомлений. Вот простой скрипт с авторасписанием, работающий каждую минуту (ты можешь редактировать его по своему усмотрению). Вот шаги: 1. добавь новый скрипт с именем "LogFilter" 2. Скопируй и вставь код ниже 3. Настрой раздел установки, указав своего Telegram-бота и ID чата 4. Запусти скрипт в первый раз самостоятельно, позволив ему работать каждую минуту. # ФИЛЬТР ЖУРНАЛА ДЛЯ TELEGRAM ОТ AHMED MOUSELLY # НАЧАЛО НАСТРОЙКИ Редактируй здесь :local myserver ([/system identity get name]) :local scheduleName "LogFilter" :local bot "your bot id" :local ChatID "-your chat id" :local startBuf [:toarray [/log find message~" failure" || message~"loop" || message~"down" || message~"fcs" || message~"excessive"]] # КОНЕЦ НАСТРОЙКИ # предупреждение, если расписание не существует :if ([:len [/system scheduler find name="$scheduleName"]] = 0) do={ /log warning "[LogFilter] Внимание: Расписание не существует. Создание расписания ...." /system scheduler add name=$scheduleName interval=60s start-date=Jul/05/2019 start-time=startup on-event=LogFilter /log warning "[LogFilter] Внимание: Расписание создано." } # получить последнее время :local lastTime [/system scheduler get [find name="$scheduleName"] comment] # для проверки времени каждой записи лога :local currentTime # сообщение лога :local message # финальный вывод :local output :local keepOutput false # если lastTime пуст, установить keepOutput в true :if ([:len $lastTime] = 0) do={ :set keepOutput true } :local counter 0 # пройтись по всем записям лога :foreach i in=$startBuf do={ # пройтись по всем элементам массива removeThese :local keepLog true :foreach j in=$removeThese do={ # если эта запись лога содержит что-то из них, она будет игнорироваться :if ([/log get $i message] ~ "$j") do={ :set keepLog false } } :if ($keepLog = true) do={ :set message [/log get $i message] # ДАТА ЛОГА # в зависимости от даты/времени лога формат может быть разным. 3 известных формата # формат jan/01/2002 00:00:00, который появляется в неизвестной дате/времени. Используется по умолчанию :set currentTime [ /log get $i time ] # формат 00:00:00, который появляется в логах текущего дня :if ([:len $currentTime] = 8 ) do={ :set currentTime ([:pick [/system clock get date] 0 11]." ".$currentTime) } else={ # формат jan/01 00:00:00, который появляется в логах предыдущего дня :if ([:len $currentTime] = 15 ) do={ :set currentTime ([:pick $currentTime 0 6]."/".[:pick [/system clock get date] 7 11]." ".[:pick $currentTime 7 15]) } } # если keepOutput истинно, добавь эту запись лога в вывод :if ($keepOutput = true) do={ :set output ($output.$currentTime." %0A%0A ".$message."\r\n") } :if ($currentTime = $lastTime) do={ :set keepOutput true :set output "" } } :if ($counter = ([:len $startBuf]-1)) do={ :if ($keepOutput = false) do={ :if ([:len $message] > 0) do={ :set output ($output.$currentTimer." ".$message."\r\n") } } } :set counter ($counter + 1) } if ([:len $output] > 0) do={ /system scheduler set [find name="$scheduleName"] comment=$currentTime /tool fetch url="https://api.telegram.org/bot$bot/sendmessage?chat_id=$ChatID&text=$myserver%0A%0A$output" keep-result=no; } Примечание 1: Этот код не повторит одно и то же событие дважды, он берет последнюю дату события и сохраняет её, чтобы не повторяться до тех пор, пока оно снова не появится в логе. Примечание 2: Процитированный и измененный код. С уважением.
     
     
     
    rextended
    Guest
    #2
    0
    30.06.2021 14:36:00
    Зачем создавать скрипт, который должен запускать планировщик, если потом один из двух не работает, и ты тратишь время, выясняя, в чем проблема??? Скрипт просто отключает себя от планировщика, вместо того чтобы устраивать всю эту игру в пинг-понг и проверять, существует ли планировщик или нет.
     
     
     
    666blade666
    Guest
    #3
    0
    30.06.2021 15:09:00
    У вас есть скрипт, который может отправлять логи в Telegram, подобно этому? Чтобы выбрать, какие критерии отправлять (например: критические, сбой, предупреждение)…
     
     
     
    rextended
    Guest
    #4
    0
    30.06.2021 15:13:00
    Я не пишу скрипты, которые не могу протестировать. У меня нет телеграма, но если вы ПОИЩЕТЕ мои предыдущие посты, то увидите, что я уже помогал другим авторам исправить скрипты в похожем ключе.
     
     
     
    MisterFTTH
    Guest
    #5
    0
    07.06.2020 14:46:00
    Привет, katem07! Я почти год полагался на твой отличный скрипт (vanilla), но вчера он неожиданно перестал работать, хотя я ничего не менял в настройках: счётчик скрипта увеличивается, ошибок не появляется, но сообщения не отправляются. Я пробовал перезагрузку и обновление, но безуспешно, к сожалению... Кстати, я без проблем отправляю сообщения вручную через браузерный URL или консоль ROS... Есть какие-то подсказки? Заранее спасибо!
     
     
     
    BergDev
    Guest
    #6
    0
    09.07.2020 14:54:00
    Я протестировал скрипт на своем RB750 GR3, он отлично фильтрует логи, но я немного доработал его с обновлением ROS 6.46. Добавляю обновленную версию. # LOG FILTER TO TELEGRAM BY AHMED MOUSELLY//UPD.09.07.2020BergDev
    # НАЧАЛО НАСТРОЕК Правьте здесь
    :local myserver ([/system identity get name])
    :local scheduleName "LogFilter"
    :local bot "ВВЕДИТЕ ВАШ BOTID"
    :local ChatID "ВВЕДИТЕ ВАШ CHAT ID"
    # Здесь вы можете указать, какие события из логов нужно отправлять.
    :local startBuf [:toarray [/log find message~" failure" || message~"loop" || message~"sent" || message~"down" || message~"fcs" || message~"excessive"]]

    # КОНЕЦ НАСТРОЕК

    # предупреждение, если расписание не существует
    :if ([:len [/system scheduler find name="$scheduleName"]] = 0) do={
     /log warning "[LogFilter] Внимание: расписание не существует. Создаю расписание ...."

    /system scheduler add name=$scheduleName interval=60s start-date=Jul/09/2020 start-time=startup on-event=LogFilter

     /log warning "[LogFilter] Внимание: расписание создано."
    }

    # получаем последнее время
    :local lastTime [/system scheduler get [find name="$scheduleName"] comment]
    # для проверки времени каждой записи лога
    :local currentTime
    # сообщение лога
    :local message

    # финальный вывод
    :local output

    :local keepOutput false
    # если lastTime пустое, устанавливаем keepOutput в true
    :if ([:len $lastTime] = 0) do={
     :set keepOutput true
    }

    :local counter 0
    # проходим по всем записям логов, которые были найдены
    :foreach i in=$startBuf do={

    # проходим по всем элементам массива removeThese
     :local keepLog true
     :foreach j in=$removeThese do={
    #   если эта запись лога содержит что-то из них, она будет проигнорирована
       :if ([/log get $i message] ~ "$j") do={
         :set keepLog false
       }
     }
     :if ($keepLog = true) do={
     
      :set message [/log get $i message]

    #   ДАТА ЛОГА
    #   в зависимости от даты/времени лога, формат может быть разным. 3 известных формата
    #   формат jan/01/2002 00:00:00, который появляется при неизвестной дате/времени. Используется по умолчанию
       :set currentTime [/log get $i time]
    #   формат 00:00:00, который появляется в логах текущего дня
      :if ([:len $currentTime] = 8) do={
        :set currentTime ([:pick [/system clock get date] 0 11]." ".$currentTime)
       } else={
    #     формат jan/01 00:00:00, который появляется в логах предыдущего дня
        :if ([:len $currentTime] = 15) do={
           :set currentTime ([:pick $currentTime 0 6]."/".[:pick [/system clock get date] 7 11]." ".[:pick $currentTime 7 15])
         }
      }
       
    #   если keepOutput равно true, добавляем эту запись лога в вывод
      :if ($keepOutput = true) do={
        :set output ($output.$currentTime." %0A%0A ".$message."\r\n")
      }

       :if ($currentTime = $lastTime) do={
        :set keepOutput true
        :set output ""
      }
     }
     :if ($counter = ([:len $startBuf]-1)) do={
      :if ($keepOutput = false) do={    
        :if ([:len $message] > 0) do={
           :set output ($output.$currentTime." ".$message."\r\n")
         }
       }
     }
     :set counter ($counter + 1)
    }

    if ([:len $output] > 0) do={
     /system scheduler set [find name="$scheduleName"] comment=$currentTime
     /tool fetch url="https://api.telegram.org/bot$bot/sendMessage\?chat_id=$ChatID&text=$myserver%0A%0A$output" keep-result=no;
    }
     
     
     
    BergDev
    Guest
    #7
    0
    11.07.2020 17:54:00
    Я заметил ошибку в скрипте, уведомления из лога не обрабатываются сразу, а с задержкой, или вообще не обрабатываются. Я постараюсь это исправить.
     
     
     
    Lilarcor
    Guest
    #8
    0
    28.07.2020 13:12:00
    У меня есть другие скрипты для загруженных текстовых файлов, которые оставляют "downloaded" в журнале. Как мне игнорировать "downloaded", но оставить "down" в скрипте мониторинга?
     
     
     
    MisterFTTH
    Guest
    #9
    0
    07.08.2020 09:45:00
    Спасибо за ваши усилия!
     
     
     
    neck
    Guest
    #10
    0
    31.10.2020 09:20:00
    Могу ли я позволить пользователю определить расписание выполнения скрипта? =) И не создавать его на запуск раз в минуту. ...
    :if ([:len [/system scheduler find name="$scheduleName"]] = 0) do={
     /log warning "[LOGMON] ОШИБКА: Расписание не существует. Создайте расписание и отредактируйте скрипт, чтобы соответствовать имени: $scheduleName"
    }

    # удалите это /system scheduler add name=$scheduleName interval=60s start-date=Jul/09/2020 start-time=startup on-event=LogFilter
    # удалите это /log warning "[LogFilter] Уведомление: Расписание создано."
     
     
     
    imad
    Guest
    #11
    0
    23.11.2020 10:38:00
    Я попробовал на HEX, всё работает, спасибо! Но я поставил те же настройки на CCR 1036, и ничего не вышло. Есть ли решение?
     
     
     
    ksteink
    Guest
    #12
    0
    24.11.2020 21:43:00
    Хороший скрипт. Я использую его на нескольких устройствах, работает как часы. Отправлено с моего iPhone через Tapatalk.
     
     
     
    BergDev
    Guest
    #13
    0
    25.11.2020 05:50:00
    Да, они написали мне об этой ошибке, сейчас я проверяю скрипт на разных устройствах.
     
     
     
    BergDev
    Guest
    #14
    0
    25.11.2020 05:52:00
    График выполнения скрипта напрямую зависит от времени, когда журнал отправляется в чат телеграма. Вы можете попробовать изменить время выполнения скрипта.
     
     
     
    kivimart
    Guest
    #15
    0
    28.05.2021 06:22:00
    Найдите какое-нибудь решение для этого.?
     
     
     
    666blade666
    Guest
    #16
    0
    30.06.2021 14:26:00
    Не работает на rb4011
     
     
     
    666blade666
    Guest
    #17
    0
    01.07.2021 07:08:00
    Можешь помочь мне с этим? На RB4011 не работает… =(( ЛОГ ФИЛЬТР ДЛЯ TELEGRAM НАЧАЛ НАСТРОЙКУ Редактируйте здесь :local myserver ([/system identity get name]) :local scheduleName “LogFilter” :local bot “941325023:AAH-pNTxLr021Av_C7bc9IGVdZDchDlwGb0” :local ChatID “-262862011” #Здесь можно указать, какие события из логов нужно отправить. :local startBuf [:toarray [/log find message~" failure" || message~“loop” || message~“critical” || message~“error” || message~“fcs” || message~“excessive”]] КОНЕЦ НАСТРОЙКИ предупреждение, если расписание не существует :if ([:len [/system scheduler find name=“$scheduleName”]] = 0) do={ /log warning “[LogFilter] Внимание : Расписание не существует. Создаю расписание …” /system scheduler add name=$scheduleName interval=300s start-date=Jul/09/2020 start-time=startup on-event=LogFilter /log warning “[LogFilter] Внимание : Расписание создано .” } Получить последнее время :local lastTime [/system scheduler get [find name=“$scheduleName”] comment] для проверки времени каждой записи лога :local currentTime лог сообщение :local message финальный вывод :local output :local keepOutput false если lastTime пусто, установить keepOutput в true :if ([:len $lastTime] = 0) do={ :set keepOutput true } :local counter 0 перебираем все найденные записи логов :foreach i in=$startBuf do={ перебираем все элементы массива removeThese :local keepLog true :foreach j in=$removeThese do={ если эта запись лога содержит любую из них, она будет проигнорирована :if ([/log get $i message] ~ “$j”) do={ :set keepLog false } } :if ($keepLog = true) do={ :set message [/log get $i message] ДАТА ЛОГА в зависимости от даты/времени лога, формат может быть разным. 3 известных формата формат Jan/01/2002 00:00:00, который появляется при неизвестной дате/времени. Используя по умолчанию :set currentTime [ /log get $i time ] формат 00:00:00, который появляется в логах текущего дня :if ([:len $currentTime] = 8 ) do={ :set currentTime ([:pick [/system clock get date] 0 11]." ".$currentTime) } else={ формат Jan/01 00:00:00, который появляется в логах предыдущего дня :if ([:len $currentTime] = 15 ) do={ :set currentTime ([:pick $currentTime 0 6].“/”.[:pick [/system clock get date] 7 11]." ".[:pick $currentTime 7 15]) } } если keepOutput истинно, добавляем эту запись лога в вывод :if ($keepOutput = true) do={ :set output ($output.$currentTime." %0A%0A “.$message.”\r\n") } :if ($currentTime = $lastTime) do={ :set keepOutput true :set output “” } } :if ($counter = ([:len $startBuf]-1)) do={ :if ($keepOutput = false) do={ :if ([:len $message] > 0) do={ :set output ($output.$currentTimer." “.$message.”\r\n") } } } :set counter ($counter + 1) } если ([:len $output] > 0) do={ /system scheduler set [find name=“$scheduleName”] comment=$currentTime /tool fetch url=“ https://api.telegram.org/bot$bot/sendmessage?chat_id=$ChatID&text=$myserver%0A%0A$output ” keep-result=no; }
     
     
     
    MohamedTaltlo
    Guest
    #18
    0
    14.07.2021 14:06:00
    не работает на CCR1036, есть ли новые обновления для этого скрипта? Пожалуйста?
     
     
     
    kivimart
    Guest
    #19
    0
    15.07.2021 18:02:00
    То же самое на ccr-1009
     
     
     
    rextended
    Guest
    #20
    0
    15.07.2021 23:46:00
    Кто-нибудь, помогите пользователю, пожалуйста. У меня нет телеграмма (и я не хочу его иметь) # LOG FILTER TO TELEGRAM # BEGIN SETUP Редактировать здесь :local myserver ([/system identity get name]) :local scheduleName "LogFilter" :local bot "941325023:AAH-pNTxLr021Av_C7bc9IGVdZDchDlwGb0" :local ChatID "-262862011" # Здесь вы можете указать, какие события из логов нужно отправлять. :local startBuf [:toarray [/log find message~" failure" || message~"loop" || message~"critical" || message~"error" || message~"fcs" || message~"excessive"]] # END SETUP # предупреждение, если расписание не существует :if ([:len [/system scheduler find name="$scheduleName"]] = 0) do={ /log warning "[LogFilter] Внимание: Расписание не существует. Создание расписания ...." /system scheduler add name=$scheduleName interval=300s start-date=Jul/09/2020 start-time=startup on-event=LogFilter /log warning "[LogFilter] Внимание: Расписание создано." } # получение последнего времени :local lastTime [/system scheduler get [find name="$scheduleName"] comment] # для проверки времени каждой записи лога :local currentTime # лог-сообщение :local message # финальный вывод :local output :local keepOutput false # если lastTime пустое, установите keepOutput в true :if ([:len $lastTime] = 0) do={ :set keepOutput true } :local counter 0 # перебор всех записей лога, которые были найдены :foreach i in=$startBuf do={ # перебор всех элементов массива removeThese :local keepLog true :foreach j in=$removeThese do={ # если эта запись лога содержит любой из них, она будет проигнорирована :if ([/log get $i message] ~ "$j") do={ :set keepLog false } } :if ($keepLog = true) do={ :set message [/log get $i message] # ДАТА ЛОГА # в зависимости от даты/времени лога, формат может быть разным. 3 известных формата # формат jan/01/2002 00:00:00, который появляется при неизвестной дате/времени. Используется по умолчанию :set currentTime [ /log get $i time ] # формат 00:00:00, который появляется в логах текущего дня :if ([:len $currentTime] = 8 ) do={ :set currentTime ([:pick [/system clock get date] 0 11]." ".$currentTime) } else={ # формат jan/01 00:00:00, который появляется в логах предыдущего дня :if ([:len $currentTime] = 15 ) do={ :set currentTime ([:pick $currentTime 0 6]."/".[:pick [/system clock get date] 7 11]." ".[:pick $currentTime 7 15]) } } # если keepOutput истинно, добавить эту запись лога в вывод :if ($keepOutput = true) do={ :set output ($output.$currentTime." %0A%0A ".$message."\r\n") } :if ($currentTime = $lastTime) do={ :set keepOutput true :set output "" } } :if ($counter = ([:len $startBuf]-1)) do={ :if ($keepOutput = false) do={ :if ([:len $message] > 0) do={ :set output ($output.$currentTimer." ".$message."\r\n") } } } :set counter ($counter + 1) } if ([:len $output] > 0) do={ /system scheduler set [find name="$scheduleName"] comment=$currentTime /tool fetch url="https://api.telegram.org/bot$bot/sendmessage\?chat_id=$ChatID&text=$myserver%0A%0A$output" keep-result=no; }
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры