2
votes

Comment réparer les documents dupliqués dans Elasticsearch lors de l'indexation par Logstash?

J'utilise Elastic Stack pour gérer mes fichiers journaux, mais je génère des documents dupliqués dans Elasticsearch.

J'ai fait une enquête et j'ai déjà essayé d'ajouter le "document_id", mais cela n'a pas résolu.

/ p>

Voici la configuration de mon Logstash:

{
  "_index": "logstash-2019.05.02-000001",
  "_type": "_doc",
  "_id": "EbncP00tf9yMxXoEBU4BgAAX/gc=",
  "_version": 1,
  "_score": null,
  "_source": {
    "@version": "1",
    "fingerprint": "EbncP00tf9yMxXoEBU4BgAAX/gc=",
    "message": "(thiago.alves@192.168.0.200) [06/05/2019 18:50:08] Logout do usuário 'thiago.alves'. (cookie=9d6e545860c24a9b8e3004e5b2dba4a6). IP=192.168.0.200",
    ...
}

######### DUPLICATED #########

{
  "_index": "logstash-2019.05.02-000001",
  "_type": "_doc",
  "_id": "V7ogj2oB8pjEaraQT_cg",
  "_version": 1,
  "_score": null,
  "_source": {
    "@version": "1",
    "fingerprint": "EbncP00tf9yMxXoEBU4BgAAX/gc=",
    "message": "(thiago.alves@192.168.0.200) [06/05/2019 18:50:08] Logout do usuário 'thiago.alves'. (cookie=9d6e545860c24a9b8e3004e5b2dba4a6). IP=192.168.0.200",
    ...
}

Voici les documents dupliqués:

input {
  beats {
    port => 5044
  }
}

filter {

  fingerprint {
    source => "message"
    target => "[fingerprint]"
    method => "SHA1"
    key => "key"
    base64encode => true
  } 

  if [doctype] == "audit-log" {
    grok {
      match => { "message" => "^\(%{GREEDYDATA:loguser}@%{IPV4:logip}\) \[%{DATESTAMP:logtimestamp}\] %{JAVALOGMESSAGE:logmessage}$" }
    }
    mutate {
      remove_field => ["host"]
    }
    date {
      match => [ "logtimestamp" , "dd/MM/yyyy HH:mm:ss" ]
      target => "@timestamp"
      locale => "EU"
      timezone => "America/Sao_Paulo"
    } 
  }  

}

output {
  elasticsearch {
    hosts => "192.168.0.200:9200"
    document_id => "%{[fingerprint]}"
  }
}

C'est il. Je ne sais pas encore pourquoi la duplication. Quelqu'un a une idée?

Merci d'avance ...


3 commentaires

Je suis surpris de voir les crochets autour des empreintes digitales. Avez-vous essayé de définir le document_id sur "% {fingerprint}"?


Je seconde @JoeZack, vous devez utiliser l'empreinte digitale comme ID de document et le problème sera résolu


Tout d'abord, merci pour votre aide. J'ai essayé d'utiliser l'empreinte digitale sans les crochets, mais malheureusement le problème persiste ... Merci.


3 Réponses :


1
votes

Générez une clé UUID pour chaque document, puis votre problème sera résolu.


2 commentaires

Nous avons rencontré un problème similaire aux OP et la configuration et l'UUID ont en fait résolu notre problème. Le logstash-filter-uuid fonctionne bien, mais fondamentalement, tout type de méthode de génération d'ID fonctionne tant que vous utilisez le paramètre document_id dans la sortie Elasticsearch comme décrit ici: élastique.co/guide/en/logstash/6.3/…


Tout d'abord, merci pour votre aide. J'ai essayé d'utiliser l'UUID, mais malheureusement le problème persiste ... Voici le lien que j'ai suivi: logstash-leçons-manipulation-doublons Merci.



1
votes

Votre code semble correct et ne devrait pas autoriser les doublons, peut-être que celui en double a été ajouté avant que vous ayez ajouté document_id => "% {[fingerprint]}" à votre journal, donc elasticsearch a généré un fichier unique Id pour celui qui ne sera pas remplacé par d'autres identifiants, supprimez manuellement le dupliqué (celui ayant _id différent de l'empreinte digitale) et réessayez, cela devrait fonctionner.


2 commentaires

Tout d'abord, merci pour votre aide. J'indexe à partir d'un fichier journal et chaque document indexé est en double, je ne sais pas comment réessayer avec le même document. Je vous remercie.


Supprimez alors tout l'index et voyez si cela vous aide.



2
votes

J'ai eu ce problème une fois et après de nombreuses tentatives pour le résoudre, j'ai réalisé que j'avais fait une sauvegarde de mon fichier conf dans le dossier 'pipeline' et que le logstash utilisait ce fichier de sauvegarde pour traiter leurs règles d'entrée. Soyez prudent car Logstash utilisera d'autres fichiers dans le dossier pipeline, même l'extension de fichier sera différente de '.conf'.

Donc, veuillez vérifier si vous avez d'autres fichiers dans le dossier «pipeline».

Veuillez me faire savoir si cela vous a été utile.


1 commentaires

OMG!!! Très bien! J'avais vraiment un autre fichier dans le répertoire du pipeline, mais je ne savais pas que Logstash l'envisageait. J'ai supprimé l'autre fichier et le problème est résolu. Merci beaucoup. Toutes nos félicitations!!!