Введение / Зачем это нужно
Системное логирование — первый инструмент диагностики при сбоях сервисов или атаках на сервер. rsyslog является стандартом в большинстве современных дистрибутивов Linux благодаря высокой скорости обработки, гибкой фильтрации и возможности централизованного сбора. Правильная настройка помогает избежать переполнения диска, быстро находить ошибки в конкретных службах и строить отказоустойчивый мониторинг.
После выполнения этого руководства вы получите настроенный демон, который будет разделять события по файлам, хранить критичные записи отдельно и безопасно передавать их на внешний коллектор.
Требования / Подготовка
Для успешного выполнения инструкций убедитесь в наличии следующих условий:
- Доступ к серверу с правами
rootили пользователя в группеsudo. - Обновлённые репозитории (
sudo apt updateилиsudo dnf check-update). - Открытые сетевые порты на файрволе, если планируете удалённую отправку (TCP/UDP 514 или 6514 для TLS).
- Текстовый редактор:
nanoилиvim.
💡 Совет: Перед редактированием системных конфигурационных файлов всегда создавайте резервную копию:
sudo cp /etc/rsyslog.conf /etc/rsyslog.conf.bak.
Шаг 1: Установка и активация службы
На большинстве серверных сборок rsyslog уже предустановлен. Проверьте статус службы:
sudo systemctl status rsyslog
Если пакет отсутствует, установите его:
# Для Debian/Ubuntu
sudo apt install rsyslog -y
# Для RHEL/AlmaLinux/Rocky
sudo dnf install rsyslog -y
Активируйте автозапуск и запустите демон:
sudo systemctl enable --now rsyslog
Шаг 2: Разбор структуры конфигурации
Основной файл /etc/rsyslog.conf состоит из трёх блоков:
- Модули (
$ModLoad) — подключают драйверы ввода/вывода. Для работы со стандартным протоколом нужныimuxsockиimklog. - Глобальные директивы — управляют поведением демона, например,
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat. - Правила маршрутизации — строки в формате
facility.priority /путь/к/файлу. Они указывают, куда записывать события.
Для удобства обслуживания выносите пользовательские правила в директорию /etc/rsyslog.d/. Файлы в ней обрабатываются в алфавитном порядке.
Шаг 3: Настройка локальной фильтрации
Разделите логи по назначениям, чтобы упростить поиск. Создайте файл 10-custom-rules.conf в директории /etc/rsyslog.d/:
sudo nano /etc/rsyslog.d/10-custom-rules.conf
Добавьте правила маршрутизации:
# Все сообщения аутентификации в отдельный файл
auth,authpriv.* /var/log/auth-custom.log
# Сообщения уровня error и выше из всех служб
*.err;mail.none;authpriv.none /var/log/errors.log
# Отбросить отладочные сообщения ядра для экономии места
kern.=debug ~
Символ ~ означает прекращение обработки сообщения (discard). Уровни логирования: emerg, alert, crit, err, warning, notice, info, debug. Звёздочка * означает все уровни, точка с запятой ; — объединение условий.
Шаг 4: Отправка логов на удалённый сервер
Централизованный сбор защищает данные от потери при падении локального диска или компрометации сервера. Откройте основной конфиг или создайте файл 20-forward.conf в /etc/rsyslog.d/.
Для отправки по UDP (быстро, но без гарантий доставки) используйте один символ @:
*.* @192.168.1.100:514
Для TCP (надёжная доставка, рекомендуется) используйте два символа @@:
*.* @@192.168.1.100:514
Замените IP-адрес на адрес вашего сервера сбора логов (например, ELK Stack или Graylog). Если требуется отправка только критических событий, замените первую *.* на *.crit.
Проверка результата
Убедитесь, что синтаксис правил не содержит ошибок:
sudo rsyslogd -N1
Вывод должен завершаться строкой End of config validation run. Bye.. Если ошибок нет, примените изменения:
sudo systemctl restart rsyslog
Сгенерируйте тестовое событие и проверьте его появление:
logger -p local0.notice "Тестовое сообщение от FixPedia"
tail -n 5 /var/log/syslog # или /var/log/messages для RHEL-систем
На удалённом коллекторе также проверьте получение пакета через journalctl -u rsyslog -f или сетевой анализатор.
Возможные проблемы
Служба не запускается после редактирования
Обычно это вызвано опечаткой в имени модуля или неверным синтаксисом правила. Запустите sudo rsyslogd -N1, чтобы увидеть точную строку с ошибкой. Удалите или закомментируйте проблемный блок символом # и повторите проверку.
Логи не попадают в новый файл
Проверьте права доступа и владельца. Демон работает от имени syslog или root, а файлы в /etc/rsyslog.d/ должны заканчиваться на .conf. Если расширение другое, демон его проигнорирует.
SELinux блокирует запись или сетевое соединение
На системах с включённым SELinux проверьте аудит-журнал: sudo ausearch -m avc -ts recent. Если видите блокировки, установите правильный контекст для файлов логов через restorecon -Rv /var/log/ или добавьте разрешающее правило через audit2allow.
Дублирование записей в нескольких файлахrsyslog обрабатывает правила последовательно. Если вы указали *.* /var/log/all.log выше, чем правила фильтрации, событие запишется во все файлы, идущие ниже. Используйте оператор stop после нужного правила, чтобы прервать дальнейшую обработку для данного события.