#2190: Как настроить логи docker в journald для Swarmica
Отредактирована: сегодняРешение
1. Подключитесь к серверу Swarmica по SSH как root пользователь
2. Перейдите в папку /root/swarmica и создайте резервную копию файла docker-compose.yml:
cd ~/swarmica
cp docker-compose.yml docker-compose.yml.backup
3. Откройте файл docker-compose.yml в текстовом редакторе, найдите строку services:. Прямо перед ней (после блока volumes:) добавьте модуль логирования:
volumes:
swarmica_ai_assistant: {}
# ... остальные тома ...
traefik_data: {}
x-logging: &default-logging # <-- добавляем эти строки
driver: journald # <--
options: # <--
tag: "{{.Name}}" # <--
services:
...
4. В том же файле найдите каждый сервис и добавьте одну строку logging: *default-logging Например:
frontend:
logging: *default-logging # <-- добавляем эту строку
image: reg.gl.swd.im/swarmica/frontend:${SW_FRONTEND_VERSION}
depends_on:
django:
condition: service_healthy
restart: always
Проделайте то же самое для сервисов:
frontendhelpcenterdjangopostgresredisceleryworkercelerybeattraefik
5. Проверьте синтаксис конфигурационного файла:
docker compose config > /dev/null && echo "OK"
Если видите OK — всё хорошо.
5. Настройте ротацию логов. Для этого откройте файл /etc/systemd/journald.conf в текстовом редакторе, найдите секцию [Journal] и установите такие параметры (раскомментируйте или допишите, если их нет):
[Journal]
SystemMaxUse=2G
SystemMaxFileSize=200M
MaxRetentionSec=2week
| Параметр | Значение |
|---|---|
| SystemMaxUse | Максимальный общий размер журнала на диске — 2 гигабайта |
| SystemMaxFileSize | Максимальный размер одного файла журнала — 200 МБ |
| MaxRetentionSec | Хранить логи не дольше 2 недель |
Значение параметров можно подобрать другие, в зависимости от интенсивности генерации логов.
6. Примените настройки ротирования логов:
systemctl restart systemd-journald
7. Перезапустите Swarmica:
cd /root/swarmica
docker compose down && docker compose up -d
Примеры использования journald для операций с логами Swarmica:
Последние строки по контейнеру:
journalctl CONTAINER_NAME=swarmica-django-1 -n 100
В реальном времени (аналог tail -f):
journalctl CONTAINER_NAME=swarmica-django-1 -f
Логи всех контейнеров проекта:
journalctl CONTAINER_NAME='swarmica-*' -f
За период времени:
# За последний час
journalctl CONTAINER_NAME=swarmica-django-1 --since "1 hour ago"
# С конкретной даты
journalctl CONTAINER_NAME=swarmica-django-1 --since "2024-06-01 10:00:00"
# За вчерашний день
journalctl CONTAINER_NAME=swarmica-django-1 --since yesterday --until today
# Точный интервал
journalctl --since "2024-06-01 10:00:00" --until "2024-06-01 12:00:00"
Логи двух конкретных сервисов одновременно:
journalctl \
CONTAINER_NAME=swarmica-django-1 \
CONTAINER_NAME=swarmica-postgres \
--since "1 hour ago"
Найти в логах все Traceback за сутки:
journalctl CONTAINER_NAME='swarmica-*' --since "24 hours ago" -o cat | grep -A 20 "Traceback"
Сохранение логов в файл:
journalctl CONTAINER_NAME=swarmica-django-1 --since "2024-06-01" > django.log