В журнале контейнера видны записи хоста
Если каталог журнала хоста проброшен в контейнер, инструменты внутри читают журнал хоста. Записи служб контейнера при этом могут не сохраняться вовсе. Путаница обычно вскрывается при разборе сбоя, когда нужных записей нет там, где их ищут.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Каталог журнала хоста проброшен в контейнер
Проброс каталога журнала — приём для чтения журнала хоста изнутри. При случайном пробросе внутренние инструменты показывают чужие записи.
-
Записи контейнера не сохраняются
Внутри контейнера может не быть постоянного журнала, и записи исчезают вместе с контейнером.
-
Идентификатор машины совпадает у хоста и контейнера
Одинаковый идентификатор мешает разделить записи: они попадают в один каталог журнала.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Работаем ли мы в контейнере и в каком.
systemd-detect-virt --containerПроброшен ли каталог журнала извне.
findmnt /var/log/journalИдентификатор машины: по нему журнал раскладывается по каталогам.
cat /etc/machine-idРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Проброс каталога журнала — приём для чтения журнала хоста изнутри. При случайном пробросе внутренние инструменты показывают чужие записи.
- Как проверить
-
Определите окружение и посмотрите точки монтирования.
systemd-detect-virt --container findmnt /var/log/journal 2>/dev/null
- Как исправить
- Уберите проброс каталога журнала, если он не нужен. Контейнеру достаточно своего журнала или вывода в поток.
- Почему происходит
- Внутри контейнера может не быть постоянного журнала, и записи исчезают вместе с контейнером.
- Как проверить
-
Посмотрите режим хранения внутри.
test -d /var/log/journal && echo постоянный || echo только в памяти journalctl --disk-usage
- Как исправить
- Направьте вывод служб контейнера в поток и собирайте его средствами среды исполнения: так записи не теряются при пересоздании контейнера.
- Почему происходит
- Одинаковый идентификатор мешает разделить записи: они попадают в один каталог журнала.
- Как проверить
-
Сравните идентификаторы.
cat /etc/machine-id; sudo ls /var/log/journal/ 2>/dev/null
- Как исправить
- Обеспечьте уникальный идентификатор машины в каждом контейнере. Клонирование образа вместе с идентификатором — частая причина путаницы.
Пример вывода
Каталог журнала хоста проброшен в контейнер. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
# systemd-detect-virt --container
systemd-nspawn
# findmnt /var/log/journal
TARGET SOURCE FSTYPE OPTIONS
/var/log/journal /dev/vda2[/var/log/journal] ext4 rw,relatime
Связанные ошибки
- Обычный пользователь не видит журнал службы journalctl показывает только свои записи: доступ к системному журналу даёт членство в группе.
- Журнал пропадает после перезагрузки journalctl не показывает записи прошлых загрузок: журнал хранится только в памяти. Как включить постоянное хранение.
- Failed to connect to bus: подключение к шине недоступно Команды systemctl не работают: нет подключения к шине. Разбор для контейнеров, сеансов по ssh и служб пользователя.
- File corrupted or uncleanly shut down, renaming and replacing Журнал повреждён после жёсткой перезагрузки: что означает сообщение и когда нужно вмешательство.
- Function not implemented в контейнере Ошибка 38 при системном вызове: вызов запрещён фильтром или отсутствует в окружении. Разбор для контейнеров.
- Suppressed N messages from unit: часть записей потеряна journald отбросил часть записей из-за ограничения частоты. Как понять, что именно потеряно, и когда предел нужно поднять.
- journalctl -b -1: Failed to look up boot, no such boot ID Запрос журнала прошлой загрузки не находит её: журнал непостоянный или обрезан.
- rsyslog: ошибка файла состояния при чтении журнала Приёмник журналов теряет записи или читает их заново: файл состояния повреждён или недоступен.
Где встречается чаще всего
Источники
-
systemd-nspawn(1)
Проброс журнала хоста в контейнер. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено пробросом каталога журнала в контейнер.