Вопрос или проблема
Недавно я настроил один из наших серверов в качестве сервера rsyslog. Теперь наш брандмауэр настроен на запись всех событий на этот сервер rsyslog.
Но, похоже, логирование не организовано. Все логи брандмауэра просто сбрасываются в /var/log/messages на сервере rsyslog. Я, возможно, ожидал, что они хотя бы будут в специальном файле или каталоге для конкретной машины.
Как я могу организовать входящее логирование? Если я настрою 20 серверов, чтобы все записывали информацию на центральный сервер rsyslog, я действительно не хочу, чтобы всё сбрасывалось в один большой файл или несколько файлов. Как я могу настроить rsyslog, чтобы указать, куда и что логировать? Например, чтобы все логи конкретного сервера находились в его собственном каталоге/файле и т.д. Это возможно?
Rsyslog имеет довольно хорошую систему конфигурации, которая позволяет создавать логи различными способами. Ознакомьтесь с онлайн-документацией.
В частности, вам может быть интересно посмотреть образцы конфигурации. Этот рецепт может быть близок к тому, что вам нужно.
Ответ или решение
Да, организация и разделение журналов в rsyslog сервере — это вполне выполнимая задача, и это можно сделать с помощью настройки конфигурационного файла rsyslog. Давайте рассмотрим, как вы можете это сделать.
Шаги для организации журналов в rsyslog
-
Редактирование конфигурационного файла rsyslog:
Откройте основной конфигурационный файл rsyslog, который обычно находится по пути/etc/rsyslog.conf
или в директории/etc/rsyslog.d/
(в зависимости от вашей дистрибуции).sudo nano /etc/rsyslog.conf
-
Настройка приема удаленных логов:
Убедитесь, что у вас включен модуль для приема удаленных логов. Ниже приведен пример конфигурации, чтобы включить TCP и/или UDP:module(load="imudp") # для UDP input(type="imudp" port="514") module(load="imtcp") # для TCP input(type="imtcp" port="514")
-
Создание правил для маршрутизации логов:
Вам нужно добавить правила для записи логов в отдельные файлы по имени хоста или по типу источника. Например:# Определяем формат для хранения логов template(name="RemoteHostLogs" type="string" string="/var/log/%$!hostname%/%$!programname%.log") # Распределяем журналы if ($fromhost-ip == 'IP_ВАШЕГО_СЕРВЕРА') then ?RemoteHostLogs & stop
В этом примере вы создаете отдельные файлы
/var/log/имя_хоста/имя_программы.log
, гдеимя_хоста
заменяется на имя удаленного хоста, отправляющего лог, аимя_программы
— на имя программы, которая генерирует логи. -
Создание необходимых директорий:
Убедитесь, что директории для хранения логов существуют. Вам нужно будет создать их, чтобы избежать ошибок:mkdir /var/log/имя_хоста
-
Перезапуск службы rsyslog:
После внесения всех изменений, не забудьте перезапустить службу rsyslog для применения новых настроек:sudo systemctl restart rsyslog
Дополнительные ссылки и ресурсы
Для получения более подробной информации и примеров конфигурации, вы можете обратиться к следующим ссылкам:
Заключение
С вышеописанным подходом вы сможете организовать и разделить журналы с вашего rsyslog сервера, упрощая управление и мониторинг логов. Если у вас возникнут дополнительные вопросы или потребуется помощь в реализации, не стесняйтесь обращаться.