Cómo usar el comando docker service logs para ver los registros (logs) de servicios y tareas

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá cómo utilizar de manera efectiva el comando docker service logs para ver y gestionar los registros (logs) generados por los servicios de Docker y sus tareas individuales. Comenzaremos creando un servicio de Docker simple utilizando la imagen alpine y el comando ping.

Después de crear el servicio, explorará cómo ver los registros del servicio completo, lo que proporciona una vista consolidada de la salida de todas las tareas en ejecución. Luego, aprenderá cómo centrar su atención en los registros de una tarea específica dentro del servicio. Finalmente, el laboratorio demostrará cómo aprovechar varias opciones del comando docker service logs para filtrar y formatear la salida de los registros según sus necesidades.


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{{"Cómo usar el comando docker service logs para ver los registros (logs) de servicios y tareas"}} docker/ls -.-> lab-555226{{"Cómo usar el comando docker service logs para ver los registros (logs) de servicios y tareas"}} docker/ps -.-> lab-555226{{"Cómo usar el comando docker service logs para ver los registros (logs) de servicios y tareas"}} docker/rm -.-> lab-555226{{"Cómo usar el comando docker service logs para ver los registros (logs) de servicios y tareas"}} docker/logs -.-> lab-555226{{"Cómo usar el comando docker service logs para ver los registros (logs) de servicios y tareas"}} docker/pull -.-> lab-555226{{"Cómo usar el comando docker service logs para ver los registros (logs) de servicios y tareas"}} end

Crear un servicio de Docker simple

En este paso, crearemos un servicio de Docker simple utilizando el comando docker service create. Un servicio de Docker es un grupo de contenedores de la misma imagen. Cuando se crea un servicio, se define qué imagen de contenedor se utilizará y qué comandos se ejecutarán dentro de los contenedores.

Primero, descarguemos la imagen alpine, que es una distribución Linux ligera comúnmente utilizada en contenedores de Docker.

docker pull alpine

Debería ver una salida que indique que la imagen se está descargando.

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

Ahora, crearemos un servicio de Docker llamado my-service utilizando la imagen alpine. También especificaremos el comando ping labex.io para que se ejecute dentro de cada contenedor del servicio. La opción --name asigna un nombre al servicio, y la parte alpine ping labex.io especifica la imagen y el comando a ejecutar.

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

Después de ejecutar el comando, verá una salida similar a esta, lo que indica que el servicio se ha creado. La larga cadena de caracteres es el ID del servicio.

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

Para verificar que el servicio está en ejecución, puede utilizar el comando docker service ls. Este comando enumera todos los servicios que se están ejecutando en su clúster (swarm) de Docker.

docker service ls

Debería ver una salida similar a esta, que muestra su my-service en la lista con 1 réplica en ejecución.

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

Esto confirma que su servicio de Docker my-service se ha creado correctamente y está en ejecución con una tarea (contenedor) ejecutando el comando ping labex.io.

Ver los registros (logs) de todo el servicio

En el paso anterior, creamos un servicio de Docker llamado my-service que ejecuta un contenedor con el comando ping labex.io. Este comando genera una salida (registros) mientras se ejecuta. En este paso, aprenderemos cómo ver los registros de todo el servicio.

Para ver los registros de un servicio de Docker, se utiliza el comando docker service logs seguido del nombre del servicio.

docker service logs my-service

Al ejecutar este comando, se mostrarán los registros generados por todas las tareas (contenedores) pertenecientes al servicio my-service. Dado que nuestro servicio actualmente tiene solo una tarea, verá la salida del comando ping labex.io que se está ejecutando en ese contenedor.

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
...

La salida muestra las entradas de registro, precedidas por el nombre del servicio, el número de tarea y un ID de tarea único. Esto le ayuda a identificar qué tarea generó cada entrada de registro, especialmente cuando tiene múltiples tareas en ejecución para un servicio.

También puede utilizar la opción -f o --follow para transmitir los registros en tiempo real. Esto es útil para monitorear la actividad del servicio a medida que se produce.

docker service logs -f my-service

Este comando mostrará continuamente nuevas entradas de registro a medida que se generen por las tareas del servicio. Para detener la visualización en tiempo real de los registros, presione Ctrl+C.

Ver los registros de todo el servicio es útil para obtener una visión general de la salud y la actividad del servicio.

Ver los registros (logs) de una tarea específica dentro del servicio

En el paso anterior, vimos los registros de todo el servicio my-service. Cuando un servicio tiene múltiples tareas (réplicas), ver los registros combinados puede resultar abrumador. En este paso, aprenderemos cómo ver los registros de una tarea específica dentro de un servicio.

Primero, necesitamos identificar el ID de la tarea para la cual queremos ver los registros. Podemos obtener esta información utilizando el comando docker service ps, que enumera las tareas asociadas a un servicio.

docker service ps my-service

Este comando mostrará las tareas en ejecución para my-service. La salida se verá similar a esta:

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

En esta salida, abcdefghijkl es el ID de la tarea, y my-service.1 es el nombre de la tarea. El nombre de la tarea está compuesto por el nombre del servicio y el número de la tarea.

Para ver los registros de una tarea específica, se utiliza el comando docker service logs seguido del ID de la tarea.

docker service logs abcdefghijkl

Nota: Reemplace abcdefghijkl con el ID real de la tarea que obtuvo de la salida del comando docker service ps.

Al ejecutar este comando, se mostrarán solo los registros generados por el contenedor en ejecución para esa tarea específica. Esto es útil para depurar problemas con tareas individuales.

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
...

También puede utilizar la opción -f aquí para seguir los registros de la tarea específica en tiempo real.

docker service logs -f abcdefghijkl

Ver los registros de tareas individuales le permite aislar problemas y entender el comportamiento de instancias específicas de su servicio.

Utilizar opciones para filtrar y formatear los registros (logs) del servicio

En este paso, exploraremos algunas opciones útiles para filtrar y formatear la salida del comando docker service logs. Estas opciones pueden ayudarte a encontrar información específica en los registros y hacer que la salida sea más legible.

Un requisito común es ver solo las entradas de registro más recientes. Puedes utilizar la opción --tail para especificar el número de líneas a mostrar desde el final de los registros. Por ejemplo, para ver las últimas 5 líneas de registros del servicio my-service:

docker service logs --tail 5 my-service

Esto mostrará las últimas 5 entradas de registro del servicio.

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

Otra opción útil es --since, que te permite ver los registros generados después de una marca de tiempo (timestamp) o duración específica. Por ejemplo, para ver los registros generados en los últimos 5 minutos:

docker service logs --since 5m my-service

También puedes especificar una marca de tiempo específica en formato RFC3339Nano, fecha (YYYY-MM-DD) o fecha y hora (YYYY-MM-DDTHH:MM:SS).

Para incluir marcas de tiempo en la salida, utiliza la opción --timestamps o la bandera -t:

docker service logs -t my-service

Esto agregará una marca de tiempo al principio de cada entrada de registro.

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
...

Finalmente, puedes combinar estas opciones para refinar la visualización de tus registros. Por ejemplo, para ver las últimas 10 entradas de registro con marcas de tiempo:

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

Estas opciones brindan flexibilidad en cómo se ven y analizan los registros de los servicios de Docker, lo que facilita el monitoreo y la resolución de problemas de tus aplicaciones.

Antes de concluir el laboratorio, limpiemos el servicio que creamos. Podemos eliminar el servicio utilizando el comando docker service rm.

docker service rm my-service

Verás una salida que confirme la eliminación del servicio.

my-service

Este comando detiene y elimina todas las tareas asociadas al servicio.

Resumen

En este laboratorio, aprendimos cómo crear un servicio simple de Docker utilizando el comando docker service create, especificando la imagen y el comando a ejecutar dentro de las tareas del servicio. Verificamos la creación y el estado del servicio utilizando docker service ls.

Luego, exploramos cómo ver los registros (logs) de todo el servicio utilizando docker service logs <service_name> y cómo ver los registros de una tarea específica dentro del servicio. Para ello, primero identificamos el ID de la tarea utilizando docker service ps <service_name> y luego utilizamos docker service logs <task_id>. Finalmente, aprendimos cómo utilizar varias opciones con docker service logs para filtrar y formatear la salida de los registros, como --follow para transmitir los registros en tiempo real, --since para ver los registros a partir de un momento específico y --tail para ver las últimas N líneas de los registros.