

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon OpenSearch 服务中的索引状态管理
<a name="ism"></a>

Amazon S OpenSearch ervice 中的索引状态管理 (ISM) 允许您定义自动执行日常任务的自定义管理策略，并将其应用于索引和索引模式。您不再需要设置和管理外部进程来运行索引操作。

策略包含一个默认状态和一个状态列表，以供索引在这些状态之间转换。在每个状态中，您可以定义要执行的一系列操作和触发这些转换的条件。典型的使用案例是在一段时间后定期删除旧索引。例如，您可以定义一个策略以在 30 天后将索引移入 `read_only` 状态，然后在 90 天后最终将其删除。

将策略附加到索引后，ISM 会创建一个每 5 到 8 分钟（对于早于 1.3 版本的集群，则为 30 到 48 分钟）运行一次的作业，以执行策略操作、检查条件并将索引转换为不同的状态。该作业运行的基本时间是每 5 分钟一次，外加 0-60％ 的随机抖动，以确保您不会同时看到所有索引的活动激增。如果集群状态为红色，则 ISM 不会运行作业。

ISM 需要 OpenSearch 或 Elasticsearch 6.8 或更高版本。

**注意**  
本文档简要概述了 ISM 和几个策略示例。它还解释了 ISM for Amazon S OpenSearch ervice 域与 ISM 在自我管理 OpenSearch集群上的区别。有关 ISM 的完整文档，包括全面的参数参考、每项设置的描述以及 API 参考，请参阅 OpenSearch 文档中的[索引状态管理](https://docs.opensearch.org/latest/im-plugin/ism/index/)。

**重要**  
您不能再使用索引模板将 ISM 策略应用于新创建的索引。您可以继续使用 [ISM 模板字段](https://opensearch.org/docs/latest/im-plugin/ism/policies/#sample-policy-with-ism-template-for-auto-rollover)自动管理新创建的索引。此更新引入了一项重大更改，该更改会影响使用此设置的现有 CloudFormation 模板。

## 创建一个 ISM 策略
<a name="ism-start"></a>

**开始使用索引状态管理**

1. 在[https://console.aws.amazon.com/aos/家](https://console.aws.amazon.com/aos/home)中打开亚马逊 OpenSearch 服务控制台。

1. 选择要为其创建 ISM 策略的域。

1. 在域名的控制面板中，导航到控制 OpenSearch 面板网址，然后使用您的主用户名和密码登录。URL 遵循以下格式：

   ```
   domain-endpoint/_dashboards/
   ```

1. 在控制面板中打开左侧导航面 OpenSearch 板，选择**索引管理**，然后选择**创建策略**。

1. 使用[可视化编辑器](https://opensearch.org/docs/latest/im-plugin/ism/index/#visual-editor)或 [JSON 编辑器](https://opensearch.org/docs/latest/im-plugin/ism/index/#json-editor)创建策略。我们建议使用可视化编辑器，因为它提供了一种更结构化的策略定义方式。有关创建策略的帮助，请参阅下面的[示例策略](#ism-example)。

1. 创建策略后，请将它附加到一个或多个索引：

   ```
   POST _plugins/_ism/add/my-index
   {
     "policy_id": "my-policy-id"
   }
   ```
**注意**  
如果您的域名运行的是旧版 Elasticsearch 版本，请使用 `_opendistro` 而非 `_plugins`。

   或者，在 “ OpenSearch 控制面板” 中选择索引，然后选择 “**应用策略**”。

## 示例策略
<a name="ism-example"></a>

以下示例策略演示了如何自动执行常见 ISM 使用案例。

### 从热存储到冷存储
<a name="ism-example-cold"></a>

此示例策略将索引从热存储移动到热存储 [UltraWarm](ultrawarm.md)，并最终移动到 [冷库](cold-storage.md)。然后，删除索引。

索引最初处于 `hot` 状态。10 天后，ISM 将其移动到 `warm` 状态。80 天后，即索引已存在 90 天后，ISM 将索引移动到 `cold` 状态。一年后，该服务向 Amazon Chime 房间发送通知以告知该索引正在被删除，然后永久删除该索引。

请注意，冷索引需要 `cold_delete` 操作而不是正常的 `delete` 操作。另请注意，数据中需要显式 `timestamp_field`，以便使用 ISM 管理冷索引。

```
{
  "policy": {
    "description": "Demonstrate a hot-warm-cold-delete workflow.",
    "default_state": "hot",
    "schema_version": 1,
    "states": [{
        "name": "hot",
        "actions": [],
        "transitions": [{
          "state_name": "warm",
          "conditions": {
            "min_index_age": "10d"
          }
        }]
      },
      {
        "name": "warm",
        "actions": [{
          "warm_migration": {},
          "retry": {
            "count": 5,
            "delay": "1h"
          }
        }],
        "transitions": [{
          "state_name": "cold",
          "conditions": {
            "min_index_age": "90d"
          }
        }]
      },
      {
        "name": "cold",
        "actions": [{
            "cold_migration": {
              "timestamp_field": "<your timestamp field>"
            }
          }
        ],
        "transitions": [{
          "state_name": "delete",
          "conditions": {
             "min_index_age": "365d"
          }
        }]
      },
      {
        "name": "delete",
        "actions": [{
          "notification": {
            "destination": {
              "chime": {
                "url": "<URL>"
              }
            },
            "message_template": {
              "source": "The index {{ctx.index}} is being deleted."
            }
          }
        },
        {
          "cold_delete": {}
        }]
      }
    ]
  }
}
```

### 减少副本数
<a name="ism-example-replica"></a>

此示例策略在七天后将副本计数减少到零以节省磁盘空间，然后在 21 天后删除索引。此策略假定索引是非关键索引，并不再接收写入请求。副本数量为零会带来一定的数据丢失风险。

```
{
  "policy": {
    "description": "Changes replica count and deletes.",
    "schema_version": 1,
    "default_state": "current",
    "states": [{
        "name": "current",
        "actions": [],
        "transitions": [{
          "state_name": "old",
          "conditions": {
            "min_index_age": "7d"
          }
        }]
      },
      {
        "name": "old",
        "actions": [{
          "replica_count": {
            "number_of_replicas": 0
          }
        }],
        "transitions": [{
          "state_name": "delete",
          "conditions": {
            "min_index_age": "21d"
          }
        }]
      },
      {
        "name": "delete",
        "actions": [{
          "delete": {}
        }],
        "transitions": []
      }
    ]
  }
}
```

### 拍摄索引快照
<a name="ism-example-snapshot"></a>

此示例策略使用 `[snapshot](https://docs.opensearch.org/latest/im-plugin/ism/policies/#snapshot)` 操作，以便在索引包含至少一个文档时立即拍摄该索引的快照。`repository` 是您在 Amazon S3 中注册的手动快照存储库的名称。`snapshot` 是快照的名称。有关注册存储库的快照先决条件和步骤，请参阅 [在 Amazon OpenSearch 服务中创建索引快照](managedomains-snapshots.md)。

```
{
  "policy": {
    "description": "Takes an index snapshot.",
    "schema_version": 1,
    "default_state": "empty",
    "states": [{
        "name": "empty",
        "actions": [],
        "transitions": [{
          "state_name": "occupied",
          "conditions": {
            "min_doc_count": 1
          }
        }]
      },
      {
        "name": "occupied",
        "actions": [{
          "snapshot": {
            "repository": "<my-repository>",
            "snapshot": "<my-snapshot>"
            }
          }],
          "transitions": []
      }
    ]
  }
}
```

## ISM 模板
<a name="ism-template"></a>

您可以在策略中设置 `ism_template` 字段，因此当您创建与模板模式匹配的索引时，策略会自动附加到该索引。在此示例中，以 "log" 开头的名称创建的任何索引都会自动匹配 ISM 策略 `my-policy-id`：

```
PUT _plugins/_ism/policies/my-policy-id
{
  "policy": {
    "description": "Example policy.",
    "default_state": "...",
    "states": [...],
    "ism_template": {
      "index_patterns": ["log*"],
      "priority": 100
    }
  }
}
```

有关更详细的示例，请参阅[使用 ISM 模板进行自动回滚的策略示例](https://opensearch.org/docs/latest/im-plugin/ism/policies/#sample-policy-with-ism-template-for-auto-rollover)。

## 差异
<a name="ism-diff"></a>

与 OpenSearch Elasticsearch 相比，适用于亚马逊 OpenSearch 服务的 ISM 有几个区别。

### ISM 操作
<a name="alerting-diff-op"></a>
+ OpenSearch 服务支持三种独特的 ISM 操作：`warm_migration``cold_migration`、和`cold_delete`：
  + 如果您的域已[UltraWarm](ultrawarm.md)启用，则该`warm_migration`操作会将索引转换为热存储。
  + 如果您的域启用了[冷存储](cold-storage.md)，则 `cold_migration` 操作会将索引转换为冷存储，而 `cold_delete` 操作将从冷存储中删除此索引。

  即使这些操作中的其中一项操作未在[设置的超时期限](https://docs.opensearch.org/latest/im-plugin/ism/policies/#actions)内完成，索引的迁移或删除仍会继续。设置上述的任何一个操作设置 [error\$1notification](https://opensearch.org/docs/latest/im-plugin/ism/policies/#error-notifications) 后，如果该操作未在超时期限内完成，则系统会通知您该操作失败，但此通知仅供您参考。实际操作没有固有的超时时间，并将继续运行直到最终成功或失败。
+ 如果您的域名运行 OpenSearch 或 Elasticsearch 7.4 或更高版本，则 OpenSearch 服务支持 ISM `open` 和操作。`close`
+ 如果您的域名运行 OpenSearch 或 Elasticsearch 7.7 或更高版本，则 OpenSearch 服务支持 ISM 操作。`snapshot`

### 冷存储 ISM 操作
<a name="ism-cold-storage"></a>

对于冷索引，在使用以下 ISM 时必须指定`?type=_cold`参数 APIs：
+ [添加策略](https://opensearch.org/docs/latest/im-plugin/ism/api/#add-policy)
+ [移除策略](https://opensearch.org/docs/latest/im-plugin/ism/api/#remove-policy-from-index)
+ [更新策略](https://opensearch.org/docs/latest/im-plugin/ism/api/#update-policy)
+ [重试失败的索引](https://opensearch.org/docs/latest/im-plugin/ism/api/#retry-failed-index)
+ [解释索引](https://opensearch.org/docs/latest/im-plugin/ism/api/#explain-index)

这些 APIs 冷索引还有以下其他区别：
+ 除非您在末尾使用，否则不支持通配符运算符。例如，支持 `_plugins/_ism/<add, remove, change_policy, retry, explain>/logstash-*`\$1，但不支持 `_plugins/_ism/<add, remove, change_policy, retry, explain>/iad-*-prod`。
+ 不支持多个索引名称和模式。例如，支持 `_plugins/_ism/<add, remove, change_policy, retry, explain>/app-logs`\$1，但不支持 `_plugins/_ism/<add, remove, change_policy, retry, explain>/app-logs,sample-data`。

### ISM 设置
<a name="ism-diff-settings"></a>

OpenSearch 而且 Elasticsearch 允许您使用 API 更改所有可用的 `_cluster/settings` ISM 设置。在 Amazon OpenSearch 服务上，您只能更改以下 [ISM 设置](https://opensearch.org/docs/latest/im-plugin/ism/settings/)：
+ **集群级别设置：**
  + `plugins.index_state_management.enabled`
  + `plugins.index_state_management.history.enabled`
+ **索引级别设置：**
  + `plugins.index_state_management.rollover_alias`

   

# 教程：实现索引状态管理过程的自动化
<a name="ism-tutorial"></a>

本教程演示如何实施自动执行日常索引管理任务的 ISM 策略，并将其应用于索引和索引模式。

Amazon S OpenSearch ervice 中的@@ [索引状态管理 (ISM)](ism.md) 允许您自动执行重复的索引管理活动，因此您可以避免使用其他工具来管理索引生命周期。您可以创建一个策略，根据索引年限、大小和其他条件自动执行这些操作，所有这些操作都可以在您的 Amazon S OpenSearch ervice 域中完成。

OpenSearch 服务支持三个存储层：用于主动写入和低延迟分析的默认 “热” 状态， UltraWarm 用于高达 3 PB 的只读数据，以及用于无限长期存档的冷存储。

本教程提供在每日索引中处理时间序列数据的使用案例示例。在本教程中，您将设置一个策略，该策略在 24 小时后自动拍摄每个附加索引的快照。然后，它会在两天后将索引从默认的热状态迁移到 UltraWarm 存储，30 天后将索引从冷存储迁移到冷存储，最后在 60 天后删除索引。

## 先决条件
<a name="ism-tutorialprerequisites"></a>
+ 您的 OpenSearch 服务域必须运行 Elasticsearch 版本 6.8 或更高版本。
+ 您的域名必须已[UltraWarm](ultrawarm.md)启用[冷存储](cold-storage.md)。
+ 您必须为域[注册一个手动快照存储库](managedomains-snapshot-registerdirectory.md)。
+ 您的用户角色需要足够的权限才能访问 OpenSearch 服务控制台。如有必要，验证并[配置域的访问权限](ac.md)。

## 步骤 1：配置 ISM 策略
<a name="ism-tutorial-policy"></a>

首先，在 “ OpenSearch 控制面板” 中配置 ISM 策略。

1. 在 OpenSearch 服务控制台的域名控制面板中，导航到控制 OpenSearch 面板网址，然后使用您的主用户名和密码登录。URL 遵循此格式：`domain-endpoint/_dashboards/`。

1. 在 OpenSearch 仪表板中，选择**添加示例数据**，然后将一个或多个示例索引添加到您的域中。

1. 打开左侧导航面板，然后依次选择 **Index Management**（索引管理）、**Create policy**（创建策略）。

1. 将该策略命名为 `ism-policy-example`。

1. 将默认策略替换为以下策略：

   ```
   {
     "policy": {
       "description": "Move indexes between storage tiers",
       "default_state": "hot",
       "states": [
         {
           "name": "hot",
           "actions": [],
           "transitions": [
             {
               "state_name": "snapshot",
               "conditions": {
                 "min_index_age": "24h"
               }
             }
           ]
         },
         {
           "name": "snapshot",
           "actions": [
             {
               "retry": {
                 "count": 5,
                 "backoff": "exponential",
                 "delay": "30m"
               },
               "snapshot": {
                 "repository": "snapshot-repo",
                 "snapshot": "ism-snapshot"
               }
             }
           ],
           "transitions": [
             {
               "state_name": "warm",
               "conditions": {
                 "min_index_age": "2d"
               }
             }
           ]
         },
         {
           "name": "warm",
           "actions": [
             {
               "retry": {
                 "count": 5,
                 "backoff": "exponential",
                 "delay": "1h"
               },
               "warm_migration": {}
             }
           ],
           "transitions": [
             {
               "state_name": "cold",
               "conditions": {
                 "min_index_age": "30d"
               }
             }
           ]
         },
         {
           "name": "cold",
           "actions": [
             {
               "retry": {
                 "count": 5,
                 "backoff": "exponential",
                 "delay": "1h"
               },
               "cold_migration": {
                 "start_time": null,
                 "end_time": null,
                 "timestamp_field": "@timestamp",
                 "ignore": "none"
               }
             }
           ],
           "transitions": [
             {
               "state_name": "delete",
               "conditions": {
                 "min_index_age": "60d"
               }
             }
           ]
         },
         {
           "name": "delete",
           "actions": [
             {
               "cold_delete": {}
             }
           ],
           "transitions": []
         }
       ],
       "ism_template": [
         {
           "index_patterns": [
             "index-*"
           ],
           "priority": 100
         }
       ]
     }
   }
   ```
**注意**  
`ism_template` 字段会自动将策略附加到与指定 `index_patterns` 之一匹配的任何新创建的索引。在这种情况下，为所有以 `index-` 开头的索引。您可以修改此字段以匹配您的环境中的索引格式。有关更多信息，请参阅 [ISM 模板](ism.md#ism-template)。

1. 在策略的 `snapshot` 部分，将 `snapshot-repo` 替换为您为域注册的[快照存储库](managedomains-snapshot-registerdirectory.md)的名称。您还可以选择替换 `ism-snapshot`，该名称是创建快照时的名称。

1. 选择**创建**。现在，**State management policies**（状态管理策略）页面上会显示该策略。

## 步骤 2：将该策略附加到一个或多个索引
<a name="ism-tutorial-attach"></a>

现在，您已创建策略，请将其附加到集群中的一个或多个索引。

1. 转至 **Hot indicies**（热索引）选项卡并搜索 `opensearch_dashboards_sample`，其中列出了您在步骤 1 中添加的所有示例索引。

1. 选择所有索引并选择 A **pply p** olicy，然后选择您刚刚创建的**ism-policy-example**策略。

1. 选择**应用**。

在索引切换不同的状态时，您可以在 **Policy managed indices**（策略管理索引）页面上监控索引。