导入对象 API编辑

[预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能的支撑 SLA 的约束。 从导出 API 创建的文件中创建一组 Kibana 保存对象。

有关最新 API 详细信息,请参阅 开放 API 规范

跨版本兼容性编辑

保存对象只能导入到相同版本、同一主版本上的较新次要版本或下一个主版本。导出的保存对象不向后兼容,无法导入到较旧版本的 Kibana 中。有关兼容性示例,请参见下表

导出版本

导入版本

兼容?

6.7.x

6.8.x

6.x.x

7.x.x

7.x.x

8.x.x

7.1.x

7.15.x

7.x.x

6.x.x

7.15.x

7.1.x

6.x.x

8.x.x

请求编辑

POST <kibana 主机>:<端口>/api/saved_objects/_import

POST <kibana 主机>:<端口>/s/<空间 ID>/api/saved_objects/_import

路径参数编辑

空间 ID
(可选,字符串) 空间 的标识符。如果 URL 中未提供 空间 ID,则使用默认空间。

查询参数编辑

createNewCopies

(可选,布尔值) 创建保存对象的副本,重新生成每个对象 ID 并重置来源。使用此选项时,可以避免潜在的冲突错误。

此选项不能与 overwritecompatibilityMode 选项一起使用。

overwrite

(可选,布尔值) 当保存对象已存在时覆盖它们。使用此选项时,潜在的冲突错误会通过覆盖目标对象自动解决。

此选项不能与 createNewCopies 选项一起使用。

compatibilityMode

(可选,布尔值) 对要导入的保存对象应用各种调整,以保持不同 Kibana 版本之间的兼容性。仅当您遇到导入保存对象的问题时才使用此选项。

此选项不能与 createNewCopies 选项一起使用。

请求正文编辑

请求正文必须包含 multipart/form-data 类型。

文件

使用导出 API 导出的文件。

savedObjects.maxImportExportSize 配置设置限制了此文件中可能包含的保存对象数量。类似地,savedObjects.maxImportPayloadBytes 设置限制了可以导入的文件的总大小。

响应正文编辑

成功
(布尔值) 指示导入是否成功完成。当设置为 false 时,某些对象可能未创建。有关更多信息,请参阅 errorssuccessResults 属性。
成功计数
(数字) 指示成功导入的记录数量。
错误

(可选,数组) 指示导入不成功,并指定未成功导入的对象。

一个对象可能会导致多个错误,这需要单独的步骤来解决。例如,missing_references 错误和 conflict 错误。

successResults

(可选,数组) 指示成功导入的对象,以及任何元数据(如果适用)。

只有在解决所有可解决的错误(包括冲突和缺少引用)后才会创建对象。有关如何解决错误的信息,请参阅 示例

响应代码编辑

200
指示成功调用。

示例编辑

成功导入,启用 createNewCopies编辑

导入数据视图和仪表盘

$ curl -X POST api/saved_objects/_import?createNewCopies=true -H "kbn-xsrf: true" --form [email protected]

file.ndjson 文件包含以下内容

{"type":"index-pattern","id":"my-pattern","attributes":{"title":"my-pattern-*"}}
{"type":"dashboard","id":"my-dashboard","attributes":{"title":"Look at my dashboard"}}

API 返回以下内容

{
  "success": true,
  "successCount": 2,
  "successResults": [
    {
      "id": "my-pattern",
      "type": "index-pattern",
      "destinationId": "4aba3770-0d04-45e1-9e34-4cf0fd2165ae",
      "meta": {
        "icon": "indexPatternApp",
        "title": "my-pattern-*"
      }
    },
    {
      "id": "my-dashboard",
      "type": "dashboard",
      "destinationId": "c31d1eca-9bc0-4a81-b5f9-30c442824c48",
      "meta": {
        "icon": "dashboardApp",
        "title": "Look at my dashboard"
      }
    }
  ]
}

结果指示导入成功,并且创建了两个对象。由于这些对象是作为新副本创建的,因此 successResults 数组中的每个条目都包含一个 destinationId 属性。

成功导入,禁用 createNewCopies编辑

导入数据视图和仪表盘

$ curl -X POST api/saved_objects/_import -H "kbn-xsrf: true" --form [email protected]

file.ndjson 文件包含以下内容

{"type":"index-pattern","id":"my-pattern","attributes":{"title":"my-pattern-*"}}
{"type":"dashboard","id":"my-dashboard","attributes":{"title":"Look at my dashboard"}}

API 返回以下内容

{
  "success": true,
  "successCount": 2,
  "successResults": [
    {
      "id": "my-pattern",
      "type": "index-pattern",
      "meta": {
        "icon": "indexPatternApp",
        "title": "my-pattern-*"
      }
    },
    {
      "id": "my-dashboard",
      "type": "dashboard",
      "meta": {
        "icon": "dashboardApp",
        "title": "Look at my dashboard"
      }
    }
  ]
}

结果指示导入成功,并且创建了两个对象。

导入失败,出现冲突错误编辑

导入数据视图、可视化、Canvas 工作区和仪表盘,这些仪表盘包含保存的对象

$ curl -X POST api/saved_objects/_import -H "kbn-xsrf: true" --form [email protected]

file.ndjson 文件包含以下内容

{"type":"index-pattern","id":"my-pattern","attributes":{"title":"my-pattern-*"}}
{"type":"visualization","id":"my-vis","attributes":{"title":"Look at my visualization"}}
{"type":"canvas-workpad","id":"my-canvas","attributes":{"name":"Look at my canvas"}}
{"type":"dashboard","id":"my-dashboard","attributes":{"title":"Look at my dashboard"}}

API 返回以下内容

{
  "success": false,
  "successCount": 1,
  "errors": [
    {
      "id": "my-pattern",
      "type": "index-pattern",
      "title": "my-pattern-*",
      "error": {
        "type": "conflict"
      },
      "meta": {
        "icon": "indexPatternApp",
        "title": "my-pattern-*"
      }
    },
    {
      "id": "my-visualization",
      "type": "my-vis",
      "title": "Look at my visualization",
      "error": {
        "type": "conflict",
        "destinationId": "another-vis"
      },
      "meta": {
        "icon": "visualizeApp",
        "title": "Look at my visualization"
      }
    },
    {
      "id": "my-canvas",
      "type": "canvas-workpad",
      "title": "Look at my canvas",
      "error": {
        "type": "ambiguous_conflict",
        "destinations": [
          {
            "id": "another-canvas",
            "title": "Look at another canvas",
            "updatedAt": "2020-07-08T16:36:32.377Z"
          },
          {
            "id": "yet-another-canvas",
            "title": "Look at yet another canvas",
            "updatedAt": "2020-07-05T12:29:54.849Z"
          }
        ]
      },
      "meta": {
        "icon": "canvasApp",
        "title": "Look at my canvas"
      }
    }
  ],
  "successResults": [
    {
      "id": "my-dashboard",
      "type": "dashboard",
      "meta": {
        "icon": "dashboardApp",
        "title": "Look at my dashboard"
      }
    }
  ]
}

结果指示导入不成功,因为数据视图、可视化、Canvas 工作区和仪表盘导致冲突错误

  • 具有相同 ID 的数据视图已存在,这导致冲突错误。要解决此错误,请覆盖现有对象或跳过该对象。
  • 具有不同 ID 但具有相同来源的可视化已存在,这导致冲突错误。 destinationId 字段包含导致冲突的另一个可视化的 id。添加此行为是为了确保可以在 空间 之间共享的新对象的行为与传统的不可共享对象类似。当可共享对象被导出然后导入到新的空间时,它会保留其来源,以便按预期遇到冲突。要解决此问题,请覆盖指定的目标对象或跳过该对象。
  • 两个具有不同 ID 但具有相同来源的 Canvas 工作区已存在,这导致冲突错误。 destinations 数组描述了导致冲突的其他工作区。当可共享对象被导出、导入到新的空间,然后共享到另一个存在相同来源对象的空間时,就会发生冲突错误。要解决此问题,请选择要覆盖的目标对象或跳过该对象。

使用 解决导入错误 API 解决错误后,将创建对象。

导入失败,出现缺少引用错误编辑

当可视化数据视图不存在时,导入可视化和仪表盘

$ curl -X POST api/saved_objects/_import -H "kbn-xsrf: true" --form [email protected]

file.ndjson 文件包含以下内容

{"type":"visualization","id":"my-vis","attributes":{"title":"Look at my visualization"},"references":[{"name":"ref_0","type":"index-pattern","id":"my-pattern-*"}]}
{"type":"search","id":"my-search","attributes":{"title":"Look at my search"},"references":[{"name":"ref_0","type":"index-pattern","id":"another-pattern-*"}]}
{"type":"dashboard","id":"my-dashboard","attributes":{"title":"Look at my dashboard"},"references":[{"name":"ref_0","type":"visualization","id":"my-vis"},{"name":"ref_1","type":"search","id":"my-search"}]}

API 返回以下内容

{
  "success": false,
  "successCount": 1,
  "errors": [
    {
      "id": "my-vis",
      "type": "visualization",
      "title": "Look at my visualization",
      "error": {
        "type": "missing_references",
        "references": [
          {
            "type": "index-pattern",
            "id": "my-pattern-*"
          }
        ]
      },
      "meta": {
        "icon": "visualizeApp",
        "title": "Look at my visualization"
      }
    },
    {
      "id": "my-search",
      "type": "search",
      "title": "Look at my search",
      "error": {
        "type": "missing_references",
        "references": [
          {
            "type": "index-pattern",
            "id": "another-pattern-*"
          }
        ]
      },
      "meta": {
        "icon": "searchApp",
        "title": "Look at my search"
      }
    }
  ],
  "successResults": [
    {
      "id": "my-dashboard",
      "type": "dashboard",
      "meta": {
        "icon": "dashboardApp",
        "title": "Look at my dashboard"
      }
    }
  ]
}

结果指示导入不成功,因为可视化和搜索导致缺少引用错误。

使用 解决导入错误 API 解决错误后,将创建对象。