Amazon Elasticsearch Service
开发人员指南 (API 版本 2015-01-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

管理 Amazon Elasticsearch Service 域

随着 Amazon Elasticsearch Service (Amazon ES) 域中文档大小和数量的增长以及网络流量的增加,您可能需要更新 Elasticsearch 集群的配置。要了解何时重新配置您的域,您需要监控域指标。您可能还需要审核对您的域的数据相关 API 调用或将标签分配给您的域。本部分介绍如何执行与域管理相关的各种任务。

关于配置更改

Amazon ES 在更新域时使用蓝/绿 部署过程。蓝/绿通常是指运行两个生产环境 (一个活动环境和一个空闲环境) 并在您进行软件更改时切换这两个环境的做法。对于 Amazon ES,它是指创建用于域更新的新环境并在这些更新完成后将用户路由至新环境的实践。此实践可在部署到新环境未成功的情况下最大程度地减少停机时间并维护原始环境。

以下操作会引发蓝/绿部署:

  • 更改实例计数或类型

  • 启用或禁用专用主节点

  • 更改专用主节点计数

  • 启用或禁用区域感知

  • 更改存储类型、卷类型或卷大小

  • 选择不同的 VPC 子网

  • 添加或删除 VPC 安全组

  • 对 Kibana 启用或禁用 Amazon Cognito 身份验证

  • 选择不同的 Amazon Cognito 用户池或身份池

  • 修改高级设置

  • 允许或禁止将错误日志或慢速日志发布到 CloudWatch

  • 升级到新版 Elasticsearch

以下操作会引发蓝/绿部署:

  • 更改访问策略

  • 更改自动快照时间

如果您启动配置更改,则域状态将更改为 Processing。在特定服务软件更新期间,状态将保持为 Active。在这两种情况下,您可以查看集群运行状况和 Amazon CloudWatch 指标,并会在进行域更新时发现集群中的节点数暂时增大(通常会加倍)。在下图中,您可以看到配置更改期间的节点从 11 个翻倍至 22 个,然后在更新完成后返回至 11 个。


                节点数在域配置更改期间从 11 翻倍至 22。

这种临时的增加可能会对集群的专用主节点造成压力,其要管理的节点数突然增加。在专用主节点上保持充足的容量很重要,这有助于处理与这些蓝/绿部署相关的开销。

重要

在配置更改和服务维护期间,您不会 产生任何额外费用。您只需要为您的群集请求的节点数量付费。有关具体信息,请参阅配置更改的费用

为防止专用主节点过载,您可以使用 Amazon CloudWatch 指标监控使用情况。有关推荐的最大值,请参阅建议的 CloudWatch 警报

配置更改的费用

如果您更改了某个域的配置,Amazon ES 将创建一个新集群,如关于配置更改中所述。在从旧群集迁移到新群集时,会产生以下费用:

  • 如果您更改实例类型,第一个小时两个群集都会收费。第一个小时后,您只需为新群集付费。

    示例:您将配置从三个 m3.xlarge 实例更改为四个 m4.large 实例。在第一个小时中,两个群集都需要收费 (3 个 m3.xlarge + 4 个 m4.large)。第一个小时后,您只需为新群集付费 (4 个 m4.large)。

  • 如果您未更改实例类型,第一个小时您只需要为最大的群集付费。第一个小时后,您只需为新群集付费。

    示例: 您将配置从六个 m3.xlarge 实例更改为三个 m3.xlarge 实例。在第一个小时,您只需要为最大的群集付费 (6 个 m3.xlarge)。第一个小时后,您只需为新群集付费 (3 个 m3.xlarge)。

服务软件更新

注意

服务软件更新不同于 Elasticsearch 版本升级。有关升级到更高版本的 Elasticsearch 的信息,请参阅升级 Elasticsearch

Amazon ES 定期发布增加了功能或以其他方式改进您的域的系统软件更新。控制台是查看是否有可用的更新的最简单的方法。有关服务软件更新的历史记录,请参阅发布说明

以前,我们按自动的滚动计划部署这些更新。此计划意味着您期待的功能更新到达您的域的时间可能晚于您希望的时间或是不方便的时间。

现在,当新服务软件变得可用时,可以请求更新您的域并更快地受益于新功能。您还可能希望在低流量时间启动更新。

有些更新是必需的,而其他更新是可选的。如果您没有对必需更新采取任何操作,我们仍然会在特定时间范围(通常两周)后自动更新服务软件。如果您的域处于下表中所示的任何状态,则可能没有资格进行服务软件更新。

状态 描述
域正在处理中 域正在接受配置更改。在操作完成后检查更新资格。
红色集群状态 集群中的一个或多个索引为红色。有关问题排查步骤,请参阅红色集群状态
高错误率 在尝试处理请求时,Elasticsearch 集群返回大量 5xx 错误。此问题通常是因为同时读取或写入了过多的请求。请考虑减少流向集群的流量或扩展您的域。
裂脑 裂脑 意味着您的 Elasticsearch 集群有多个主节点并且已拆分成两个绝不会自行重新联接的集群。您可以通过使用推荐数量的专用主节点避免裂脑。为了帮助您从裂脑恢复,请联系 AWS Support
Amazon Cognito 集成问题 您的域使用用于 Kibana 的身份验证,Amazon ES 找不到一个或多个 Amazon Cognito 资源。如果缺少 Amazon Cognito 用户池,则通常会出现此问题。要更正此问题,请重新创建缺少的资源并将 Amazon ES 域配置为使用它。
其他 Amazon ES 服务问题 Amazon ES 本身的问题可能会导致您的域显示没有更新资格。如果上述情况都不适用于您的域且该问题持续超过一天,请联系 AWS Support

计划服务软件更新(控制台)

  1. 转至 https://aws.amazon.com,然后选择 Sign In to the Console (登录控制台)

  2. Analytics 下,选择 Elasticsearch Service

  3. 在导航窗格中的 My domains (我的域) 下,选择要更新的域。

  4. 对于 Service software release (服务软件版本),请使用文档链接来比较您的当前版本与最新版本。然后选择 Update (更新)

计划服务软件更新(CLI 和开发工具包)

您可以使用以下命令查看是否有可用的更新、检查升级资格并计划更新:

  • describe-elasticsearch-domain (DescribeElasticsearchDomain)

  • start-elasticsearch-service-software-update (StartElasticsearchServiceSoftwareUpdate)

有关更多信息,请参阅 AWS CLI Command ReferenceAmazon Elasticsearch Service 配置 API 参考

提示

在计划更新之后,您可能可以在很小的时间范围内将其取消。使用控制台或 stop-elasticsearch-service-software-update (StopElasticsearchServiceSoftwareUpdate) 命令。

启用区域感知

每个 AWS 区域都是一个独立的地理区域,其中包含多个相互隔离的位置,这些位置称为可用区。为避免数据损失,并最大限度地减少节点和数据中心出现故障时导致的停机时间,您可以使用 Amazon ES 控制台在同一区域的两个可用区之间分配 Elasticsearch 集群的节点和分片。此分配称为区域感知。区域感知要求实例数量为偶数,并且会略微增加网络延迟。

如果启用区域感知,则群集中的每个索引至少有一个副本。幸运的是,所有索引的默认配置均为副本数量等于 1。Amazon ES 在不同可用区的各节点之间分布主分片和副本分片,这将增加您的集群的可用性。

重要

如果您将索引的副本计数指定为 0,则启用区域感知不会提供任何附加的可用性;如果没有副本,Amazon ES 便无法将数据的副本分发到其他可用区。

如果启用区域感知并使用 VPC 访问域,则必须为 VPC 子网指定可用区。有关 VPCs 的更多信息,请参阅 Amazon Elasticsearch Service 域的 VPC 支持

下图显示了启用区域感知的四节点群集。该服务将副本分片,使得没有副本分片与对应的主分片处于同一可用区中。

如果一个可用区遇到服务中断,您会因主节点选择的工作方式而有 50% 的可能性遭遇集群停机时间。例如,如果您使用建议的三个专用主节点,Amazon ES 会将两个专用主节点分布到一个可用区中,将一个专用主节点分布到另一个可用区中。如果具有两个专用主节点的可用区遇到中断,您的集群将一直不可用,直至其余的可用区可以自动替换现在缺少的专用主节点、形成仲裁并选择新的主节点。

此外,如果一个可用区遇到中断,集群的数据节点可能会在一段时间内经历极端负载,同时 Amazon ES 会自动配置新节点来替换现在缺少的节点。突然,一半节点不得不处理整个群集的大量请求。当它们处理这些请求时,其余节点也在尽力地像联机时那样将数据复制到新节点中。具有额外资源的群集可以缓解此问题。

启用区域感知 (控制台)

  1. 转至 https://aws.amazon.com,然后选择 Sign In to the Console (登录控制台)

  2. Analytics (分析) 下,选择 Elasticsearch Service

  3. 在导航窗格中的 My domains (我的域) 下,选择您的 Amazon ES 域。

  4. 选择 Configure cluster (配置集群)

  5. Node configuration (节点配置) 窗格中,选择 Enable zone awareness (启用区域感知)

  6. 选择 Submit

有关更多信息,请参阅 EC2 文档中的区域和可用区

使用 Amazon CloudWatch 监控群集指标和统计数据 (控制台)

Amazon ES 域每分钟向 Amazon CloudWatch 发送一次性能指标。如果您使用通用型 EBS 卷或磁性 EBS 卷,则 EBS 卷指标将仅每五分钟更新一次。要查看这些指标,请使用 Amazon Elasticsearch Service 控制台中的 Cluster health (集群运行状况)Instance health (实例运行状况) 选项卡。这些指标是免费提供的。

如果对您的域进行配置更改,则 Cluster health (集群运行状况)Instance health (实例运行状况) 选项卡中各个实例的列表的大小通常会在短时间内增长一倍,然后再恢复为正确数量。有关此行为的说明,请参阅关于配置更改

Amazon ES 指标分为以下几类:

注意

该服务会将指标存档两周,然后再丢弃。

集群指标

专用主节点指标

EBS 卷指标。

实例指标

使用 AWS CloudTrail 记录 Amazon Elasticsearch Service 配置 API 调用

Amazon Elasticsearch Service 与 AWS CloudTrail 集成,后者是一项服务,该服务提供了由用户、角色或 Amazon ES 中的 AWS 服务执行的操作的记录。CloudTrail 将 Amazon ES 的所有配置 API 调用作为事件捕获。

注意

CloudTrail 仅捕获对 配置 API(如 CreateElasticsearchDomainGetUpgradeStatus)的调用,而不捕获对 Elasticsearch API(如 _search_bulk)的调用。

捕获的调用包括来自 Amazon ES 控制台、CLI 或开发工具包的调用。如果您创建跟踪,则可以使 CloudTrail 事件持续传送到 Amazon S3 存储桶(包括 Amazon ES 的事件)。如果您不配置跟踪,则仍可在 CloudTrail 控制台的 Event history (事件历史记录) 中查看最新事件。通过使用 CloudTrail 收集的信息,您可以确定向 Amazon ES 发出了什么请求、发出请求的 IP 地址、何人发出的请求、请求的发出时间以及其他详细信息。

要了解有关 CloudTrail 的更多信息,请参阅 AWS CloudTrail User Guide

CloudTrail 中的 Amazon Elasticsearch Service 信息

在您创建 CloudTrail 账户时,即针对该账户启用了 AWS。Amazon ES 中发生活动时,该活动将记录在 CloudTrail 事件中,并与其他 AWS 服务事件一同保存在 Event history (事件历史记录) 中。您可以在 AWS 账户中查看、搜索和下载最新事件。有关更多信息,请参阅使用 CloudTrail 事件历史记录查看事件

要持续记录 AWS 账户中的事件(包括 Amazon ES 的事件),请创建跟踪。通过跟踪,CloudTrail 可将日志文件传送至 Amazon S3 存储桶。默认情况下,在控制台中创建跟踪时,此跟踪应用于所有 AWS 区域。此跟踪在 AWS 分区中记录来自所有区域的事件,并将日志文件传送至您指定的 Amazon S3 存储桶。此外,您可以配置其他 AWS 服务,进一步分析在 CloudTrail 日志中收集的事件数据并采取行动。有关更多信息,请参阅下列内容:

所有 Amazon ES 配置 API 操作都由 CloudTrail 记录,并且在 Amazon Elasticsearch Service 配置 API 参考中正式记载。

每个事件或日志条目都包含有关生成请求的人员的信息。身份信息帮助您确定以下内容:

  • 请求是使用根用户凭证还是 AWS Identity and Access Management (IAM) 用户凭证发出的。

  • 请求是使用角色还是联合身份用户的临时安全凭证发出的。

  • 请求是否由其他 AWS 服务发出。

有关更多信息,请参阅 CloudTrail userIdentity 元素

了解 Amazon Elasticsearch Service 日志文件条目

跟踪是一种配置,可用于将事件作为日志文件传送到您指定的 Amazon S3 存储桶。CloudTrail 日志文件包含一个或多个日志条目。一个事件表示来自任何源的一个请求,包括有关所请求的操作、操作的日期和时间、请求参数等方面的信息。CloudTrail 日志文件不是公用 API 调用的有序堆栈跟踪,因此它们不会以任何特定顺序显示。

下面的示例显示了一个 CloudTrail 日志条目,该条目说明了 CreateElasticsearchDomain 操作:

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::123456789012:user/test-user", "accountId": "123456789012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "test-user", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2018-08-21T21:59:11Z" } }, "invokedBy": "signin.amazonaws.com" }, "eventTime": "2018-08-21T22:00:05Z", "eventSource": "es.amazonaws.com", "eventName": "CreateElasticsearchDomain", "awsRegion": "us-west-1", "sourceIPAddress": "123.123.123.123", "userAgent": "signin.amazonaws.com", "requestParameters": { "elasticsearchVersion": "6.3", "elasticsearchClusterConfig": { "instanceType": "m4.large.elasticsearch", "instanceCount": 1 }, "snapshotOptions": { "automatedSnapshotStartHour": 0 }, "domainName": "test-domain", "encryptionAtRestOptions": {}, "eBSOptions": { "eBSEnabled": true, "volumeSize": 10, "volumeType": "gp2" }, "accessPolicies": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"123456789012\"]},\"Action\":[\"es:*\"],\"Resource\":\"arn:aws:es:us-west-1:123456789012:domain/test-domain/*\"}]}", "advancedOptions": { "rest.action.multi.allow_explicit_index": "true" } }, "responseElements": { "domainStatus": { "created": true, "elasticsearchClusterConfig": { "zoneAwarenessEnabled": false, "instanceType": "m4.large.elasticsearch", "dedicatedMasterEnabled": false, "instanceCount": 1 }, "cognitoOptions": { "enabled": false }, "encryptionAtRestOptions": { "enabled": false }, "advancedOptions": { "rest.action.multi.allow_explicit_index": "true" }, "upgradeProcessing": false, "snapshotOptions": { "automatedSnapshotStartHour": 0 }, "eBSOptions": { "eBSEnabled": true, "volumeSize": 10, "volumeType": "gp2" }, "elasticsearchVersion": "6.3", "processing": true, "aRN": "arn:aws:es:us-west-1:123456789012:domain/test-domain", "domainId": "123456789012/test-domain", "deleted": false, "domainName": "test-domain", "accessPolicies": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::123456789012:root\"},\"Action\":\"es:*\",\"Resource\":\"arn:aws:es:us-west-1:123456789012:domain/test-domain/*\"}]}" } }, "requestID": "12345678-1234-1234-1234-987654321098", "eventID": "87654321-4321-4321-4321-987654321098", "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }

标记 Amazon Elasticsearch Service 域

可以使用 Amazon ES 标签将元数据添加到 Amazon ES 域。AWS 不会对您的标签应用任何语义意义。标签严格按字符串进行解释。所有标签均包含以下元素。

标签元素 描述
标记密钥 标签键是标签的名称,属于必填内容。标签键在其附加的 Amazon ES 域中必须是唯一的。有关对标签键和值的基本限制的列表,请参阅用户定义的标签限制
标记值 标签值则是一个可选的标签字符串值。标签值可为空值,且在标签集中不必具有唯一性。例如,在“项目/Trinity”和“成本 - 中心/Trinity”的一个标签集中,可以存在键值对。有关对标签键和值的基本限制的列表,请参阅用户定义的标签限制

每个 Amazon ES 域都有一组标签,其中包含分配给该 Amazon ES 域的所有标签。AWS 不会自动在任何 Amazon ES 域上设置任何标签。一个标签集可以包含最多 50 个标签,也可以为空。 如果向 Amazon ES 域添加一个标签,而该标签的键与资源上某个现有的标签相同,则新值将覆盖旧值。

最后,通过将具有类似标签的资源的支出集中在一起,您可以使用这些标签跟踪成本。Amazon ES 域是由您定义的名称-值对,与某个 Amazon ES 域关联。此名称也叫。可使用标签向 Amazon ES 域分配任意信息。举例来说,标签键可用于定义一个类别,而标签值可以是该类别中的一个项目。例如,可定义“project”标签键和“Salix”标签值,表示向 Salix 项目分配了 Amazon ES 域。也可使用标签通过 environment=test 或 environment=production 等键指定 Amazon ES 域用于测试或生产。我们建议使用一组具有一致性的标签键,以使跟踪与 Amazon ES 域关联的元数据变得更轻松。

您也可以使用标签来管理 AWS 账单,使其反映您的成本结构。要执行此操作,请注册以获取包含标签键值的 AWS 账户账单。然后,如需查看组合资源的成本,请按有同样标签键值的资源组织您的账单信息。例如,您可以使用键-值对标记多个 Amazon ES 域,然后组织账单信息,以查看在数个服务中的每个域的总成本。有关更多信息,请参阅 AWS 账单和成本管理 文档中的使用成本分配标签

注意

对标签进行缓存以用于授权。因此,可能先用几分钟添加和更新 Amazon ES 域上的标签,然后标签才可用。

使用标签 (控制台)

请使用以下步骤创建资源标签。

创建标签 (控制台)

  1. 转至 https://aws.amazon.com,然后选择 Sign In to the Console (登录控制台)

  2. Analytics (分析) 下,选择 Elasticsearch Service

  3. 在导航窗格中,选择您的 Amazon ES 域。

  4. 在域控制面板上,选择 Manage tags (管理标签)

  5. Key (键) 列中,输入标签键。

  6. (可选)在 Value (值) 列中,输入标签值。

  7. 选择 Submit

删除标签 (控制台)

使用以下过程可删除资源标签。

  1. 转至 https://aws.amazon.com,然后选择 Sign In to the Console (登录控制台)

  2. Analytics (分析) 下,选择 Elasticsearch Service

  3. 在导航窗格中,选择您的 Amazon ES 域。

  4. 在域控制面板上,选择 Manage tags (管理标签)

  5. 在要删除的标签的旁边,选择 Remove (删除)

  6. 选择 Submit

有关使用控制台处理标签的更多信息,请参阅 AWS 管理控制台入门指南 中的使用标签编辑器

使用标签 (AWS CLI)

可以结合使用 AWS CLI 与 --add-tags 命令来创建资源标签。

语法

add-tags --arn=<domain_arn> --tag-list Key=<key>,Value=<value>

参数 描述
--arn 附加标签的 Amazon ES 域的 Amazon 资源名称。
--tag-list 采用以下格式设置空格分隔的键值对:Key=<key>,Value=<value>

示例

以下示例为 logs 域创建两个标签:

aws es add-tags --arn arn:aws:es:us-east-1:379931976431:domain/logs --tag-list Key=service,Value=Elasticsearch Key=instances,Value=m3.2xlarge

可以使用 remove-tags 命令从 Amazon ES 域删除标签。

语法

remove-tags --arn=<domain_arn> --tag-keys Key=<key>,Value=<value>

参数 描述
--arn 附加标签的 Amazon ES 域的 Amazon 资源名称 (ARN)。
--tag-keys 设置您要从 Amazon ES 域中移除的空格分隔的键-值对。

示例

以下示例从之前示例中创建的 logs 域中删除两个标签:

aws es remove-tags --arn arn:aws:es:us-east-1:379931976431:domain/logs --tag-keys service instances

您可以通过 list-tags 命令查看一个 Amazon ES 域的现有标签:

语法

list-tags --arn=<domain_arn>

参数 描述
--arn 附加标签的 Amazon ES 域的 Amazon 资源名称 (ARN)。

示例

以下示例列出了 logs 域的所有资源标签:

aws es list-tags --arn arn:aws:es:us-east-1:379931976431:domain/logs

使用标签 (AWS 软件开发工具包)

AWS 开发工具包(除 Android 和 iOS 开发工具包之外)支持 Amazon ES 配置 API 参考中定义的所有操作,包括 AddTagsListTagsRemoveTags 操作。有关安装和使用 AWS 开发工具包的更多信息,请参阅 AWS 软件开发工具包