読者です 読者をやめる 読者になる 読者になる

Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

Elasticsearchのデータを別のElasticsearchに入れるいくつかの方法

Elasticsearch

こんにちは、 @ です。

この記事は、Elastic stack Advent Calendar 2016の8日目です。
qiita.com

皆さんは、Elasticsearchのデータを、別のElasticsearchに入れたいことってありませんか?
私は実際に、

  1. 各自がアドホックに分析するため、個人用のElasticsearchを立てているので、そこにコピーしたい
  2. 遠隔地にあり、直接アクセスできないElasticsearchのデータを確認したい

ということをしたい場合があります。
今回は、このようなケースで使える方法をいくつか紹介します。

正攻法はsnapshot機能を利用することかもしれませんが、ちょっとしたコピーをしたいときには敷居が高いのではないかと思います。
ここでは、もう少し簡易に実行する方法を紹介します。

(方法1) Logstashでコピーする

まずは、

各自がアドホックに分析するため、個人用のElasticsearchを立てているので、そこにコピーしたい

のようなケースで使い勝手が良いコピー方法です。

コピー元とコピー先のElasticsearchが同一ネットワークにあることが前提になりますが、LogstashのElasticsearchプラグインを利用してコピーするのが便利です。
具体的な方法については、こちらを参考にすると良いと思います。
stackoverflow.com

(方法2) コピー元で取得したJSONをコピー先に入れる

次は、

遠隔地にあり、直接アクセスできないElasticsearchのデータを確認したい

のようなケースで使い勝手が良いコピー方法です。

遠隔地で別の人がKibanaを操作していて、見ているデータを自分でも確認したくなるケースがあります。
この場合、KibanaのDiscover機能でデータを取得し、コピー先に入れるのが便利です。
具体的には、次の方法でコピーすることができます。

コピー元でデータを取得する

まずは、コピー元でElasticsearchに入っているデータを次の手順で取得します。

1.メニューから「Discover」をクリックし、Discover画面を表示する
f:id:acro-engineer:20161208061505j:plain

2.コピーしたい時刻に合わせ、グラフ左下の上矢印をクリックする
f:id:acro-engineer:20161208061548j:plain

3.テーブルの上にある「Response」をクリックする
f:id:acro-engineer:20161208061653j:plain

4.表示されるJSONをコピーし、ファイルに保存する(ここでは、Response.jsonに保存するものとします)
f:id:acro-engineer:20161208061743j:plain

コピー先にデータを登録する

次に、コピー先のElasticsearchに入っているデータを登録します。
私はちょっとしたPythonスクリプトを使っています。

1.Pythonがインストールされていない場合は、以下のサイトからダウンロードし、インストールする
www.python.org

2.Python用Elasticsearchクライアントがインストールされていない場合は、インストールする

pip install elasticsearch

3.次のPythonスクリプトを実行する

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json
from elasticsearch import Elasticsearch

es = Elasticsearch('192.168.0.1')

file = open('Response.json', 'r')
json_data = json.load(file)

for data in json_data['hits']['hits']:
    es.index(index=data['_index'],
             doc_type=data['_type'],
             body=data['_source'],
             id=data['_id'])

※'192.168.0.1'のところには、コピー先のElasticsearchを指定してください。

これで、コピー先のElasticsearchにデータが入ります。


私の場合、遠隔地のデータを確認したいケースがあるため、これで重宝しています。
この方法が、同じような状況の方に役立てば幸いです。

Acroquest Technologyでは、キャリア採用を行っています。


  • ビッグデータHadoop/Spark、NoSQL)、データ分析(Elasticsearch、Python関連)、Web開発(SpringCloud/SpringBoot、AngularJS)といった最新のOSSを利用する開発プロジェクトに関わりたい。
  • マイクロサービスDevOpsなどの技術を使ったり、データ分析機械学習などのスキルを活かしたい。
  • 社会貢献性の高いプロジェクトや、顧客の価値を創造するようなプロジェクトで、提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や、対外的な勉強会の開催・参加を通した技術の発信、社内勉強会での技術情報共有により、エンジニアとして成長したい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
www.wantedly.com