fix(devops): потолок логов основного стека — journald, как у trade-in (#2761) #2762
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#2762
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/2761-root-stack-logging"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Проблема
У корневого
docker-compose.prod.ymlсекцииlogging:не было вообще → дефолтныйjson-fileбез ротации, растёт до заполнения диска и умирает вместе с контейнером.Опровергнутая предпосылка issue (главное)
Issue делит находку на «наше (~210 МБ)» и «вне репозитория —
forgejo+glitchtip-worker, к владельцу». Проверка в issue искала отдельный compose-файл (git ls-files) и не нашла сервис внутри нашего:glitchtip-worker— это 2.59 ГБ и 31.9 МБ/сутки, 81 % всего роста стека — и он чинится этим PR, а не эскалацией владельцу.Вне репозитория остаётся только
forgejo(10.3 ГБ,project=forgejo,/home/gendesign/forgejo/docker-compose.yml).Замер (прод, 2026-08-06)
МБ/сутки = размер json-file ÷ возраст контейнера:
backend/worker/beat/caddy почти ничего не накапливают не потому, что мало пишут, а потому что deploy пересоздаёт их ~20 раз в сутки — то есть json-file их логи теряет, а не ограничивает.
Бюджет journald — посчитан, не предположен
Потолок взят не из документации, а из сообщения самого демона в журнале:
(
journald.confпуст, все дефолты: 10 % от 145 ГБ = 14.5 ГБ, но капается 4 ГБ.)Укладывается. Дисковый эффект в плюс: 4 ГБ — потолок с самовытеснением, а сегодня glitchtip-worker растёт без потолка; плюс пересоздание удалит его json-file и разово освободит ~2.6 ГБ.
Проверено ДО мержа (прод, throwaway-контейнер)
Запись пережила удаление контейнера и читается по метке и по ID мёртвого контейнера.
Ловушка из #2758 перепроверена — она ещё жива
Читал ровно теми правами, которыми будут читать:
Владелец
usermod -aG adm gendesignпока не выдавал. Рабочий обход (через docker-группу) записан в комментарии файла, вместе с ловушкойTZ=UTCиз #2760. До выдачи прав правка не регрессия:docker logsработает как раньше.Blast radius первого деплоя
Log-driver — свойство создания контейнера, поэтому
compose up -dпересоздаст всё. Но backend/worker/beat/caddy/forwarder и так force-recreate'ятся каждым деплоем (deploy.yml:417-431). Инкремент именно этой правки:postgres— ~10 с даунтайма (у deploy.yml уже есть такой путь на строке 407)redis— брокер celery, graceful stop сохраняет RDBosrm+osrm-walk— перезагрузка MLD-графа в RAM (backend неdepends_on, деплой не блокируется)frontend,glitchtip-web,glitchtip-workerРазово. Мержится в окно без ночных прогонов (ближайший — 00:39 UTC).
Rollback: revert коммита → следующий деплой вернёт json-file. Данных не теряет, состояния нет.
Что НЕ сделано (осознанно)
docker-compose.ymlне трогал. Issue называет оба файла, но этот — для локальной разработки, а в Docker Desktop (macOS/Windows) journald в VM нет → контейнеры просто не стартуют. Anchor туда = сломанныйdocker compose upу всех локально. Потолок для dev-логов, если понадобится, — отдельный json-filemax-size.forgejoне трогал — действительно чужой стек (10.3 ГБ, ~128 МБ/сутки). Это к владельцу, и это по-прежнему главный потребитель диска.gendesign-site-finder-1(34 МБ, работает 81 день): сервисаsite-finderв compose-файле НЕТ — контейнер остался от прежней версии иup -dего не трогает. Логи так и останутся на json-file. Чинится--remove-orphansв deploy.yml, но это меняет поведение деплоя для всего project=gendesign — отдельная задача, не этот PR.Test plan
docker compose -f docker-compose.prod.yml config— валиден; все 12 сервисов резолвятся вdriver: journald, tag: {{.Name}}(проверено разбором вывода, а не глазами по anchor'у)https://gendsgn.ru/→ 200Refs #2761, #2758, #2741