Работаем с логами контейнеров Docker

Перевод: Reviewing Docker Logs

Docker Docker

Многие знают, что есть команда docker logs. Чуть меньшее количество людей знает, что этот функционал можно расширить для отслеживания новых сообщений в контейнере (примерно как работает tail -f на обычных файлах), и уж совсем немногие знают и помнят, что можно указывать временные метки для просмотра логов контейнера только с определённого промежутка времени.

Show Docker Container Logs

Самая простая команда для просмотра логов контейнера:

# docker logs mycontainer1

Так можно посмотреть все доступные логи контейнера mycontainer1, самые свежие сообещния будут в конце.

Отслеживание новых сообщений в логах Docker

Чтобы следить за появлением новых сообщений в контейнере, нужно указать опцию -f (от английского follow - следовать):

# docker logs -f mycontainer1

Сначала результат команды будет такой же, как и в предыдущем примере. Но во-первых, команда не завершится и вы не получите приглашения командной строки (это будет ждущий режим). А во-вторых, скоро должны появиться новые логи из контейнера.

Просмотр логов в промежутке времени

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

Для доступа к логам определённого рвемени, используйте параметры –since (от даты) и –until (до даты) для команды docker logs.

ЗАМЕЧУ: можно и не даты указвыать, а даты и время - но для моих нужд и дат хватает.

Вот пример просмотра логов контейнера для Java приложения. Как видите, благодаря моим параметрам мы получили только сообщения между 30м марта и 1м апреля:

root@s2:~ # docker logs -f confluence --since 2020-03-30 --until 2020-04-01
30-Mar-2020 07:52:27.292 INFO [http-nio-8090-exec-7] org.apache.coyote.http11.Http11Processor.service Error parsing HTTP request header
  Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.
     java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
         at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:415)
         at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:292)
         at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
         at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
         at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1579)
         at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
         at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
         at java.lang.Thread.run(Thread.java:748)
30-Mar-2020 09:22:28.099 INFO [http-nio-8090-exec-1] org.apache.coyote.http11.Http11Processor.service Error parsing HTTP request header
  Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.
     java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
         at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:415)
         at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:292)
         at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
         at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
         at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1579)
         at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
         at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
         at java.lang.Thread.run(Thread.java:748)
30-Mar-2020 23:57:24.900 INFO [http-nio-8090-exec-3] org.apache.coyote.http11.Http11Processor.service Error parsing HTTP request header
  Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.
     java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
         at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:415)
         at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:292)
         at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
         at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
         at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1579)
         at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
         at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
         at java.lang.Thread.run(Thread.java:748)

That’s it for today, have fun with Docker!

Ссылки




Давайте учиться вместе!

Заходите на страницу Facebook или присоединяйтесь к чату в Telegram:
Я использую браузер Brave
Попробуйте сами: Brave Browser
IT Консалтинг
У меня есть консалтинговая компания: Tech Stack Solutions. Я помогаю планировать и создавать облачные решения на базе AWS и помогаю с развёртыванием и поддержкой сервисов на Unix/Linux. Свяжитесь со мной тут.

Recent Tweets