Записи дублируются: журнал и syslog пишут одно и то же
Пересылка из журнала в syslog нужна там, где остались инструменты, читающие текстовые файлы. Проблема возникает, когда пересылка настроена и в journald, и в самом приёмнике: объём удваивается, а место расходуется впустую.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Пересылка включена в journald и приёмник сам читает журнал
rsyslog умеет читать журнал напрямую. Если при этом включена пересылка, одни и те же записи приходят двумя путями.
-
Место уходит на двойное хранение
Один и тот же объём хранится в журнале и в текстовых файлах. На загруженных машинах это заметно.
-
Записи расходятся по времени
При пересылке запись получает метку времени приёмника. Разбирать сбой по двум источникам с разными метками неудобно.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Настройки пересылки из журнала.
systemd-analyze cat-config systemd/journald.conf | grep -i ForwardОбъём обоих хранилищ.
sudo du -sh /var/log/syslog /var/log/journal 2>/dev/nullРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- rsyslog умеет читать журнал напрямую. Если при этом включена пересылка, одни и те же записи приходят двумя путями.
- Как проверить
-
Посмотрите настройку пересылки и модули приёмника.
systemd-analyze cat-config systemd/journald.conf | grep -i ForwardToSyslog grep -rl imjournal /etc/rsyslog.conf /etc/rsyslog.d/ 2>/dev/null
- Как исправить
- Оставьте один путь: либо чтение журнала модулем приёмника, либо пересылка из journald. Держать оба смысла нет.
- Почему происходит
- Один и тот же объём хранится в журнале и в текстовых файлах. На загруженных машинах это заметно.
- Как проверить
-
Сравните объёмы.
journalctl --disk-usage; sudo du -sh /var/log/syslog /var/log/messages 2>/dev/null
- Как исправить
- Решите, какой путь основной, и ограничьте второй. Если текстовые файлы нужны только для внешней отправки, отправляйте прямо из журнала.
- Почему происходит
- При пересылке запись получает метку времени приёмника. Разбирать сбой по двум источникам с разными метками неудобно.
- Как проверить
-
Сравните одну запись в обоих источниках.
journalctl -u myapp.service -n 3 --no-pager; sudo grep -h myapp /var/log/syslog 2>/dev/null | tail -3
- Как исправить
- Разбирайте сбои по журналу: там есть точные метки, идентификаторы загрузки и привязка к unit.
Пример вывода
Пересылка включена, и приёмник сам читает журнал. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
$ grep -i forwardtosyslog /etc/systemd/journald.conf
ForwardToSyslog=yes
$ grep -r imjournal /etc/rsyslog.conf
module(load="imjournal" StateFile="imjournal.state")
Связанные ошибки
- Журнал занимает слишком много места Журнал разросся: где задаются пределы, как обрезать и почему обрезка иногда не помогает.
- logrotate: ошибка в действии после ротации Ротация журналов проходит, а служба не переоткрывает файлы: сбой действия после ротации.
- rsyslog: ошибка файла состояния при чтении журнала Приёмник журналов теряет записи или читает их заново: файл состояния повреждён или недоступен.
- File corrupted or uncleanly shut down, renaming and replacing Журнал повреждён после жёсткой перезагрузки: что означает сообщение и когда нужно вмешательство.
- Suppressed N messages from unit: часть записей потеряна journald отбросил часть записей из-за ограничения частоты. Как понять, что именно потеряно, и когда предел нужно поднять.
- journalctl -b -1: Failed to look up boot, no such boot ID Запрос журнала прошлой загрузки не находит её: журнал непостоянный или обрезан.
- status=209/STDOUT в systemd Код 209/STDOUT: systemd не смог настроить стандартный вывод службы. Чаще всего виноват путь в StandardOutput=append: или file:.
- status=222/STDERR в systemd Код 222/STDERR: не удалось настроить поток ошибок службы. Разбор причин и отличие от кода 209.
Где встречается чаще всего
Источники
-
journald.conf(5)
Параметры пересылки записей. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено включением пересылки при работающем модуле чтения журнала.