如何解决升级 Amazon Elasticsearch Service 后出现的“无法找到已保存对象”错误?

上次更新时间:2020 年 4 月 10 日

我最近将我的 Amazon Elasticsearch Service (Amazon ES) 集群升级到版本 7.1。但是我在 Kibana 中收到“无法找到已保存对象”错误。如何解决此问题?

简短描述

Amazon ES 集群的用户有时候会在升级到 Amazon ES 版本 7.1 后遇到 400 Bad Request 错误。升级可能会造成用户无法在 Kibana 中找到已保存对象的问题。此外,在使用 Kibana 版本 7.x 时,无法直接恢复 .kibana 索引。相反,.kibana 索引必须用作别名。例如,如果您升级到版本 7.1,则 Kibana 将迁移到 .kibana_1 索引,然后将 .kibana 上移设置为索引别名。

解决方法

要查找并恢复 Kibana 中已保存的对象,请执行以下步骤:

1.    使用以下映射创建 .kibana_1 索引:

PUT /.kibana_1
{                                                            
    "aliases": {},
    "mappings": {
      "properties": {
        "config": {
          "properties": {
            "buildNum": {
              "type": "long"
            }
          }
        },
        "index-pattern": {
          "properties": {
            "fields": {
              "type": "text",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 256
                }
              }
            },
            "timeFieldName": {
              "type": "text",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 256
                }
              }
            },
            "title": {
              "type": "text",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 256
                }
              }
            }
          }
        },
        "type": {
          "type": "keyword",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "updated_at": {
          "type": "date"
        }
      }
    },
    "settings": {
      "index": {
        "number_of_shards": "1",
        "number_of_replicas": "1"
      }
    }
}

2.    然后,创建一个 .kibana_backup 索引:

PUT .kibana_backup

3.    使用 reindex API 通过以下查询将 .kibana 索引的数据复制到 .kibana_backup 索引中:

POST _reindex
{
  "source": {
    "index": ".kibana"
  },
  "dest": {
    "index": ".kibana_backup"
  }
}

这些查询将您的数据复制并保存在 .kibana_backup 索引中。

4.    删除 .kibana 索引:

DELETE .kibana

5.    创建一个 .kibana 别名并指向 .kibana _1 索引:

POST /_aliases
{
    "actions" : [
        { "add" : { "index" : ".kibana_1", "alias" : ".kibana" } }
    ]
}

6.    使用重建索引 API 将 .kibana_backup 索引中的数据复制到新创建的 .kibana_1 索引中:  

POST _reindex
{
  "source": {
    "index": ".kibana_backup"
  },
  "dest": {
    "index": ".kibana_1"
  }
}

.kibana_backup 的数据现已恢复并保存在 .kibana_1 索引中。

7.    搜索已保存的索引模式或在 Kibana 管理选项卡中创建一个新模式。如果您能够执行这些任务,它将验证问题是否已得到解决。

8.    删除 .kibana_backup 索引以清除一切:

DELETE .kibana_backup

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?