Журналирование

#Rsyslog #Безопасность

rsyslog — служба системного журнала. Она собирает сообщения от программ и ядра и решает, что с ними делать: записать в файл, отправить на другой сервер, положить в базу, послать письмом.

Идея syslog проста и живёт с 1980-х: программа отправляет сообщение с двумя ярлыками — категорией (facility, откуда сообщение: ядро, почта, аутентификация) и уровнем важности (priority, насколько это серьёзно). Дальше журнал сам разбирается, кому это интересно.

Правила: селектор и действие

Настройка rsyslog — это список правил вида «откуда и насколько важное → что сделать»:

селектор                    действие
auth,authpriv.*            /var/log/auth.log
*.*;auth,authpriv.none     -/var/log/syslog
*.emerg                    :omusrmsg:*

Читается так: сообщения категорий auth и authpriv любого уровня — в файл auth.log; всё остальное, кроме них, — в syslog (знак - перед именем файла означает «не сбрасывать на диск после каждой записи», это быстрее); сообщения уровня emerg (паника) — всем вошедшим пользователям.

  • * — «любой»: *.* — все категории, все уровни.
  • none — исключить: auth.none убирает эту категорию из правила.
  • = — «только этот уровень», . — «этот и выше», ! — «всё, кроме».

Разбор категорий и уровней с примерами — «Категории журналирования (facility)»; условные правила if — «Написание фильтра».

Где лежат настройки

Путь Что это
/etc/rsyslog.conf Основной конфиг: модули, глобальные параметры, правила
/etc/rsyslog.d/*.conf Дополнительные файлы — сюда пишут правила пакеты и администраторы
/etc/rsyslog.d/50-default.conf На Ubuntu здесь правила для стандартных файлов журнала
/var/log/syslog, /var/log/auth.log Куда попадает результат

Свои правила лучше класть отдельным файлом в /etc/rsyslog.d/ — меньше риска затереть чужие при обновлении.

Проверка и перезапуск

Опечатка в конфиге означает, что журнал не запустится — а вместе с ним пропадут все записи. Поэтому проверка конфига выполняется до перезапуска:

$ sudo rsyslogd -N1          # разобрать конфиг и выйти
$ sudo systemctl restart rsyslog
$ systemctl status rsyslog --no-pager | head -5

Проверить, что запись действительно идёт:

$ logger -p auth.warning "проверка журнала"
$ sudo tail -n 5 /var/log/auth.log

logger — самый простой способ убедиться, что правило работает: он отправляет сообщение с указанной категорией и уровнем, а вы смотрите, появилось ли оно там, где ожидали.

Куда ещё можно писать

  • На другой сервер — централизованный журнал: одно правило вида *.* @logserver:514 (UDP) или @@logserver:514 (TCP). Так собирают логи с парка машин.
  • В базу MySQL — «Запись логов в MySQL»: удобно, когда нужны выборки, но это уже не текстовый файл, и ротация устроена иначе.
  • Письмом — «RSyslog»: обычно только для сообщений уровня emerg, иначе почта превращается в спам.

Ротация: файлы нельзя оставлять расти

Журналы растут до тех пор, пока не кончится место. Ротацию в Debian и Ubuntu делает logrotate: старые файлы сжимаются и удаляются, а службе подаётся сигнал переоткрыть файл.

$ cat /etc/logrotate.d/rsyslog        # как это настроено по умолчанию
$ sudo logrotate -d /etc/logrotate.d/rsyslog   # проверка без изменений

Если видите .1, .2.gz рядом с журналом — это работает ротация, а не «файлы размножились».

Место в современной системе

Рядом живёт второй механизм — journald (systemd). Он собирает всё, что программы пишут в stdout, и своё хранит в двоичном виде, которое нельзя просто прочитать grep. На практике на Ubuntu работают оба: журнал systemd показывает сообщения через journalctl, а rsyslog складывает их в привычные текстовые файлы (/var/log/syslog, /var/log/auth.log) — в том числе читая их из journald.

Что это значит для разбора сбоев:

$ journalctl -n 50 --no-pager          # записи systemd, включая всё, что в stdout
$ sudo tail -n 50 /var/log/syslog      # записи через rsyslog

Если вы что-то ищете и не находите — сначала уточните, какой из двух журналов вы читаете: одна и та же запись может быть в одном и отсутствовать в другом.

Источники

  • man 5 rsyslog.conf — синтаксис правил, селекторы, действие с - перед именем файла, отправка по сети.
  • man 8 rsyslogd — ключи, в том числе -N1 для проверки конфигурации.
  • man 1 logger — отправка проверочного сообщения.
  • man 8 logrotate, файл /etc/logrotate.d/rsyslog — ротация.
  • Версия на рабочей системе: rsyslog 8.2512.0 (Ubuntu 26.04, проверено 19.10.2026).

Что ещё не проверено

  • Примеры правил взяты из man-страницы и стандартного /etc/rsyslog.d/50-default.conf; отправка на другой сервер и запись в MySQL не проверялись — для этого нужны два узла и база.
  • Взаимодействие rsyslog и journald описано по устройству обеих служб: в этой системе обе установлены, но отдельный эксперимент «что видно там и не видно тут» мы не ставили.
Оценка статьи 0

Комментарии

Пока комментариев нет.