Введение / Зачем это нужно
Rsyslog — это широко распространённый системный журнал, который позволяет собирать, фильтровать и хранить логи с локальной машины или сети. Настройка rsyslog помогает централизовать мониторинг, упростить поиск инцидентов и защитить важные журналы ротацией и правильными правами. После этой инструкции у вас будет работающий сервер логов и, при необходимости, клиенты, отправляющие на него события.
Требования / Подготовка
- Сервер и клиент на базе поддерживаемых дистрибутивов (Ubuntu 22.04/24.04, Debian 11/12, RHEL 8/9).
- Права
rootили пользователь сsudo. - Открытый порт
514/udp(и/или514/tcp) на сервере в файрволле, если планируется приём по сети. - Установленный пакет
rsyslog(в большинстве систем он предустановлен).
Шаг 1: Установка и запуск rsyslog
Убедитесь, что rsyslog установлен, и включите его автозапуск:
# Ubuntu/Debian
sudo apt update && sudo apt install -y rsyslog
# RHEL/CentOS
sudo dnf install -y rsyslog
Запустите службу и проверьте статус:
sudo systemctl enable --now rsyslog
sudo systemctl status rsyslog
Если служба активна, базовая конфигурация готова к редактированию.
Шаг 2: Настройка сервера приёма логов
Откройте главный конфигурационный файл:
sudo nano /etc/rsyslog.conf
Включите модули для UDP и TCP (раскомментируйте или добавьте):
module(load="imudp")
input(type="imudp" port="514")
module(load="imtcp")
input(type="imtcp" port="514")
Создайте файл с правилами для клиентов:
sudo nano /etc/rsyslog.d/10-remote.conf
Пример правила: сохранять логи от клиентов в отдельные файлы по IP-адресу:
if $fromhost-ip != '127.0.0.1' then /var/log/remote/%HOSTNAME%.log
& stop
Создайте каталог и задайте права:
sudo mkdir -p /var/log/remote
sudo chown syslog:adm /var/log/remote
sudo chmod 750 /var/log/remote
Перезапустите rsyslog:
sudo systemctl restart rsyslog
Проверьте, что порт слушается:
sudo ss -ulnp | grep 514
sudo ss -tlnp | grep 514
Шаг 3: Настройка клиента (пересылка логов)
На клиенте создайте файл конфигурации для пересылки. Для отправки всех локальных журналов используйте:
sudo nano /etc/rsyslog.d/20-forward.conf
Пример пересылки по UDP (замените 10.0.0.1 на IP сервера):
*.* @10.0.0.1:514
Для TCP используйте двойное @@:
*.* @@10.0.0.1:514
Если нужно отправлять только ошибки и критические события, укажите уровень:
*.err;kern.warning;auth.notice @10.0.0.1:514
Сохраните файл и перезапустите клиента:
sudo systemctl restart rsyslog
Шаг 4: Ротация и права для логов
Настройте ротацию для файлов в /var/log/remote/. Создайте конфиг logrotate:
sudo nano /etc/logrotate.d/rsyslog-remote
Пример конфигурации:
/var/log/remote/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 0640 syslog adm
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
Примените права к существующим файлам:
sudo chown -R syslog:adm /var/log/remote
sudo chmod -R 750 /var/log/remote
Проверка результата
С клиента отправьте тестовое сообщение:
logger -n 10.0.0.1 -P 514 "Test message from $(hostname)"
На сервере проверьте, появился ли файл клиента и содержит ли он сообщение:
tail -f /var/log/remote/<имя_клиента>.log
Убедитесь, что ошибок нет в журнале службы:
journalctl -u rsyslog --since "1 minute ago"
Возможные проблемы
- Логи не доходят — проверьте, открыт ли порт
514/udp(или514/tcp) на сервере и не блокирует ли его файрволл. Убедитесь, что клиент использует правильный IP и синтаксис (@для UDP,@@для TCP). - Права на файлы — если логи не пишутся, проверьте владельца каталога
/var/log/remoteи правилоcreateв logrotate. - Дублирование сообщений — используйте
& stopв правилах сервера, чтобы предотвратить дальнейшую обработку одного и того же события. - Проблемы с именами хостов — при использовании динамических имён убедитесь, что клиент корректно передаёт
HOSTNAME, либо фильтруйте по$fromhost-ip.