Los 10 principales puntos clave de registro de dockercomo cada usuario de Docker debería saber

Uno de los primeros comandos que aprenden los usuarios de Docker después de «ejecutar docker» es «registros de docker», pero ¿sabía que el comando «registros de docker» no siempre funciona? Eso puede sonar increíble, pero es verdad. Aprenderemos más sobre las razones más adelante.

Docker cambió no solo la forma en que se implementan las aplicaciones, sino también el flujo de trabajo para la administración de registros. En lugar de escribir registros en archivos, los contenedores escriben registros en la consola (stdout/stderr) y los controladores de registro de Docker reenvían los registros a su destino. Una comprobación de los problemas de Github de Docker muestra rápidamente que los usuarios tienen varios problemas al tratar con los registros de Docker.

Descripción general de controladores de registro de Docker

Administrar registros con Docker parece ser complicado y necesita un conocimiento más profundo de las implementaciones y alternativas de Controladores de registro de Docker para superar los problemas que las personas reportan. Entonces, ¿cuáles son los 10 principales puntos clave de registro de Docker que todo usuario de Docker debe conocer?

Comencemos con una descripción general de los controladores de registro de Docker y las opciones para enviar registros a soluciones de administración de registros centralizadas, como Elastic Stack (antigua pila ELK) o Sematext Cloud.

En los primeros días de Docker, los registros de contenedores solo estaban disponibles a través de la API remota de Docker, es decir, a través del comando» registros de docker » y algunos cargadores de registros avanzados. Más tarde, Docker introdujo controladores de registro como complementos, para abrir Docker para integraciones con varias herramientas de administración de registros. Estos controladores de registro se implementan como complementos binarios en el demonio docker. Recientemente, la arquitectura de complementos se amplió para ejecutar complementos de registro como procesos externos, que podrían registrarse como complementos y recuperar registros a través de archivos FIFO de Linux. Actualmente, los controladores de registro enviados con binarios de docker son complementos binarios, pero esto podría cambiar en un futuro cercano.

Los controladores de registro de Docker reciben registros de contenedores y los reenvían a destinos o archivos remotos. El controlador de registro predeterminado es»json-file». Almacena registros de contenedores en formato JSON en el disco local. Docker tiene una arquitectura de complementos para registrar controladores, por lo que hay complementos para herramientas de código abierto y herramientas comerciales disponibles:

  • Journald – almacenamiento de registros de contenedores en el diario del sistema
  • Controlador Syslog – compatible con UDP, TCP, TLS
  • Fluentd – compatible con conexiones de socket TCP o Unix a fluentd
  • Splunk – reenvío HTTP/HTTPS al servidor Splunk
  • Gelf – reenvío de registros UDP a Graylog2

Para una solución de gestión de registros completa, se necesitan herramientas adicionales:

  • Analizador de registros para estructurar registros, normalmente parte de cargadores de registros (fluentd, rsyslog, logstash, logagent, log)
  • Indexación, visualización y alerta de registros:
    • Elasticsearch y Kibana (Pila elástica, también conocida como pila de alces),
    • Splunk,
    • Logentries,
    • Loggly,
    • Sumologic,
    • Graylog OSS / Enterprise
    • Sematext Cloud / Enterprise
    • y muchos más …

Para enviar registros a uno de los motores, es posible que deba seleccionar un controlador de registro o una herramienta de registro que admita la solución de administración de registros que elija. Si su herramienta necesita la entrada Syslog, puede elegir el controlador Syslog.

1.El comando registros acoplables solo funciona con el controlador de registro de archivos json

El controlador de registro predeterminado » archivo json «escribe registros en el disco local, y el controlador de archivos json es el único que funciona en paralelo al comando» registros acoplables». En cuanto se utilizan controladores de registro alternativos, como Syslog, Gelf o Splunk, las llamadas a la API de registros acoplables comienzan a fallar y el comando «registros acoplables» muestra un error que informa de las limitaciones en lugar de mostrar los registros en la consola. El comando docker log no solo falla, sino que muchas otras herramientas que usan la API de Docker para registros, como las interfaces de usuario de Docker como Portainer o los contenedores de recopilación de registros como Logspout, no pueden mostrar los registros de contenedores en esta situación.

Consulte este número.

El controlador Syslog de Docker puede bloquear la implementación de contenedores y perder registros cuando el servidor Syslog no está accesible

El uso del controlador Syslog de Docker con TCP o TLS es una forma confiable de entregar registros. Sin embargo, el controlador de registro de Syslog requiere una conexión TCP establecida con el servidor Syslog cuando se inicia un contenedor. Si esta conexión no se puede establecer a la hora de inicio del contenedor, el inicio del contenedor falla con un mensaje de error como

docker: Respuesta de error del demonio: No se pudo inicializar controlador de registro: marcar tcp

Esto significa que un problema temporal de red o una latencia de red alta podría bloquear la implementación de contenedores. Además, un reinicio del servidor Syslog podría derribar todos los contenedores que registran a través de TCP / TS en un servidor Syslog central, que es definitivamente la situación a evitar.

Consulte este número.

3. El controlador de registro de sistema de Docker pierde registros cuando el destino está caído

Similar al problema anterior, causando una pérdida de registros es la capacidad que falta de los controladores de registro de Docker para almacenar registros en búfer en el disco cuando no se pueden entregar a destinos remotos. Aquí hay un tema interesante para ver.

4. Los controladores de registro de Docker no admiten registros multilínea, como trazas de pila de errores

Cuando hablamos de registros, la mayoría de la gente piensa en registros simples de una sola línea, como los registros de Nginx o Apache. Sin embargo, los registros también pueden abarcar varias líneas. Por ejemplo, los rastros de excepción suelen abarcar varias líneas, por lo que para ayudar a los usuarios de registro, hemos compartido cómo manejar los rastros de pila con registro.

Las cosas no son mejores en el mundo de los contenedores, donde las cosas se complican aún más porque los registros de todas las aplicaciones que se ejecutan en contenedores se emiten a la misma salida estándar de salida. No es de extrañar ver el número 22920 cerrado con «Cerrado». No me importa.»decepcionó a tanta gente. Afortunadamente, hay herramientas como Sematext Docker Agent que pueden analizar registros multilínea fuera de la caja, así como aplicar patrones multilínea personalizados.

El comando Docker service logs se bloquea con un controlador de registro que no es json

Aunque el controlador de archivos json parece sólido, otros controladores de registro, lamentablemente, aún podrían causar problemas con el modo enjambre de Docker. Vea este problema de GitHub.

El demonio acoplable se bloquea si el demonio fluentd se ha ido y el búfer está lleno

Otro escenario en el que un controlador de registro causa problemas cuando el destino remoto no es accesible — en este caso particular, los controladores de registro lanzan excepciones que causan que el demonio acoplable se bloquee.

El contenedor de Docker se atasca en el estado creado en caso de fallo del controlador Splunk

Si el servidor Splunk devuelve un 504 al iniciar el contenedor, el contenedor se inicia realmente, pero docker informa de que el contenedor no se inició. Una vez en este estado, el contenedor ya no aparece en docker ps y el proceso del contenedor no se puede detener con docker kill. La única manera de detener el proceso es matarlo manualmente.

Consulte este número.

Registros de Docker que omiten / faltan registros de aplicaciones (controlador de journald)

Resulta que este problema es causado por los límites de velocidad de journald, que deben aumentarse ya que Docker crea registros para todas las aplicaciones en ejecución y journald puede omitir algunos registros debido a su configuración de limitación de velocidad. Por lo tanto, tenga en cuenta la configuración de journald cuando conecte Docker a ella.

Problemas con el controlador Gelf

Al controlador de registro Gelf le falta una opción TCP o TLS y solo admite UDP, lo que podría ser arriesgado perder mensajes de registro cuando se sueltan paquetes UDP. Algunos problemas informan de un problema de resolución/almacenamiento en caché de DNS con controladores GELF, por lo que los registros se pueden enviar a «Nirvana» cuando cambia la IP de su servidor Graylog, y esto podría suceder rápidamente utilizando implementaciones de contenedores.

Docker no admite varios controladores de registro

Sería bueno tener registros almacenados localmente en el servidor y la posibilidad de enviarlos a servidores remotos. Actualmente, Docker no admite varios controladores de registro, por lo que los usuarios se ven obligados a elegir un solo controlador de registro. No es una decisión fácil conocer varios temas enumerados en este post.

¡Eso es todo! ¡Estas son mis 10 mejores trampas de Registro de Estibadores!

CONSULTE TAMBIÉN: Entrega continua con Jenkins & Seguridad de Docker: Los pros, los contras y una actualización de estado

Alternativas a los Controladores de registro de Docker

Con tantos problemas relacionados con los controladores de registro de Docker, ¿hay alternativas? Resulta que hay-Cargadores de registros basados en API de Docker al rescate!al rescate.

Aquí hay algunas buenas razones para buscar tales alternativas:

  1. El controlador de archivo Json es el predeterminado y confiable, siempre hay disponible una copia local de los registros, y los ‘registros de docker’ Y las llamadas a la API de Docker para los registros simplemente funcionan.
  2. Capacidad para filtrar los registros según varios criterios dinámicos, como el nombre de la imagen o las etiquetas
  3. Mejores metadatos, tener acceso completo a la API de Docker
  4. Sin riesgo de que se bloquee el demonio Docker, ya que dichos cargadores de registros podrían ejecutarse en un contenedor con un uso limitado de recursos y un consumo de espacio en disco (p. ej. coloque el directorio de búfer en un volumen y establezca límites útiles)

Veamos dos herramientas recomendadas de recopilación de registros basadas en API de Docker: Logspout y Sematext Docker Agent. Ambos son de código abierto.

Tenga en cuenta que una tercera herramienta, que se ajusta más o menos a esta categoría, es Elastic Filebeat. Filebeat recopila archivos de registro de, generados por el controlador de registro de archivos json, solo el enriquecimiento de los metadatos del contenedor se realiza a través de llamadas a la API de Docker.

Logspout proporciona múltiples salidas y puede enrutar registros de diferentes contenedores a diferentes destinos sin cambiar la configuración de registro de contenedores de aplicaciones. Maneja secuencias de escape ANSI (como códigos de color en los registros), lo que podría ser problemático para la búsqueda de texto completo en Elasticsearch.

Al igual que Logspout, Sematext Docker Agent (SDA) está basado en API, admite el enrutamiento de registros y maneja las secuencias de escape ANSI para la búsqueda de texto completo. Sin embargo, Sematext Docker Agent es en realidad más que un simple cargador de registros.

SDA se ocupa de muchos problemas planteados por los usuarios de Docker, como registros multilínea, detección de formato de registro y análisis de registros, contenedores completos de enriquecimiento de metadatos (etiquetas, metadatos específicos de geoip, Swarm y Kubernetes), almacenamiento en búfer de disco y envío confiable a través de TLS. Es de código abierto en Github, se puede usar con Elastic Stack o Sematext Cloud y puede recopilar no solo registros de contenedores, sino también eventos de contenedores, además de métricas de host y contenedor de Docker.

Diferencias entre tres soluciones de registro que funcionan bien con el controlador de archivos json y la API remota de Docker

Recomendación

La recomendación clara para los registradores basados en API podría cambiar en el futuro a medida que los controladores de registro de Docker mejoren con el tiempo y el nuevo mecanismo de complementos a través del socket Unix permite que las nuevas implementaciones de controladores de registro se ejecuten como procesos separados. Esta característica realmente mejora la arquitectura de complementos de registro de Dockers y es una buena señal de que Docker se toma en serio los problemas de registro.

Mientras tanto, considere los recopiladores de registros basados en API de Docker, como Sematext Docker Agent y Logspout, para evitar problemas con los registros de Docker, como las 10 claves descritas aquí.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.