Logstash: Como criar sustentável gasoduto Logstash e reutilizável

Logstash é um conjunto de dados de código-fonte aberto de processamento de tubagem que os extractos de um evento de uma ou mais entradas, convertê-los, e, em seguida, envia cada evento para uma ou mais saídas. Logstash Algumas implementações podem ter várias linhas de código, e pode lidar com eventos de várias fontes de entrada. Para atingir estes mais sustentável, vou mostrar como melhorar o código através da criação de um gasoduto a partir da reutilização de componentes modulares.

 

A motivação para escrever este artigo

Logstash muitas vezes necessário para processar um subconjunto da lógica genérico aplicado a eventos de várias fontes de entrada. Normalmente alcançado por uma de duas maneiras:

  • Processamento de uma pluralidade de eventos de diferentes fontes em um único tubo, de modo que possa ser facilmente aplicada a todos os eventos lógicos de propósito geral de todas as fontes. Em tal implementação, além de lógica de uso geral, geralmente um grande número de lógica condicional. Portanto, esse método pode resultar em Logstash implementar complexos e difíceis de entender.

  • A implementação de um tubo único para lidar com eventos de cada fonte de entrada único. Este método precisa ser copiado e copiado para cada função geral da tubulação, o que torna difícil manter a parte comum do código.

Esta técnica descrita por g componentes de tubagem modulares são armazenados em ficheiros diferentes, e, em seguida, o tubo é construído pela combinação destes componentes, resolvendo assim as desvantagens dos métodos acima. Esta técnica pode reduzir a complexidade e o gasoduto pode eliminar a duplicação de código.

 

A construção do gasoduto modular

Logstash perfil de entrada, e um filtro de saída Logstash realizada pela tubagem componentes:
 

Em configurações mais avançados, há normalmente um exemplo Logstash de realização de uma pluralidade de tubos . Por padrão, quando a começar Logstash sem parâmetros, ele lê um arquivo chamado pipelines.yml documento e instanciar o tubo especificado.

input Logstash, e filtros de saída podem ser armazenados em vários arquivos, especificando expressão glob para selecionar os arquivos a serem contidas no pipeline. arquivo de expressão mundial coincide com a combinação em ordem alfabética . Desde a ordem de execução do filtro é geralmente muito importante, por isso o nome do arquivo inclui um identificador numérico para garantir que o arquivo nas combinações ordem desejada pode ser útil.

A seguir, vamos definir um exclusivo dois tubos, esses tubos são uma combinação de vários componentes modulares Logstash. Vamos Logstash componentes são armazenados nos seguintes arquivos:

  • Insira a instrução: 01_in.cfg, 02_in.cfg
  • instrução Filter: 01_filter.cfg, 02_filter.cfg, 03_filter.cfg
  • Declaração de Saída: 01_out.cfg

Em seguida, use a expressão glob em pipelines.yml pipeline personalizado e permitido pelas componentes necessários, como segue:

- pipeline.id: my-pipeline_1
  path.config: "<path>/{01_in,01_filter,02_filter,01_out}.cfg"
- pipeline.id: my-pipeline_2
  path.config: "<path>/{02_in,02_filter,03_filter,01_out}.cfg"

Na configuração do oleoduto, os dois tubos são presente documento 02_filter.cfg , o documento demonstra como para definir e manter um total de dois tubos do código, e como para executar o código por uma pluralidade de condutas em ambos os arquivos.

 

teste Pipeline

Nesta seção, nós fornecemos um exemplo específico de um arquivo, esses arquivos são mesclados ao referido pipelines.yml único ducto definido. Em seguida, usamos esses arquivos para executar Logstash, e mostra a saída gerada.

Profiles

arquivo de entrada: 01_in.cfg

O documento define um gerador de entrada. Construtor de entrada projetado para teste Logstash, neste caso, ele gera um evento.

input { 
  generator { 
    lines => ["Generated line"] 
    count => 1 
  } 
}

arquivo de entrada: 02_in.cfg

Este arquivo define Logstash stdin entrada de um ouvinte.

input { 
  stdin {} 
}

arquivo de filtro: 01_filter.cfg

filter { 
  mutate { 
    add_field => { "filter_name" => "Filter 01" } 
  } 
}

arquivo de filtro: 02_filter.cfg

filter { 
  mutate { 
    add_field => { "filter_name" => "Filter 02" } 
  } 
}

arquivo de filtro: 03_filter.cfg

filter { 
  mutate { 
    add_field => { "filter_name" => "Filter 03" } 
  } 
}

arquivo de saída: 01_out.cfg

output { 
  stdout { codec =>  "rubydebug" } 
}

 

pipeline de execução

Sem quaisquer opções começará Logstash a implementação do nosso previamente definido pipelines.yml arquivo. Run Logstash, como segue:

./bin/logstash

Porque o pipeline meu-pipeline_1 sendo executado gerador para eventos de entrada simulados, então Logstash após a inicialização estiver concluída, devemos ver a seguinte saída. Isso indica 01_filter.cfg e 02_filter.cfg conteúdo foi executado pelo gasoduto como esperado.

{
     "@timestamp" => 2020-02-29T02:44:40.024Z,
           "host" => "liuxg-2.local",
       "sequence" => 0,
        "message" => "Generated line",
       "@version" => "1",
    "filter_name" => [
        [0] "Filter 01",
        [1] "Filter 02"
    ]
}

Quando outra chamada meu-pipeline_2 quando o pipeline está à espera para a entrada em stdin, ainda temos de ver qualquer caso, o processo de pipeline. Digite na operação do terminal Logstash, e então pressione Enter para criar um pipeline de evento para esta finalidade. Uma vez feito isso, você deve ver algo semelhante ao seguinte:

hello, the world!
{
        "message" => "hello, the world!",
       "@version" => "1",
     "@timestamp" => 2020-02-29T02:48:26.142Z,
           "host" => "liuxg-2.local",
    "filter_name" => [
        [0] "Filter 02",
        [1] "Filter 03"
    ]
}

Nós podemos ver acima, de acordo com a aplicação pretendida para 02_filter.cfg e 03_filter.cfg lógica.

 

ordem de execução

Por favor note, Logstash não prestar atenção à expressão fim glob de arquivos. Ele só usa expressões glob para determinar os arquivos que você deseja incluir e, em seguida, classificar-los em ordem alfabética. Isto significa que, mesmo que queremos mudar meu-pipeline_2 definido, então 03_filter.cfg aparecer em 02_filter.cfg expressão glob antes de cada evento também vai 03_filter.cfg antes do filtro definido por 02_filter.cfg um filtro.

 

conclusão

Usando a expressão global pode Logstash conduíte com componentes modulares, estes componentes são armazenados como arquivos separados. Isso aumenta a capacidade de manutenção de código, reutilização e legibilidade.

Aliás, além da gravação técnica deste blog, devemos também considerar gasoduto para o tubo de comunicação para ver se ele pode melhorar módulo implementação Logstash.

referência:

【1】https://www.elastic.co/blog/how-to-create-maintainable-and-reusable-logstash-pipelines

Publicado 512 artigos originais · Louvor obteve 124 · vista 900 000 +

Acho que você gosta

Origin blog.csdn.net/UbuntuTouch/article/details/104569518
Recomendado
Clasificación