Самая обидная история: сервис упал, контейнер пересоздался, ты полез разбираться, а логов нет. Потому что они жили рядом с процессом, а процесс умер.
Решение простое: пусть логи живут в системе, а не в контейнере
На большинстве серверов уже есть journald. Он умеет хранить, ротировать, искать по времени и не превращать диск в свалку. Туда можно складывать логи и от systemd-сервисов, и от Docker.
Сохранение логов Docker в journald
x-logging: &journald
driver: "journald"
options:
tag: "{{.Name}}"
services:
app:
logging: *journald
Теперь смотришь логи не через docker logs, а как нормальные системные:
journalctl -t app -f
journalctl -t app --since "1 hour ago"
journalctl -t app --since "2026-02-09 00:00:00"
Чтобы логи переживали ребут
По умолчанию journald может хранить часть логов в памяти. Включаем хранение на диск:
sudo mkdir -p /var/log/journal
sudo systemctl restart systemd-journald
Проверка сколько места заняли логи:
journalctl --disk-usage
Ротация логов journald, чтобы диск не умер
Если ты кидаешь логи в journald, он не хранит их бесконечно. Ротация и лимиты настраиваются в /etc/systemd/journald.conf или правильнее в отдельных файлах:
sudo mkdir -p /etc/systemd/journald.conf.d
sudo nano /etc/systemd/journald.conf.d/10-rotation.conf
Вывод
Хочешь не терять логи, не привязывай их к жизни контейнера. Сложи их в journald и получи единый поиск, ротацию и историю, которая переживает перезапуски.
LinuxCamp | #utils
