Copie données ElasticSearch

De EjnTricks
Révision de 22 mai 2018 à 14:31 par Etienne (discussion | contributions)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

Lors de l'utilisation de ElasticSearch, il peut être nécessaire de dupliquer des données d'un indexe à un autre. Cet article présente cette opération avec le rennomage d'un champs. Ceci a été nécessaire suite à une modification de la configuration de lecture de fichier trace par Logstash, où le premier mapping ne prenait pas correctement en compte la géolocalisation.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Viewer icon.png Objectif

Pour cet article, l'objectif est de dupliquer toutes les données des indexes fail2ban-2018.04 et fail2ban-2018.05 vers f2b-2018.04 et f2b-2018.05, avec un renommage de la propriété clientip en ip.

L'API _reindex, en mode POST, est utilisée avec un script permettant d'effectuer le renommage. Il suffit de fournir l'indexe origine ainsi que la cible.


Un exemple est fournie dans la documentation officielle : https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html#docs-reindex-change-name


Start-icon.png Exécution

L'exécution peut se faire facilement en ligne de commande.

Le premier exemple permet de copier les données de fail2ban-2018.04 vers f2b-2018.04.

#curl -X POST "localhost:9200/_reindex" -H 'Content-Type: application/json' -d'
{
  "source": {
    "index": "fail2ban-2018.04"
  },
  "dest": {
    "index": "f2b-2018.04"
  },
  "script": {
    "inline": "ctx._source.ip = ctx._source.remove(\"clientip\")"
  }
}
'

{"took":4435,"timed_out":false,"total":2929,"updated":0,"created":2929,"deleted":0,"batches":3,"version_conflicts":0,"noops":0,"retries":{"bulk":0,"search":0},"throttled_millis":0,"requests_per_second":-1.0,"throttled_until_millis":0,"failures":[]}

A noter le contenu du noeud script dans lequel une opération "en ligne" est exécutée afin de recopier la valeur de clientip vers ip, puis de la supprimer.

De la même façon, le conteun de l'index fail2ban-2018.05 est copié vers f2b-2018.05. L'utilisation de l'argument pretty permet d'optenir un affichage plus lisible.

#curl -X POST "localhost:9200/_reindex?pretty" -H 'Content-Type: application/json' -d'
{
  "source": {
    "index": "fail2ban-2018.05"
  },
  "dest": {
    "index": "f2b-2018.05"
  },
  "script": {
    "inline": "ctx._source.ip = ctx._source.remove(\"clientip\")"
  }
}
'
{
  "took" : 18129,
  "timed_out" : false,
  "total" : 28482,
  "updated" : 0,
  "created" : 28482,
  "deleted" : 0,
  "batches" : 29,
  "version_conflicts" : 0,
  "noops" : 0,
  "retries" : {
    "bulk" : 0,
    "search" : 0
  },
  "throttled_millis" : 0,
  "requests_per_second" : -1.0,
  "throttled_until_millis" : 0,
  "failures" : [ ]
}


Viewer icon.png Voir aussi

Documentation officielle: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html#docs-reindex-change-name