Как использовать команду docker service logs для просмотра логов сервисов и задач

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь эффективно использовать команду docker service logs для просмотра и управления логами, генерируемыми Docker-сервисами и их отдельными задачами. Мы начнем с создания простого Docker-сервиса с использованием образа alpine и команды ping.

После создания сервиса вы узнаете, как просматривать логи для всего сервиса, получая объединенное представление вывода всех запущенных задач. Затем вы научитесь сужать область поиска и просматривать логи для конкретной задачи в рамках сервиса. Наконец, в рамках практического занятия будет показано, как использовать различные параметры команды docker service logs для фильтрации и форматирования вывода логов в соответствии с вашими потребностями.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/logs("View Container Logs") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555226{{"Как использовать команду docker service logs для просмотра логов сервисов и задач"}} docker/ls -.-> lab-555226{{"Как использовать команду docker service logs для просмотра логов сервисов и задач"}} docker/ps -.-> lab-555226{{"Как использовать команду docker service logs для просмотра логов сервисов и задач"}} docker/rm -.-> lab-555226{{"Как использовать команду docker service logs для просмотра логов сервисов и задач"}} docker/logs -.-> lab-555226{{"Как использовать команду docker service logs для просмотра логов сервисов и задач"}} docker/pull -.-> lab-555226{{"Как использовать команду docker service logs для просмотра логов сервисов и задач"}} end

Создание простого Docker-сервиса

На этом этапе мы создадим простой Docker-сервис с использованием команды docker service create. Docker-сервис представляет собой группу контейнеров одного и того же образа. При создании сервиса вы определяете, какой образ контейнера использовать и какие команды выполнять внутри контейнеров.

Сначала давайте загрузим образ alpine, который представляет собой легковесное дистрибутив Linux, часто используемое в Docker-контейнерах.

docker pull alpine

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

Using default tag: latest
latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

Теперь мы создадим Docker-сервис с именем my-service с использованием образа alpine. Мы также укажем команду ping labex.io, которая будет выполняться внутри каждого контейнера сервиса. Флаг --name присваивает имя сервису, а часть alpine ping labex.io указывает на образ и команду для выполнения.

docker service create --name my-service alpine ping labex.io

После выполнения команды вы увидите вывод, аналогичный приведенному ниже, который указывает на то, что сервис создан. Длинная строка символов - это идентификатор сервиса.

p1234567890abcdefghijklmnopqrstu
overall progress: 1 out of 1 tasks
1/1: running   [==================================================>]
verify: Service converged

Чтобы убедиться, что сервис запущен, вы можете использовать команду docker service ls. Эта команда выводит список всех сервисов, запущенных в вашем Docker-кластере (swarm).

docker service ls

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

ID             NAME         MODE         REPLICAS   IMAGE          PORTS
p1234567890   my-service   replicated   1/1        alpine:latest

Это подтверждает, что ваш Docker-сервис my-service успешно создан и запущен с одной задачей (контейнером), выполняющей команду ping labex.io.

Просмотр логов для всего сервиса

На предыдущем этапе мы создали Docker-сервис с именем my-service, который запускает контейнер, выполняющий команду ping labex.io. Эта команда генерирует вывод (логи) в процессе выполнения. На этом этапе мы научимся просматривать логи для всего сервиса.

Для просмотра логов Docker-сервиса используйте команду docker service logs, за которой следует имя сервиса.

docker service logs my-service

Выполнение этой команды отобразит логи, сгенерированные всеми задачами (контейнерами), принадлежащими сервису my-service. Поскольку наш сервис в настоящее время имеет только одну задачу, вы увидите вывод команды ping labex.io, выполняющейся в этом контейнере.

my-service.1.abcdefghijkl  PING labex.io (1.2.3.4): 56 data bytes
my-service.1.abcdefghijkl  64 bytes from 1.2.3.4: seq=0 ttl=50 time=123.456 ms
my-service.1.abcdefghijkl  64 bytes from 1.2.3.4: seq=1 ttl=50 time=123.456 ms
...

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

Вы также можете использовать флаг -f или --follow для потокового вывода логов в реальном времени. Это полезно для мониторинга активности сервиса по мере ее возникновения.

docker service logs -f my-service

Эта команда будет непрерывно отображать новые записи логов по мере их генерации задачами сервиса. Чтобы остановить просмотр логов, нажмите Ctrl+C.

Просмотр логов для всего сервиса помогает получить общее представление о состоянии и активности сервиса.

Просмотр логов для конкретной задачи в рамках сервиса

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

Сначала нам нужно определить идентификатор задачи, для которой мы хотим просмотреть логи. Мы можем получить эту информацию с помощью команды docker service ps, которая выводит список задач, связанных с сервисом.

docker service ps my-service

Эта команда покажет вам задачи, запущенные для сервиса my-service. Вывод будет похож на следующий:

ID             NAME           IMAGE          NODE         DESIRED STATE   CURRENT STATE           ERROR   PORTS
abcdefghijkl   my-service.1   alpine:latest   labex-vm   Running         Running 2 minutes ago

В этом выводе abcdefghijkl - это идентификатор задачи, а my-service.1 - это имя задачи. Имя задачи состоит из имени сервиса и номера задачи.

Для просмотра логов для конкретной задачи используйте команду docker service logs, за которой следует идентификатор задачи.

docker service logs abcdefghijkl

Примечание: Замените abcdefghijkl на фактический идентификатор задачи, полученный из вывода команды docker service ps.

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

my-service.1.abcdefghijkl  PING labex.io (1.2.3.4): 56 data bytes
my-service.1.abcdefghijkl  64 bytes from 1.2.3.4: seq=0 ttl=50 time=123.456 ms
my-service.1.abcdefghijkl  64 bytes from 1.2.3.4: seq=1 ttl=50 time=123.456 ms
...

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

docker service logs -f abcdefghijkl

Просмотр логов для отдельных задач позволяет выявить проблемы и понять поведение конкретных экземпляров вашего сервиса.

Использование опций для фильтрации и форматирования логов сервиса

На этом этапе мы рассмотрим некоторые полезные опции для фильтрации и форматирования вывода команды docker service logs. Эти опции помогут вам найти конкретную информацию в логах и сделать вывод более читаемым.

Одной из распространенных потребностей является просмотр только самых последних записей лога. Вы можете использовать опцию --tail, чтобы указать количество строк, которые нужно отобразить с конца логов. Например, чтобы просмотреть последние 5 строк логов для сервиса my-service:

docker service logs --tail 5 my-service

Это выведет последние 5 записей лога из сервиса.

my-service.1.abcdefghijkl  64 bytes from 1.2.3.4: seq=10 ttl=50 time=123.456 ms
my-service.1.abcdefghijkl  64 bytes from 1.2.3.4: seq=11 ttl=50 time=123.456 ms
my-service.1.abcdefghijkl  64 bytes from 1.2.3.4: seq=12 ttl=50 time=123.456 ms
my-service.1.abcdefghijkl  64 bytes from 1.2.3.4: seq=13 ttl=50 time=123.456 ms
my-service.1.abcdefghijkl  64 bytes from 1.2.3.4: seq=14 ttl=50 time=123.456 ms

Другая полезная опция - --since, которая позволяет просматривать логи, сгенерированные после определенного временного штампа или периода времени. Например, чтобы просмотреть логи, сгенерированные за последние 5 минут:

docker service logs --since 5m my-service

Вы также можете указать конкретный временной штамп в формате RFC3339Nano, дату (ГГГГ-ММ-ДД) или дату и время (ГГГГ-ММ-ДДТЧЧ:ММ:СС).

Чтобы включить временные штампы в вывод, используйте флаг --timestamps или -t:

docker service logs -t my-service

Это добавит временной штамп в начало каждой записи лога.

2023-10-27T10:30:00.123456789Z my-service.1.abcdefghijkl  PING labex.io (1.2.3.4): 56 data bytes
2023-10-27T10:30:01.123456789Z my-service.1.abcdefghijkl  64 bytes from 1.2.3.4: seq=0 ttl=50 time=123.456 ms
...

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

docker service logs --tail 10 -t my-service

Эти опции обеспечивают гибкость в просмотре и анализе логов Docker-сервиса, упрощая мониторинг и устранение неполадок в ваших приложениях.

Перед завершением лабораторной работы очистим созданный нами сервис. Мы можем удалить сервис с помощью команды docker service rm.

docker service rm my-service

Вы увидите вывод, подтверждающий удаление сервиса.

my-service

Эта команда останавливает и удаляет все задачи, связанные с сервисом.

Резюме

В этой лабораторной работе мы научились создавать простой Docker-сервис с помощью команды docker service create, указывая образ и команду, которая будет выполняться в рамках задач сервиса. Мы проверили создание и статус сервиса с помощью команды docker service ls.

Затем мы изучили, как просматривать логи для всего сервиса с помощью команды docker service logs <service_name>, а также как просматривать логи для конкретной задачи в рамках сервиса. Для этого сначала определяем идентификатор задачи с помощью команды docker service ps <service_name>, а затем используем команду docker service logs <task_id>. Наконец, мы научились использовать различные опции с командой docker service logs для фильтрации и форматирования вывода логов, например, опцию --follow для потокового вывода логов, опцию --since для просмотра логов с определенного времени и опцию --tail для просмотра последних N строк логов.