Logstash - Etapa de salida

La salida es la última etapa en la canalización de Logstash, que envía los datos del filtro desde los registros de entrada a un destino específico. Logstash ofrece múltiples complementos de salida para almacenar los eventos de registro filtrados en varios motores de búsqueda y almacenamiento diferentes.

Almacenamiento de registros

Logstash puede almacenar los registros filtrados en un File, Elasticsearch Engine, stdout, AWS CloudWatch, etc. Protocolos de red como TCP, UDP, Websocket También se puede utilizar en Logstash para transferir los eventos de registro a sistemas de almacenamiento remoto.

En la pila de ELK, los usuarios usan el motor Elasticsearch para almacenar los eventos de registro. Aquí, en el siguiente ejemplo, generaremos eventos de registro para un motor de Elasticsearch local.

Instalación del complemento de salida de Elasticsearch

Podemos instalar el complemento de salida Elasticsearch con el siguiente comando.

>logstash-plugin install Logstash-output-elasticsearch

logstash.conf

Este archivo de configuración contiene un complemento de Elasticsearch, que almacena el evento de salida en Elasticsearch instalado localmente.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/input.log"
   }
} 
filter {
   grok {
      match => [ "message", "%{LOGLEVEL:loglevel} -
      %{NOTSPACE:taskid} - %{NOTSPACE:logger} -  
      %{WORD:label}( - %{INT:duration:int})?" ]
   }
   if [logger] == "TRANSACTION_START" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] = 0"
         map_action => "create"
      }
   }
   if [logger] == "SQL" {
      aggregate {
         task_id => "%{taskid}"
         code => "map['sql_duration'] ||= 0 ;
            map['sql_duration'] += event.get('duration')"
      }
   }
   if [logger] == "TRANSACTION_END" {
      aggregate {
         task_id => "%{taskid}"
         code => "event.set('sql_duration', map['sql_duration'])"
         end_of_task => true
         timeout => 120
      }
   }
   mutate {
      add_field => {"user" => "tutorialspoint.com"}
   }
}
output {
   elasticsearch {
      hosts => ["127.0.0.1:9200"]
   }
}

Input.log

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

INFO - 48566 - TRANSACTION_START - start
INFO - 48566 - SQL - transaction1 - 320
INFO - 48566 - SQL - transaction1 - 200
INFO - 48566 - TRANSACTION_END - end

Inicie Elasticsearch en Localhost

Para iniciar Elasticsearch en el localhost, debe usar el siguiente comando.

C:\elasticsearch\bin> elasticsearch

Una vez que Elasticsearch esté listo, puede verificarlo escribiendo la siguiente URL en su navegador.

http://localhost:9200/

Respuesta

El siguiente bloque de código muestra la respuesta de Elasticsearch en localhost.

{
   "name" : "Doctor Dorcas",
   "cluster_name" : "elasticsearch",
   "version" : {
      "number" : "2.1.1",
      "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71",
      "build_timestamp" : "2015-12-15T13:05:55Z",
      "build_snapshot" : false,
      "lucene_version" : "5.3.1"
   },
   "tagline" : "You Know, for Search"
}

Note - Para obtener más información sobre Elasticsearch, puede hacer clic en el siguiente enlace.

Ahora, ejecute Logstash con el Logstash.conf mencionado anteriormente

>Logstash –f Logstash.conf

Después de pegar el texto mencionado anteriormente en el registro de salida, Logstash almacenará ese texto en Elasticsearch. Puede verificar los datos almacenados escribiendo la siguiente URL en el navegador.

http://localhost:9200/logstash-2017.01.01/_search?pretty

Respuesta

Son los datos en formato JSON almacenados en el índice Logstash-2017.01.01.

{
   "took" : 20,
   "timed_out" : false,
   "_shards" : {
      "total" : 5,
      "successful" : 5,
      "failed" : 0
   },
   "hits" : {
      "total" : 10,
      "max_score" : 1.0,
      "hits" : [ {
         "_index" : "logstash-2017.01.01",
         "_type" : "logs",
         "_id" : "AVlZ9vF8hshdrGm02KOs",
         "_score" : 1.0,
         "_source":{
            "duration":200,"path":"C:/tpwork/logstash/bin/log/input.log", 
            "@timestamp":"2017-01-01T12:17:49.140Z","loglevel":"INFO",
            "logger":"SQL","@version":"1","host":"wcnlab-PC",
            "label":"transaction1",
            "message":" INFO - 48566 - SQL - transaction1 - 200\r",
            "user":"tutorialspoint.com","taskid":"48566","tags":[]
         }
      },
      {
         "_index" : "logstash-2017.01.01",
         "_type" : "logs",
         "_id" : "AVlZ9vF8hshdrGm02KOt",
         "_score" : 1.0,
         "_source":{
            "sql_duration":520,"path":"C:/tpwork/logstash/bin/log/input.log",
            "@timestamp":"2017-01-01T12:17:49.145Z","loglevel":"INFO",
            "logger":"TRANSACTION_END","@version":"1","host":"wcnlab-PC",
            "label":"end",
            "message":" INFO - 48566 - TRANSACTION_END - end\r",
            "user":"tutorialspoint.com","taskid":"48566","tags":[]
         }
      }
   }
}