Consejos y trucos para convertir datos no estructurados de registros a ELK Stack usando GROK en LogStash

Estructurar datos no estructurados con GROK

Si está utilizando la pila Elastic (ELK) y está interesado en asignar registros de Logstash personalizados a Elasticsearch, esta publicación es para usted.

Consejos y trucos para convertir datos no estructurados de registros a ELK Stack usando GROK en LogStash

La pila ELK es un acrónimo de 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 una canalización de procesamiento de datos del lado del servidor que ingiere datos de múltiples fuentes simultáneamente, los transforma y luego los envía a un "alijo" como Elasticsearch.
  • Kibana permite a los usuarios visualizar datos utilizando cuadros y gráficos en Elasticsearch.

Beats llegó más tarde y es un transportador de datos liviano. La introducción de Beats transformó Elk Stack en Elastic Stack, pero ese no es el punto.

Este artículo trata sobre Grok, que es una función de Logstash que puede transformar sus registros antes de enviarlos al alijo. Para nuestros propósitos, solo hablaré sobre el procesamiento de datos de Logstash en Elasticsearch.

Consejos y trucos para convertir datos no estructurados de registros a ELK Stack usando GROK en LogStash

Grok es un filtro dentro de Logstash que se utiliza para analizar datos no estructurados en algo estructurado y consultable. Se encuentra encima de una expresión regular (regex) y utiliza patrones de texto para hacer coincidir cadenas en archivos de registro.

Como veremos en las siguientes secciones, usar Grok marca una gran diferencia cuando se trata de una gestión eficiente de registros.

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

Consejos y trucos para convertir datos no estructurados de registros a ELK Stack usando GROK en LogStash

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

Consultar información significativa en esta situación es difícil porque todos los datos de registro se almacenan en una única clave. Sería mejor si los mensajes de registro estuvieran mejor organizados.

Datos no estructurados de registros

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

Si observa detenidamente los datos sin procesar, verá que en realidad constan de diferentes partes, cada una separada por un espacio.

Los desarrolladores más experimentados probablemente puedan adivinar qué significa cada una de las partes y cuál es el mensaje de registro de la llamada API. La presentación de cada elemento se detalla a continuación.

Vista estructurada de nuestros datos

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

Como vemos en los datos estructurados, existe un orden para los registros no estructurados. El siguiente paso es el procesamiento de software de datos sin procesar. Aquí es donde brilla Grok.

Plantillas Grok

Plantillas Grok integradas

Logstash viene con más de 100 plantillas integradas para estructurar datos no estructurados. Definitivamente deberías aprovechar esto siempre que sea posible para syslogs generales como apache, linux, haproxy, aws, etc.

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

Plantillas Grok personalizadas

Tienes que intentar crear tu propia plantilla de Grok. solía Depurador Grok и Patrones grok.

Tenga en cuenta que la sintaxis de la plantilla de 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 un patrón de Grok, pero no fue muy útil ya que solo encontró dos coincidencias.

Consejos y trucos para convertir datos no estructurados de registros a ELK Stack usando GROK en LogStash

Utilizando este descubrimiento, comencé a crear mi propia plantilla en el depurador de Grok usando la sintaxis que se encuentra en la página de Elastic Github.

Consejos y trucos para convertir datos no estructurados de registros a ELK Stack usando GROK en LogStash

Después de jugar con diferentes sintaxis, finalmente pude estructurar los datos de registro como quería.

Consejos y trucos para convertir datos no estructurados de registros a ELK Stack usando GROK en LogStash

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

Texto original:

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

Patrón:

%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}

Que pasó al final

{
  "environment": [
    [
      "localhost"
    ]
  ],
  "method": [
    [
      "GET"
    ]
  ],
  "url": [
    [
      "/v2/applink/5c2f4bb3e9fda1234edc64d"
    ]
  ],
  "response_status": [
    [
      "400"
    ]
  ],
  "BASE10NUM": [
    [
      "400"
    ]
  ],
  "response_time": [
    [
      "46ms"
    ]
  ],
  "user_id": [
    [
      "5bc6e716b5d6cb35fc9687c0"
    ]
  ]
}

Con la plantilla de Grok y los datos mapeados en mano, el último paso es agregarlos a Logstash.

Actualización del archivo de configuración Logstash.conf

En el servidor donde instaló la pila ELK, vaya a la configuración de Logstash:

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

Pega 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 todavía esté funcionando.

sudo service logstash restart
sudo service logstash status

Finalmente, para asegurarse de que los cambios hayan surtido efecto, ¡Asegúrese de actualizar su índice de Elasticsearch para Logstash en Kibana!

Consejos y trucos para convertir datos no estructurados de registros a ELK Stack usando GROK en LogStash

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

Consejos y trucos para convertir datos no estructurados de registros a ELK Stack usando GROK en LogStash

Como podemos ver en la imagen de arriba, Grok es capaz de hacer coincidir automáticamente los datos de registro con Elasticsearch. Esto facilita la gestión de registros y la consulta rápida de información. En lugar de buscar en los archivos de registro para depurarlos, simplemente puede filtrar por lo que está buscando, como un entorno o una URL.

¡Prueba las expresiones de Grok! Si tiene otra forma de hacer esto o tiene algún problema con los ejemplos anteriores, simplemente escriba un comentario a continuación para hacérmelo saber.

Gracias por leer y síganme aquí en Medium para obtener 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/

PS Enlace fuente

Canal de Telegram por Elasticsearch

Fuente: habr.com

Añadir un comentario