Logstash: Cómo crear Logstash mantenible tubería y reutilizable

Logstash es un conjunto de datos de código abierto procesamiento en paralelo que los extractos de un evento de la una o más entradas, a convertir, y luego envía cada evento a una o más salidas. Logstash Algunas implementaciones pueden tener varias líneas de código, y puede manejar eventos de múltiples fuentes de entrada. Para lograr estos más fácil de mantener, voy a mostrar cómo mejorar el código mediante la creación de un oleoducto desde la reutilización de componentes modulares.

 

La motivación para escribir este artículo

Logstash a menudo necesaria para procesar un subconjunto de la lógica genérico aplicado a eventos de múltiples fuentes de entrada. Por lo general, alcanzado por una de dos maneras:

  • Procesamiento de una pluralidad de eventos de diferentes fuentes en un solo tubo, de modo que se puede aplicar fácilmente a todos los eventos lógicos de propósito general de todas las fuentes. En tal implementación, además de la lógica de propósito general, por lo general un gran número de lógica condicional. Por lo tanto, este método puede resultar en Logstash poner en práctica compleja y difícil de entender.

  • La implementación de una tubería única para gestionar eventos de cada fuente de entrada única. Este método necesita ser copiado y copiado en cada función general de la tubería, lo que hace que sea difícil mantener la parte común del código.

Esta técnica descrita por componentes de conductos modulares de blog se almacenan en diferentes archivos, y luego el tubo se construye mediante la combinación de estos componentes, la solución de este modo las desventajas de los métodos anteriores. Esta técnica puede reducir la complejidad y la tubería puede eliminar la duplicación de código.

 

La construcción modular de tuberías

Logstash perfil de entrada, y un filtro de salida Logstash realiza por Componentes de tubería:
 

En la configuración más avanzada, hay típicamente un ejemplo Logstash de realizar una pluralidad de tubos . Por defecto, cuando el Logstash empezar sin parámetros, se lee un archivo llamado pipelines.yml documento y crear instancias de la tubería especificada.

Logstash de entrada, y los filtros de salida pueden ser almacenados en varios archivos, especificando la expresión pegote para seleccionar los archivos que se van contenidas en la tubería. archivo de expresión mundial coincide con la combinación en orden alfabético . Dado que el orden de ejecución del filtro es generalmente muy importante, por lo que el nombre de archivo incluye un identificador numérico para garantizar que el archivo en las combinaciones orden deseado puede ser útil.

En lo que sigue, definiremos un único dos tubos, estos tubos son una combinación de varios componentes modulares Logstash. Vamos a Logstash componentes se almacenan en los archivos siguientes:

  • Introduzca la sentencia: 01_in.cfg, 02_in.cfg
  • instrucción de filtro: 01_filter.cfg, 02_filter.cfg, 03_filter.cfg
  • Declaración de salida: 01_out.cfg

A continuación, utilice la expresión pegote en pipelines.yml canalización personalizado y permitida por los componentes necesarios, como sigue:

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

En la configuración de canalización, los dos tubos están presentes documento 02_filter.cfg , el documento muestra cómo definir y mantener un total de dos tubos del código, y la forma de ejecutar el código por una pluralidad de conductos en ambos archivos.

 

Pipeline prueba

En esta sección, proporcionamos un ejemplo específico de un archivo, estos archivos se fusionaron para dicho pipelines.yml solo conducto definido. A continuación, utilizar estos archivos para ejecutar Logstash, y muestra la salida generada.

perfiles

archivo de entrada: 01_in.cfg

El documento define un generador de entrada. Constructor de entrada diseñado para la prueba Logstash, en este caso, se genera un evento.

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

archivo de entrada: 02_in.cfg

Este archivo define Logstash entrada estándar de entrada de un oyente.

input { 
  stdin {} 
}

archivo de filtro: 01_filter.cfg

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

archivo de filtro: 02_filter.cfg

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

archivo de filtro: 03_filter.cfg

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

El archivo de salida: 01_out.cfg

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

 

canalización de ejecución

Sin ninguna opción se iniciará Logstash la implementación de nuestra previamente definido pipelines.yml archivo. Ejecutar Logstash, de la siguiente manera:

./bin/logstash

Debido a que la tubería mi-pipeline_1 está ejecutando generador de eventos de entrada de simular, por lo Logstash después de la inicialización se ha completado, deberíamos ver la siguiente salida. Esto indica 01_filter.cfg y 02_filter.cfg contenido ha sido ejecutado por la tubería como se esperaba.

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

Cuando otro llamado mi-pipeline_2 cuando la tubería está a la espera para la entrada de la entrada estándar, sin embargo, tenemos que ver cualquier caso, el proceso de tramitación. Escribir el funcionamiento del terminal Logstash, y luego pulse Intro para crear una tubería de eventos para este propósito. Una vez hecho esto, debería ver algo similar a lo siguiente:

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

Podemos ver de lo anterior, de acuerdo con la aplicación prevista del 02_filter.cfg y 03_filter.cfg lógica.

 

orden de ejecución

Tenga en cuenta, Logstash no presta atención a la expresión fin pegote de archivos. Sólo utiliza expresiones glob para determinar los archivos que desea incluir, y luego ordenar por orden alfabético. Esto significa que, incluso si queremos cambiar mi-pipeline_2 define, por lo 03_filter.cfg aparecer en 02_filter.cfg expresión pegote antes de cada evento también 03_filter.cfg antes del filtro definido por 02_filter.cfg un filtro.

 

conclusión

El uso de la expresión global pueden Logstash conducto con componentes modulares, estos componentes se almacenan como archivos independientes. Esto aumenta la capacidad de mantenimiento de código, reutilización y facilidad de lectura.

Por cierto, además de la grabación técnica de este blog, debemos considerar también la tubería al tubo de comunicación para ver si se puede mejorar el módulo de aplicación Logstash.

referencia:

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

Publicados 512 artículos originales · ganado elogios 124 · vistas 900 000 +

Supongo que te gusta

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