Dicas e truques para converter dados não estruturados de logs para ELK Stack usando GROK no LogStash

Estruturando dados não estruturados com GROK

Se você estiver usando a pilha Elastic (ELK) e estiver interessado em mapear logs personalizados do Logstash para o Elasticsearch, esta postagem é para você.

Dicas e truques para converter dados não estruturados de logs para ELK Stack usando GROK no LogStash

A pilha ELK é um acrônimo para três projetos de código aberto: Elasticsearch, Logstash e Kibana. Juntos, eles formam uma plataforma de gerenciamento de logs.

  • ElasticSearch é um sistema de pesquisa e analítico.
  • Logstash é um pipeline de processamento de dados do lado do servidor que ingere dados de várias fontes simultaneamente, transforma-os e depois os envia para um “esconderijo”, como o Elasticsearch.
  • Kibana permite que os usuários visualizem dados usando tabelas e gráficos no Elasticsearch.

Batidas veio depois e é um remetente de dados leve. A introdução do Beats transformou o Elk Stack no Elastic Stack, mas esse não é o ponto.

Este artigo é sobre Grok, que é um recurso do Logstash que pode transformar seus logs antes de serem enviados para o stash. Para nossos propósitos, falarei apenas sobre o processamento de dados do Logstash no Elasticsearch.

Dicas e truques para converter dados não estruturados de logs para ELK Stack usando GROK no LogStash

Grok é um filtro dentro do Logstash usado para analisar dados não estruturados em algo estruturado e consultável. Ele fica sobre uma expressão regular (regex) e usa padrões de texto para corresponder strings em arquivos de log.

Como veremos nas seções a seguir, usar o Grok faz uma grande diferença quando se trata de gerenciamento eficiente de logs.

Sem o Grok, seus dados de log não são estruturados

Dicas e truques para converter dados não estruturados de logs para ELK Stack usando GROK no LogStash

Sem o Grok, quando os logs são enviados do Logstash para o Elasticsearch e renderizados no Kibana, eles aparecem apenas no valor da mensagem.

Consultar informações significativas nesta situação é difícil porque todos os dados de log são armazenados em uma única chave. Seria melhor se as mensagens de log fossem melhor organizadas.

Dados não estruturados de registros

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

Se você observar atentamente os dados brutos, verá que na verdade eles consistem em partes diferentes, cada uma separada por um espaço.

Para desenvolvedores mais experientes, você provavelmente pode adivinhar o que cada uma das partes significa e qual é a mensagem de log da chamada da API. A apresentação de cada item está descrita abaixo.

Visão estruturada de nossos dados

  • localhost == ambiente
  • GET == método
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • 400 == status_resposta
  • 46ms == tempo_de_resposta
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Como vemos nos dados estruturados, existe uma ordem para logs não estruturados. A próxima etapa é o processamento de software de dados brutos. É aqui que Grok brilha.

Modelos Grok

Modelos Grok integrados

Logstash vem com mais de 100 modelos integrados para estruturar dados não estruturados. Definitivamente, você deve aproveitar isso sempre que possível para syslogs gerais como Apache, Linux, haproxy, aws e assim por diante.

No entanto, o que acontece quando você tem logs personalizados como no exemplo acima? Você deve construir seu próprio modelo Grok.

Modelos Grok personalizados

Você deve tentar construir seu próprio modelo Grok. eu usei Depurador Grok и Padrões Grok.

Observe que a sintaxe do modelo Grok é a seguinte: %{SYNTAX:SEMANTIC}

A primeira coisa que tentei fazer foi acessar a aba Descobrir no depurador Grok. Achei que seria legal se essa ferramenta pudesse gerar automaticamente um padrão Grok, mas não foi muito útil, pois só encontrou duas correspondências.

Dicas e truques para converter dados não estruturados de logs para ELK Stack usando GROK no LogStash

Usando essa descoberta, comecei a criar meu próprio modelo no depurador Grok usando a sintaxe encontrada na página do Elastic Github.

Dicas e truques para converter dados não estruturados de logs para ELK Stack usando GROK no LogStash

Depois de brincar com diferentes sintaxes, finalmente consegui estruturar os dados de log da maneira que queria.

Dicas e truques para converter dados não estruturados de logs para ELK Stack usando GROK no LogStash

Link do depurador Grok https://grokdebug.herokuapp.com/

Texto original:

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

Padrão:

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

O que aconteceu no final

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

Com o template Grok e os dados mapeados em mãos, a última etapa é adicioná-lo ao Logstash.

Atualizando o arquivo de configuração Logstash.conf

No servidor onde você instalou a pilha ELK, acesse a configuração do Logstash:

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

Cole as alterações.

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

Depois de salvar suas alterações, reinicie o Logstash e verifique seu status para ter certeza de que ainda está funcionando.

sudo service logstash restart
sudo service logstash status

Finalmente, para garantir que as alterações tenham efeito, Certifique-se de atualizar seu índice Elasticsearch para Logstash no Kibana!

Dicas e truques para converter dados não estruturados de logs para ELK Stack usando GROK no LogStash

Com o Grok, seus dados de log são estruturados!

Dicas e truques para converter dados não estruturados de logs para ELK Stack usando GROK no LogStash

Como podemos ver na imagem acima, Grok é capaz de combinar automaticamente os dados de log com o Elasticsearch. Isso facilita o gerenciamento de logs e a consulta rápida de informações. Em vez de vasculhar os arquivos de log para depurar, você pode simplesmente filtrar pelo que está procurando, como um ambiente ou um URL.

Experimente as expressões Grok! Se você tiver outra maneira de fazer isso ou tiver algum problema com os exemplos acima, basta escrever um comentário abaixo para me avisar.

Obrigado pela leitura - e siga-me aqui no Medium para artigos mais interessantes sobre engenharia 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 Link de origem

Canal Telegram por ElasticSearch

Fonte: habr.com

Adicionar um comentário