Logstash - Étape de sortie

La sortie est la dernière étape du pipeline Logstash, qui envoie les données de filtre des journaux d'entrée vers une destination spécifiée. Logstash propose plusieurs plugins de sortie pour stocker les événements de journal filtrés dans différents moteurs de stockage et de recherche.

Stockage des journaux

Logstash peut stocker les journaux filtrés dans un File, Elasticsearch Engine, stdout, AWS CloudWatch, etc. Protocoles réseau comme TCP, UDP, Websocket peut également être utilisé dans Logstash pour transférer les événements du journal vers des systèmes de stockage distants.

Dans la pile ELK, les utilisateurs utilisent le moteur Elasticsearch pour stocker les événements du journal. Ici, dans l'exemple suivant, nous allons générer des événements de journal pour un moteur Elasticsearch local.

Installation du plug-in de sortie Elasticsearch

Nous pouvons installer le plugin de sortie Elasticsearch avec la commande suivante.

>logstash-plugin install Logstash-output-elasticsearch

logstash.conf

Ce fichier de configuration contient un plugin Elasticsearch, qui stocke l'événement de sortie dans Elasticsearch installé localement.

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

Le bloc de code suivant montre les données du journal d'entrée.

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

Démarrez Elasticsearch sur Localhost

Pour démarrer Elasticsearch sur l'hôte local, vous devez utiliser la commande suivante.

C:\elasticsearch\bin> elasticsearch

Une fois qu'Elasticsearch est prêt, vous pouvez le vérifier en tapant l'URL suivante dans votre navigateur.

http://localhost:9200/

Réponse

Le bloc de code suivant montre la réponse d'Elasticsearch sur 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 - Pour plus d'informations sur Elasticsearch, vous pouvez cliquer sur le lien suivant.

Maintenant, exécutez Logstash avec le Logstash.conf mentionné ci-dessus

>Logstash –f Logstash.conf

Après avoir collé le texte mentionné ci-dessus dans le journal de sortie, ce texte sera stocké dans Elasticsearch by Logstash. Vous pouvez vérifier les données stockées en tapant l'URL suivante dans le navigateur.

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

Réponse

Ce sont les données au format JSON stockées dans l'index 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":[]
         }
      }
   }
}