domingo, 22 de marzo de 2020

¿Como optimizar el consumo de licenciamiento de Splunk con NiFi?

Una de los mejores casos de uso con NiFi es ahorrar dinero en licenciamiento con Splunk. Splunk es una plataforma de inteligencia operacional para datos de máquina, en criollo, nos permite visualizar que pasa con datos de eventos y logs de maquinas y sistemas. Pero su licenciamiento es basado en Gb/día, lo cual, es fácilmente superable con los crecimientos normales dentro de una organización que continuamente agrega equipos y software. ¿Pero como ayuda NiFi en este caso? La idea es simple, es dejar que NiFi colecte los datos de los sistemas, los filtre y envie realmente lo necesario a Splunk. Ahorrando cientos de bytes por envio de información que no es de valor. Es decir, si analizamos un Log normal de un servidor Apache, por ejemplo, posiblemente nos interese de cientos de lineas por segundo, apenas unas pocas. En el ejemplo de este artículo, lo hacemos con aquellas lineas que invocan al carrito de compras del sitio.

Arquitectura Conceptual

También está la opción de tomar el crudo de los archivos y hacer Archiving en otro sistema, como el lago de datos de Cloudera u otro en Nube.
Para instalar Splunk en un nodo de ejemplo podemos ejecutar los siguientes comandos: 

En los nodos de NiFi debemos instalar un simulador en Python que nos generan las líneas de ejemplo de Apache:

En NiFi vamos a llamar a este script de Python por medio de un ExecuteProcess. La salida de este nos dejará muchos flowfiles con muchas lineas de logs en su contenido. Por lo que posterior vamos a utilizar un SplitText para tener una linea de log de Apache por flowfile.


Esta es la configuración del ExecuteProcess que llama al código Python:


La salida del script nos devuelve 100 lineas de log.


Y utilizamos un SplitText con un Count = 1 para separarlo línea a línea.


Dentro del procesamiento, RouteOnContent nos permite hacer el filtrado, es decir, vamos a tomar solo las líneas que contienen una llamada al carrito, es decir, que contengan /apps/cart.
El flujo del ProcessGroup quedaría como muestra la siguiente imagen:


RouteContent vamos a configurar una salida llamada Cart que solo tome aquellas líneas que contengan la ruta del carrito de compras:

Y por último, vamos a enviar la información a Splunk. En este caso, en Splunk configuramos el puerto 8080 como un puerto de entrada de datos.


Para más información: https://docs.splunk.com/Documentation/Splunk/latest/Data/Monitornetworkports
El máximo de bytes de salida por el Socket, debemos configurarlo como el estándart para un Linux de 64 bits, en este caso, 212992 bytes.

 Finalmente, el flujo final en NiFi nos va a quedar así:


 Y el resultado que vamos a visualizar en Splunk, será este:


No hay comentarios.:

Publicar un comentario