Continuando con la introducción de las herramientas de Elastic Stack, esta vez es el turno de logstash, el cuál en sus inicios comenzó siendo el punto de entrada para la recolección de logs, lugar que ocupa hoy Beats, explicado en el artículo anterior. En este artículo nos encontraremos con una introducción básica de logstash, mas una descripción de los tipos de inputs y como se configuran. Sin más que agregar te invito a continuar leyendo.

¿Qué es Logstash?

Logstash es la herramienta que se utiliza hoy dentro del Stack de Elastic para el filtrado de los logs que queremos monitorear. Es decir que podemos seleccionar con esta herramienta que sí y que no queremos ver, ya sea porque nos parece redundante o porque no tengamos la posibilidad de modificar desde el origen los logs que estamos consumiendo.

Además de esta funcionalidad también te permite tomar los logs de diferentes fuentes, ya que en sus inicios era éste el encargado de eso antes de la llegada de Beats.

Soporta varios tipos de entradas, ya sea entrada por consola, toma de un archivo de algún fichero, o lo más común por estos tiempos una conexión con Beats el cuál le sirve la información. Dentro de esta configuración también tiene la posibilidad de manejar los codecs, es decir la manera en la que viene codificada la información, por ejemplo json, plain, line, multiline, etc.

Tipos de entrada

Uno de los tipos de entrada comunes de los que hablamos en el párrafo anterior es stdin, el cual toma lo que escribimos por consola cuando se levanta logstash.

La configuración inicial de la que partiríamos seria ésta:

input {
    stdin {}
}

output {
    stdout {}
}

Podemos ver que definimos una entrada stdin, que cuando arrancamos logstash con esta configuración, nos permite leer datos de la entrada estándar y sacarlos por la salida estándar. Escribimos hola en la consola y obtenemos lo siguiente:

>hola

{
        "message" => "hola",
   "@timestamp" => 2021-10-04T16:47:52.8252,
               "host" => "alma.local",
           "version" => "1"
}

Otro plugin de entrada es File, el cual nos permite leer archivos de logs desde nuestro sistema de archivos. Esta era el plugin que se utilizaba para la recolección de logs antes de la llegada de Beats.

La config de ejemplo sería:

input {
    file {
                    path => "/Logstash/logs/my-log.log"
       start_position => "beginning"
       sincedb_path => "/Logstash/logs/log-generator.sincedb"
    }
}

output {
       stdout {}
}

Definimos dentro de la entrada el plugin file, donde es importante agregar el path, que es la ruta donde esta nuestro archivo de log, muy importante que solo permite rutas absolutas. Luego el start_position que recibe un string que puede ser beginning o end, que describe de donde va a empezar a leer los logs. Y por último el sincedb_path que es la ruta donde se va crear el archivo que lleva el control de lo que ya se leyó. Es muy importante para no repetir la lectura de las líneas de logs que ya fueron ingresadas.

Un posible ejemplo de la salida que podríamos observar sería esta:

{
            "@timestamp" => 2021-10-04T16:47:52.8252,
                       "path" => "/Logstash/log/my-log.log"
                       "host" => "alma.local",
                   "version" => "1",
                "message" => "INFO 2021-10-03 16:00:00 [main] a.b.t.loggenerator.LogGenerator - LOGIN|100|Superman|189.254.101.68"
}

Por último el plugin de entrada más utilizado para logstash, Beats, el cual es muy sencillo, teniendo la siguiente configuración:

input {
     beats {
          port => 5044
     }
}

output {
     stdout {}
}

Como se vé no tiene mucha diferencia con la salida standart, lo único que tenemos que definir es el puerto de escucha de logstash con beats. Un ejemplo de la salida que veríamos es:

{
           "prospector" => {
                    "type" => "log"
            },
              "message" => "INFO 2021-10-03 16:00:00 [main] a.b.t.loggenerator.LogGenerator - LOGIN|100|Superman|189.254.101.68",
                  "offset" => 37281,
                    "host" => {
                  "name" => "alma.local",
                   },
                    "tags" => [[0] "beats_input_codec_plain_applied"],
                   "input" => {
                          "type" => "log"
                    },
                 "source" => "/Logstash/log/my-log.log",
                "version" => "1",
                    "beat" => {
                        "version" => "6.3.1",
                          "name" => "alma.local",
                    "hostname" => "alma.local"
                 },
        "@timestamp" => 2021-10-04T16:47:52.8252
}

Además de estos plugins de entrada, existen otros los cuales pueden ser consultados en https://www.elastic.co/guide/en/logstash/current/input-plugins.html.

Espero que esta aproximación con la herramienta te de ánimos de poder seguir investigando por tu cuenta. Nos vemos en otro artículo.

 

Mandanos tus sugerencias

Ayudanos con ideas para los artículos de este blog a contacto@somospnt.com

¡Seguínos en nuestras redes sociales para enterarte de los últimos posts!