2017-07-11 1 views
0

Désolé pour le titre, mon cas ne pouvait vraiment pas être expliqué avec une seule phrase.Ajout de données de MongoDB dans des fichiers journaux en cours de traitement par Logstash et analysés dans Elasticsearch

Voici ma situation:

  1. J'ai un grand nombre de fichiers journaux (environ 4 Go) que je souhaite analyser avec Logstash à utiliser avec pile élastique (Logstash, ElasticSearch, Kibana).
  2. Dans les journaux, il y a un numéro de série que j'ai analysé avec succès avec Logstash. Ce nombre correspond à un index d'une collection MongoDB. Au fur et à mesure que chaque journal est analysé, je veux pouvoir interroger la collection avec le numéro analysé et extraire les données que je veux inclure dans la sortie finale transmise à Elasticsearch.

Pour rendre les choses plus claires, voici un exemple approximatif. Supposons que j'ai le journal brut:

2017-11-20 14:24:14.011 123 log_number_one 

Avant le journal analysable est envoyé à ElasticSearch, je veux interroger ma collection MongoDB avec 123 et obtenir des données data1 et data2 à ajouter au document à envoyer à ElasticSearch, donc mon résultat final aura des champs ressembler à quelque chose comme:

{ 
    timestamp: 2017-11-20 14:24:14.011, 
    serial: 123, 
    data1: "foo", 
    data2: "bar", 
    log: log_number_one 
} 

Un moyen plus facile d'y arriver, je suppose, serait simplement prétraiter les journaux et exécuter les numéros par MongoDB avant de les analyse par Logstash. Cependant, vu que j'ai 4 Go de valeur de fichiers journaux, j'espérais un moyen d'y parvenir en un seul coup. Je me demandais si mon boîtier de bord serait résolu avec le plugin de filtre ruby, où je pourrais éventuellement exécuter un code arbitraire ruby ​​pour faire ce qui précède?

Toute aide/conseil serait grandement apprécié!

Répondre

0

Réponse de Christian_Dahlqvist, membre de l'équipe élastique (tous les crédits à lui):

En fonction du nombre d'enregistrements et la taille totale des données dans MongoDB (en supposant qu'il est un ensemble de données de taille raisonnable) , vous pouvez extraire les données dans un fichier où chaque numéro de série est associé à une représentation sous forme de chaîne de données au format JSON. Vous pouvez ensuite utiliser le translate filter pour remplir un champ avec le JSON sérialisé en fonction du numéro de série, puis utiliser un filtre de fils pour l'analyser et l'ajouter à l'événement.

Référence: https://discuss.elastic.co/t/appending-data-from-mongodb-into-log-files-being-processed-by-logstash-and-parsed-into-elasticsearch/92564/2