Настройка syslog-ng для централизованного сбора логов
Мне понадобилось организовать сервер для сбора логов с удаленных устройств. Это могут быть серверы, сетевое оборудование, либо что-то еще, что поддерживает логирование в формате syslog. Я решил использовать не стандартный для большинства дистрибутивов rsyslog, а установить syslog-ng, потому что мне он показался более удобным и простым в настройке.
На углубленном курсе «Архитектура современных компьютерных сетей» вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Реклама ИП Скоромнов Д.А. ИНН 331403723315
Содержание:
Введение
Информации на тему сбора логов с удаленных серверов и интернете достаточно много. Ничего сложного тут нет, я и сам уже описывал подобную настройку в статье про сбор логов с mikrotik. Но решение получилось кривоватое, в комментариях написаны замечания. Я и сам знал о них, но простого и быстрого решения я не смог найти, на тот момент меня устраивал и такой вариант. Сейчас же решил все сделать аккуратно и красиво, чтобы было удобно пользоваться. В процессе поиска информации в интернете решил попробовать syslog-ng. С ним у меня не возникло никаких затруднений, сразу получилось то, что требовалось, поэтому я остановил свой выбор на нем.
Настраивать сервер сбора логов будем на системе Debian. Если у вас еще не подготовлен сервер, то читайте мою информацию по установке и базовой настройке Debian. Для небольшого количества устройств, нагрузка на сервер будет незначительная, поэтому имеет смысл размещать сервер на виртуальной машине. Если у вас нет готового гипервизора, можете посмотреть мою информацию на тему настройки гипервизора Proxmox или бесплатного решения Microsoft — Windows Hyper-V Server 2016.
Установка и настройка syslog-ng
С установкой нет ничего сложного. Установить syslog-ng можно одной командой:
# apt install -y 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); };
| d_mikrotik | Название назначения для записи лога по адресу /var/log/_remote/mikrotik.log |
| f_mikrotik | Название фильтра по адресу сервера источника. |
| 10.20.1.20 | Адрес сервера источника логов |
Файл назвал mikrotik.conf. В syslog-ng объектный принцип описания конфигурации. Этот как раз то, почему я предпочитаю для таких задач использовать именно его, а не rsyslog. У последнего не такой удобный формат конфигурации.
Соответственно для второго сервера нужно добавить еще 3 строки, например так:
destination d_xs-web { file("/var/log/_remote/xs-web.log"); };
filter f_xs-web { netmask("10.1.3.38/255.255.255.255"); };
log { source(s_net); filter(f_xs-web); destination(d_xs-web); };
И так далее. Добавляете столько серверов, сколько нужно. Не забудьте создать папку для логов. В моем примере это папка /var/log/!remote, сами файлы создавать не надо, служба автоматически их создаст, когда придет информация с удаленных серверов.
По умолчанию 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")
Запускаем syslog-ng и добавляем в автозагрузку:
# systemctl start syslog-ng # systemctl enable syslog-ng
Проверим, запустилась ли служба:
# ss -tulnp | grep syslog udp 0 0 0.0.0.0:514 0.0.0.0:* 25960/syslog-ng
Все в порядке, слушает 514 udp порт. Не забудьте открыть этот порт в iptables, если у вас включен файрвол. Сервер готов к приему логов.
Отправка логов syslog на удаленный сервер
Теперь идём на добавленные в syslog-ng сервера и настраиваем там отправку логов на наш сервер. Сделать это очень просто. Открываем файл конфигурации rsyslog. В Linux серверах он обычно живёт по адресу /etc/rsyslog.conf и добавляем туда строку:
*.* @10.1.3.22
10.1.3.22 — ip адрес syslog-ng сервера. Перезапустите rsyslog:
# systemctl restart rsyslog
и проверяйте логи на сервере syslog-ng в указанной папке. Правило *.* отправит все логи в указанное направление. Это не всегда нужно, можно отредактировать правила. Для этого надо ознакомиться с документацией по syslog. Там нет ничего сложного, мне не хочется на этом сейчас подробно останавливаться. В интернете есть примеры. Приведу пару своих.
*.*;local5.none @10.1.3.22
В данном случае у меня по local5.notice идет лог самбы по доступу к сетевой шаре. Мне не нужно собирать эту информацию и я ее отключил. Вот еще пример:
*.info @10.1.3.22
С этого сервера сыпалось много лишней информации уровня debug. Я ограничил отправляемые сообщения уровнем info. И так далее.
Отправка логов из Mikrotik делается в разделе System ⇨ Logging ⇨ Actions. В remote указываете IP адрес сервера с syslog-ng.
Ротация логов syslog-ng
В завершение приведу пример своего правила ротации логов. Рекомендую ротацию настроить сразу, не оставлять на потом. Создаем файл /etc/logrotate.d/syslog-ng
# mcedit /etc/logrotate.d/syslog-ng
/var/log/_remote/*.log {
daily
rotate 180
olddir /var/log/_remote/old
missingok
compress
sharedscripts
postrotate
invoke-rc.d syslog-ng reload > /dev/null
endscript
}
По этому правилу ротация логов происходит раз в день. Старые логи перемещаются в папку /var/log/_remote/old и сжимаются. Хранятся логи за последние 180 дней.
Заключение
Если у вас стоит задача собрать небольшое количество текстовых логов в одном месте, то городить современные решения типа Loki, ELK, Graylog избыточно. Это и долго, и разбираться надо, если не умеешь, и по ресурсам затратно.
Я привел частный случай настройки хранения логов с удаленных устройств. Решение в лоб без парсинга и аналитики. В простых случаях этого достаточно. Лично мне удобно смотреть информацию в текстовых файлах. Это требуется редко, сделано на всякий случай для расследования инцидентов, если таковые возникают. Эту же задачу, к примеру, можно решить с помощью Zabbix. Я уже показывал, как мониторить с помощью zabbix лог файлы. Приведенное решение легко переделать в хранение логов.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Реклама ИП Скоромнов Д.А. ИНН 331403723315
Помогла статья? Подписывайся на telegram канал автора
Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.
Qiziqarli malumotlar
Настройка syslog-ng для централизованного сбора логов

