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

创建和配置 Amazon Elasticsearch Service 域

本章介绍了如何创建和配置 Amazon Elasticsearch Service (Amazon ES) 域。An Amazon ES domain is synonymous with an Elasticsearch cluster. Domains are clusters with the settings, instance types, instance counts, and storage resources that you specify.

入门教程中的简短说明不同,本章描述了所有选项,并提供了相关的参考信息。您可以使用 Amazon ES 控制台、AWS Command Line Interface (AWS CLI) 或 AWS 开发工具包对应的说明来完成每个过程。

创建 Amazon ES 域

本部分介绍如何使用 Amazon ES 控制台或将 AWS CLI 与 create-elasticsearch-domain 命令结合使用来创建 Amazon ES 域。AWS CLI 的过程包括语法和示例。

创建 Amazon ES 域 (控制台)

使用以下步骤使用控制台创建一个 Amazon ES 域。

创建 Amazon ES 域 (控制台)

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

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

  3. 选择 Create a new domain (创建新域)

    或者,选择 Get Started (开始使用)(如果这是您的 AWS 区域中的第一个 Amazon ES 域)。

  4. 对于 Choose deployment type (选择部署类型),选择与您的域的目的最匹配的选项。

    • Production (生产) 域使用多 AZ 和专用主节点以及更高的可用性。

    • Development and testing (开发和测试) 域使用单个可用区。

    • Custom (自定义) 域能让您从所有配置选项中进行选择。

    重要

    不同部署类型在后续屏幕上显示不同的选项。为了全面,这些步骤包括所有选项(Custom (自定义) 部署类型)。

  5. 对于 Elasticsearch version (Elasticsearch 版本),建议您选择最新版本。有关更多信息,请参阅支持的 Elasticsearch 版本

  6. 选择 Next (下一步)

  7. 对于 Elasticsearch domain name (Elasticsearch 域名),键入域名。名称必须符合以下标准:

    • 对于您的账户和区域而言是唯一的

    • 以小写字母开头

    • 包含 3 到 28 个字符

    • 只包含小写字母 a-z、数字 0-9 和连字符 (-)

  8. 对于 Availability Zones (可用区),选择 1-AZ、2-AZ 或 3-AZ。有关更多信息,请参阅配置多 AZ 域

  9. 对于 Instance type,为数据节点选择实例类型。有关更多信息,请参阅支持的实例类型

    注意

    并非所有可用区都支持所有实例类型。如果您选择 3-AZ,我们建议您选择最新一代实例类型,如 R4 或 I3。

  10. 对于 Number of instances (实例数),选择数据节点数。

    有关最大值,请参阅群集和实例限制。单节点群集适合开发和测试,但不应用于生产工作负载。有关更多指导,请参阅调整 Amazon ES 域大小配置多 AZ 域

  11. (可选)启用或禁用专用主节点。专用主节点可增强集群稳定性,对于包含 10 个以上实例的域而言是必需的。对于生产域,我们建议使用 3 个专用主节点。

    注意

    对于专用主节点和数据节点,可以选择不同的实例类型。例如,您可以为数据节点选择通用或存储优化实例,但为专用主节点选择计算优化实例。

  12. 对于 Storage type (存储类型),选择 Instance (实例)(默认)或 EBS

    增加 EBS 卷的存储容量通常对包含大型索引或大量索引的域有好处。有关创建超大型域的指南,请参阅 PB 规模。如果您选择 EBS,下列选项将会出现:

    1. 对于 EBS volume type (EBS 卷类型),选择一个 EBS 卷类型。

      如果您选择预配置 IOPS (SSD) 作为 EBS 卷类型,对于 Provisioned IOPS (预配置 IOPS),键入所需的基准 IOPS 性能。有关更多信息,请参阅 Amazon EC2 文档中的 Amazon EBS 卷

    2. 对于 EBS volume size (EBS 卷大小),键入要附加到每个数据节点的 EBS 卷的大小。

      EBS volume size (EBS 卷大小) 是按节点计算的。您可以通过将数据节点数乘以 EBS 卷大小来计算 Amazon ES 域的总集群大小。EBS 卷最小容量和最大容量取决于指定的 EBS 卷类型及其挂载到的实例类型。要了解更多信息,请参阅 EBS 卷大小限制

  13. (可选)要启用节点到节点加密,请选中 Node-to-node encryption (节点到节点加密) 复选框。有关更多信息,请参阅Amazon Elasticsearch Service 的节点到节点加密

  14. (可选)要启用静态数据加密,请选中 Enable encryption at rest (启用静态数据的加密) 复选框。

    选择 (Default) aws/es ((默认) aws/es) 以让 Amazon ES 代表您创建 KMS 加密密钥(或使用它已创建的加密密钥)。否则,请从 KMS 主密钥菜单中选择您自己的 KMS 加密密钥。要了解更多信息,请参阅“Amazon Elasticsearch Service 的静态数据的加密”。

  15. 对于 Automated snapshot start hour (自动快照开始时间),选择 Amazon ES 的低流量时间来拍摄自动快照。

    有关更多信息和建议,请参阅配置自动快照

  16. (可选)选择 Advanced options (高级选项)。有关选项的摘要,请参阅配置高级选项

  17. 选择 Next (下一步)

  18. Set up access (设置访问权限) 页面上,在 Network configuration (网络配置) 部分中,选择 VPC Access (VPC 访问权限)Public access (公有访问权限)。如果您选择 Public access (公有访问权限),请跳至下一步。如果选择 VPC access (VPC 访问权限),则确保您满足先决条件,然后执行下列操作:

    1. 对于 VPC,选择要使用的 VPC 的 ID。

      注意

      VPC 和域必须位于同一 AWS 区域中,并且您必须选择具有设置为 Default (默认) 的租赁的 VPC。Amazon ES 尚不支持使用专用租赁的 VPC。

    2. 对于 Subnet (子网),选择一个子网。如果您启用了 多 AZ,则必须选择两个或三个子网。Amazon ES 会将 VPC 终端节点和弹性网络接口 (ENI) 放入子网中。

      注意

      必须在子网中为网络接口预留足够的 IP 地址。有关更多信息,请参阅在 VPC 子网中预留 IP 地址

    3. 对于 Security groups (安全组),选择需要访问 Amazon ES 域的 VPC 安全组。有关更多信息,请参阅Amazon Elasticsearch Service 域的 VPC 支持

    4. 对于 IAM role (IAM 角色),保留默认角色。Amazon ES 使用此预定义角色(也称为服务相关角色)访问您的 VPC 并将 VPC 终端节点和网络接口放入 VPC 的子网中。有关更多信息,请参阅用于 VPC 访问的服务相关角色

  19. (可选)如果您要用登录页保护 Kibana,请选择 Enable Amazon Cognito for authentication (启用 Amazon Cognito 身份验证)

    1. 选择想要用于 Kibana 身份验证的 Amazon Cognito 用户池和身份池。有关创建这些资源的指南,请参阅用于 Kibana 的 Amazon Cognito 身份验证

  20. 对于 Set the domain access policy to (将域访问策略设置为),从 Select a template (选择模板) 下拉列表中选择一个预配置的策略并进行编辑以满足您的域需求。或者,您也可以在 Add or edit the access policy (添加或编辑访问策略) 框中添加一个或多个 Identity and Access Management (IAM) 策略语句。有关更多信息,请参阅Amazon Elasticsearch Service 访问控制配置访问策略关于 VPC 域的访问策略

    注意

    如果您在步骤 16 中选择 VPC access (VPC 访问),则基于 IP 的策略模板在下拉列表中不可用,且您无法手动配置基于 IP 的策略。但您可以使用安全组来控制哪些 IP 地址可以访问该域。要了解更多信息,请参阅“关于 VPC 域的访问策略”。

  21. 选择 Next (下一步)

  22. Review (审核) 页面上,查看您的域配置,然后选择 Confirm (确认)

创建 Amazon ES 域 (AWS CLI)

除了使用控制台创建 Amazon ES 域之外,您还可以使用 AWS CLI。使用以下语法创建一个 Amazon ES 域。有关语法,请参阅 AWS CLI 命令参考中的 Amazon Elasticsearch Service。

示例命令

这第一个示例演示了以下 Amazon ES 域配置:

  • 使用 Elasticsearch 版本 5.5 创建名为 weblogs 的 Amazon ES 域

  • m4.large.elasticsearch 实例类型的两个实例填充该域

  • 使用 100GiB 机械磁盘 EBS 卷作为每个数据节点的存储

  • 允许匿名访问,但只能从单个 IP 地址访问:192.0.2.0/32

aws es create-elasticsearch-domain --domain-name weblogs --elasticsearch-version 5.5 --elasticsearch-cluster-config InstanceType=m4.large.elasticsearch,InstanceCount=2 --ebs-options EBSEnabled=true,VolumeType=standard,VolumeSize=100 --access-policies '{"Version": "2012-10-17", "Statement": [{"Action": "es:*", "Principal":"*","Effect": "Allow", "Condition": {"IpAddress":{"aws:SourceIp":["192.0.2.0/32"]}}}]}'

下一个示例演示了以下 Amazon ES 域配置:

  • 使用 Elasticsearch 版本 5.5 创建名为 weblogs 的 Amazon ES 域

  • m4.large.elasticsearch 实例类型的六个实例填充该域

  • 使用 100GiB 通用型 (SSD) EBS 卷作为每个数据节点的存储

  • 限制单个用户访问该服务,由用户的 AWS 账户 ID 标识:555555555555

  • 跨三个可用区分配实例

aws es create-elasticsearch-domain --domain-name weblogs --elasticsearch-version 5.5 --elasticsearch-cluster-config InstanceType=m4.large.elasticsearch,InstanceCount=6,ZoneAwarenessEnabled=true,ZoneAwarenessConfig={AvailabilityZoneCount=3} --ebs-options EBSEnabled=true,VolumeType=gp2,VolumeSize=100 --access-policies '{"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::555555555555:root" }, "Action":"es:*", "Resource": "arn:aws:es:us-east-1:555555555555:domain/logs/*" } ] }'

下一个示例演示了以下 Amazon ES 域配置:

  • 使用 Elasticsearch 版本 5.5 创建名为 weblogs 的 Amazon ES 域

  • m4.xlarge.elasticsearch 实例类型的十个实例填充该域

  • m4.large.elasticsearch 实例类型的三个实例作为专用主节点填充该域

  • 使用 100GiB 预配置 IOPS EBS 卷作为存储,用每个数据节点 1000 IOPS 的基准性能进行配置

  • 限制对单个用户和单个子资源的访问,_search API

  • 配置为 UTC 凌晨 3 点自动创建索引的每日快照

aws es create-elasticsearch-domain --domain-name weblogs --elasticsearch-version 5.5 --elasticsearch-cluster-config InstanceType=m4.xlarge.elasticsearch,InstanceCount=10,DedicatedMasterEnabled=true,DedicatedMasterType=m4.large.elasticsearch,DedicatedMasterCount=3 --ebs-options EBSEnabled=true,VolumeType=io1,VolumeSize=100,Iops=1000 --access-policies '{"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::555555555555:root" }, "Action": "es:*", "Resource": "arn:aws:es:us-east-1:555555555555:domain/mylogs/_search" } ] }' --snapshot-options AutomatedSnapshotStartHour=3

注意

如果您尝试创建 Amazon ES 域并且已存在具有相同名称的域,则 CLI 不会报告错误。相反,它会返回现有域的详细信息。

创建 Amazon ES 域 (AWS 软件开发工具包)

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

配置 Amazon ES 域

为了满足增加的流量和数据的要求,您可以使用以下任何更改更新 Amazon ES 域配置:

  • 更改实例数量

  • 更改实例类型

  • 启用或禁用专用主节点

  • 启用或禁用多 AZ

  • 配置存储设置

  • 更改自动创建域索引的快照的开始时间

  • 更改 VPC 子网和安全组

  • 配置高级选项

注意

有关配置一个域使用 EBS 卷作为存储的信息,请参阅配置基于 EBS 的存储

配置 Amazon ES 域 (控制台)

使用以下步骤通过控制台对您的 Amazon ES 配置进行更新。

配置 Amazon ES 域 (控制台)

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

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

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

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

  5. Configure cluster 页上,更新域的配置。

    1. 如果您要更改数据节点的实例类型,对于 Instance type (实例类型),请选择新的实例类型。

      要查看 Amazon ES 支持的实例类型的列表,请参阅支持的实例类型

    2. 如果您要更改实例计数,对于 Instance count (实例计数),请选择 1 到 20 之间的一个整数。要请求将每个域的实例数提高到最多 200 个,请通过 AWS 支持中心创建案例。

    3. 如果您要提高集群的稳定性,或者您的域中包含超过 10 个实例,请为您的集群启用专用主节点。有关更多信息,请参阅 专用主节点

      1. 选中 Dedicated master instances (专用主实例) 复选框。

      2. 对于 Dedicated master instance type (专用主实例类型),为专用主节点选择实例类型。

      3. 对于 Dedicated master instance count (专用主实例计数),选择实例数。

    4. 如果您要启用或禁用多 AZ,请选择 1-AZ2-AZ3-AZ。有关更多信息,请参阅 配置多 AZ 域

    5. 如果要更改该服务自动创建 Amazon ES 域主索引分片的每日快照的时间,对于 Automated snapshot start hour (自动快照开始时间),请选择一个新时间。

    6. 如果您在创建域时未启用 VPC 访问,则跳到第 7 步。如果启用了 VPC 访问,则可以更改放入了 VPC 终端节点的子网并更改安全组:

      1. 对于 Subnets,选择一个子网。子网必须预留有足够数量的 IP 地址供网络接口使用。如果您启用多 AZ,您必须选择两个或三个子网。两个子网必须位于同一区域的不同可用区中。有关更多信息,请参阅Amazon Elasticsearch Service 域的 VPC 支持

      2. 对于 Security groups,请添加需要访问域的安全组。

    7. (可选)选择 Advanced options (高级选项)。有关选项的摘要,请参阅配置高级选项

    8. 选择 Submit

配置 Amazon ES 域 (AWS CLI)

使用 elasticsearch-cluster-config 选项通过 AWS CLI 来配置您的 Amazon ES 集群。有关语法,请参阅 AWS CLI 命令参考中的 Amazon Elasticsearch Service。

示例命令

以下示例使用 Elasticsearch 版本 5.5 创建一个名为 mylogs 的 Amazon ES 域,其中具有跨三个可用区分布的两个实例类型为 m4.large.elasticsearch 的实例:

aws es create-elasticsearch-domain --domain-name mylogs --elasticsearch-version 5.5 --elasticsearch-cluster-config InstanceType=m4.large.elasticsearch,InstanceCount=2,DedicatedMasterEnabled=false,ZoneAwarenessEnabled=true,ZoneAwarenessConfig={AvailabilityZoneCount=3}

但是,随着网络流量的增长和文档数量和大小的增加,您可能需要重新配置新的 Amazon ES 域。例如,您可以决定使用更大的实例类型、使用更多实例和启用专用主节点。以下示例对域配置进行以下更改:

aws es update-elasticsearch-domain-config --domain-name mylogs --elasticsearch-cluster-config InstanceType=m4.xlarge.elasticsearch,InstanceCount=3,DedicatedMasterEnabled=true,DedicatedMasterType=m4.large.elasticsearch,DedicatedMasterCount=3

配置 Amazon ES 域 (AWS 软件开发工具包)

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

配置基于 EBS 的存储

Amazon EBS 卷是一种数据块级存储设备,可以连接到单个实例。您可以使用 EBS 卷独立地从 Amazon ES 域的计算资源扩展其存储资源。EBS 卷对包含大数据集但不需要大量计算资源的域非常有用。EBS 卷远大于实例提供的默认存储。Amazon Elasticsearch Service 支持以下 EBS 卷类型:

  • 通用型 (SSD)

  • 预配置 IOPS (SSD)

  • 磁介质

注意

在将 EBS 卷类型从预配置 IOPS 更改为非预配置 EBS 卷类型时,请将 IOPS 值设为 0

警告

目前,如果附加到 EBS 卷的数据节点出现故障,则 EBS 卷也将失败。

配置基于 EBS 的存储 (控制台)

使用以下步骤通过控制台启用基于 EBS 的存储。

启用基于 EBS 的存储 (控制台)

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

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

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

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

  5. 对于 Storage type,选择 EBS

  6. 对于 EBS volume type (EBS 卷类型),选择一个 EBS 卷类型。

    如果您选择预配置 IOPS (SSD) 作为 EBS 卷类型,对于 Provisioned IOPS (预配置 IOPS),键入所需的基准 IOPS 性能。

  7. 对于 EBS volume size,键入您想要的 EBS 卷大小。

    EBS volume size (EBS 卷大小) 是按节点计算的。您可使用以下公式计算 Amazon ES 域的群集总大小:(数据节点数) * (EBS 卷大小)。EBS 卷最小容量和最大容量取决于指定的 EBS 卷类型及其挂载到的实例类型。要了解更多信息,请参阅 EBS 卷大小限制

  8. 选择 Submit

注意

将预配置 IOPS EBS 卷的 IOPS 值设置为不超过该卷最大存储空间的 30 倍。例如,如果卷的最大容量为 100GiB,则您无法为其分配大于 3000 的 IOPS 值。

有关更多信息,请参阅 Amazon EC2 文档中的 Amazon EBS 卷

配置基于 EBS 的存储 (AWS CLI)

使用 --ebs-options 选项通过 AWS CLI 来配置基于 EBS 的存储。create-elasticsearch-domainupdate-elasticsearch-domain-config 命令均使用以下语法。

语法

--ebs-options EBSEnabled=<value>,VolumeType=<value>,VolumeSize=<value>,IOPS=<value>

参数 有效值 描述
EBSEnabled true 或者 false 指定是否使用 EBS 卷作为存储,而不使用实例提供的存储空间。默认值是 false.
VolumeType 以下任一项:
  • gp2 (通用型 SSD)

  • io1 (预配置 IOPS SSD)

  • standard (磁介质)

要用于 Amazon ES 域的 EBS 卷类型。
VolumeSize Integer 指定每个数据节点的 EBS 卷的大小(以 GiB 为单位)。EBS 卷最小容量和最大容量取决于指定的 EBS 卷类型及其挂载到的实例类型。要查看显示每种实例类型的最小和最大 EBS 容量的表格,请参阅服务限制
IOPS Integer 指定 EBS 卷的基准 I/O 性能。此参数仅用于预配置 IOPS (SSD) 卷。最小值为 1000。最大值为 16000。

注意

我们建议您不要将预配置 IOPS EBS 卷的 IOPS 值设为超过该卷最大存储的 30 倍。例如,如果卷的最大容量为 100GiB,则您不应该为其分配大于 3000 的 IOPS 值。有关更多信息,包括每种卷类型的使用案例,请参阅 Amazon EC2 文档中的 Amazon EBS 卷类型

示例

以下示例使用 Elasticsearch 版本 5.5 创建一个名为 mylogs 的域,其中包含一个 10GiB 的通用型 EBS 卷:

aws es create-elasticsearch-domain --domain-name=mylogs --elasticsearch-version 5.5 --ebs-options EBSEnabled=true,VolumeType=gp2,VolumeSize=10

但是,随着搜索索引大小的增加,您可能需要更大的 EBS 卷。例如,您可以选择基准 I/O 性能为 3000 IOPS 的 100GiB 预配置 IOPS 卷。以下示例对域配置进行以下更改:

aws es update-elasticsearch-domain-config --domain-name=mylogs --ebs-options EBSEnabled=true,VolumeType=io1,VolumeSize=100,IOPS=3000

配置基于 EBS 的存储 (AWS 软件开发工具包)

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

修改 VPC 访问配置

如果将域配置为驻留在 VPC 中,则可以使用 Amazon ES 控制台修改配置。要将公共域迁移到 VPC 域, 请参阅 从公有访问迁移到 VPC 访问

配置 VPC 访问 (控制台)

使用以下过程通过控制台配置 VPC 访问。

配置 VPC 访问 (控制台)

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

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

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

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

  5. Network configuration 部分,对于 Subnets,选择一个子网。如果您启用多 AZ,您必须选择两个或三个子网。两个子网必须位于同一区域的不同可用区中。有关更多信息,请参阅 Amazon Elasticsearch Service 域的 VPC 支持

    注意

    必须在子网中为网络接口预留足够的 IP 地址。有关更多信息,请参阅在 VPC 子网中预留 IP 地址

  6. 对于 Security groups,请添加需要访问域的安全组。

  7. 选择 Submit

配置用于 Kibana 的 Amazon Cognito 身份验证

请参阅 用于 Kibana 的 Amazon Cognito 身份验证

配置访问策略

Amazon Elasticsearch Service 提供了多种方式来配置对您的 Amazon ES 域的访问权限。有关更多信息,请参阅Amazon Elasticsearch Service 访问控制

控制台提供了预配置的访问策略,您可以针对自己域的特定需求自定义这些策略。您也可以从其他 Amazon ES 域导入访问策略。有关这些访问策略如何与 VPC 访问交互的信息,请参阅关于 VPC 域的访问策略

配置访问策略 (控制台)

使用以下步骤通过控制台配置访问策略。

配置访问策略 (控制台)

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

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

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

  4. 选择 Modify access policy

  5. 编辑访问策略。

    或者,从 Select a template 下拉列表中选择一个策略模板,然后根据需要为您的域编辑该模板。

    预配置访问策略 描述
    允许或拒绝对一个或多个 AWS 账户或 IAM 用户的访问 允许或拒绝对一个或多个 AWS 账户或 IAM 用户或角色的访问。
    允许从特定 IP 访问域

    此策略用于限制匿名访问特定的 IP 地址或 IP 地址范围。

    注意

    如果您为域启用了 VPC 访问,则此预配置策略不可用。但您可以使用安全组来控制哪些 IP 地址可以访问该域。要了解更多信息,请参阅“关于 VPC 域的访问策略”。

    拒绝访问域 此策略只允许通过 Amazon ES 控制台访问,或由创建该域的 AWS 账户的所有者访问。
    从另一个域复制访问策略 此模板提供了一种简便的方法来从另一个域导入现有的访问策略。
    允许对域进行公开访问

    不建议将此策略用于具有公有终端节点的域。它允许任何人删除、修改或访问域中的索引。此策略仅为方便测试而创建。请不要将敏感数据加载到使用这些设置的域。

  6. 选择 Submit

配置访问策略 (AWS CLI)

使用 --access-policies 选项通过 AWS CLI 来配置访问策略。create-elasticsearch-domainupdate-elasticsearch-domain-config 命令均使用以下语法。

语法

--access-policies=<value>

参数 有效值 描述
--access-policies JSON 指定 Amazon ES 域的访问策略。

示例

以下基于资源的策略示例将对此服务的访问权限限制为单个用户(通过 Principal 策略元素中的用户 AWS 账户 ID 555555555555 标识)。此用户接收对 index1 的访问权限,但不能访问域中的其他索引:

aws es update-elasticsearch-domain-config --domain-name mylogs --access-policies '{"Version": "2012-10-17", "Statement": [ { "Effect": "Allow","Principal": {"AWS": "arn:aws:iam::123456789012:root" },"Action":"es:*","Resource":"arn:aws:es:us-east-1:555555555555:domain/index1/*" } ] }'

提示

如果您使用 AWS CLI 配置访问策略,您可以使用许多在线工具之一缩小 JSON 策略语句。

配置访问策略 (AWS 软件开发工具包)

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

配置自动快照

Amazon Elasticsearch Service 自动创建一个域的主索引分片的每日快照并提供副本分片数量。默认情况下,该服务在午夜自动创建快照,不过您可以选择在服务负载最小的时候进行。

有关使用这些快照的信息,请参阅还原快照

警告

该服务在群集的运行状况为红色时将停止创建 Amazon ES 索引的快照。群集因缺乏这种备份而发生故障时,您添加到红色群集 (甚至添加到运行状况为绿色的索引) 的任何文档都可能会丢失。为防止数据丢失,请等待群集的运行状况恢复绿色,然后再将其他数据上传到群集中的任何索引。要了解更多信息,请参阅“红色集群状态”。

配置快照 (控制台)

使用以下步骤通过控制台配置每日自动索引快照。

配置自动快照(控制台)

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

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

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

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

  5. 对于 Automated snapshot start hour (自动快照开始时间),选择该服务创建自动快照的新时间。

  6. 选择 Submit

配置快照 (AWS CLI)

--snapshot-options 选项使用以下语法。该选项的语法与 create-elasticsearch-domainupdate-elasticsearch-domain-config 命令相同。

语法

--snapshot-options AutomatedSnapshotStartHour=<value>

参数 有效值 描述
AutomatedSnapshotStartHour 介于 0 到 23 之间的整数 指定该服务为新域中的索引创建每日自动快照的 UTC 时间。默认值为 0 (即午夜),这意味着快照将在午夜到凌晨 1 点之间的任意时间创建。

示例

以下示例在 UTC 凌晨 1 点配置自动快照:

aws es update-elasticsearch-domain-config --domain-name mylogs --region us-east-2 --snapshot-options AutomatedSnapshotStartHour=1

配置快照 (AWS 软件开发工具包)

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

配置高级选项

使用高级选项来配置以下内容:

rest.action.multi.allow_explicit_index

指定是否允许在 HTTP 请求正文中显式引用索引。将此属性设置为“false”可防止用户绕过子资源的访问控制。默认情况下,此值为 true。有关更多信息,请参阅高级选项和 API 注意事项

indices.fielddata.cache.size

指定分配到字段数据的 Java 堆空间的百分比。默认情况下,此设置是无界的。

注意

许多客户查询轮换每日索引。我们建议您在大多数此类情况中将 indices.fielddata.cache.size 配置为 JVM 堆的 40% 来开始基准测试。但是,如果您有非常大的索引,您可能需要大型字段数据缓存。

indices.query.bool.max_clause_count

指定 Lucene 布尔查询中允许的子句的最大数量。默认值为 1024。如果查询具有的子句数超过了允许的子句数,则会导致 TooManyClauses 错误。有关更多信息,请参阅 Lucene 文档

配置高级选项 (控制台)

配置高级选项 (控制台)

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

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

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

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

  5. 选择 Advanced options (高级选项)

  6. 指定您所需的选项,然后选择 Submit (提交)

配置高级选项 (AWS CLI)

--advanced-options 选项使用以下语法。该选项的语法与 create-elasticsearch-domainupdate-elasticsearch-domain-config 命令相同。

语法

--advanced-options rest.action.multi.allow_explicit_index=<true|false>, indices.fielddata.cache.size=<percentage_heap>, indices.query.bool.max_clause_count=<int>

参数 有效值
--advanced-options rest.action.multi.allow_explicit_index=<true|false>
indices.fielddata.cache.size=<percentage_heap>
indices.query.bool.max_clause_count=<int>

示例

以下示例禁止在 HTTP 请求的正文中显式引用索引。它还会将字段数据缓存限制在总 Java 堆的 40%:

aws es update-elasticsearch-domain-config --domain-name mylogs --region us-east-1 --advanced-options rest.action.multi.allow_explicit_index=false, indices.fielddata.cache.size=40

配置高级选项 (AWS 软件开发工具包)

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

配置日志

Amazon ES 通过 Amazon CloudWatch Logs 公开三种 Elasticsearch 日志:错误日志、搜索慢速日志和索引慢速日志。这些日志有助于排查性能和稳定性问题,但默认情况下处于禁用 状态。如果启用,则应用标准 CloudWatch 定价

注意

错误日志仅可用于 Elasticsearch 版本 5.1 和更高版本。慢速日志可用于所有 Elasticsearch 版本。

对于其日志,Elasticsearch 使用 Apache Log4j 2 及其内置日志级别(按最不严重到最严重的顺序排列):TRACEDEBUGINFOWARNERRORFATAL

如果您启用错误日志,Amazon ES 会将 WARNERRORFATAL 的日志行发布到 CloudWatch。Amazon ES 还会从 DEBUG 级别发布几个异常,其中包括:

  • org.elasticsearch.index.mapper.MapperParsingException

  • org.elasticsearch.index.query.QueryShardException

  • org.elasticsearch.action.search.SearchPhaseExecutionException

  • org.elasticsearch.common.util.concurrent.EsRejectedExecutionException

  • java.lang.IllegalArgumentException

错误日志在许多情况下有助于诊断,包括:

  • Painless 脚本编译问题

  • 无效的查询

  • 索引问题

  • 快照失败

启用日志发布(控制台)

Amazon ES 控制台是启用将日志发布到 CloudWatch 的最简单方法。

启用将日志发布到 CloudWatch(控制台)

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

  2. Analytics 下,选择 Elasticsearch Service

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

  4. Logs 选项卡上,为所需日志选择 Enable

  5. 创建一个 CloudWatch 日志组或选择一个现有日志组。

    注意

    如果计划启用多个日志,建议将它们发布到相应的日志组。这样分开更便于进行日志扫描。

  6. 选择一个包含适当权限的访问策略,或使用控制台提供的 JSON 创建策略:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com" }, "Action": [ "logs:PutLogEvents", "logs:CreateLogStream" ], "Resource": "cw_log_group_arn" } ] }

    重要

    CloudWatch Logs 支持每个区域 10 个资源策略。如果您计划针对若干 Amazon ES 域启用日志,应创建并重用包含多个日志组的更宽泛的策略,以避免达到此限制。

  7. 选择 Enable

    您的域状态将从 Active 更改为 Processing。在启用日志发布之前,必须重新回到 Active 状态。这一过程耗时最多 30 分钟。

如果您已启用慢速日志之一,请参阅为慢速日志设置 Elasticsearch 日志记录阈值。如果您仅启用了错误日志,您不需要执行任何其他配置步骤。

启用日志发布 (AWS CLI)

您需要有一个 CloudWatch 日志组,才能启用日志发布。如果还没有日志组,可以使用以下命令创建一个:

aws logs create-log-group --log-group-name my-log-group

键入下一命令查找日志组的 ARN,然后将它记下来

aws logs describe-log-groups --log-group-name my-log-group

现在,可以为 Amazon ES 授予日志组写入权限。您必须在命令结尾处提供日志组的 ARN:

aws logs put-resource-policy --policy-name my-policy --policy-document '{ "Version": "2012-10-17", "Statement": [{ "Sid": "", "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com"}, "Action":[ "logs:PutLogEvents"," logs:PutLogEventsBatch","logs:CreateLogStream"],"Resource": "cw_log_group_arn"}]}'

重要

CloudWatch Logs 支持每个区域 10 个资源策略。如果您计划针对若干 Amazon ES 域启用慢速日志,应创建并重用包含多个日志组的更宽泛的策略,以避免达到此限制。

最后,可以使用 --log-publishing-options 选项来启用发布。该选项的语法与 create-elasticsearch-domainupdate-elasticsearch-domain-config 命令相同。

参数 有效值
--log-publishing-options SEARCH_SLOW_LOGS={CloudWatchLogsLogGroupArn=cw_log_group_arn,Enabled=true|false}
INDEX_SLOW_LOGS={CloudWatchLogsLogGroupArn=cw_log_group_arn,Enabled=true|false}
ES_APPLICATION_LOGS={CloudWatchLogsLogGroupArn=cw_log_group_arn,Enabled=true|false}

注意

如果计划启用多个日志,建议将它们发布到相应的日志组。这样分开更便于进行日志扫描。

示例

下面的示例对指定域启用搜索和索引慢速日志的发布:

aws es update-elasticsearch-domain-config --domain-name my-domain --log-publishing-options "SEARCH_SLOW_LOGS={CloudWatchLogsLogGroupArn=arn:aws:logs:us-east-1:123456789012:log-group:my-log-group,Enabled=true},INDEX_SLOW_LOGS={CloudWatchLogsLogGroupArn=arn:aws:logs:us-east-1:123456789012:log-group:my-other-log-group,Enabled=true}"

要禁用到 CloudWatch 的发布,请在 Enabled=false 的情况下运行同一命令。

如果您已启用慢速日志之一,请参阅为慢速日志设置 Elasticsearch 日志记录阈值。如果您仅启用了错误日志,您不需要执行任何其他配置步骤。

启用日志发布(AWS 开发工具包)

您必须先创建一个 CloudWatch 日志组,获取其 ARN,并为 Amazon ES 授予日志组写入权限,然后才能启用日志发布。Amazon CloudWatch Logs API Reference 介绍了相关操作:

  • CreateLogGroup

  • DescribeLogGroup

  • PutResourcePolicy

您可以使用 AWS 开发工具包访问这些操作。

AWS 开发工具包(除 Android 和 iOS 开发工具包之外)支持 Amazon ES 配置 API 参考中定义的所有操作,包括 CreateElasticsearchDomainUpdateElasticsearchDomainConfig--log-publishing-options 选项。

如果您已启用慢速日志之一,请参阅为慢速日志设置 Elasticsearch 日志记录阈值。如果您仅启用了错误日志,您不需要执行任何其他配置步骤。

为慢速日志设置 Elasticsearch 日志记录阈值

默认情况下,Elasticsearch 禁用慢速日志。在启用到 CloudWatch 的慢速日志发布 后,仍必须为每个 Elasticsearch 索引指定日志记录阈值。这些阈值精确定义应在哪个日志级别记录哪些内容。各 Elasticsearch 版本的设置稍有不同。

您可以通过 Elasticsearch REST API 指定这些设置:

PUT elasticsearch_domain_endpoint/index/_settings { "index.search.slowlog.threshold.query.warn": "5s", "index.search.slowlog.threshold.query.info": "2s" }

要测试慢速日志是否发布成功,请考虑从非常值开始验证日志是否出现在 CloudWatch 中,然后将阈值增大到更有用的级别。

如果日志没有显示,请检查以下内容:

  • CloudWatch 日志组是否存在? 检查 CloudWatch 控制台。

  • Amazon ES 是否有日志组写入权限? 检查 Amazon ES 控制台。

  • Amazon ES 域是否已配置为发布到该日志组? 检查 Amazon ES 控制台,使用 AWS CLI describe-elasticsearch-domain-config 选项,或者使用某个开发工具包调用 DescribeElasticsearchDomainConfig

  • Elasticsearch 日志记录阈值是否足够低,让您的请求超过这些阈值? 要查看索引阈值,请使用以下命令:

    GET elasticsearch_domain_endpoint/index/_settings?pretty

如果要禁用索引的慢速日志,请将您更改的任何阈值恢复为其默认值 -1

使用 Amazon ES 控制台或 AWS CLI 禁用到 CloudWatch 的发布 会阻止 Elasticsearch 生成日志;只会停止发布 这些日志。请务必检查索引设置,确定是否还需要这些慢速日志。

查看日志

在 CloudWatch 中查看应用程序和慢速日志,方法与查看任何其他 CloudWatch 日志一样。有关更多信息,请参阅 Amazon CloudWatch Logs User Guide 中的查看日志数据

下面是查看日志时的一些注意事项:

  • Amazon ES 仅将每一行中的前 255000 个字符发布到 CloudWatch。其余任何内容都将被截断。

  • 在 CloudWatch 中,日志流名称包含后缀 -index-slow-logs-search-slow-logs-es-application-logs 以帮助标识其内容。