web-dev-qa-db-ja.com

ElasticSearchのカスタムKibanaダッシュボードの場所

保存されたKibanaダッシュボード(つまり、ダッシュボードのJSONファイル)はOR特定のElasticSearchインスタンスに関連付けられています。ElasticSearchをホストしている1つのサーバーに接続したときにKibanaインスタンスを保存し、ElasticSearchサーバーを別のサーバーに切り替えた場合アドレスを入力すると、保存したダッシュボードが失われますが、元のサーバーアドレスに戻すと、保存したダッシュボードが返されます。

したがって、私の質問は、elasticsearchインストールディレクトリのどこにダッシュボードが保存されるかです。新しいElasticSearchインスタンスを起動するたびにWebコンソールを介してJSONを強制的にコピー/貼り付けするよりも、事前に作成したKibanaダッシュボードを自動的にロードするスクリプトを実行できます。

お手伝いありがとう。

更新

これによると、 Googleグループの投稿 、ダッシュボードはkibana-int _typeがdashboardで、_idが。したがって、ダッシュボードを新しいElasticSearchインスタンスに保存するには、CURLを介してこの_indexに対してPUTを実行するだけでよいですか?これを行うためのより良い方法はありますか?

26
ecbrodie

はい、KibanaダッシュボードはElasticsearchのkibana-intインデックス(デフォルトでは、config.jsファイル)。 Kibanaダッシュボードを別のESクラスターに移動する場合、2つのオプションがあります。

  1. ダッシュボードを手動でエクスポートします。 [保存]-> [詳細]-> [スキーマのエクスポート]をクリックします。ファイルを保存し、インポートする必要がある新しいKibanaで、[ロード]-> [詳細設定]-> [ファイルの選択]をクリックし、選択したファイルを選択する必要があります。移行するダッシュボードごとにこの操作を行う必要があるため、これは苦痛です。
  2. ユーティリティを使用して、ESインデックスを1つのESクラスターから別のクラスターに移行できます。この操作を実行できるユーティリティが既にいくつかあります。 SOで検索すると、 この回答 が見つかりました。これは Elasticsearch.pmライブラリ (Perl:S)を使用してこれを行うことを示唆しています。おそらくこのようなユーティリティは他にもありますが、インデックスを別のクラスターに移行するスクリプトを実行するのはそれほど難しい作業ではないと思います。

EDIT:2番目のオプションでは、python elasticsearchライブラリとそのヘルパーreindexを使用できます。 、Pythonでより快適に感じる場合: https://elasticsearch-py.readthedocs.org/en/latest/helpers.html#elasticsearch.helpers.reindex

20
Pigueiras

実際、非常に簡単に、2つのフォルダーをコピーします。

1) .\elasticsearch\data\nodes\0\indices\.kibana 
2) .\elasticsearch\data\nodes\0\indices\kibana-int

新しいelasticsearchに貼り付けます。

6
dehamuhtar

以下に、スタンドアロンのPythonスクリプトを使用して、Kibanaダッシュボードをelasticsearchホストから別のホストにコピーできます。

#!/bin/env python

"""Migrate all the kibana dashboard from SOURCE_Host to DEST_Host.

This script may be run repeatedly, but any dashboard changes on
DEST_Host will be overwritten if so.

"""

import urllib2, urllib, json


SOURCE_Host = "your-old-es-Host"
DEST_Host = "your-new-es-Host"


def http_post(url, data):
    request = urllib2.Request(url, data)
    return urllib2.urlopen(request).read()


def http_put(url, data):
    opener = urllib2.build_opener(urllib2.HTTPHandler)
    request = urllib2.Request(url, data)
    request.get_method = lambda: 'PUT'
    return opener.open(request).read()


if __name__ == '__main__':
    old_dashboards_url = "http://%s:9200/kibana-int/_search" % SOURCE_Host

    # All the dashboards (assuming we have less than 9999) from
    # kibana, ignoring those with _type: temp.
    old_dashboards_query = """{
       size: 9999,
       query: { filtered: { filter: { type: { value: "dashboard" } } } } }
    }"""

    old_dashboards_results = json.loads(http_post(old_dashboards_url, old_dashboards_query))
    old_dashboards_raw = old_dashboards_results['hits']['hits']

    old_dashboards = {}
    for doc in old_dashboards_raw:
        old_dashboards[doc['_id']] = doc['_source']

    for id, dashboard in old_dashboards.iteritems():
        put_url = "http://%s:9200/kibana-int/dashboard/%s" % (DEST_Host, urllib.quote(id))
        print http_put(put_url, json.dumps(dashboard))
5
Wilfred Hughes

ElasticSearchのバージョン1.0.0以降では、スナップショットおよび復元APIが利用可能になりました。

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-snapshots.html

http://chrissimpson.co.uk/elasticsearch-snapshot-restore-api.html

これにより、特定のクラスターにあるすべてのインデックスまたはすべてのインデックスをすばやくバックアップ(スナップショット)および復元できます。したがって、「kibana-int」インデックスのスナップショットを取得し、そのインデックスを他のクラスターに復元するための簡単なAPI呼び出しが提供されるため、そのバージョンへのアップグレードを検討することをお勧めします。

4
rabson85

Kibana 4の場合、config/kibana.ymlファイルでデフォルトのインデックス値を見つけましたが、これは「.kibana」でした

以下はkibana設定ファイルの行です。

kibana_index: ".kibana"

そして、これは私に必要な結果を表示したクエリです

curl -XGET http://localhost:9200/.kibana/_search?type=dashboard&pretty=1

3
bhavay garg

他の人が言ったように、kibanaがelasticsearch内の.kibanaインデックスに保存するすべてのオブジェクトを見つけることができます。

Kibana 4の最新バージョンには、あるインストールから別のインストールへのオブジェクトの移動を非常に簡単にするエクスポートおよびインポート機能が含まれています。この機能を見つけるには、「設定」タブをクリックしてから「オブジェクト」タブをクリックします。

2
Spencer Alger

単一のダッシュボード、その視覚化、およびあるクラスターから別のクラスターに保存された検索をコピーできるスタンドアロンのRubyスクリプトは https://github.com/jim-davis/ kibana-helper-scripts 。このボックスに貼り付けるには大きすぎます。

0
Jim Davis