Устройства MikroTik всем хороши и это особенно хорошо, когда их много! А если много, то и проблем может быть чуть больше, чем хотелось бы, а лазить по разным железкам и смотреть там логи, это не вариант. А если еще какая-то железка куда-то из сети пропала…
О, кстати, еще есть нюанс – Микротик не умеет из коробки отправлять интересные строки логов на почту1)!
Тут все до жути банально – добавляем действие, причем, я предпочитаю использовать разные категории – к примеру, «local6» для роутеров, а «local7» для антенн.
Ну, и нужные правила – опять же, больше логов перешлем, чище будет жопа совесть.
/system logging action add bsd-syslog=yes name=Syslog remote=192.168.0.245 syslog-facility=local6 \ target=remote /system logging add action=Syslog prefix=mk_log topics=info add action=Syslog prefix=mk_log topics=critical add action=Syslog prefix=mk_log topics=error add action=Syslog prefix=mk_log topics=warning
Использование протокола BSD-syslog, на этом безрыбье2), обязательно, иначе не будет правильно передаваться важность события. Префикс тоже будет использоваться в дальнейшем и он должен быть у всех устройств одинаковый.
Не скажу, почему именно эта ветка сислога, почему, к примеру, не rsyslog, установленный в Raspberry Pi OS 11 (bullseye) по умолчанию… Просто так сошлись звезды, ну… еще я в документации увидел, что он может без танцев с бубном отправлять письма! Вот.
Тут ничего нового:
sudo apt update && sudo apt upgrade
;sudo apt install syslog-ng
.При этом, rsyslog удалится автоматически! NG его полностью замещает.
Базовые настройки хранятся в файле «/etc/syslog-ng/syslog-ng.conf», а дополнительные принято складывать в папку «/etc/syslog-ng/conf.d/», поэтому нужно создать новый файл sudo nano /etc/syslog-ng/conf.d/mikrotik.conf
и добавить в него конфиг3):
#Global options { create-dirs( yes ); dir-group( adm ); dir-perm( 0755 ); group( adm ); perm( 0644 ); use-dns( yes ); use-fqdn( yes ); dns-cache( yes ); }; #Sources source s_my_udp { network( transport( udp ) flags( no-hostname ) ); }; #Filters filter f_my_mikrotik { message( "mk_log" ); }; filter f_my_mail { message( "changed by admin" ) or message( "XX:XX:XX:XX:XX:XX" ); }; #Rewrites rewrite r_my_mikrotik { subst( "mk_log: ", "", value( "MESSAGE" ) ); subst( "XX:XX:XX:XX:XX:XX", "iPhone-Nikolay", value( "MESSAGE" ) ); subst( "XX:XX:XX:XX:XX:XX", "iPhone-Olga", value( "MESSAGE" ) ); }; #Templates template t_my_mikrotik { template( "<${PRI}>1 ${ISODATE} ${HOST} - - - - ${MESSAGE}\n" ); }; #Destinations destination d_my_mikrotik { file( "/var/log/mikrotik/remote.log" template( t_my_mikrotik ) ); }; destination d_my_mail { smtp( host( "smtp.domain.int" ) port( 25 ) from( "Syslog-NG" "syslog-ng@server.zone" ) to( "Admin" "admin@server.zone" ) subject( "=?UTF-8?B?<<<кОДИРОВАННЫЙтЕКСТ>>>?=" ) body( "$MSG" ) ); }; #Log paths log { source( s_my_udp ); filter( f_my_mikrotik ); rewrite( r_my_mikrotik ); destination( d_my_mikrotik ); log { filter( f_my_mail ); destination( d_my_mail ); }; };
После сохранения файла, конфигурацию необходимо проверить sudo syslog-ng --syntax-only
4) и перечитать sudo syslog-ng-ctl reload
. Для рестарта демона можно использовать sudo systemctl restart syslog-ng
.
Переписываем некоторые глобальные настройки5):
Список источников. В данном примере он только один – BSD-syslog7) на порту 514/UDP. Флаг «no-hostname» необходим для правильного разбора строки8) – MikroTik не передает имя хоста и все сдвигается на одну позицию влево из-за чего все ломается…
Список фильтров. Первым мы отбираем из потока сообщения от определенных устройств. А вторым отбираем, что нужно отправлять по почте.
Правила перезаписи. Сперва мы удаляем уже не нужную метку, а далее для удобства заменяем MAC-адреса читаемыми названиями. Последнее, кстати, мега удобно при просмотре логов!
Шаблоны. Такой шаблон необходим, чтобы логи MikroTik правильно и, что главное, красиво отображались LogAnalyzer'ом в формате IETF-syslog.
Список назначений. Первое, это текстовый файл с подготовленным выше шаблоном. Второе… ну понятно, же! Отправка на электронную почту.
Тут есть один нюанс – чтобы использовать русский текст в теме письма9), его необходимо закодировать в BASE6410), к примеру, используя этот сайт, и разместить внутри такой конструкции =?UTF-8?B?_________?=
.
Ну и напоследок собираем путь – тут он один, но с вложением – сперва сохраняем в файл, а потом отправляем по почте.
Для контроля над занимаемым логами местом и размером самих логов, используется утилита «logrotate», которая читает дополнительные конфигурации из папки «/etc/logrotate.d», куда и нужно добавить новую конфигурацию, открыв пустой файл sudo nano /etc/logrotate.d/syslog-ng-mk
и введя в него следующее:
/var/log/mikrotik/remote.log { rotate 10 size 10M missingok notifempty delaycompress compress nocreate postrotate invoke-rc.d syslog-ng reload > /dev/null endscript }
Это будет обозначать, что:
Далее нужно только проверить конфиг sudo logrotate /etc/logrotate.conf --debug
и все.
Смотреть журналы удобно локально утилитой «lnav»12) или через web с помощью LogAnalyzer.
use-dns( persist_only );
и dns-cache-hosts( «/etc/hosts» );
со статическим списком адресов.junction { channel { }; channel { }; };
, как в этом примере, но до нее я пока не добрался.sudo apt install lnav
.
Обсуждение