Logstash - Estágio de saída

A saída é o último estágio no pipeline do Logstash, que envia os dados do filtro dos logs de entrada para um destino especificado. O Logstash oferece vários plug-ins de saída para armazenar os eventos de log filtrados em vários mecanismos de armazenamento e pesquisa diferentes.

Armazenamento de registros

O Logstash pode armazenar os logs filtrados em um File, Elasticsearch Engine, stdout, AWS CloudWatch, etc. Protocolos de rede como TCP, UDP, Websocket também pode ser usado no Logstash para transferir os eventos de log para sistemas de armazenamento remoto.

Na pilha ELK, os usuários usam o mecanismo Elasticsearch para armazenar os eventos de log. Aqui, no exemplo a seguir, geraremos eventos de log para um mecanismo Elasticsearch local.

Instalando o plug-in de saída Elasticsearch

Podemos instalar o plugin de saída Elasticsearch com o seguinte comando.

>logstash-plugin install Logstash-output-elasticsearch

logstash.conf

Este arquivo de configuração contém um plug-in Elasticsearch, que armazena o evento de saída no 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

O seguinte bloco de código mostra os dados de 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 em Localhost

Para iniciar o Elasticsearch no localhost, você deve usar o seguinte comando.

C:\elasticsearch\bin> elasticsearch

Assim que o Elasticsearch estiver pronto, você pode verificá-lo digitando a seguinte URL no seu navegador.

http://localhost:9200/

Resposta

O bloco de código a seguir mostra a resposta de Elasticsearch em 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 obter mais informações sobre Elasticsearch, você pode clicar no link a seguir.

https://www.tutorialspoint.com/elasticsearch/index.html

Agora, execute o Logstash com o Logstash.conf mencionado acima

>Logstash –f Logstash.conf

Depois de colar o texto mencionado acima no log de saída, esse texto será armazenado no Elasticsearch por Logstash. Você pode verificar os dados armazenados digitando a seguinte URL no navegador.

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

Resposta

São os dados no formato JSON armazenados no í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":[]
         }
      }
   }
}