Как подключить журнал докера с текущей позиции в журнале, не видя весь файл или не дожидаясь, пока он пересекает весь файл - PullRequest
0 голосов
/ 31 августа 2018

Если вы используете команду coreutils tail в Linux, у вас есть опция -f, которая позволяет вам следовать за файлом журнала с текущей позиции журнала (он не идет в самое начало файла и отображает все).

Доступна ли эта функция в журналах докера, не дожидаясь, пока она обойдет весь журнал?

Может быть, я пытаюсь неверные аргументы для вариантов? Используя доступную документацию, я попробовал

docker logs --since 1m somecontainer

и

docker logs -f --since 1m somecontainer

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

Есть ли способ просто начать хвост с текущей точки, не дожидаясь? Мой лучший вариант - всегда выходить из какого-либо внешнего файла и просто привязывать его с помощью команды coreutils tail?

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018

Настройка по умолчанию для драйвера журнала - это формат файла json, и единственный способ, с помощью которого я могу придумать надежный анализ, заключающийся в анализе файла с самого начала, что, как я подозреваю, это именно то, что делает Docker. Так что я не уверен, что есть возможность сделать именно то, что вы просите. Однако есть два параметра журнала, которые можно настроить при запуске контейнера с драйвером журнала json по умолчанию.

  1. максимальный размер: ограничивает размер файла журнала json. После этого Docker создаст новый файл. По умолчанию оно не ограничено (-1).
  2. max-file: ограничивает количество создаваемых json-файлов до максимального размера, указанного выше. По умолчанию установлено значение 1.

Вы можете прочитать об этих опциях здесь: https://docs.docker.com/config/containers/logging/json-file/

Обычно я устанавливаю эти параметры с новыми значениями по умолчанию для всех контейнеров, запускаемых на хосте докера, используя следующие строки в моем файле /etc/docker/daemon.json:

{
"log-driver": "json-file",
"log-opts": {"max-size": "10m", "max-file": "3"}
}

Эти два параметра позволяют хранить до 3 различных файлов журнала 10 мегабайт json. Результатом является ограничение между 20-30 мегами журналов на контейнер. Чтобы загрузить этот файл, необходимо запустить перезагрузку процесса dockerd (killall -HUP dockerd или systemctl reload docker).

Вы можете переопределить это для отдельного контейнера, передав параметры журнала в вашей команде run (или внутри файла compose):

docker container run --log-opt max-size=5m --log-opt max-file=2 ...

По-видимому, нет способа изменить параметры ведения журнала существующего контейнера, поэтому вам нужно будет заново создать контейнеры для применения этих изменений.

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

0 голосов
/ 04 сентября 2018

Интересно, почему не пользуетесь docker logs --help для помощи? Попробуйте ниже, начиная с последних 10 строк. Подробнее здесь .

docker logs -f --tail 10 container_name
0 голосов
/ 01 сентября 2018

Я думаю, что вы делаете это правильно, и, кажется, работает, как и ожидалось, когда я пытаюсь это сделать. Используете ли вы какой-либо нестандартный драйвер журнала и т. Д.

Для отслеживания только новых файлов журнала вы можете использовать -f --since 0m.

...