🐳 Как очистить логи запущенных контейнеров Docker |

🐳 Как очистить логи запущенных контейнеров Docker

Мануал

Долго работающие контейнеры Docker могут быстро накапливать большое количество логов.

Они потребляют емкость хранилища и снижают производительность при доступе к данным и их фильтрации.

Хотя Docker содержит встроенные инструменты для просмотра логов, в нем нет встроенного механизма для их очистки.

В этой статье вы узнаете, как очистить логи запущенных контейнеров Docker, не перезапуская и не заменяя их.

Вы также увидите некоторые методы более эффективной работы с большими журналами, сохраняя при этом старые данные.

Как найти лог определенного контейнера Docker

Сначала найдите путь к файлу журнала целевого контейнера.

Вы можете получить путь к файлу лога контейнера под названием my-app, выполнив следующую команду:

docker inspect --format='{{.LogPath}}' my-app
/var/lib/containers/1380d936...-json.log

Очистка файла лога

Вы можете очистить содержимое журнала, не удаляя его, передав echo пустую строку в его содержимое.

Владельцем файла будет root, поэтому вам нужно будет выполнить эту операцию в оболочке root.

Следующая команда очистит файл журнала:

sudo sh -c 'echo "" > $(docker inspect --format="{{.LogPath}}" my-app)'

Интерполяция оболочки используется для динамического получения пути к файлу журнала для контейнера my-app.

Вместо этого вы можете вручную подставить путь, полученный ранее.

Когда вы запустите docker logs my-app, вы увидите пустой вывод, если только контейнер не возобновил запись строк за прошедшее время.

Ограничение вывода логов

Команда docker logs принимает несколько аргументов, которые можно использовать для ограничения вывода захламленных журналов.

Это поможет уменьшить необходимость очистки журнала и предотвратить переполнение терминала старыми строками при каждом обращении к файлу.

  • –tail – Этот флаг указывает Docker выводить только определенное количество старых строк журнала, начиная с самой последней.
  • –until и –since – Эти флаги ограничивают вывод строками журнала, выведенными за определенный период времени. Они полезны, когда вы знаете приблизительные временные рамки, в которые произошло событие.

Вот несколько примеров:

Отображение 100 последних строк журнала

docker logs my-app --tail 100

Отображение строк журнала, записанных за последний час

docker logs my-app --since 1h

Отображение до 100 строк журнала, записанных за последний час

docker logs my-app --tail 100 --since 1h

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

Многие драйверы логирования Docker, включая json-file, имеют опциональную поддержку ротации логов, которую можно включить глобально для демона Docker или на основе каждого контейнера.

Параметры демона настраиваются в файле /etc/docker/daemon.json.

Вот пример, который ротирует логи контейнеров, когда они достигают 8 МБ.

В каждый момент времени сохраняется до пяти файлов, при этом старые файлы автоматически удаляются при новой ротации.

{
    "log-opts": {
        "max-size": "8m",
        "max-file": "5"
    }
}

Перезапустите демон Docker, чтобы применить изменения:

sudo service docker restart

Ротация на уровне демона применяется ко всем вновь созданным контейнерам.

Изменения не затронут контейнеры, которые уже существуют на вашем хосте.

Ротация может быть настроена для отдельных контейнеров с помощью флагов –log-opts.

Они отменяют настройки демона Docker по умолчанию.

Заключение

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

Однако лучше настроить ротацию, чтобы это происходило автоматически по достижении файлами определенного размера.

Команда docker logs также поддерживает флаги, которые могут помочь укротить громоздкие логи.

см. также:

 

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

  1. Arturius

    truncate –size 1G $(docker inspect –format='{{.LogPath}}’ $(docker ps –format='{{.ID}}’)
    Оставит 1 гигабайт логов во всех запущеных конетейнерах

    Ответить
    1. cryptoparty автор

      Спасибо за дополнение

      Ответить