Consejos y recomendaciones para convertir datos no estructurados de registros en ELK Stack utilizando GROK en LogStash

Estructuración de datos no estructurados con GROK

Si utilizas El Stack de Elastic (ELK) y estás interesado en mapear registros de usuario de Logstash con Elasticsearch, entonces esta publicación es para ti.

Consejos y recomendaciones para convertir datos no estructurados de registros en ELK Stack utilizando GROK en LogStash

El stack ELK es un acrónimo para tres proyectos de código abierto: Elasticsearch, Logstash y Kibana. Juntos forman una plataforma de gestión de registros.

  • Elasticsearch – es un sistema de búsqueda y análisis.
  • Logstash – es un canal de procesamiento de datos del lado del servidor que recibe datos de múltiples fuentes simultáneamente, los transforma y luego los envía a un 'depósito', como Elasticsearch.
  • Kibana permite a los usuarios visualizar datos mediante gráficos y tablas en Elasticsearch.

Beats apareció más tarde y es un ligero transportador de datos. La introducción de Beats transformó el Elk Stack en Elastic Stack, pero eso no es lo principal.

Este artículo se centra en Grok, que es una función en Logstash que puede convertir tus registros antes de que sean enviados al depósito. Para nuestros propósitos, solo hablaré sobre el procesamiento de datos de Logstash a Elasticsearch.

Consejos y recomendaciones para convertir datos no estructurados de registros en ELK Stack utilizando GROK en LogStash

Grok es un filtro dentro de Logstash que se utiliza para analizar datos no estructurados en algo estructurado y que puede ser consultado. Se encuentra por encima de las expresiones regulares (regex) y utiliza patrones de texto para hacer coincidir líneas en archivos de registro.

Como veremos en las siguientes secciones, el uso de Grok es muy importante cuando se trata de gestionar registros de manera efectiva.

Sin Grok, tus datos de registro están no estructurados.

Consejos y recomendaciones para convertir datos no estructurados de registros en ELK Stack utilizando GROK en LogStash

Sin Grok, cuando los registros se envían desde Logstash a Elasticsearch y se visualizan en Kibana, solo aparecen en el valor del mensaje.

Solicitar información significativa en esta situación es complicado, ya que todos los datos de los registros se almacenan en una sola clave. Sería mejor si los mensajes de los registros estuvieran organizados de manera más eficaz.

Datos no estructurados de registros

localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0

Si miras detenidamente los datos sin procesar, verás que en realidad están compuestos de diferentes partes, cada una de las cuales está separada por un espacio.

Para los desarrolladores más experimentados, probablemente puedan adivinar lo que significa cada una de las partes y que este es un mensaje de registro de una llamada a la API. La representación de cada elemento se detalla a continuación.

Vista estructurada de nuestros datos

  • ​ localhost == entorno
  • ​ GET == método
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • ​ 400 == estado_respuesta
  • ​ 46ms == tiempo_respuesta
  • ​ 5bc6e716b5d6cb35fc9687c0 == id_usuario

Como podemos ver en los datos estructurados, existe un orden para los registros no estructurados. El siguiente paso es el procesamiento programático de los datos en bruto. Aquí es donde Grok brilla.

Plantillas Grok

Plantillas Grok integradas

Logstash viene con más de 100 plantillas integradas para estructurar datos no estructurados. Definitivamente debes aprovechar esta ventaja cuando sea posible para registros del sistema común, como apache, linux, haproxy, aws, y así sucesivamente.

Sin embargo, ¿qué sucede cuando tienes registros personalizados, como en el ejemplo anterior? Debes construir tu propia plantilla Grok.

Plantillas Grok personalizadas

Necesitas experimentar para construir tu propia plantilla Grok. Utilicé Grok Debugger y Patrones Grok.

Ten en cuenta que la sintaxis de las plantillas Grok es la siguiente: %{SYNTAX:SEMANTIC}

Lo primero que intenté hacer fue ir a la pestaña Descubrir en el depurador de Grok. Pensé que sería genial si esta herramienta pudiera generar automáticamente una plantilla Grok, pero no fue muy útil, ya que solo encontró dos coincidencias.

Consejos y recomendaciones para convertir datos no estructurados de registros en ELK Stack utilizando GROK en LogStash

Usando este descubrimiento, comencé a crear mi propia plantilla en el depurador de Grok, utilizando la sintaxis encontrada en la página de Github de Elastic.

Consejos y recomendaciones para convertir datos no estructurados de registros en ELK Stack utilizando GROK en LogStash

Jugando con diferentes sintaxis, finalmente pude estructurar los datos del registro como quería.

Consejos y recomendaciones para convertir datos no estructurados de registros en ELK Stack utilizando GROK en LogStash

Enlace al depurador de Grok https://grokdebug.herokuapp.com/

Texto original:

localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0

Patrón:

%{WORD:entorno} %{WORD:método} %{URIPATH:url} %{NUMBER:estado_respuesta} %{WORD:tiempo_respuesta} %{USERNAME:id_usuario}

Esto es lo que resultó al final

{
  "entorno": [
    [
      "localhost"
    ]
  ],
  "método": [
    [
      "GET"
    ]
  ],
  "url": [
    [
      "/v2/applink/5c2f4bb3e9fda1234edc64d"
    ]
  ],
  "estado_respuesta": [
    [
      "400"
    ]
  ],
  "BASE10NUM": [
    [
      "400"
    ]
  ],
  "tiempo_respuesta": [
    [
      "46ms"
    ]
  ],
  "id_usuario": [
    [
      "5bc6e716b5d6cb35fc9687c0"
    ]
  ]
}

Teniendo en mano la plantilla Grok y los datos mapeados, el último paso es agregarlo a Logstash.

Actualizar el archivo de configuración Logstash.conf

En el servidor donde has instalado el stack ELK, dirígete a la configuración de Logstash:

sudo vi /etc/logstash/conf.d/logstash.conf

Inserte los cambios.

input { 
  file {
    path => "/your_logs/*.log"
  }
}
filter{
  grok {
    match => { "message" => "%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}"}
  }
}
output {
  elasticsearch {
    hosts => [ "localhost:9200" ]
  }
}

Después de guardar los cambios, reinicie Logstash y verifique su estado para asegurarse de que siga funcionando.

sudo service logstash restart
sudo service logstash status

Finalmente, para asegurarse de que los cambios surtan efecto, asegúrese de actualizar el índice de Elasticsearch para Logstash en Kibana.

Consejos y recomendaciones para convertir datos no estructurados de registros en ELK Stack utilizando GROK en LogStash

¡Con Grok, sus datos de registros están estructurados!

Consejos y recomendaciones para convertir datos no estructurados de registros en ELK Stack utilizando GROK en LogStash

Como podemos ver en la imagen anterior, Grok puede asignar automáticamente los datos de registro a Elasticsearch. Esto facilita la gestión de registros y la rápida consulta de información. En lugar de buscar en los archivos de registro para depurar, puede simplemente filtrar lo que está buscando, como el entorno o la URL.

¡Intente darle una oportunidad a las expresiones de Grok! Si tiene otra forma de hacerlo o si tiene problemas con los ejemplos anteriores, simplemente deje un comentario abajo para hacérmelo saber.

Gracias por leer — y, por favor, sígame aquí en Medium para más artículos interesantes sobre ingeniería de software.

Recursos

https://www.elastic.co/blog/do-you-grok-grok
https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
https://grokdebug.herokuapp.com/

P.D Enlace a la fuente

Canal de Telegram sobre Elasticsearch

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster