Logstash - Arquitetura Interna

Neste capítulo, discutiremos sobre a arquitetura interna e os diferentes componentes do Logstash.

Arquitetura de serviço Logstash

Logstash processa logs de diferentes servidores e fontes de dados e se comporta como remetente. Os remetentes são usados ​​para coletar os logs e estes são instalados em todas as fontes de entrada. Corretores gostamRedis, Kafka ou RabbitMQ são buffers para conter os dados para indexadores, pode haver mais de um brokers como instâncias de failover.

Indexadores gostam Lucenesão usados ​​para indexar os logs para melhor desempenho de pesquisa e, em seguida, a saída é armazenada no Elasticsearch ou outro destino de saída. Os dados no armazenamento de saída estão disponíveis para Kibana e outro software de visualização.

Arquitetura interna Logstash

O pipeline Logstash consiste em três componentes Input, Filters e Output. A parte de entrada é responsável por especificar e acessar a fonte de dados de entrada, como a pasta de log doApache Tomcat Server.

Exemplo para explicar o pipeline Logstash

O arquivo de configuração Logstash contém os detalhes sobre os três componentes do Logstash. Neste caso, estamos criando um nome de arquivo chamadoLogstash.conf.

A configuração a seguir captura dados de um log de entrada “inlog.log” e os grava em um log de saída “outlog.log” sem quaisquer filtros.

Logstash.conf

O arquivo de configuração Logstash apenas copia os dados do inlog.log arquivo usando o plugin de entrada e descarrega os dados de registro para outlog.log arquivo usando o plugin de saída.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/inlog.log"
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/outlog.log"
   }
}

Executar Logstash

Logstash usa –f opção para especificar o arquivo de configuração.

C:\logstash\bin> logstash –f logstash.conf

inlog.log

O seguinte bloco de código mostra os dados de registro de entrada.

Hello tutorialspoint.com

outlog.log

A saída do Logstash contém os dados de entrada no campo da mensagem. O Logstash também adiciona outros campos à saída, como carimbo de data / hora, caminho da fonte de entrada, versão, host e tags.

{
   "path":"C:/tpwork/logstash/bin/log/inlog1.log",
   "@timestamp":"2016-12-13T02:28:38.763Z",
   "@version":"1", "host":"Dell-PC",
   "message":" Hello tutorialspoint.com", "tags":[]
}

Como você pode, a saída do Logstash contém mais do que os dados fornecidos por meio do log de entrada. A saída contém o caminho de origem, carimbo de data / hora, versão, nome do host e tag, que são usados ​​para representar as mensagens extras como erros.

Podemos usar filtros para processar os dados e torná-los úteis para as nossas necessidades. No próximo exemplo, estamos usando um filtro para obter os dados, o que restringe a saída a apenas dados com um verbo como GET ou POST seguido por umUnique Resource Identifier.

Logstash.conf

Nesta configuração do Logstash, adicionamos um filtro chamado grokpara filtrar os dados de entrada. O evento de registro de entrada, que corresponde ao registro de entrada da sequência padrão, só chega ao destino de saída com erro. O Logstash adiciona uma tag chamada "_grokparsefailure" nos eventos de saída, que não corresponde à sequência do padrão do filtro grok.

Logstash oferece muitos padrões regex embutidos para analisar logs de servidor populares como o Apache. O padrão usado aqui espera um verbo como get, post, etc., seguido por um identificador de recurso uniforme.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/inlog2.log"
   }
}
filter {
   grok {
      match => {"message" => "%{WORD:verb} %{URIPATHPARAM:uri}"}
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/outlog2.log"
   }
}

Executar Logstash

Podemos executar o Logstash usando o seguinte comando.

C:\logstash\bin> logstash –f  Logstash.conf

inlog2.log

Nosso arquivo de entrada contém dois eventos separados por delimitador padrão, ou seja, delimitador de nova linha. O primeiro evento corresponde ao padrão especificado em GROk e o segundo não.

GET /tutorialspoint/Logstash
Input 1234

outlog2.log

Podemos ver que o segundo evento de saída contém a tag "_grokparsefailure", porque não corresponde ao padrão de filtro grok. O usuário também pode remover esses eventos incomparáveis ​​na saída usando o‘if’ condição no plugin de saída.

{
   "path":"C:/tpwork/logstash/bin/log/inlog2.log",
   "@timestamp":"2016-12-13T02:47:10.352Z","@version":"1","host":"Dell-PC","verb":"GET",
   "message":"GET /tutorialspoint/logstash", "uri":"/tutorialspoint/logstash", "tags":[]
}
{
   "path":"C:/tpwork/logstash/bin/log/inlog2.log",
   "@timestamp":"2016-12-13T02:48:12.418Z", "@version":"1", "host":"Dell-PC",
   "message":"t 1234\r", "tags":["_grokparsefailure"]
}