GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Guía completa para principiantes sobre el registro de Docker

El conocimiento sobre el inicio de sesión con Docker puede ser muy útil para las actividades diarias de administración del sistema, ya sea para la resolución de problemas o la supervisión básica. Sin registros de seguimiento en Docker, mitigar los problemas sería mucho más difícil al investigar anomalías.

Este artículo explora información importante sobre esa área para facilitar la comprensión de cómo administrar los archivos de registro asociados a Docker en su sistema Linux.

Permítanme comenzar explorando las partes más básicas y profundizar gradualmente en algunos detalles.

Cómo ver los registros de Docker

Puede usar los docker logs Comando para recuperar lo que esté pasando con el servicio dentro de un contenedor en ejecución.

La sintaxis es simple:

docker logs container_name_or_ID

Probablemente ya sepa que puede usar el docker ps Comando para ver el nombre y la ID de los contenedores en ejecución.

Tomemos un ejemplo del mundo real. He implementado Nextcloud con Docker. El contenedor se llama nextcloud, como era de esperar.

Ahora, para ver los registros del contenedor llamado nextcloud , usa:

docker logs nextcloud

Aquí hay una versión truncada de la salida del comando anterior:

172.18.0.2 - - [23/Jul/2021:19:36:09 +0000] "HEAD /.env HTTP/1.1" 302 1571 "-" "python-requests/2.26.0"
172.18.0.2 - - [23/Jul/2021:19:49:52 +0000] "HEAD /c99.php HTTP/1.1" 302 1565 "-" "python-requests/2.26.0"
172.18.0.2 - - [24/Jul/2021:16:25:23 +0000] "HEAD /backup.tar HTTP/1.1" 302 1571 "-" "python-requests/2.26.0"
172.18.0.2 - - [24/Jul/2021:16:25:24 +0000] "HEAD /backup.zip HTTP/1.1" 302 1569 "-" "python-requests/2.26.0"
172.18.0.2 - - [25/Jul/2021:20:36:01 +0000] "GET / HTTP/1.1" 302 1590 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko; compatible; BW/1.1; bit.ly/2W6Px8S) Chrome/84.0.4147.105 Safari/537.36"
172.18.0.2 - - [25/Jul/2021:20:36:07 +0000] "GET /custom_apps/richdocumentscode/proxy.php?req=/hosting/capabilities HTTP/1.1" 200 721 "-" "Nextcloud Server Crawler"
172.18.0.2 - - [25/Jul/2021:20:36:04 +0000] "GET /login HTTP/1.1" 200 7501 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko; compatible; BW/1.1; bit.ly/2W6Px8S) Chrome/84.0.4147.105 Safari/537.36"

¿Demasiados registros? Lo bueno es que hay varias opciones que facilitan mucho la visualización de los registros de la ventana acoplable, al igual que los registros en Linux.

Registros de Tail Docker para ver solo cierto número de líneas

El comando de registros de Docker tiene --tail atributo que se puede utilizar de forma similar al comando de cola.

Lo que significa que puede usarlo para mostrar solo una cierta cantidad de líneas de registros de Docker desde el final.

Por ejemplo, para ver las últimas 50 líneas de un contenedor, puede usar:

docker logs --tail 50 container_name_or_ID

También puede usar el comando anterior de esta manera

docker logs -n=50 container_name_or_ID

Visualización de registros de Docker en tiempo real en un contenedor activo

Puede ver totalmente los registros del contenedor en tiempo real. Para "seguir" los registros, utilice --follow o el -f atributo.

docker logs -f container_name_or_ID

Cuando ejecuta los registros de la ventana acoplable con la opción de seguimiento, notará que las nuevas líneas de registro se informarán desde el contenedor a medida que avanza el tiempo.

Para salir, simplemente puede usar Ctrl+C combinación de teclas y regrese al indicador de terminal.

La mayoría de las opciones en los docker logs el subcomando se puede combinar para producir el resultado deseado.

Por ejemplo, docker logs -f inundará la pantalla con todos los registros desde el principio. No querrías eso. Lo que puedes hacer es combinar ambos tail y follow opciones como esta:

docker logs -f --tail 20 container_name_or_ID

El comando anterior mostrará las últimas 20 líneas de los registros y luego seguirá los registros en tiempo real.

Al actualizar los contenedores de su aplicación con escala, el comando anterior puede ser muy útil antes de eliminar un contenedor anterior.

Ver la marca de tiempo en los registros de Docker

Si también desea ver la marca de tiempo de las entradas del registro, puede usar -t opción.

docker logs -t container_name_or_ID

Esto se puede combinar fácilmente con otras opciones como --follow y --tail .

El siguiente comando mostrará las últimas 10 líneas del archivo de registro de un contenedor determinado con marcas de tiempo adjuntas a cada uno de ellos

docker logs -n=10 -t container_name_or_ID

Ver registros de Docker en un periodo de tiempo especificado

Cuando investiga un problema, el tiempo puede ser un factor crítico, en cuyo caso el --since y --until las banderas podrían resultar muy útiles.

Por ejemplo, si está investigando un problema que ocurrió en las últimas 24 horas, el siguiente comando mostrará los contenidos registrados de lo que sucedió solo durante ese tiempo:

docker logs --since 1440m -t container_name_or_ID

1440m en el comando anterior denota 24×60 minutos. Agregando el -t o el --timestamps flag garantiza que las líneas notificadas se etiqueten con una marca de tiempo para que pueda comprender los incidentes o errores aún más fácilmente. Sugeriría agregarlo al consultar cualquier contenedor.

De manera similar, si necesita los detalles del registro después de las primeras 24 horas de iniciar la implementación, el comando equivalente sería:

docker logs --until 1440m -t nextcloud

Además de especificar el tiempo en minutos, los dos indicadores anteriores también se pueden usar con una marca de tiempo específica que -t genera El formato es como 2021-07-28T06:20:00 .

docker logs --since 2021-07-28 -t container_name_or_ID

El comando anterior mostrará los registros desde el 28 de julio de 2021.

Para obtener una descripción general completa de los registros de Docker, también puede consultar su página de manual con man docker-logs.

Acceder a los registros de Docker desde dentro del contenedor

En algunos casos de uso interesantes, es posible que desee optar por un enfoque híbrido, donde accede a los registros específicos de la aplicación desde dentro de los contenedores.

Para hacer eso, ingresa al contenedor Docker:

docker exec -it container_name_or_ID sh

Y luego puede usar las herramientas regulares de Linux para obtener registros relacionados con la aplicación. Un enfoque sería obtener el ID de proceso del servicio deseado mediante el comando ps:

ps aux

Obtén los detalles de este proceso:

cat /proc/PID_of_process/fd/1

Registros de servicio del sistema Docker

Si desea ver los registros del propio servicio Docker en el host, puede usar journalctl si está en Ubuntu 16.04 o posterior:

sudo journalctl -u docker
Cómo usar el comando journalctl para analizar registros en LinuxGuía para principiantes sobre el uso de los comandos journalctl para ver, filtrar y analizar registros diarios en Linux. Manual de LinuxAbhishek Prakash

¿Dónde se almacenan los registros de Docker?

Debería encontrar los registros de Docker en /var/lib/docker/containers directorio en el sistema host. Este directorio contiene los archivos de registro relacionados con todos los contenedores en sus directorios individuales. Puede identificar los directorios con el ID del contenedor.

Usé el docker ps para encontrar que 70f19fde9076 es el ID del contenedor del contenedor Nextcloud.

Si miro en el directorio donde se almacenan los registros de la ventana acoplable:

[email protected]:~$ sudo ls -lh /var/lib/docker/containers

total 16K
drwx------ 4 root root 4.0K Jul 27 18:48 0efe12b28562c42619e533ad5f524d56740a7a3739d9e082c758bac95ae2a46f
drwx------ 4 root root 4.0K Jul 27 18:57 12c55f365f93ecb7f91e40bc130ddc2409216a61bbb244cd045a22b4513416d3
drwx------ 4 root root 4.0K Jul 27 18:58 70f19fde907672b9a6e5ff3b7db0c9ecbcb68d419712cb04d03d77694cd2ca4e
drwx------ 4 root root 4.0K Jul 27 18:57 a436399ef16a3efc0a909b9c3f725938e595e0b8fd34644b13f28b2c9bcb4ed7

Actualmente hay cuatro contenedores en ejecución, y puede ver que el tercero coincide con el que debemos buscar (comienza con 70f19fde9076 ).

Si revisa el contenido de este directorio, puede ver que nuestro archivo de registro se encuentra justo allí.

[email protected]:~$ sudo ls -lh /var/lib/docker/containers/70f19fde907672b9a6e5ff3b7db0c9ecbcb68d419712cb04d03d77694cd2ca4e

total 192K
-rw-r----- 1 root root 150K Jul 27 18:58 70f19fde907672b9a6e5ff3b7db0c9ecbcb68d419712cb04d03d77694cd2ca4e-json.log
drwx------ 2 root root 4.0K Jul 19 17:10 checkpoints
-rw------- 1 root root 5.5K Jul 27 18:58 config.v2.json
-rw-r--r-- 1 root root 1.5K Jul 27 18:58 hostconfig.json
-rw-r--r-- 1 root root   13 Jul 27 18:58 hostname
-rw-r--r-- 1 root root  198 Jul 27 18:58 hosts
drwx------ 3 root root 4.0K Jul 19 17:10 mounts
-rw-r--r-- 1 root root   79 Jul 27 18:58 resolv.conf
-rw-r--r-- 1 root root   71 Jul 27 18:58 resolv.conf.hash

Por lo tanto, el archivo de registro correspondiente es 70f19fde907672b9a6e5ff3b7db0c9ecbcb68d419712cb04d03d77694cd2ca4e-json.log que es el mismo archivo que estabas leyendo cuando ejecuté los docker logs mando al principio.

Permítanme verificar rápidamente que:

[email protected]:~$ sudo cat /var/lib/docker/containers/70f19fde907672b9a6e5ff3b7db0c9ecbcb68d419712cb04d03d77694cd2ca4e/70f19fde907672b9a6e5ff3b7db0c9ecbcb68d419712cb04d03d77694cd2ca4e-json.log

{"log":"172.18.0.2 - - [23/Jul/2021:19:36:09 +0000] \"HEAD /.env HTTP/1.1\" 302 1571 \"-\" \"python-requests/2.26.0\"\n","stream":"stdout","time":"2021-07-23T19:36:09.837857567Z"}
{"log":"172.18.0.2 - - [23/Jul/2021:19:49:52 +0000] \"HEAD /c99.php HTTP/1.1\" 302 1565 \"-\" \"python-requests/2.26.0\"\n","stream":"stdout","time":"2021-07-23T19:49:52.996108799Z"}
{"log":"172.18.0.2 - - [24/Jul/2021:16:25:23 +0000] \"HEAD /backup.tar HTTP/1.1\" 302 1571 \"-\" \"python-requests/2.26.0\"\n","stream":"stdout","time":"2021-07-24T16:25:23.445225166Z"}
{"log":"172.18.0.2 - - [24/Jul/2021:16:25:24 +0000] \"HEAD /backup.zip HTTP/1.1\" 302 1569 \"-\" \"python-requests/2.26.0\"\n","stream":"stdout","time":"2021-07-24T16:25:24.772881041Z"}
{"log":"172.18.0.2 - - [25/Jul/2021:20:36:01 +0000] \"GET / HTTP/1.1\" 302 1590 \"-\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko; compatible; BW/1.1; bit.ly/2W6Px8S) Chrome/84.0.4147.105 Safari/537.36\"\n","stream":"stdout","time":"2021-07-25T20:36:03.678967877Z"}
{"log":"172.18.0.2 - - [25/Jul/2021:20:36:07 +0000] \"GET /custom_apps/richdocumentscode/proxy.php?req=/hosting/capabilities HTTP/1.1\" 200 721 \"-\" \"Nextcloud Server Crawler\"\n","stream":"stdout","time":"2021-07-25T20:36:07.404618408Z"}
{"log":"172.18.0.2 - - [25/Jul/2021:20:36:04 +0000] \"GET /login HTTP/1.1\" 200 7501 \"-\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko; compatible; BW/1.1; bit.ly/2W6Px8S) Chrome/84.0.4147.105 Safari/537.36\"\n","stream":"stdout","time":"2021-07-25T20:36:07.619020402Z"}

El contenido del registro es el mismo, pero dado que estoy leyendo el archivo de registro directamente desde el host, tiene mucha jerga en comparación con los docker logs comando usado anteriormente.

Habilitar la rotación de registros para Docker (JSON)

De forma predeterminada, para el registro basado en archivos JSON, la rotación de registros en Docker está deshabilitada.

Esto puede plantear un problema con el espacio en disco si los archivos de registro aumentan de tamaño. Nuestra instancia de Ghost basada en Docker vio que sus archivos de registro alcanzaban un tamaño de 20 GB. Le gustaría evitar tal situación habilitando la rotación de registros.

Para habilitar la rotación de registros para Docker, edite el /etc/docker/daemon.json archivo:

sudo nano /etc/docker/daemon.json

Agregue las siguientes líneas y guarde el archivo:

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

Reinicie el demonio de Docker:

sudo systemctl restart docker

La configuración anterior es, por supuesto, relevante para una instalación genérica de Docker, que tiene el registro JSON configurado como predeterminado. Así que tenga en cuenta que todos los demás mecanismos de registro (enumerados a continuación) tienen su propia forma de implementar la rotación.

Una palabra rápida sobre el registro de controladores

¿Notó "json" en el nombre del archivo de registro anterior? Esto se debe a que JSON File es el controlador de registro predeterminado en Docker.

Además de JSON, también hay muchos otros mecanismos de registro para elegir:

  • Archivo local
  • Logenterías
  • Formato extendido Graylog (GELF)
  • Registro del sistema
  • Registros de Amazon Cloudwatch (AWS)
  • Seguimiento de eventos en Windows (ETW)
  • Fluido
  • Registros de proyectos de Google Cloud (GCP)
  • Diario
  • Splunk
  • Almacenamiento de registros

Para implementaciones a gran escala, GELF , AWS , PCG y Fluido se recomiendan ya que implementan un enfoque centralizado. Pero para pequeña escala, JSON hace el trabajo muy bien, mientras que Local , Registro del sistema y Diario también son bastante adecuados. Registro del sistema y Logstash son especialmente útiles si el análisis de registros complejos se convierte en un requisito. ETW es específico de Windows, mientras que Splunk se centra en el registro remoto.

A partir de Docker Engine 20.10, se introdujo una nueva característica llamada "doble registro" que garantiza la ejecución de los docker logs así como realizar la rotación de registros independientemente del controlador de registro en vigor.

Resumen

En este artículo, comencé con los aspectos básicos de cómo ver los registros de cualquier contenedor Docker, tanto a nivel del contenedor como del sistema host. También le mostré cómo ubicar la ubicación física de los archivos de registro específicos del contenedor que residen en su sistema host. Le mostré brevemente cómo verificar los registros del servicio Docker en el propio host.

Más tarde, analicé el registro de controladores con enfoque en el mecanismo predeterminado y también destaqué la nueva función de registro dual.

Espero que estos consejos le ayuden en sus actividades diarias de seguimiento o aprendizaje. ¡Más pensamientos y sugerencias son más que bienvenidos! Compártalos en la sección de comentarios a continuación.


Docker
  1. Cómo ejecutar Nginx en un contenedor Docker:una guía paso a paso

  2. Una guía para principiantes de Gawk

  3. Configurar MongoDB en Docker

  4. Una guía rápida para usar Docker Compose

  5. Guía completa para Rocket.Chat de alojamiento propio con Docker

Guía completa para eliminar imágenes de Docker

Guía para principiantes sobre la política de reinicio de Docker

Guía para principiantes para analizar registros en Linux con el comando journalctl

Guía completa para principiantes sobre la implementación de clústeres de Kubernetes en CentOS (y otros Linux)

Guía completa de Ghost CMS con alojamiento propio con Docker

Guía para principiantes del mundo Docker