Consellos e trucos para converter datos non estruturados de rexistros a ELK Stack usando GROK en LogStash

Estruturación de datos non estruturados con GROK

Se estás a usar a pila Elastic (ELK) e estás interesado en asignar rexistros personalizados de Logstash a Elasticsearch, esta publicación é para ti.

Consellos e trucos para converter datos non estruturados de rexistros a ELK Stack usando GROK en LogStash

A pila ELK é un acrónimo de tres proxectos de código aberto: Elasticsearch, Logstash e Kibana. Xuntos forman unha plataforma de xestión de rexistros.

  • Elasticsearch é un sistema de busca e análise.
  • logstash é unha canalización de procesamento de datos do lado do servidor que inxire datos de varias fontes simultáneamente, transfórmaos e despois envíaos a un "alixo" como Elasticsearch.
  • kibana permite aos usuarios visualizar datos mediante gráficos e gráficos en Elasticsearch.

Beats veu máis tarde e é un transportista de datos lixeiro. A introdución de Beats transformou o Elk Stack no Elastic Stack, pero ese non é o punto.

Este artigo trata sobre Grok, que é unha función de Logstash que pode transformar os teus rexistros antes de que sexan enviados ao alixo. Para os nosos propósitos, só falarei do procesamento de datos de Logstash en Elasticsearch.

Consellos e trucos para converter datos non estruturados de rexistros a ELK Stack usando GROK en LogStash

Grok é un filtro dentro de Logstash que se usa para analizar datos non estruturados en algo estruturado e consultable. Sitúase encima dunha expresión regular (rexex) e usa patróns de texto para facer coincidir cadeas nos ficheiros de rexistro.

Como veremos nas seguintes seccións, usar Grok fai unha gran diferenza cando se trata dunha xestión eficiente dos rexistros.

Sen Grok, os teus datos de rexistro non están estruturados

Consellos e trucos para converter datos non estruturados de rexistros a ELK Stack usando GROK en LogStash

Sen Grok, cando os rexistros se envían desde Logstash a Elasticsearch e se representan en Kibana, só aparecen no valor da mensaxe.

Consultar información significativa nesta situación é difícil porque todos os datos do rexistro gárdanse nunha única clave. Sería mellor que as mensaxes de rexistro estivesen mellor organizadas.

Datos non estruturados dos rexistros

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

Se observas detidamente os datos en bruto, verás que en realidade consta de diferentes partes, cada unha separada por un espazo.

Para os desenvolvedores máis experimentados, probablemente poida adiviñar o que significa cada unha das partes e cal é esa mensaxe de rexistro da chamada da API. A presentación de cada elemento descríbese a continuación.

Vista estruturada dos nosos datos

  • localhost == ambiente
  • Método GET ==
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • 400 == estado_resposta
  • 46 ms == tempo de resposta
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Como vemos nos datos estruturados, hai unha orde para os rexistros non estruturados. O seguinte paso é o procesamento por software de datos en bruto. Aquí é onde brilla Grok.

Modelos Grok

Modelos Grok integrados

Logstash inclúe máis de 100 modelos integrados para estruturar datos non estruturados. Definitivamente deberías aproveitar isto sempre que sexa posible para syslogs xerais como apache, linux, haproxy, aws, etc.

Non obstante, que ocorre cando tes rexistros personalizados como no exemplo anterior? Debes crear o teu propio modelo Grok.

Modelos Grok personalizados

Tes que tentar crear o teu propio modelo Grok. usei Depurador Grok и Patróns Grok.

Teña en conta que a sintaxe do modelo Grok é a seguinte: %{SYNTAX:SEMANTIC}

O primeiro que tentei foi ir á pestana Discover no depurador Grok. Pensei que estaría xenial que esta ferramenta puidese xerar automaticamente un patrón Grok, pero non foi demasiado útil xa que só atopou dúas coincidencias.

Consellos e trucos para converter datos non estruturados de rexistros a ELK Stack usando GROK en LogStash

Usando este descubrimento, comecei a crear o meu propio modelo no depurador Grok usando a sintaxe que se atopa na páxina Elastic Github.

Consellos e trucos para converter datos non estruturados de rexistros a ELK Stack usando GROK en LogStash

Despois de xogar con diferentes sintaxes, por fin puiden estruturar os datos do rexistro do xeito que quería.

Consellos e trucos para converter datos non estruturados de rexistros a ELK Stack usando GROK en LogStash

Ligazón ao depurador de Grok https://grokdebug.herokuapp.com/

Texto orixinal:

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}

O que pasou ao final

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

Co modelo Grok e os datos mapeados na man, o último paso é engadilo a Logstash.

Actualizando o ficheiro de configuración Logstash.conf

No servidor onde instalou a pila ELK, vai á configuración de Logstash:

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

Pega os 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" ]
  }
}

Despois de gardar os cambios, reinicie Logstash e comprobe o seu estado para asegurarse de que aínda funciona.

sudo service logstash restart
sudo service logstash status

Finalmente, para asegurarse de que os cambios teñan efecto, Asegúrate de actualizar o teu índice Elasticsearch para Logstash en Kibana.

Consellos e trucos para converter datos non estruturados de rexistros a ELK Stack usando GROK en LogStash

Con Grok, os teus datos de rexistro están estruturados.

Consellos e trucos para converter datos non estruturados de rexistros a ELK Stack usando GROK en LogStash

Como podemos ver na imaxe superior, Grok é capaz de facer coincidir automaticamente os datos de rexistro con Elasticsearch. Isto facilita a xestión dos rexistros e a consulta rápida da información. En lugar de buscar ficheiros de rexistro para depurar, pode simplemente filtrar polo que está a buscar, como un ambiente ou unha URL.

Proba as expresións de Grok! Se tes outra forma de facelo ou tes algún problema cos exemplos anteriores, escribe un comentario a continuación para avisalo.

Grazas por ler e sígueme aquí en Medium para obter artigos de enxeñería de software máis interesantes.

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 Ligazón á fonte

Canal de Telegram por Elasticsearch

Fonte: www.habr.com

Engadir un comentario