Home » Mikrotik » Mikrotik логирование на удаленный сервер rsyslog

Mikrotik логирование на удаленный сервер rsyslog

Возникло желание собирать логи с роутера Mikrotik. Была нужна информация о подключенных по pptp абонентах и логи firewall для настройки. По-умолчанию, Mikrotik пишет все логи в лог журнал, который можно просмотреть через winbox. Стандартно, там хранятся последние 100 строк лога.

Если у вас есть желание научиться работать с роутерами микротик и стать специалистом в этой области, рекомендую по программе, основанной на информации из официального курса MikroTik Certified Network Associate. Курс стоящий, все подробности читайте по ссылке.

Данная статья является частью единого цикла статьей про Mikrotik.

Mikrotik logging

Настраиваем удаленный сервер rsyslog

У меня в хозяйстве имелся сервер Debian. Решил хранить логи с микротиков именно на нем. В составе Debian уже имеется сервис сбора логов с удаленных источников rsyslog. Необходимо только включить в нем необходимый функционал. Правим файл /etc/rsyslog.conf:

Раскомментируем строки

# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

чтобы получать логи по UDP, либо

# provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

чтобы получать логи по TCP

И в секцию RULES добавим несколько строк для удобного хранения файлов логов от разных удаленных источников:

# Зададим шаблон создания имен файлов (на основании IP адреса клиента)
$template FILENAME,"/var/log/!remote/%fromhost-ip%/syslog.log"
# Укажем сохранять сообщения от любого источника (*) с любым приоритетом (*) в файл, заданный шаблоном
# Например, клиенты (10.0.0.2,10.0.0.3...) будут раскладываться в соответствующие каталоги /var/log/10.0.0.2/syslog.log
 *.* ?FILENAME

Перезапускаем rsyslog для применения настроек:

/etc/init.d/rsyslog restart

Теперь наш сервер готов принимать логи с удаленных источников. Хранить он их будет в папке /var/log/!remote Для каждого источника будет создана папка с именем IP адреса этого источника.

Настраиваем пересылку логов в Mikrotik

Теперь настраиваем в роутере хранение логов на удаленном сервере. Для этого заходим в раздел System -> Logging, выбираем закладку Actions, два раза щелкаем по строчке remote. Открывается окно настроек. В нем вводим адрес удаленного сервера сбора логов. Порт на свое усмотрение либо оставляем по-умолчанию, либо меняем на свой. Больше ничего добавлять не надо.

настройка логов в mikrotik

Дальше в разделе Rules создаем необходимое правило хранения:

Правила для логов в mikrotik

Все готово. Теперь все наши логи будут храниться на удаленном сервере. Необходимо не забыть настроить ротацию логов, дабы в один прекрасный день они не заняли все свободное место.

запись логов с mikrotik в rsyslog

Если вы используете ELK Stack для централизованного сбора логов, то у меня есть статья по отправке логов mikrotik в elk stack.

Напоминаю, что данная статья является частью единого цикла статьей про Mikrotik.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Рекомендую полезные материалы по схожей тематике:

Онлайн курсы по Mikrotik

Если у вас есть желание научиться работать с роутерами микротик и стать специалистом в этой области, рекомендую пройти курсы по программе, основанной на информации из официального курса MikroTik Certified Network Associate. Помимо официальной программы, в курсах будут лабораторные работы, в которых вы на практике сможете проверить и закрепить полученные знания. Все подробности на сайте . Стоимость обучения весьма демократична, хорошая возможность получить новые знания в актуальной на сегодняшний день предметной области. Особенности курсов:
  • Знания, ориентированные на практику;
  • Реальные ситуации и задачи;
  • Лучшее из международных программ.

Автор Zerox

Zerox
Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству.

17 комментариев

  1. Аватар
    Николай

    В догонку скрипт, с помощью которого можно организовать удалённое логирование событий при падении аплинка. Когда скрипт замечает что аплинк упал, он начинает писать логи событий в файл, а когда аплинк поднимется отправляет их в лог, в том числе и удаленно, если удалённое логирование настроено. Для работы скрипта в имени интерфейса, который является аплинком должно быть слово uplink. Например так: ether3 uplink

    :local tmp [:toarray ""]
    :local numInt 
    :local truFal [:toarray ""]
    :local l 0
    :local tf
    :local file
    :local lastPos 0
    :local k true
    :local line
    :local count 1
    
    #:delay 30s;
    
    /log info ("uplinkMonitor working!")
    
    for i from=0 to=50 do={ :set ($truFal->$i) 1;}
    
    while (true) do={
    
        :set tmp [/interface ethernet find where name~".*uplink"]
    
        :if ( [:len $tmp]>1) do={ /log info ("More then one uplink!"); :delay 10s; /log info ("Trying!"); :set count 0 } else={
            :if ( [:len $tmp]$i) 1;} }
                  
                :set l [:len ($tmp->0)]
                :set $numInt [:pick ($tmp->0) 1 $l];
                      
                :set tf [/interface get ($numInt-1) running];
                 			
                :if (  $truFal->(($numInt*1)-1)=1  ) do={ 
                   :set ($truFal->(($numInt*1)-1)) $tf;
                }
                 			 
                :if (  $truFal->(($numInt*1)-1)=true  && $tf=false ) do={
                    :set ($truFal->(($numInt*1)-1) ) false;
                       
                    /system logging action  add name="uplinkCrashDisk" target="disk" disk-file-name="uplinkCrash"
                    /system logging add topics="critical" action="uplinkCrashDisk"	
                    /system logging add topics="error" action="uplinkCrashDisk"	
                    /system logging add topics="warning" action="uplinkCrashDisk"	
                    /system logging add topics="info" action="uplinkCrashDisk"	
                    /log info ("ether" . ($numInt)  . " uplink link down (BY SCRIPT)");                  
                       
                }
                   
                :if (  $truFal->(($numInt*1)-1)=false  && $tf=true ) do={ 
                    :set ($truFal->(($numInt*1)-1)) true;
                    /log info ("ether" . ($numInt)  . " uplink link up (BY SCRIPT)")
    	/system logging remove [/system logging find where  action="uplinkCrashDisk"]
    	/system logging action remove [/system logging action find where name="uplinkCrashDisk"]
                                        				
                    :delay 1s
                          
                    :set file [/file get [/file find where name="uplinkCrash.0.txt"] contents ]
                    /log error ("start-------------SCRIPT-------------------start")
                            
                    :set k true; set lastPos 0;
                    :while (k) do={
                        :set line [:pick $file $lastPos [:find $file "\n" $lastPos]];
                        /log info $line
                        :set $lastPos  ([:find $file "\n" $lastPos ]+1)
                        :if ( $lastPos>=[:len $file] ) do={ :set k false }
                    }
                                      
                    /log error ("end---------------SCRIPT---------------end" )
                       
                    /file remove [/file find where name="uplinkCrash.0.txt"]
                        
                 }
                :delay 300ms;
            }        
        }
    }
    • Zerox

      А какой в этом смысл, если эти же аплинки можно мониторить по snmp? У меня есть статья.

      • Аватар
        Николай

        Мониторить по snmp можно, но опрашивать девайс, допустим каждую секунду - не комильфо. А если интерфейс флапает. Этот скрипт проверяет состояние интерфейса раз в 300 миллисекунд. Изначально цель была именно мониторить кратковременные падения-подъёмы интерфейсов.
        Хороший способ мониторить флапы интерфейса - это трапы на вышестоящем девайсе.
        Скрипт, кстати, вставился криво. Там как минимум две строки кривые. Если интересно, могу, допустим на почту, прислать нормальный текст скрипта.

        • Zerox

          Если есть задача в таких частых проверках, то наверно имеет право на жизнь. Но как себя само устройство чувствует с такими частыми проверками, особенно если интерфейсов много?

          Движок сайта не позволяет нормально вставлять код. Я поправил руками.

  2. Аватар
    Алексадр

    Добрый день.
    настроил пересылку логов на киви syslog server. теперь вопрос как просматривать в удобоваримом формате. возможно реализовать подсчет трафика, а также кто куда ходил и сколько скачал с помощью логов микротика ?

    • Zerox

      Эти вопросы должны решаться не хранилищем логов. Нужен какой-то софт, который все это будет обрабатывать, складывать в базу данных и формировать отчеты. Мне такие инструменты, тем более бесплатные, не известны.

  3. Аватар
    Николай

    Добрый день.
    Спасибо за статью. Вопрос:
    Как быть с падением аплинка на микротике. Пока аплинк лежит, логи на удалённый сервер естественно не приходят. Но нет ли возможности получить все пропущенные события, когда аплинк поднимется?

    • Zerox

      Не знаю, не прорабатывал этот момент. Возможно как-то через скрипт это можно реализовать. Логи же он все равно локально пишет. Но задача на первый взгляд не простая.

  4. Аватар
    Владимир

    Добрый день.
    Настроил сбор логов в сети 192.168.65.0/24 все прекрасно работает. Так же имеется микротик в сети другого офиса 192.168.70.0/24, впн туннел настроен, пинги идут. Но логи не отправляются на сервер rsyslog 192.168.65.93. Не подскажете в чем может быть причина?

    • Zerox

      В чем угодно :) Так разве скажешь. Настройки firewall в первую очередь проверяйте. Дальше в rsyslog смотрите, нет ли там ограничение на прием по ip адресам.

      • Аватар
        Владимир

        В фаерволе разрешающие входящие правила для порта и ip были добавлены, получилось только после того, как добавил правильно в NAT (chain dstnat, dst.port 514, action=netmap 192.168.65.93 to ports 514). Я думал, что и без него микротик должен отправлять пакеты.

  5. Аватар
    Виктор

    Можно ли копить статистику на самом роутере и выкачивать её на внешний ресур только по необходимости, раз в неделю например? Или просматривать логи прямо на роутере?

  6. Аватар

    Добрый день!
    Подскажите поднял на CentOS Syslog в настройках указал только две строки:
    $template FILENAME,"/var/log/!remote/%fromhost-ip%/syslog.log"
    *.* ?FILENAME
    В Mikrotik указал какие логи слать на удаленный сервер и тишина ничего не падает...514 порт на CentOs открыт не подскажите куда копать?

Добавить комментарий

Ваш адрес email не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.