Cómo usar el comando docker system events para monitorear la actividad de Docker

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 monitorear de manera efectiva la actividad de Docker utilizando el comando docker system events. Comenzará escuchando eventos en tiempo real de Docker generados por acciones como la descarga de imágenes y la ejecución de contenedores.

Posteriormente, explorará cómo filtrar estos eventos basándose en varios criterios. Esto incluye filtrar por tiempo utilizando las opciones --since y --until, filtrar por tipo de objeto y acción utilizando la opción --filter, y combinar múltiples filtros para un monitoreo más específico. Finalmente, aprenderá cómo dar formato a la salida de los eventos para una mejor legibilidad y análisis utilizando la opción --format.


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/ps("List Running Containers") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555248{{"Cómo usar el comando docker system events para monitorear la actividad de Docker"}} docker/ps -.-> lab-555248{{"Cómo usar el comando docker system events para monitorear la actividad de Docker"}} docker/pull -.-> lab-555248{{"Cómo usar el comando docker system events para monitorear la actividad de Docker"}} end

Escuchar eventos en tiempo real de Docker

En este paso, aprenderá cómo escuchar eventos en tiempo real de Docker. Los eventos de Docker son generados por el demonio de Docker cuando se producen ciertas acciones, como iniciar, detener o eliminar contenedores, imágenes o volúmenes. El monitoreo de estos eventos puede ser útil para la automatización, el registro y la depuración.

Para escuchar eventos de Docker, se utiliza el comando docker events. Por defecto, este comando mostrará continuamente los eventos a medida que se produzcan.

Primero, abramos una terminal y ejecutemos el comando docker events. Este comando se bloqueará y esperará a que ocurran eventos.

docker events

Ahora, abra una nueva terminal (deje la primera terminal ejecutando docker events). En esta nueva terminal, ejecutaremos un simple contenedor de Docker. Esta acción generará eventos que verá en la primera terminal.

En la nueva terminal, ejecute el siguiente comando para descargar la imagen hello-world. Esto generará un evento pull.

docker pull hello-world

Debería ver una salida en la primera terminal que indique que se ha producido un evento de descarga de imagen.

A continuación, ejecute el contenedor hello-world. Esto generará eventos create, start y die.

docker run hello-world

Observe la salida en la primera terminal. Debería ver eventos relacionados con la creación, el inicio y la salida (finalización) del contenedor.

Puede detener el comando docker events en la primera terminal presionando Ctrl+C.

Filtrar eventos por tiempo utilizando --since y --until

En este paso, aprenderá cómo filtrar eventos de Docker basados en el tiempo utilizando las opciones --since y --until. Esto es útil para ver los eventos que ocurrieron dentro de un rango de tiempo específico.

La opción --since le permite ver los eventos que se han producido desde una hora específica. La opción --until le permite ver los eventos que ocurrieron hasta una hora específica. Puede usar estas opciones juntas para especificar una ventana de tiempo.

El tiempo se puede especificar en varios formatos, incluyendo el formato de fecha RFC3339 (por ejemplo, 2023-10-27T10:00:00Z), marcas de tiempo Unix (por ejemplo, 1698393600) o tiempos relativos (por ejemplo, 10m para hace 10 minutos, 1h para hace 1 hora).

Primero, generemos algunos eventos. Volveremos a ejecutar el contenedor hello-world.

docker run hello-world

Ahora, intentemos ver los eventos que ocurrieron en los últimos 5 minutos. Podemos usar la opción --since con un tiempo relativo.

docker events --since 5m

Debería ver los eventos relacionados con la ejecución del contenedor hello-world que acaba de realizar.

A continuación, intentemos ver los eventos que ocurrieron en los últimos 10 minutos pero no en los últimos 2 minutos. Podemos usar tanto la opción --since como la opción --until con tiempos relativos.

docker events --since 10m --until 2m

Dependiendo de cuándo haya ejecutado el contenedor hello-world, es posible que vea o no los eventos. Si no ve ningún evento, intente ajustar los rangos de tiempo.

También puede usar marcas de tiempo absolutas. Para obtener la marca de tiempo Unix actual, puede usar el comando date +%s.

Obtengamos la marca de tiempo actual.

date +%s

Ahora, ejecute el contenedor hello-world nuevamente.

docker run hello-world

Obtenga la marca de tiempo actual nuevamente.

date +%s

Ahora, use las dos marcas de tiempo que obtuvo con las opciones --since y --until para ver los eventos que ocurrieron entre esos dos momentos. Reemplace START_TIMESTAMP y END_TIMESTAMP con las marcas de tiempo reales que registró.

docker events --since START_TIMESTAMP --until END_TIMESTAMP

Debería ver los eventos de la ejecución del contenedor hello-world que ocurrieron entre las dos marcas de tiempo.

Filtrar eventos por tipo de objeto y acción utilizando --filter

En este paso, aprenderá cómo filtrar eventos de Docker basados en el tipo de objeto y la acción utilizando la opción --filter. Esto le permite centrarse en tipos específicos de eventos, como eventos de contenedores o eventos de imágenes, y en acciones específicas, como create, start, stop o delete.

La opción --filter toma un par clave-valor en el formato key=value. Para filtrar por tipo de objeto, la clave es type y el valor puede ser container, image, volume, network, daemon o plugin. Para filtrar por acción, la clave es event y el valor es la acción específica.

Comencemos filtrando solo los eventos de contenedores. Volveremos a ejecutar el contenedor hello-world para generar eventos.

docker run hello-world

Ahora, use el comando docker events con la opción --filter type=container para ver solo los eventos relacionados con contenedores.

docker events --filter type=container --since 5m

Debería ver eventos como create, start y die para el contenedor hello-world, pero no eventos relacionados con la descarga de imágenes.

A continuación, filtremos una acción específica, por ejemplo, solo los eventos start para contenedores.

docker events --filter type=container --filter event=start --since 5m

Este comando solo mostrará el evento start para el contenedor hello-world si ocurrió en los últimos 5 minutos.

También puede filtrar por el nombre o la ID del objeto. Por ejemplo, para filtrar los eventos de un contenedor específico llamado my-container, utilizaría --filter container=my-container.

Ejecutemos el contenedor hello-world con un nombre específico.

docker run --name my-hello-container hello-world

Ahora, filtre los eventos específicamente para el contenedor llamado my-hello-container.

docker events --filter container=my-hello-container --since 5m

Debería ver todos los eventos relacionados con el my-hello-container en los últimos 5 minutos.

Filtrar eventos por múltiples criterios utilizando múltiples opciones --filter

En este paso, aprenderá cómo combinar múltiples opciones --filter para filtrar eventos de Docker basados en múltiples criterios simultáneamente. Esto le permite crear filtros más específicos para encontrar exactamente los eventos que le interesan.

Cuando se utilizan múltiples opciones --filter, Docker aplica una lógica "Y". Esto significa que un evento debe cumplir con todos los filtros especificados para incluirse en la salida.

Combinemos el filtrado por tipo de objeto y acción. Filtraremos los eventos start de contenedores.

Primero, ejecute un contenedor para generar un evento start.

docker run hello-world

Ahora, utilice dos opciones --filter: una para el tipo de objeto (type=container) y otra para la acción (event=start). También utilizaremos --since 5m para limitar el rango de tiempo.

docker events --filter type=container --filter event=start --since 5m

Debería ver solo el evento start para el contenedor hello-world si ocurrió en los últimos 5 minutos. Eventos como create o die se excluirán porque no cumplen con el filtro event=start.

También puede combinar el filtrado por tiempo, tipo y acción. Por ejemplo, filtremos los eventos die de contenedores que ocurrieron en los últimos 10 minutos pero no en los últimos 2 minutos.

docker events --filter type=container --filter event=die --since 10m --until 2m

Este comando mostrará los eventos die de contenedores que se encuentran dentro de la ventana de tiempo especificada.

Puede agregar aún más filtros, como filtrar por nombre de contenedor o nombre de imagen. Filtrémos los eventos start de un contenedor llamado my-specific-container que utilice la imagen ubuntu.

Primero, descargue la imagen ubuntu.

docker pull ubuntu

Ahora, ejecute un contenedor ubuntu con un nombre específico.

docker run --name my-specific-container ubuntu echo "Hello from Ubuntu"

Ahora, filtre los eventos start del contenedor llamado my-specific-container.

docker events --filter type=container --filter event=start --filter container=my-specific-container --since 5m

Debería ver el evento start para el my-specific-container si ocurrió en los últimos 5 minutos.

Formatear la salida de eventos utilizando --format

En este paso, aprenderá cómo formatear la salida de los eventos de Docker utilizando la opción --format. Esto le permite personalizar la información mostrada para cada evento, lo que facilita su análisis o lectura.

La opción --format utiliza la sintaxis del paquete text/template de Go. Puedes acceder a varios campos del objeto de evento, como .Time, .Type, .Action, .Actor.ID y .Actor.Attributes.

Comencemos mostrando la hora, el tipo y la acción de cada evento.

Primero, generemos algunos eventos ejecutando el contenedor hello-world.

docker run hello-world

Ahora, use el comando docker events con la opción --format para especificar el formato de salida deseado. Mostraremos la hora, el tipo y la acción, separados por una tabulación (\t).

docker events --since 5m --format '{{.Time}}\t{{.Type}}\t{{.Action}}'

Debería ver una salida similar a esta, pero con diferentes marcas de tiempo e IDs:

2023-10-27 10:30:00.123456789 +0000 UTC	container	create
2023-10-27 10:30:00.987654321 +0000 UTC	container	start
2023-10-27 10:30:01.567890123 +0000 UTC	container	die

También puede acceder a los atributos del actor que desencadenó el evento. Por ejemplo, para mostrar el nombre del contenedor, puede usar .Actor.Attributes.name.

Volvamos a ejecutar el contenedor hello-world con un nombre.

docker run --name my-formatted-container hello-world

Ahora, formatee la salida para incluir el nombre del contenedor.

docker events --since 5m --format '{{.Time}}\t{{.Type}}\t{{.Action}}\t{{.Actor.Attributes.name}}'

La salida ahora debería incluir el nombre del contenedor:

2023-10-27 10:35:00.123456789 +0000 UTC	container	create	my-formatted-container
2023-10-27 10:35:00.987654321 +0000 UTC	container	start	my-formatted-container
2023-10-27 10:35:01.567890123 +0000 UTC	container	die	my-formatted-container

Puede utilizar varias funciones de plantilla y estructuras de control dentro de la cadena de formato para un formateo más complejo. Consulte la documentación de text/template de Go para obtener más detalles.

Resumen

En este laboratorio, aprendiste cómo utilizar el comando docker events para monitorear la actividad de Docker en tiempo real. Comenzaste escuchando todos los eventos de Docker a medida que ocurrían, observando los eventos generados al descargar y ejecutar un contenedor simple.

Posteriormente, exploraste cómo filtrar estos eventos basados en varios criterios. Aprendiste a filtrar eventos por tiempo utilizando las opciones --since y --until para ver eventos dentro de un rango de tiempo específico. También descubriste cómo filtrar eventos por tipo de objeto y acción utilizando la opción --filter, y cómo aplicar múltiples filtros simultáneamente para reducir el flujo de eventos. Finalmente, aprendiste cómo formatear la salida del comando docker events utilizando la opción --format para una mejor legibilidad y análisis.