Перейти к основному контенту

Настройка ротации логов в Docker

Статья объясняет как избежать заполнения диска и обеспечить стабильную работу Docker за счёт ограничения размера и количества лог-файлов контейнеров RiCoder. Описана пошаговая настройка параметров в Docker (Linux) и Docker Desktop (Windows).

1. Введение

Основные причины роста логов

Скорость заполнения логов контейнеров RiCoder зависит от:

  • количества Ri-HUB,
  • активности каждого Ri-HUB (нестабильность каналов связи - частые подключения и отключения, частота автотестов, какого типа события приходят с Ri-HUB),
  • количество подключенных датчиков к центрам управления.

Наибольшую нагрузку по логам создаёт контейнер eqgateway-1 — прием, обработка, передача событий от Ri-HUB в очередь.

Риски неограниченной записи логов

Без ограничений логи контейнеров могут расти бесконечно и заполнить весь диск, что приведёт к:

  • остановке Docker,
  • падению других сервисов,
  • нестабильности системы.
Как настроить ограничение размера логов в Docker

В настройках Docker по умолчанию логи контейнеров RiCoder записываются в один файл - сообщения не ратируются, не заменяют. Запись логов будет работать пока есть место на жестком диске.

Чтобы ограничить количество места занимаемого логами RiCoder на диске, необходимо настроить параметр log-opts в конфигурационном файле daemon.json. В зависимости от типа установленного Docker, настроить глобальные параметры, можно двумя способами:

Если к RiCoder подключено небольшое количество центров управления Ri-HUB, например меньше 10 шт., то настраивать параметры log-opts необязательно.

Логи при обновлении RiCoder

При обновлении RiCoder, контейнеры собираются заново и начинается запись новых логов.

1. В Docker Desktop

1. Нажмите settings_7192758.png в правом верхнем углу экрана и перейдите в настройки Docker.

2. Выберите Docker Engine. В правой панели вы увидите текущее содержимое файла daemon.json.

Экран Docker Desktop: Настройки

Docker Desktop_настройки.jpeg

3. Проверьте, есть ли в конфигурационном файле (daemon.json) следующие настройки

"log-opts": {
    "max-size": "10m",
    "max-file": "50"
  }

где

  • max-size — максимальный размер одного файлов лог-файлов (10 мегабайт). Когда он заполняется, то создаётся новый;
  • max-file — максимальное количество ротированных лог-файлов (50 файлов). После достижения максимального значения, самые старые файлы удаляются.

Эти параметры применяются ко всем контейнерам в Docker! Вы можете настроить логгирование для конкретного контейнера, подробнее в документации Docker.

4. Скорректируйте размер и количество лог-файлов в зависимости от наличия свободного места на сервере, количества подключенных Ri-HUB и интенсивности потока событий от центра управления.

5. Перезапустите Docker engine, чтобы изменения применились. В правом нижнем углу нажмите на меню options_14025758.png рядом с иконкой Docker icons8-docker-48.png и выберите в меню Restart.

Экран Docker: Главаная страница

Docker Desk_перезапуск engine.png

2. В командной строке Linix

Есть 2 варианта настроить log-opts в файле daemon.json:

Найдите файл daemon.json. Введите команду:

ls /etc/docker/daemon.json

2.1. Если daemon.json существует

1. Посмотрите содержимое файла. Поможет понять, есть ли другие важные настройки в файле. Подробнее о возможных настройках в daemon.json в документации Docker.

touch /etc/docker/daemon.json

2. Если других настроек нет, перезапишите файл с нужными настройками log-opts.

sudo tee /etc/docker/daemon.json <<EOF
{
  "log-opts": {
    "max-size": "10m",
    "max-file": "50"
  }
}
EOF

3. Если есть другие настройки — скопируйте их, дополните настройками log-opts и перезапишите файл или воспользуйтесь утилитой jq, если она установлена. Подробнее о способе с jq.

# Записать новую конфигурацию
sudo tee /etc/docker/daemon.json <<EOF
{
  <добавить существующие настройки>
  
  "log-opts": {
    "max-size": "10m",
    "max-file": "50"
  }
}
EOF

4. После редактирования daemon.json необходимо перезапустить Docker Engine.

sudo systemctl restart docker

5. Проверьте, что Docker запустился и настройки применились.

# Проверить запущен ли Docker
sudo systemctl status docker

Должно быть Active: active (running)

6. Проверьте логи, правильно ли записаны настройки log-opts.

# Проверка логов
docker info | grep -A 2 "Log Config"
# Ожидаемый вывод
 Log Config:
  max-size=10m
  max-file=50
Использование утилиты jq

Если нужно сохранить существующие настройки файла daemon.json, введите команды с нужными настройками log-opts.

sudo jq '. += {"log-opts": {"max-size": "10m", "max-file": "50"}}' /etc/docker/daemon.json > /tmp/daemon.json && \
sudo mv /tmp/daemon.json /etc/docker/daemon.json && \
# Перезапустите Docker
sudo systemctl restart docker

2.2. Если daemon.json не существует

Если файл не был создан автоматически при установке Docker, то возможно установлена старая версия Docker.

Если файл daemon.json не существует, то необходимо его создать и записать в него параметры log-opts.

1. Создайте директорию, в которой будет размещен файл, если она не существует.

mkdir  /etc/docker

2. Создайте пустой файл.

touch /etc/docker/daemon.json

3. Запишите в файл daemon.json нужные настройки log-opts.

sudo tee /etc/docker/daemon.json <<EOF
{
  "log-opts": {
    "max-size": "10m",
    "max-file": "50"
  }
}
EOF

4. Перезапустите Docker Engine.

sudo systemctl restart docker

5. Проверьте, что Docker запустился и настройки применились.

sudo systemctl status docker

Ожидаемый результат: active (running).

6. Проверьте содержимое файла daemon.json.

cat /etc/docker/daemon.json

Ожидаемый результат:

"log-opts": {
    "max-size": "10m",
    "max-file": "50"
  }




Дата обновления: 25.12.2025