Настройка ротации логов в 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. Нажмите
в правом верхнем углу экрана и перейдите в настройки Docker.
2. Выберите Docker Engine. В правой панели вы увидите текущее содержимое файла daemon.json.
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, чтобы изменения применились. В правом нижнем углу нажмите на меню
рядом с иконкой Docker
и выберите в меню Restart.
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

