35

我知道已保存的Kibana仪表板(即仪表板的 JSON 文件)保存在或关联到特定的ElasticSearch实例。如果我在连接到托管 ElasticSearch 的服务器时保存我的 Kibana 实例,并且我要将我的 ElasticSearch 服务器切换到另一个地址,我会丢失我保存的仪表板。但是,如果我要切换回原始服务器地址,我将恢复保存的仪表板。

因此,我的问题是在elasticsearch安装目录中保存仪表板的确切位置。我宁愿能够运行一个脚本来自动加载我预先创建的 Kibana 仪表板,而不是每次启动一个新的 ElasticSearch 实例时都被迫通过 Web 控制台复制/粘贴 JSON。

感谢您的帮助。

更新

根据这篇Google Groups 帖子,仪表板保存在kibana-int_index 中,其中 _typedashboard和 _id 是我命名的 . 那么,要将我的仪表板保存到新的 ElasticSearch 实例中,我是否只需要通过 CURL 将 PUT 执行到这个 _index 中?有一个更好的方法吗?

4

7 回答 7

24

是的,Kibana 仪表板保存在 Elasticsearch 中的kibana-int索引下(默认情况下,您可以在config.js文件中覆盖它)。如果您想将 Kibana 仪表板移动到另一个 ES 集群,您有两种选择:

  1. 手动导出仪表板。单击保存 -> 高级 -> 导出架构。您必须保存文件,然后在必须导入的新 Kibana 中单击加载 -> 高级 -> 选择文件并选择已选择的文件。这很痛苦,因为您必须为每个要迁移的仪表板执行此操作。
  2. 您可以使用实用程序将 ES 索引从一个 ES 集群迁移到另一个。已经有一些实用程序可以执行此操作。在 SO 中搜索,我发现这个答案建议您使用Elasticsearch.pm 库(Perl:S)来执行此操作。可能还有更多这样的实用程序,但我不认为编写将索引迁移到另一个集群的脚本是一项如此艰巨的任务。

编辑:reindex对于第二个选项,如果您对 Python 感觉更舒服,您可以使用 python elasticsearch 库及其助手: https://elasticsearch-py.readthedocs.org/en/latest/helpers.html#elasticsearch.helpers。重新索引

于 2014-02-26T19:04:24.540 回答
9

其实很简单,复制两个文件夹:

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

粘贴新的弹性搜索。

于 2015-06-24T19:57:41.800 回答
5

这是一个独立的 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))
于 2014-07-23T12:52:57.280 回答
4

在 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

这使您能够快速备份(快照)和恢复任何给定集群上的每个或任何索引。因此,您可能希望考虑升级到该版本,因为这将为您提供一个简单的 API 调用来获取“kibana-int”索引的快照,并将该索引恢复到任何其他集群。

于 2014-05-19T14:32:03.337 回答
4

对于 kibana 4,我在 config/kibana.yml 文件中找到了默认索引值,它是“.kibana”

以下是来自 kibana 配置文件的行。

kibana_index: ".kibana"

这是向我显示所需结果的查询

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

于 2015-05-05T09:58:31.077 回答
2

正如其他人所说,您可以在 elasticsearch 的 .kibana 索引中找到 Kibana 保存的所有对象。

最新版本的 Kibana 4 包括一个导出和导入功能,这使得将对象从一个安装移动到另一个安装非常容易。您可以通过单击“设置”然后单击“对象”选项卡来找到此功能。

于 2015-06-12T07:34:02.810 回答
0

https://github.com/jim-davis/kibana-helper-scripts有一个独立的 Ruby 脚本,可以将单个仪表板、其可视化以及它们存储的搜索从一个集群复制到另一个集群。它有点太大,无法粘贴到此框中。

于 2015-06-23T15:33:49.960 回答