保存されたKibanaダッシュボード(つまり、ダッシュボードのJSONファイル)はOR特定のElasticSearchインスタンスに関連付けられています。ElasticSearchをホストしている1つのサーバーに接続したときにKibanaインスタンスを保存し、ElasticSearchサーバーを別のサーバーに切り替えた場合アドレスを入力すると、保存したダッシュボードが失われますが、元のサーバーアドレスに戻すと、保存したダッシュボードが返されます。
したがって、私の質問は、elasticsearchインストールディレクトリのどこにダッシュボードが保存されるかです。新しいElasticSearchインスタンスを起動するたびにWebコンソールを介してJSONを強制的にコピー/貼り付けするよりも、事前に作成したKibanaダッシュボードを自動的にロードするスクリプトを実行できます。
お手伝いありがとう。
これによると、 Googleグループの投稿 、ダッシュボードはkibana-int
_typeがdashboard
で、_idが。したがって、ダッシュボードを新しいElasticSearchインスタンスに保存するには、CURLを介してこの_indexに対してPUTを実行するだけでよいですか?これを行うためのより良い方法はありますか?
はい、KibanaダッシュボードはElasticsearchのkibana-int
インデックス(デフォルトでは、config.js
ファイル)。 Kibanaダッシュボードを別のESクラスターに移動する場合、2つのオプションがあります。
EDIT:2番目のオプションでは、python elasticsearchライブラリとそのヘルパーreindex
を使用できます。 、Pythonでより快適に感じる場合: https://elasticsearch-py.readthedocs.org/en/latest/helpers.html#elasticsearch.helpers.reindex
実際、非常に簡単に、2つのフォルダーをコピーします。
1) .\elasticsearch\data\nodes\0\indices\.kibana
2) .\elasticsearch\data\nodes\0\indices\kibana-int
新しいelasticsearchに貼り付けます。
以下に、スタンドアロンの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))
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呼び出しが提供されるため、そのバージョンへのアップグレードを検討することをお勧めします。
Kibana 4の場合、config/kibana.ymlファイルでデフォルトのインデックス値を見つけましたが、これは「.kibana」でした
以下はkibana設定ファイルの行です。
kibana_index: ".kibana"
そして、これは私に必要な結果を表示したクエリです
curl -XGET http://localhost:9200/.kibana/_search?type=dashboard&pretty=1
他の人が言ったように、kibanaがelasticsearch内の.kibanaインデックスに保存するすべてのオブジェクトを見つけることができます。
Kibana 4の最新バージョンには、あるインストールから別のインストールへのオブジェクトの移動を非常に簡単にするエクスポートおよびインポート機能が含まれています。この機能を見つけるには、「設定」タブをクリックしてから「オブジェクト」タブをクリックします。
単一のダッシュボード、その視覚化、およびあるクラスターから別のクラスターに保存された検索をコピーできるスタンドアロンのRubyスクリプトは https://github.com/jim-davis/ kibana-helper-scripts 。このボックスに貼り付けるには大きすぎます。