Logstash - Architecture interne

Dans ce chapitre, nous discuterons de l'architecture interne et des différents composants de Logstash.

Architecture du service Logstash

Logstash traite les journaux de différents serveurs et sources de données et se comporte comme l'expéditeur. Les expéditeurs sont utilisés pour collecter les journaux et ceux-ci sont installés dans chaque source d'entrée. Les courtiers aimentRedis, Kafka ou RabbitMQ sont des tampons pour contenir les données des indexeurs, il peut y avoir plus d'un courtier en tant qu'instances basculées.

Indexeurs comme Lucenesont utilisés pour indexer les journaux pour de meilleures performances de recherche, puis la sortie est stockée dans Elasticsearch ou dans une autre destination de sortie. Les données du stockage de sortie sont disponibles pour Kibana et d'autres logiciels de visualisation.

Architecture interne de Logstash

Le pipeline Logstash se compose de trois composants Input, Filters et Output. La partie d'entrée est chargée de spécifier et d'accéder à la source de données d'entrée telle que le dossier journal duApache Tomcat Server.

Exemple pour expliquer le pipeline Logstash

Le fichier de configuration Logstash contient les détails sur les trois composants de Logstash. Dans ce cas, nous créons un nom de fichier appeléLogstash.conf.

La configuration suivante capture les données d'un journal d'entrée «inlog.log» et les écrit dans un journal de sortie «outlog.log» sans aucun filtre.

Logstash.conf

Le fichier de configuration Logstash copie simplement les données du inlog.log fichier en utilisant le plugin d'entrée et vide les données du journal vers outlog.log fichier en utilisant le plugin de sortie.

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

Exécutez Logstash

Logstash utilise –f option pour spécifier le fichier de configuration.

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

inlog.log

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

Hello tutorialspoint.com

outlog.log

La sortie Logstash contient les données d'entrée dans le champ de message. Logstash ajoute également d'autres champs à la sortie comme l'horodatage, le chemin de la source d'entrée, la version, l'hôte et les balises.

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

Comme vous le pouvez, la sortie de Logstash contient plus que les données fournies via le journal d'entrée. La sortie contient le chemin source, l'horodatage, la version, le nom d'hôte et la balise, qui sont utilisés pour représenter les messages supplémentaires tels que les erreurs.

Nous pouvons utiliser des filtres pour traiter les données et les rendre utiles à nos besoins. Dans l'exemple suivant, nous utilisons un filtre pour obtenir les données, ce qui limite la sortie aux seules données avec un verbe comme GET ou POST suivi d'unUnique Resource Identifier.

Logstash.conf

Dans cette configuration Logstash, nous ajoutons un filtre nommé grokpour filtrer les données d'entrée. L'événement du journal d'entrée, qui correspond au journal d'entrée de la séquence de modèles, n'atteint que la destination de sortie avec une erreur. Logstash ajoute une balise nommée "_grokparsefailure" dans les événements de sortie, qui ne correspond pas à la séquence de motifs de filtre Grok.

Logstash propose de nombreux modèles de regex intégrés pour analyser les journaux de serveur populaires comme Apache. Le modèle utilisé ici attend un verbe comme get, post, etc., suivi d'un identifiant de ressource 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"
   }
}

Exécutez Logstash

Nous pouvons exécuter Logstash en utilisant la commande suivante.

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

inlog2.log

Notre fichier d'entrée contient deux événements séparés par un délimiteur par défaut, c'est-à-dire un délimiteur de nouvelle ligne. Le premier événement correspond au modèle spécifié dans GROk et le second non.

GET /tutorialspoint/Logstash
Input 1234

outlog2.log

Nous pouvons voir que le deuxième événement de sortie contient la balise "_grokparsefailure", car il ne correspond pas au modèle de filtre Grok. L'utilisateur peut également supprimer ces événements sans correspondance dans la sortie en utilisant le‘if’ condition dans le plugin de sortie.

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