Если у вас стоит задача собрать небольшое количество текстовых логов в одном месте, то городить современные решения типа Loki, ELK, Graylog избыточно. Это и долго, и разбираться надо, если не умеешь, и по ресурсам затратно. Предлагаю старую, простую и проверенную временем альтернативу - syslog-ng. Я этот софт давно знаю и использую по мере необходимости.
Покажу пример простой настройки, которую можно взять за основу и расширить при необходимости. Устанавливаем:
Если на машине уже был установлен rsyslog, то он будет удалён. Вместе они не работают, так как выполняют одну и ту же задачу в том числе по ведению локальных системных логов.
Открываем конфигурацию
Можно выбрать любой IP адрес сервера, порт и протокол. Я указал стандартный порт UDP 514 для протокола syslog. Никто не мешает использовать что-то другое. Например TCP 1000:
Переходим в папку
Файл назвал
Я создал объект d_mikrotik, который указывает на хранение логов в файле
С таким подходом удобно настраивать что, куда и по каким условиям писать. Можно несколько source указать с разными интерфейсами, протоколами и портами. Если у вас устройства разнесены по разным подсетям, то можно описать приём в два разных лог-файла логи от Mikrotik и от Linux систем:
По умолчанию syslog-ng работает от root, что не очень разумно и в данной задаче не нужно. Запустим его от пользователя syslog. Если вас это не беспокоит, то можно запускать и под root.
Добавляем в
В файле
на
Идём на конечное устройство настраивать отправку логов. В Mikrotik это делается в System ⇨ Logging ⇨ Actions. В remote указываете IP адрес сервера с syslog-ng.
В системах Linux с rsyslog достаточно в
и перезапустить его.
Получилось очень простое решение по централизованному сбору логов без аналитики, которое настраивается за 10 минут и не требует практически никаких особых ресурсов. На чём можно запустить Debian, там и будет работать.
Для просмотра логов через браузер можно использовать tailon, logdy, cockpit, webmin.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#logs #syslog
Покажу пример простой настройки, которую можно взять за основу и расширить при необходимости. Устанавливаем:
# apt install syslog-ng
Если на машине уже был установлен rsyslog, то он будет удалён. Вместе они не работают, так как выполняют одну и ту же задачу в том числе по ведению локальных системных логов.
Открываем конфигурацию
/etc/syslog-ng/syslog-ng.conf
и добавляем один параметр, который позволит принимать логи по сети от других устройств и систем:source s_net { udp(ip(0.0.0.0) port(514)); };
Можно выбрать любой IP адрес сервера, порт и протокол. Я указал стандартный порт UDP 514 для протокола syslog. Никто не мешает использовать что-то другое. Например TCP 1000:
source s_net { TCP(ip(0.0.0.0) port(1000)); };
Переходим в папку
/etc/syslog-ng/conf.d
и создаём там конфиг для приёма логов, например, с Mikrotik:destination d_mikrotik { file("/var/log/_remote/mikrotik.log"); };
filter f_mikrotik { netmask("10.20.1.20/255.255.255.255"); };
log { source(s_net); filter(f_mikrotik); destination(d_mikrotik); };
Файл назвал
mikrotik.conf
. В syslog-ng объектный принцип описания конфигурации. Этот как раз то, почему я предпочитаю для таких задач использовать именно его, а не rsyslog. У последнего не такой удобный формат конфигурации.Я создал объект d_mikrotik, который указывает на хранение логов в файле
/var/log/_remote/mikrotik.log
. Далее я сделал фильтр f_mikrotik, где указал в качестве условия IP адрес роутера. Можно и всю подсеть добавить. И в завершении указал, как именно будем логировать. Берём источник s_net, то есть всё, что приходит на UDP 514, проверяем по фильтру f_mikrotik и пишем в d_mikrotik, то есть в указанный лог-файл. С таким подходом удобно настраивать что, куда и по каким условиям писать. Можно несколько source указать с разными интерфейсами, протоколами и портами. Если у вас устройства разнесены по разным подсетям, то можно описать приём в два разных лог-файла логи от Mikrotik и от Linux систем:
destination d_mikrotik { file("/var/log/_remote/mikrotik.log"); };
filter f_mikrotik { netmask("10.20.1.0/255.255.255.0"); };
log { source(s_net); filter(f_mikrotik); destination(d_mikrotik); };
destination d_linux { file("/var/log/_remote/linux.log"); };
filter f_linux { netmask("10.30.1.0/255.255.255.0"); };
log { source(s_net); filter(f_linux); destination(d_linux); };
По умолчанию syslog-ng работает от root, что не очень разумно и в данной задаче не нужно. Запустим его от пользователя syslog. Если вас это не беспокоит, то можно запускать и под root.
# useradd syslog -s /usr/sbin/nologin
# chown syslog /var/lib/syslog-ng /var/log/_remote
Добавляем в
/etc/default/syslog-ng
:SYSLOGNG_OPTS="-u syslog -g syslog"
if [ ! -e /var/lib/syslog-ng.pid ] then
touch /var/lib/syslog-ng.pid
fi
chown syslog /var/lib/syslog-ng.pid
chmod 0664 /var/lib/syslog-ng.pid
В файле
/etc/syslog-ng/syslog-ng.conf
меняем пользователя в параметрах:owner("root"); group("adm")
на
owner("syslog"); group("syslog")
Идём на конечное устройство настраивать отправку логов. В Mikrotik это делается в System ⇨ Logging ⇨ Actions. В remote указываете IP адрес сервера с syslog-ng.
В системах Linux с rsyslog достаточно в
/etc/rsyslog.conf
добавить параметр:*.* @10.20.1.5
и перезапустить его.
Получилось очень простое решение по централизованному сбору логов без аналитики, которое настраивается за 10 минут и не требует практически никаких особых ресурсов. На чём можно запустить Debian, там и будет работать.
Для просмотра логов через браузер можно использовать tailon, logdy, cockpit, webmin.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#logs #syslog