Журналирование
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 описано по устройству обеих служб: в этой системе обе установлены, но отдельный эксперимент «что видно там и не видно тут» мы не ставили.
Комментарии
Пока комментариев нет.