Rétention des documents


(Jérôme GONTIER) #1

Bonjour à tous,

Je me permets de solliciter votre aide car j'ai hérité de la configuration suivante ElasticSearch Kibana et Logtash installé par un collègue partie depuis. Je ne connais absolument pas ces trois éléments, ce n'est pas mon metiers (Virtualisation et Stockage oui, bdd non), et mon client me demande d'intervenir dessus.
Le problème concerne la taille des documents (314,420,910) pour 168Go. J'image que par défaut, ES garde tout, j'ai cherché sur le site de l’éditeur, ce lien (https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-ttl-field.html ) me parait correct, mais comment dois-je procéder?, c'est là que je suis perdu.
Merci d'avance pour votre compréhension et surtout de l'aide que vous pourrez m'apporter.

Jérôme


(Christophe Boucaut) #2

De toute évidence, il suffit de passer la configuration via le mapping (ce qui sert à décrire les champs d'un document et le type de documents). un simple:

curl -XPUT 'http://localhost:9200/twitter/_mapping/tweet' -d '
{
    "tweet" : {
        "_ttl" : { "enabled" : true, "default" : "1d" }
    }
}
'

devrait suffire. Cependant, je ne suis pas sur qu'il va s'appliquer sur les documents déjà indexés et qu'ils sont à présent périmés. Si cette solution fonctionne pour les nouveaux documents mais pas pour les anciens, il faudra peut-être faire une requête pour les supprimer à la main si une date a été indexées avec (ce qui semble vraisemblable puisque l'on parle de log ici je pense, donc la data doit être avec).

La problématique ici est bien de supprimer les documents après x jours ?


(Jérôme GONTIER) #3

Merci pour votre réponse rapide.
Pour répondre à votre dernière question, c'est exactement ça.
Par contre, pour l'action que vous me soumettez, je procède comment, ssh, terminal direct sur le serveur? Quand je dis que je suis novice, je ne ment pas :worried:


(David Pilato) #4

A noter que si le besoin est de supprimer tous les docs après x jours, le mieux est d'utiliser un index par jour, ajouter un alias sur les index à requêter puis de supprimer les vieux index tous les jours (avec curator par exemple).

Supprimer des docs un par un est inefficace dans ce contexte (niveau perfs).


(Christophe Boucaut) #5

C'est vrai que la solution de david est meilleure ^^ Surtout que ça doit etre ta situation. Si non, pour ma commande, l’exécuter depuis n'importe où qui a un accès au serveur. Donc si y a un quelque chose qui protège les appels à elasticsearch depuis l'extérieur, connectes toi au serveur et exécute la commande.

A voir si ça fonctionne bien ^^ je n'ai pas essayé.


(Jérôme GONTIER) #6

Bonjour,
Merci pour votre réponse, je pense que ça a été configuré comme ça car les index se nomme tous "logstash-date-du-jour" ou "Marvel-date-du-jour" (pour le coup lui consomme très peu d'espace). En plus, je viens de me rendre compte que les document du 21 mai avaient tous disparus, se qui implique qu'il y a peut-être un TTL en place ou un CRON. Va falloir que j'explore les entrailles de la bêtes. Une idée où chercher?

Jérôme


(David Pilato) #7

Elasticsearch ne fait jamais de autodrop d'index. Il y a une issue à ce sujet mais à ce jour il n'y a pas de TTL sur un index.
Donc quelqu'un a fait ce drop. Que ce soit manuel ou via un outil tel curator.


(Samir) #8

Bonjour David,

Je viens de tomber sur votre post. J'ai une petite question : A quoi sert exactement les alias ?
Les index peuvent être requeté directement, pourquoi avoir recours aux alias ?

Merci d'avance !


(David Pilato) #9

Le mieux est d'ouvrir une nouvelle discussion quite à faire référence à ce thread.

Les alias servent à pouvoir changer d'index sans avoir à changer son code.

J'ai un index I1 et un alias A.

Mon code utilise A pour faire des requêtes.
I1 a un seul shard.

6 mois plus tard, je me rends compte que mon index sature. Je crée un index I2 avec 2 shards. Je fais un _reindex de I1 vers I2, je switche l'alias vers I2. Je supprime I1.

Mon application et mes utilisateurs n'ont rien vu.