Logstash - Arquitectura interna

En este capítulo, analizaremos la arquitectura interna y los diferentes componentes de Logstash.

Arquitectura del servicio Logstash

Logstash procesa registros de diferentes servidores y fuentes de datos y se comporta como remitente. Los cargadores se utilizan para recolectar los registros y estos se instalan en cada fuente de entrada. Corredores comoRedis, Kafka o RabbitMQ son búferes para almacenar los datos de los indexadores, puede haber más de un intermediario como instancias de error.

A los indexadores les gusta Lucenese utilizan para indexar los registros para un mejor rendimiento de búsqueda y luego la salida se almacena en Elasticsearch u otro destino de salida. Los datos en el almacenamiento de salida están disponibles para Kibana y otro software de visualización.

Arquitectura interna de Logstash

La canalización de Logstash consta de tres componentes Input, Filters y Output. La parte de entrada es responsable de especificar y acceder a la fuente de datos de entrada, como la carpeta de registro delApache Tomcat Server.

Ejemplo para explicar la canalización de Logstash

El archivo de configuración de Logstash contiene los detalles sobre los tres componentes de Logstash. En este caso, estamos creando un nombre de archivo llamadoLogstash.conf.

La siguiente configuración captura datos de un registro de entrada "inlog.log" y los escribe en un registro de salida "outlog.log" sin ningún filtro.

Logstash.conf

El archivo de configuración de Logstash simplemente copia los datos del inlog.log archivo usando el complemento de entrada y descarga los datos de registro a outlog.log archivo usando el complemento de salida.

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

Ejecutar Logstash

Usos de Logstash –f opción para especificar el archivo de configuración.

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

inlog.log

El siguiente bloque de código muestra los datos del registro de entrada.

Hello tutorialspoint.com

outlog.log

La salida de Logstash contiene los datos de entrada en el campo de mensaje. Logstash también agrega otros campos a la salida como marca de tiempo, ruta de la fuente de entrada, versión, host y etiquetas.

{
   "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 puede, la salida de Logstash contiene más que los datos proporcionados a través del registro de entrada. La salida contiene la ruta de origen, la marca de tiempo, la versión, el nombre de host y la etiqueta, que se utilizan para representar los mensajes adicionales como errores.

Podemos utilizar filtros para procesar los datos y hacerlos útiles para nuestras necesidades. En el siguiente ejemplo, usamos un filtro para obtener los datos, lo que restringe la salida a solo datos con un verbo como GET o POST seguido de unUnique Resource Identifier.

Logstash.conf

En esta configuración de Logstash, agregamos un filtro llamado grokpara filtrar los datos de entrada. El evento del registro de entrada, que coincide con el registro de entrada de la secuencia del patrón, solo llega al destino de salida con error. Logstash agrega una etiqueta llamada "_grokparsefailure" en los eventos de salida, que no coincide con la secuencia del patrón de filtro grok.

Logstash ofrece muchos patrones de expresiones regulares incorporados para analizar registros de servidores populares como Apache. El patrón utilizado aquí espera un verbo como obtener, publicar, etc., seguido de un 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"
   }
}

Ejecutar Logstash

Podemos ejecutar Logstash usando el siguiente comando.

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

inlog2.log

Nuestro archivo de entrada contiene dos eventos separados por un delimitador predeterminado, es decir, un delimitador de nueva línea. El primer evento coincide con el patrón especificado en GROk y el segundo no.

GET /tutorialspoint/Logstash
Input 1234

outlog2.log

Podemos ver que el segundo evento de salida contiene la etiqueta "_grokparsefailure", porque no coincide con el patrón de filtro grok. El usuario también puede eliminar estos eventos no coincidentes en la salida utilizando el‘if’ condición en el complemento de salida.

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