2018年11月15日 工程

如何迁移至 Kibana Spaces

作者 Brandon Kobel

迁移至 Spaces

Kibana 6.5 开始,您可以利用 Spaces 整理仪表板、可视化和其他已保存对象,将它们归到不同的类别。此外,如果使用安全功能的话,您还能够控制每个角色能够访问哪一空间,这样便可允许更多用户使用同一个 Kibana 实例来整理各自的那部分已保存对象。

升级至支持 Spaces 的 Kibana 版本时,您的全部既有已保存对象都会出现在“Default”(默认)空间中。然后,您便可以通过下面列出的某种方法在不同空间之间转移对象了。

在不同的空间之间转移已保存对象

如要将已保存对象从一个空间转移至另一个空间,您可以使用 Kibana 内的“导入/导出 UI”。有一点需要注意:使用“导入/导出 UI”转移已保存对象时,该对象所关联的已保存对象不会自动转移。如果您希望在不同空间之间转移某个仪表板及其全部的依赖因素,请参阅本文的“将仪表板从一个空间移至另一个空间”部分。

举例说明,如要将某个索引模式从一个空间转移至另一个空间,前往“Management”(管理)>“Saved Object”(已保存对象),然后选择您希望转移的已保存对象。单击“Export”(导出)后,您便能够选择将导出的 JSON 文件保存到哪里。

Export Saved ObjectI

然后,使用空间选择工具选择其他空间:

Change Space

更改完现有空间后,返回至“Management”(管理)>“Saved Object”(已保存对象)。由于各个空间的已保存对象是完全独立的,所以您看不到刚刚导出的索引模式。如要导入您刚刚导出的索引模式,单击“Import”(导入),然后浏览您之前保存 JSON 文件的位置。

Import Saved Object

您现在便可看到刚才导入的索引模式已经出现。 尽管有两个不同的索引模式,但它们对应的都是 Elasticsearch 中的同一个底层索引。由于每个空间的已保存对象是完全独立的,所以您对其中任何一个索引模式所做的更改不会影响到另一个空间内的索引模式。如果觉得没有必要再将索引模式保留在初始空间中,您可以安全地将其删除,您导出的索引模式仍会保留在新复制到的空间中。

将多租户整合到 Spaces 中

如果您使用多个配有各自 Elasticsearch 索引的 Kibana 租户以将 Kibana 用户分隔开,您现在则可通过 Spaces 使用“导入/导出 UI”将所有租户整合为单一租户。如要将您的所有已保存对象从租户中导出,请前往“Management”(管理)>“Saved Objects”(已保存对象),单击顶部的复选框以选中所有对象,接下来单击“Export”(导出)。

Export all Saved Objects

然后系统会提示您希望将 JSON 文件保存在何处。

导出已保存对象后,前往目标 Kibana 实例,如果其内尚无空间的话,请创建一个目标空间,接下来选中此空间。前往“Management”(管理)>“Saved Objects”(已保存对象),选择“Imports”(导入),然后找到您刚才保存的 JSON 文件。这一操作会将选中的已保存对象导入到空间中。

将仪表板从一个空间转移至另一个空间

如果仅需转移单个已保存对象,在 Kibana 中使用“导入/导出 UI”是一个很好的选择,但是如果您希望转移仪表板及其关联的所有可视化、已保存搜索和索引模式,则“导入/导出 UI”还有很多不尽如人意的地方。如要将仪表板转移至其他空间,最简单的方法是使用仪表板导入/导出 API

导出仪表板

如要导出仪表板,我们必须首先确定仪表板的 ID。打开您希望导出的仪表板,检查一下其 URL,“/app/kibana#/dashboard/”和“?”之间的内容便是其 ID。下面的 URL 中便高亮显示出了仪表板 ID:

http://localhost:5601/s/marketing/app/kibana#/dashboard/<b>d203dd90-deac-11e8-869e-d73106bbd5ad</b>?_g=()

同理,我们也需要使用仪表板 URL 来确定仪表板所属空间的 URL 标识符。空间 URL 标识符位于 URL 的初始位置,位于“/s/”和“/app/kibana#dashboard”之间。如果您未能在 URL 中看到“/s/”,则您所在的是默认空间。Kibana 中的所有 URL(包括 API URL)都使用“/s/{spaceID}”格式的空间前缀来区分不同的空间,但有一个例外,如果使用的是默认空间,则不会使用任何前缀。下面的 URL 中便高亮显示出了空间 URL 标识符:

http://localhost:5601/s/<b>marketing</b>/app/kibana#/dashboard/d203dd90-deac-11e8-869e-d73106bbd5ad?_g=()

有了仪表板 ID 之后,我们便可以针对“{spacePrefix}/api/kibana/dashboards/export?dashboard={dashboardID}”执行一次“GET”请求,使用类似下面的 CURL 命令,将 ID 为“d203dd90-deac-11e8-869e-d73106bbd5ad”的仪表板从“marketing”(营销)空间中导出,并将仪表板和其所有依赖元素保存到一个 export.json 文件中:

curl -u elastic:changeme http://localhost:5601/s/marketing/api/kibana/dashboards/export?dashboard=d203dd90-deac-11e8-869e-d73106bbd5ad > export.json

同理,下面的 CURL 命令会从默认空间中导出一个 ID 为“d203dd90-deac-11e8-869e-d73106bbd5ad”的仪表板,并将其保存到一个 export.json 文件中:

curl -u elastic:changeme http://localhost:5601/api/kibana/dashboards/export?dashboard=d203dd90-deac-11e8-869e-d73106bbd5ad > export.json

导入仪表板

现在最复杂的部分已经完成,我们可以将仪表板导入到新空间中了。要完成导入过程,我们需要再次确认目标空间的 URL 标识符,以便构建仪表板 URL 中的空间前缀。使用空间选择工具选择您希望将仪表板转移到哪一个目标空间,然后检查 URL,检查步骤与确定所导出仪表板所属空间的前缀相似。

现在我们可以针对之前保存的 <{spacePrefix}/api/kibana/dashboards/import export.json 文件执行一次“POST”请求了。下面的 CURL 命令会将仪表板导入到“sales”(销售)空间:

curl -H “Content-Type: application/json” -H “kbn-xsrf: true” -u elastic:changeme http://localhost:5601/s/sales/api/kibana/dashboards/import --data-binary @export.json

同理,下面的 CURL 命令会将仪表板导入到默认空间:

curl -H “Content-Type: application/json” -H “kbn-xsrf: true” -u elastic:changeme http://localhost:5601/api/kibana/dashboards/import --data-binary @export.json

仪表板导入完成后,如果觉得没有必要再将其保留在初始空间中,您可以随时将其从初始空间中删除。

亲自试用

如要对仪表板和可视化进行整理和分组,Kibana Spaces 是一项很强大的帮助工具。无论是借助 Spaces 让更多用户使用同一个 Kibana 实例,还是通过 Spaces 实施某个工作流,都请亲自尝试一下,并与我们分享您使用 Spaces 的体验。