Elastic导出的JSON文件无法导入OpenSearch问题咨询
问题根因
OpenSearch Dashboards(即原Elastic生态的Kibana,OpenSearch分叉后做了独立迭代)的Saved Objects导入接口有独立的格式校验规则,原生Elastic Kibana导出的JSON文件存在三类不兼容问题,会直接触发no file was imported报错,不会解析文件内的实际资源:
- 顶层结构不匹配:Elastic导出的文件是带版本、导出数量等元数据的包装对象,OpenSearch导入接口默认识别直接的资源数组结构,识别不到合法结构就直接返回导入失败
- 版本标记不兼容:文件内每个资源携带的
migrationVersion字段绑定Elastic Kibana版本号,OpenSearch无法识别对应迁移标记,会直接拦截资源写入 - 专属字段不兼容:Elastic导出的资源可能携带OpenSearch不存在的商业插件关联字段,触发校验拦截
可直接落地的修复步骤
- 第一步:调整文件顶层结构
打开待导入的JSON文件,你会看到文件是类似如下结构的包装对象:
直接删掉外层的包装结构,把{ "version": "7.xx.x", "exportedCount": 5, "savedObjects": [ // 这里是你要导入的5个search、visualization实际资源 ] }savedObjects对应的数组提出来作为文件的最外层内容,修改后文件以[开头、]结尾,内部直接放5个资源对象。 - 第二步:修正版本标记字段
遍历数组里的每个资源对象,找到migrationVersion字段,把里面对应资源类型(search、visualization、index-pattern等)的版本值,改成你当前部署的OpenSearch主版本号即可:- 如果你用OpenSearch 1.x版本,就把对应值改成
1.0.0 - 如果你用OpenSearch 2.x版本,就把对应值改成
2.0.0
如果对象里没有migrationVersion字段,直接手动补全即可,参考格式:
"migrationVersion": { "search": "2.0.0", "visualization": "2.0.0" } - 如果你用OpenSearch 1.x版本,就把对应值改成
- 第三步:清理不兼容字段
检查每个资源的配置项,删掉所有Elastic专属商业功能关联的字段(比如Lens高级配置、Elastic Security关联引用、Elastic Maps专属配置等),普通的查询配置、可视化参数、kibanaSavedObjectMeta下的searchSourceJSON基础配置都可以保留。 - 第四步:重新导入
保存修改后的JSON文件,回到Saved Objects导入入口重新上传,此时系统就能正常识别到5个待导入资源,按页面提示确认创建即可。
排错提示:如果按上述步骤修改后依然导入失败,打开浏览器开发者工具切到网络面板,重新触发导入操作,查看
saved_objects/_import接口的响应内容,里面会明确标注具体校验不通过的字段位置,对应调整即可。
内容的提问来源于stack exchange,提问作者shantanuo
相关产品推荐
相关产品推荐

