# Как настроить логи docker в journald для Swarmica
## Решение

1\. Подключитесь к серверу Swarmica по SSH как root пользователь

2\. Перейдите в папку `/root/swarmica` и создайте резервную копию файла `docker-compose.yml`:

```bash
cd ~/swarmica
cp docker-compose.yml docker-compose.yml.backup
```

3\. Откройте файл docker-compose.yml в текстовом редакторе, найдите строку `services:`. Прямо перед ней (после блока `volumes:`) добавьте модуль логирования:

```yaml
volumes:
  swarmica_ai_assistant: {}
  # ... остальные тома ...
  traefik_data: {}

x-logging: &default-logging           # <-- добавляем эти строки
  driver: journald                    # <-- 
  options:                            # <-- 
    tag: "{{.Name}}"                  # <--

services:
  ...
```

4\. В том же файле найдите каждый сервис и добавьте **одну строку** `logging: *default-logging` Например:

```txt
  frontend:
    logging: *default-logging                                     # <-- добавляем эту строку
    image: reg.gl.swd.im/swarmica/frontend:${SW_FRONTEND_VERSION}
    depends_on:
      django:
        condition: service_healthy
    restart: always
```

Проделайте то же самое для сервисов:

*   `frontend`
*   `helpcenter`
*   `django`
*   `postgres`
*   `redis`
*   `celeryworker`
*   `celerybeat`
*   `traefik`

5\. Проверьте синтаксис конфигурационного файла:

```bash
docker compose config > /dev/null && echo "OK"
```

Если видите `OK` — всё хорошо.

5\. Настройте ротацию логов. Для этого откройте файл /etc/systemd/journald.conf в текстовом редакторе, найдите секцию `[Journal]` и установите такие параметры (раскомментируйте или допишите, если их нет):

```txt
[Journal]
SystemMaxUse=2G
SystemMaxFileSize=200M
MaxRetentionSec=2week
```

| Параметр          | Значение                                                 |
| ----------------- | -------------------------------------------------------- |
| SystemMaxUse      | Максимальный общий размер журнала на диске — 2 гигабайта |
| SystemMaxFileSize | Максимальный размер одного файла журнала — 200 МБ        |
| MaxRetentionSec   | Хранить логи не дольше 2 недель                          |

Значение параметров можно подобрать другие, в зависимости от интенсивности генерации логов.

6\. Примените настройки ротирования логов:

```bash
systemctl restart systemd-journald
```

7\. Перезапустите Swarmica:

```bash
cd /root/swarmica
docker compose down && docker compose up -d
```

### Примеры использования journald для операций с логами Swarmica:

Последние строки по контейнеру:

```bash
journalctl CONTAINER_NAME=swarmica-django-1 -n 100
```

В реальном времени (аналог tail -f):

```bash
journalctl CONTAINER_NAME=swarmica-django-1 -f
```

Логи всех контейнеров проекта:

```bash
journalctl CONTAINER_NAME='swarmica-*' -f
```

За период времени:

```bash
# За последний час
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"
```

Логи двух конкретных сервисов одновременно:

```bash
journalctl \
  CONTAINER_NAME=swarmica-django-1 \
  CONTAINER_NAME=swarmica-postgres \
  --since "1 hour ago"
```

Найти в логах все Traceback за сутки:

```bash
journalctl CONTAINER_NAME='swarmica-*' --since "24 hours ago" -o cat | grep -A 20 "Traceback"
```

Сохранение логов в файл:

```bash
journalctl CONTAINER_NAME=swarmica-django-1 --since "2024-06-01" > django.log
```