linux-labs

Вики / Логи и аудит

rsyslog (системные логи)

Концепция Ubuntu 24.04 · rsyslog ЛогиСеть

Текстовые логи в /var/log, правила маршрутизации и пересылка на удалённый сервер.

rsyslog пишет классические текстовые логи в /var/log (syslog, auth.log, mail.log). Работает рядом с journald: journald — структурированный журнал, rsyslog — текстовые файлы и пересылка логов по сети на центральный сервер.

ls /var/log/                      # syslog, auth.log, kern.log, ...
tail -f /var/log/syslog           # общий системный лог
tail -f /var/log/auth.log         # вход/sudo/ssh (см. fail2ban)

Правила — /etc/rsyslog.conf и /etc/rsyslog.d/*.conf. Формат facility.severity назначение:

auth,authpriv.*     /var/log/auth.log
mail.*              -/var/log/mail.log     # «-» = не делать fsync на каждую строку
*.emerg             :omusrmsg:*            # всем терминалам
:programname, isequal, "myapp"  /var/log/myapp.log   # property-фильтр по имени программы
# пересылка на удалённый сервер:
*.*                 @@logserver.example.com:514   # @@ = TCP, @ = UDP

facility: auth, cron, daemon, kern, mail, local0..7; severity: debug<info<notice<warning<err<crit<alert<emerg.

sudo rsyslogd -N1                 # проверить синтаксис конфигурации
sudo systemctl restart rsyslog
logger -p auth.info "тест"        # отправить запись в syslog (проверка)

Приёмник (central log server) — включить модуль приёма:

# /etc/rsyslog.d/10-server.conf
module(load="imtcp")
input(type="imtcp" port="514")
# раскладывать по хостам:
template(name="perhost" type="string" string="/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log")
*.* ?perhost

Открой порт 514 в firewall. На отправителе — *.* @@logserver:514. Защита от флуда — $imjournalRatelimitInterval/RatelimitBurst (иначе шумный сервис забьёт лог).

Лог не пишется

Служба активна (systemctl status rsyslog)? Правило без опечатки? Проверь: rsyslogd -N1 (синтаксис) и logger -p auth.info "test" (доходит ли).

Логи растут, забивают диск

Ротация — это logrotate (rsyslog сам не чистит). Проверь /etc/logrotate.d/rsyslog и см. disk-usage.

Не приходят логи на центральный сервер

На приёмнике включён модуль приёма (imtcp/imudp, порт 514) и открыт порт (firewall, nc -zv host 514). На отправителе — правило @@host:514.

Дубли строк / «logged twice»

journald пересылает в rsyslog (imjournal) и тот же facility пишется в несколько файлов. Уточни правила; решай, что где (journalctl -u vs текстовые файлы).

journald vs rsyslog — где смотреть

Структурный поиск по службам — journalctl (-u, _COMM=); привычные текстовые файлы и пересылка — /var/log/* (rsyslog).

tail -f /var/log/syslog ; tail -f /var/log/auth.log
sudo rsyslogd -N1                 # проверить конфиг
logger -p auth.info "msg"         # записать в syslog (тест)
# /etc/rsyslog.d/*.conf: facility.severity  путь | @@host:514 (TCP) | @host (UDP)
sudo systemctl restart rsyslog

См. также