Enviando nuestros logs a Kibana rápido y simple



Mediante Kibana y Elastic Stack comenzarás a monitorear y gestionar tus logs como nunca antes. Todo centralizado, o sea, sin tener que ir a cada servidor a revisar los archivos de logs o a la base de datos. Sumado a esto tendrás el poder de uno de los mejores motores de búsqueda actuales, cómo es Elasticsearch.

Elasticsearch ( parte de Elastic Stack) nos brinda la capacidad de realizar búsquedas en tiempo record sobre millones de registros. Esto sumado a la visualización de última generación con Kibana, nos brinda herramientas de vanguardia para la gestión de logs.

En otras oportunidades he conversado sobre la gestión moderna de logs, aquí dejo un vínculo para el que guste interiorizarse en el tema, ya que verán las ventajas y como se utilizan este tipo de tecnologías:

¡Ahora, manos a la obra!

Para que todo lo anterior funcione, debes instalar y configurar tres tecnologías de Elastic Stack: Kibana, Elasticsearch, Logstash.

Por suerte, esta tarea se hará muy sencilla ya que he armado todo para descargar y ejecutar con docker. De este modo no es necesario conocer la configuración subyacente de estas tecnologías.

Primero - Instalar docker desktop 

Lo primero que necesitas es instalar docker desktop. Esto lo puedes hacer desde el siguiente vínculo: Docker Desktop for Mac and Windows | Docker

Segundo - Descargar y ejecutar Elastic Stack

Aquí es donde comenté que ya está todo resuelto en un solo lugar. Para ello, deberás descargar el contenido del repositorio: https://github.com/dmonza/log4kibana.

Puedes hacerlo mediante git (git clone), para mantenerlo actualizado, o descargarlo como un archivo zip y descomprimirlo en una carpeta.

A continuación, es hora de poner a funcionar nuestro Elastic-Stack. Para ello, en la carpeta donde quedo descargado lo anterior, deberás ejecutar los siguientes comandos:

1. Construir las imágenes a utilizar:
 > docker-compose build 

2. Poner a funciona elastic stack:
 > docker-compose up 

Lo anterior puede demorar unos minutos en que quede funcionando. Cuando esté todo levantado, podrás chequear, mediante el browser, la url http://localhost:5601

Deberás ver la siguiente pantalla:


Tercero - Configurar nuestras aplicaciones para enviar logs a Kibana

Aquí básicamente hay que ajustar la configuración de log4j o log4net para que envíe logs a Kibana. 

Nota: Aquí los que utilizan GeneXus pueden encontrar la configuración al final del artículo.

Para esto, primero hay que crear el appender UDP para enviar logs mediante este protocolo

log4j
<Socket name="UdpAppender" host="localhost" port="5960" protocol="UDP">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss,SSSZZ} [%t] %-5p - ${hostName} - ENVIRONMENT - %m%n"/> <encoding value="utf-8" /> </Socket>

log4net
<appender name="UdpAppender" type="log4net.Appender.UdpAppender">
    <RemoteAddress value="localhost" />
    <RemotePort value="5960" />
    <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%d{ISO8601}%d{zzz} [%t] %-5p - %P{log4net:HostName} - ENVIRONMENT - %m%n" />
    </layout>
    <encoding value="utf-8" />
</appender>
Posteriormente habrá que ajustas log Loggers que queremos que se envíen a Kibana, ej.:
<logger name="MyLogger" additivity="false">
    <level value="INFO" />
    <appender-ref  ref="UdpAppender"/>
</logger>
Con esto, la aplicación ya estará configurada para enviar logs a Kibana.

Cuando se generen logs a traves de log4net/log4j, estos deberan ser enviados de la siguiente forma:

[nombre de programa] - [texto-etiqueta] - [Mensaje de Log]

Cuarto - Comenzar a utilizar Kibana

Luego de enviar algunos logs utilizando la configuración anterior, es hora de continuar con la configuración y visualización en Kibana.

Para ello, si estás en la pantalla "Welcome to Elastic", deben hacer click en "Explore by my own".

Luego, lo más sencillo será proceder con la configuración, en un minuto, mediante el siguiente video:



¡Con esto ya podrás gestionar logs con Kibana y Elasticsearch!

Enviando logs a Kibana desde GeneXus

Si estas trabajando con GeneXus, he generado un par de procedimientos que simplifican el envío de logs.

Para ello, dentro del repositorio de github mencionado anteriormente, encontrarás una carpeta llamada "genexus" conteniendo:
  • Un XPZ con los procedimientos para generar logs.
  • Ejemplos de los archivos log4net (log.config y log.console.config) para copiar a la carpeta del modelo .Net.
Luego de importar el archivo sincrumlogs.xpz, podrán generar logs de la siguiente forma:

LogAdd( LogLevel.INFO, &Pgmname, "¡Hola mundo!")

También esta la opción de generar logs asignandole una etiquta, la cual podría ser un módulo o marca que lo quicieramos agregar al log, ej.:

LogAddTag( LogLevel.INFO, &Pgmname, !"CuentasCorrientes", "Nuevo débito XXX")

Conclusión

Con la complejidad actual de las aplicaciones, cada vez se hace más necesario gestionar logs de forma centralizada. Con Kibana y Elasticsearch disponemos de una de las mejores herramientas para ello, lo que nos ahorrará horas de trabajo si lo comparamos con métodos tradicionales.

Agradezco sus opiniones y estaré ajustando el presente artículo con las mismas.

Actualizaciones

24/06/2022 - Se ajustó pattern layout en java y logstash
19/07/2022 - Se cambió Elastic Stack por OpenSearch OpenSearch

Comentarios

Publicar un comentario

Entradas más populares de este blog

Buenas prácticas al registrar logs en desarrollo de software

Resumen de lo que nos trae el upgrade 9 de GeneXus 17