Cómo usar Elasticsearch, Logstash y Kibana para visualizar registros en Python en tiempo real

¿Qué es la tala?

Digamos que está desarrollando un producto de software. Funciona de forma remota, interactúa con diferentes dispositivos, recopila datos de sensores y brinda un servicio al usuario. Un día, algo sale mal y el sistema no funciona como se esperaba. Es posible que no esté identificando los dispositivos o no esté recibiendo ningún dato de los sensores, o puede que haya recibido un error de tiempo de ejecución debido a un error en el código. ¿Cómo puedes estar seguro?

Ahora, imagine si hay puntos de control en el código del sistema donde, si el sistema devuelve un resultado inesperado, simplemente lo marca y notifica al desarrollador. Este es el concepto de tala.

El registro permite a los desarrolladores comprender qué está haciendo realmente el código y cómo es el flujo de trabajo. Una gran parte de la vida de los desarrolladores de software es monitorear, solucionar problemas y depurar. El registro hace que este sea un proceso mucho más sencillo y fluido.

Visualización de registros

Ahora, si usted es un desarrollador experto que ha estado desarrollando y creando software durante bastante tiempo, entonces pensaría que el registro no es un gran problema y la mayor parte de nuestro código está incluido con una Debug.Log('____')declaración. Bueno, eso es genial, pero hay algunos otros aspectos del registro que podemos utilizar.

La visualización de datos registrados específicos tiene los siguientes beneficios:

  • Supervise las operaciones del sistema de forma remota.
  • Comunique información de manera clara y eficiente a través de gráficos estadísticos, diagramas y gráficos de información.
  • Extraer conocimiento de los datos visualizados en forma de diferentes gráficos.
  • Tome las acciones necesarias para mejorar el sistema.

Hay varias formas de visualizar datos sin procesar. Hay una serie de bibliotecas en los lenguajes de programación Python y R que pueden ayudar a trazar gráficos. Puedes obtener más información al respecto aquí . Pero en esta publicación, no voy a discutir sobre los métodos mencionados anteriormente. ¿Alguna vez has oído hablar del ELK stack ?

Pila ELK

E - Elasticsearch , L - Logstash , K - Kibana

Permítanme darles una breve introducción. La pila ELK es una colección de tres softwares de código abierto que ayuda a proporcionar información en tiempo real sobre los datos que pueden estar estructurados o no estructurados. Uno puede buscar y analizar datos usando sus herramientas con extrema facilidad y eficiencia.

Elasticsearch es un motor de análisis y búsqueda RESTful distribuido capaz de resolver un número creciente de casos de uso. Como corazón del Elastic Stack, almacena de forma centralizada sus datos para que pueda descubrir lo esperado y descubrir lo inesperado. Elasticsearch le permite realizar y combinar muchos tipos de búsquedas: estructuradas, no estructuradas, geográficas, métricas, etc. Está construido en lenguaje de programación Java, lo que permite que Elasticsearch se ejecute en diferentes plataformas. Permite a los usuarios explorar una gran cantidad de datos a muy alta velocidad.

Logstash es una canalización de procesamiento de datos del lado del servidor de código abierto que ingiere datos de una multitud de fuentes simultáneamente, los transforma y luego los envía a su "escondite" favorito (como Elasticsearch). Los datos a menudo se encuentran dispersos o aislados en muchos sistemas en muchos formatos. Logstash admite una variedad de entradas que extraen eventos de una multitud de fuentes comunes, todo al mismo tiempo. Ingiera fácilmente desde sus registros, métricas, aplicaciones web, almacenes de datos y varios servicios de AWS, todo en forma de transmisión continua. Logstash tiene un marco conectable con más de 200 complementos. Mezcle, combine y organice diferentes entradas, filtros y salidas para que funcionen en armonía.

Kibana es una plataforma de análisis y visualización de código abierto diseñada para trabajar con Elasticsearch. Utiliza Kibana para buscar, ver e interactuar con los datos almacenados en los índices de Elasticsearch. Puede realizar fácilmente análisis de datos avanzados y visualizar sus datos en una variedad de gráficos, tablas y mapas. Kibana facilita la comprensión de grandes volúmenes de datos. Su sencilla interfaz basada en navegador le permite crear y compartir rápidamente cuadros de mando dinámicos que muestran los cambios en las consultas de Elasticsearch en tiempo real.

Para tener una mejor idea del flujo de trabajo de cómo los tres softwares interactúan entre sí, consulte el siguiente diagrama:

Implementación

Iniciar sesión en Python

Aquí, elegí explicar la implementación del registro en Python porque es el lenguaje más utilizado para proyectos que involucran la comunicación entre múltiples máquinas e Internet de las cosas. Le ayudará a tener una idea general de cómo funciona.

Python proporciona un sistema de registro como parte de su biblioteca estándar, por lo que puede agregar registros rápidamente a su aplicación.

import logging

En Python, el registro se puede realizar en 5 niveles diferentes que indican respectivamente el tipo de evento. Son los siguientes:

  • Información : designa mensajes informativos que destacan el progreso de la aplicación a un nivel más detallado.
  • Depurar : designa eventos informativos detallados que son más útiles para depurar una aplicación.
  • Advertencia : designa situaciones potencialmente peligrosas.
  • Error : designa eventos de error que aún pueden permitir que la aplicación continúe ejecutándose.
  • Crítico : designa eventos de error muy graves que presumiblemente harán que la aplicación se anule.

Por lo tanto, dependiendo del problema que deba registrarse, usamos el nivel definido en consecuencia.

Nota : La información y la depuración no se registran de forma predeterminada, ya que solo se registran los registros de nivel Advertencia y superior.

Ahora, para dar un ejemplo y crear un conjunto de declaraciones de registro para visualizar, he creado un script de Python que registra declaraciones de formato específico y un mensaje.

import logging import random logging.basicConfig(filename="logFile.txt", filemode="a", format="%(asctime)s %(levelname)s-%(message)s", datefmt="%Y-%m-%d %H:%M:%S") for i in xrange(0,15): x=random.randint(0,2) if(x==0): logging.warning('Log Message') elif(x==1): logging.critical('Log Message') else: logging.error('Log Message')

Aquí, las declaraciones de registro se adjuntarán a un archivo llamado logFile.txt en el formato especificado. Ejecuté el script durante tres días en diferentes intervalos de tiempo creando un archivo que contiene registros al azar como a continuación:

2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 WARNING-Log Message 2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 CRITICAL-Log Message 2019-01-09 09:01:05,333 WARNING-Log Message 2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 WARNING-Log Message 2019-01-09 09:01:05,333 WARNING-Log Message 2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 CRITICAL-Log Message 2019-01-09 09:01:05,333 CRITICAL-Log Message 2019-01-09 09:01:05,333 CRITICAL-Log Message 2019-01-09 11:07:05,333 ERROR-Log Message 2019-01-09 11:07:05,333 WARNING-Log Message 2019-01-09 11:07:05,333 ERROR-Log Message 2019-01-09 11:07:05,333 ERROR-Log Message 2019-01-09 11:07:05,333 WARNING-Log Message 2019-01-09 11:07:05,333 CRITICAL-Log Message 2019-01-09 11:07:05,333 WARNING-Log Message 2019-01-09 11:07:05,333 ERROR-Log Message

Configuración de Elasticsearch, Logstash y Kibana

Primero descarguemos los tres softwares de código abierto desde sus respectivos enlaces [elasticsearch], [logstash] y [kibana]. Descomprima los archivos y coloque los tres en la carpeta del proyecto.

Empecemos.

Paso 1 : configure Kibana y Elasticsearch en el sistema local. Ejecutamos Kibana con el siguiente comando en la carpeta bin de Kibana.

bin\kibana

Del mismo modo, Elasticsearch se configura así:

bin\elasticsearch

Ahora, en los dos terminales separados podemos ver ambos módulos en ejecución. Para verificar que los servicios se estén ejecutando, abra localhost: 5621 y localhost: 9600 .

Una vez que ambos servicios se ejecutan correctamente, utilizamos los programas Logstash y Python para analizar los datos de registro sin procesar y canalizarlos a Elasticsearch desde donde Kibana consulta los datos.

Step 2— Now let’s get on with Logstash. Before starting Logstash, a Logstash configuration file is created in which the details of input file, output location, and filter methods are specified.

input{ file{ path => "full/path/to/log_file/location/logFile.txt" start_position => "beginning" } } filter { grok{ match => {"message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:log-level}-%{GREEDYDATA:message}"} } date { match => ["timestamp", "ISO8601"] } } output{ elasticsearch{ hosts => ["localhost:9200"] index => "index_name"} stdout{codec => rubydebug} }

This configuration file plays a major role in the ELK stack. Take a look at filter{grok{…}} line. This is a Grok filter plugin. Grok is a great way to parse unstructured log data into something structured and queryable. This tool is perfect for syslog logs, apache and other webserver logs, mysql logs, and in general, any log format that is generally written for humans and not computer consumption. This grok pattern mentioned in the code tells Logstash how to parse each line entry in our log file.

Now save the file in Logstash folder and start the Logstash service.

bin\logstash –f logstash-simple.conf
Para aprender más sobre la configuración de logstash, haga clic [ aquí ].

Paso 3 : después de esto, los datos analizados de los archivos de registro estarán disponibles en la administración de Kibana en localhost: 5621 para crear diferentes elementos visuales y paneles. Para verificar si Kibana está recibiendo algún dato, en la pestaña de administración de Kibana ejecute el siguiente comando:

localhost:9200/_cat/indices?v

Esto mostrará todos los índices. Para cada visualización, se debe seleccionar un nuevo patrón de índice de las herramientas de desarrollo, después de lo cual se utilizan varias técnicas de visualización para crear un tablero.

Panel de control con Kibana

Después de configurar todo, ahora es el momento de crear gráficos para visualizar los datos del registro.

After opening the Kibana management homepage, we will be asked to create a new index pattern. Enter index_name* in the Index pattern field and select @timestamp in the Time Filter field name dropdown menu.

Now to create graphs, we go to the Visualize tab.

Select a new visualisation, choose a type of graph and index name, and depending on your axis requirements, create a graph. We can create a histogram with y-axis as the count and x-axis with the log-level keyword or the timestamp.

After creating a few graphs, we can add all the required visualisations and create a Dashboard, like below:

Nota: Siempre que los registros del archivo de registro se actualicen o se agreguen a los registros anteriores, siempre que los tres servicios estén ejecutando los datos en elasticsearch y los gráficos en kibana se actualizarán automáticamente de acuerdo con los nuevos datos.

Terminando

El registro puede ser una ayuda para combatir errores y depurar programas en lugar de utilizar una declaración impresa. El módulo de registro divide los mensajes en diferentes niveles. Esto da como resultado una mejor comprensión del código y cómo se desarrolla el flujo de llamadas sin interrumpir el programa.

La visualización de datos es un paso necesario en situaciones en las que se genera una gran cantidad de datos en cada momento. Las herramientas y técnicas de visualización de datos ofrecen a los ejecutivos y otros trabajadores del conocimiento nuevos enfoques para mejorar drásticamente su capacidad para captar la información que se esconde en sus datos. La identificación rápida de los registros de errores, la fácil comprensión de los datos y las visualizaciones de datos altamente personalizables son algunas de las ventajas. Es una de las formas más constructivas de organizar datos sin procesar.

Para obtener más información, puede consultar la documentación oficial de ELK desde aquí - //www.elastic.co/learn y al iniciar sesión en python - //docs.python.org/2/library/logging.html