log-centralization-management-with-fluent-bit-for-kurbernetes-and-microservicesLos sistemas actuales se componen comúnmente de un gran número de subsistemas. Desde pequeños programas que trabajan de forma conjunta, hasta los sistemas operativos y las aplicaciones propietarias, cada vez hay más subsistemas  que necesitan mantenimiento, ya sea para analizar su rendimiento, detectar posibles vulnerabilidades, o corregir errores.

Una de las mejores herramientas que los profesionales de IT tenemos  para poder mantener operativos cada vez más subsistemas son los logs, grandes cantidades de datos generados en pequeñas trazas de texto que nos informan de todo aquello que pueda funcionar de forma incorrecta.

Sin embargo, el aumento del número de subsistemas, y la incorporación de la arquitectura de microservicios en los desarrollos, hacen cada vez más complejo trabajar con los logs. Debido a que están conectados unos subsistemas con otros, a menudo es necesario cruzar trazas de logs entre dos o más subsistemas para analizar o detectar los problemas. En caso de incidencia, es inevitable entrar manualmente a los ficheros de logs de cada uno de los subsistemas hasta detectar los fallos.

En los últimos años cada vez está cobrando más importancia la llamada centralización de logs, que consiste en recoger los logs de todos los subsistemas y enviarlos a un servidor que ejecuta un programa donde podemos hacer análisis de los logs de todos los subsistemas desde un único punto y de forma mucho más sencilla y óptima; esto último es lo que se conoce como gestión centralizada de logs.

Gestión centralizada de logs

Existen muchas alternativas para la gestión centralizada de logs como Datadog, Splunk Enterprise, Dynatrace, Graylog, etc. Sin embargo, todas necesitan que se centralicen estos logs llevándolos desde cada subsistema hasta el servidor de gestión centralizada. Una de las mejores alternativas para realizar esta tarea es la herramienta Fluentd, un colector de logs open-source desarrollado por Treasure Data para la recolección de logs de diversas fuentes. No obstante, en este blog post no vamos a hablar sobre Fluentd, sino de su versión específica para arquitectura de microservicios, Fluent Bit  cuya documentación podemos encontrar aquí. .

Fluent Bit para arquitectura de microservicios

Fluent Bit nos permite recolectar los logs de todos los componentes que se ejecutan en nuestra infraestructura de microservicios, es decir, en cualquier orquestador de contenedores (Docker Swarm, Kubernetes, etc.). Y no solo hace posible recolectar los logs de cada uno de los microservicios que estamos ejecutando, sino que también nos permite recolectar los logs de los nodos host, tanto del sistema operativo como de cualquier programa que esté ejecutando.

Fluent Bit en Kubernetes

A continuación, veremos cómo centralizar logs en una infraestructura de Kubernetes utilizando Fluent Bit. Este proceso es bastante sencillo, ya que podemos instalar Fluent Bit en nuestro clúster de Kubernetes como un contenedor más, descargando la imagen desde su repositorio en Docker Hub .

Podemos configurar qué logs queremos que nos recolecte a través de un fichero de configuración o mediante un ConfigMap de la propia aplicación de Fluent Bit dentro de Kubernetes. En este fichero podemos configurar todas las fases en las que se divide el flujo de procesamiento de la recolección de logs.

Podemos encontrar más información sobre estas fases en la documentación oficial en el siguiente enlace.

Dos formas de recolectar logs con Fluent Bit en Kubernetes

  • La primera forma es instalar Fluent Bit como DaemonSet, es decir, desplegar una réplica del mismo en cada nodo host del clúster y montar un volumentde tipo “hostpath” para vincular el contenedor de Fluent Bit al sistema de ficheros donde se generan los logs dentro del nodo host. De esta forma, en la configuración podemos especificar las rutas de los ficheros de logs dejados en cada nodo, incluyendo todos los logs generados por los contenedores, y Fluent Bit los recolectará, y los enviará al servidor de gestión de logs.
  • La segunda forma es desplegar Fluent Bit como sidecar dentro de un pod, y montar un volumen compartido entre el contenedor existente y el contenedor de Fluent Bit. Si configuramos el contenedor para que genere logs en la ruta donde se monta este volumen, podremos recolectar esos logs con Fluent Bit, y enviarlos al servidor de gestión centralizada de logs. De esta forma, aunque debemos configurar los distintos sidecars de Fluent Bit de forma individual y solo nos sirve para recolectar los logs de ese contenedor, nos permite acceder a los logs en formato de texto plano, y eso puede ser muy útil en ciertos casos, como por ejemplo cuando tenemos logs multilínea y necesitamos pasearlos de forma personalizada.

Podemos utilizar ambas formas de recolectar logs en Kubernetes con Fluent Bit, ya que son complementarias.

En Teldat utilizamos la tecnología Fluent Bit para nuestros productos SDN / WAN. El uso de la tecnología Fluent Bit es uno de los muchos puntos que ha permitido a Teldat desarrollar una solución SDN / SD-WAN única para nuestros clientes.

 


Sobre el autor

Jorge Montero
Jorge Montero
es Ingeniero Informático. Trabaja dentro del departamento de I+D de Teldat como Administrador de Sistemas, Cloud & DevOps

Comparte este post