教程:使用 Amazon Ingestion 将数据提取到域中 OpenSearch - 亚马逊 OpenSearch 服务

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

教程:使用 Amazon Ingestion 将数据提取到域中 OpenSearch

本教程向您展示如何使用 Amazon OpenSearch Ingestion 配置简单的管道并将数据提取到亚马逊 OpenSearch 服务域中。道是 OpenSearch Ingestion 预置和管理的资源。您可以使用管道筛选、丰富、转换、标准化和聚合数据,以便在 S OpenSearch ervice 中进行下游分析和可视化。

本教程将指导您完成快速启动并运行管道的基本步骤。有关更全面的说明,请参阅创建管道

在本教程中,您将完成以下步骤:

在本教程中,您将创建以下资源:

  • 管道写入ingestion-domain的名为的域

  • 名为 ingestion-pipeline 的管道

所需的权限

要完成本教程,您的用户或角色必须附加具有以下最低权限的基于身份的策略。这些权限允许您创建管道角色并附加策略(iam:Create*iam:Attach*)、创建或修改域(es:*)以及使用管道(osis:*)。

JSON
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Resource":"*", "Action":[ "osis:*", "iam:Create*", "iam:Attach*", "es:*" ] }, { "Resource":[ "arn:aws:iam::your-account-id:role/OpenSearchIngestion-PipelineRole" ], "Effect":"Allow", "Action":[ "iam:CreateRole", "iam:AttachPolicy", "iam:PassRole" ] } ] }

步骤 1:创建管道角色

首先,创建管道将扮演的角色以访问 OpenSearch 服务域接收器。在本教程后面的部分中,您将在管道配置中包含此角色。

要创建管道角色
  1. 打开 AWS Identity and Access Management 控制台,网址为https://console.aws.amazon.com/iamv2/

  2. 选择策略,然后选择创建策略

  3. 在本教程中,您将数据摄取到名为 ingestion-domain 的域,该域将在下一步中创建。选择 JSON,然后将下面的策略粘贴到编辑器中。使用您的账户 ID 替换 your-account-id,并在必要时修改区域。

    JSON
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "es:DescribeDomain", "Resource": "arn:aws:es:us-east-1:your-account-id:domain/ingestion-domain" }, { "Effect": "Allow", "Action": "es:ESHttp*", "Resource": "arn:aws:es:us-east-1:your-account-id:domain/ingestion-domain/*" } ] }

    如果您想将数据写入现有域,请使用您的域名替换 ingestion-domain

    注意

    为了简化本教程,我们使用了广泛访问策略。但是,在生产环境中,建议您对管道角色应用严格一些的访问策略。有关提供最低所需权限的策略示例,请参阅 授予 Amazon OpenSearch Ingestion 管道访问域名的权限

  4. 依次选择下一步下一步,然后命名您的策略 pipeline-policy

  5. 选择创建策略

  6. 然后,创建一个角色并将策略附加到该角色。选择 角色,然后选择 创建角色

  7. 选择自定义信任策略,并将以下策略粘贴到编辑器中:

    JSON
    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"osis-pipelines.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
  8. 选择下一步。然后搜索并选择(您刚刚创建的)pipeline-policy

  9. 选择 “下一步” 并命名角色PipelineRole

  10. 选择创建角色

请记住角色的 Amazon 资源名称(ARN)(例如,arn:aws:iam::your-account-id:role/PipelineRole)。您创建管道时需要用到。

步骤 2:创建域

首先,创建一个名为的域,ingestion-domain用于将数据采集到其中。

https://console.aws.amazon.com/aos/家中导航至 Amazon S OpenSearch ervice 控制台,创建一个满足以下要求的域名

  • 正在运行 OpenSearch 1.0 或更高版本,或者运行 Elasticsearch 7.4 或更高版本

  • 使用公有访问

  • 不使用精准访问控制

注意

这些要求是为了让本教程简单易懂。在生产环境中, and/or 您可以使用精细的访问控制来配置具有 VPC 访问权限的域。要使用精细访问控制,请参阅映射管道角色

该域必须具有授予 OpenSearchIngestion-PipelineRole IAM 角色权限的访问策略, OpenSearch 服务将在下一步中为您创建该角色。管道将扮演此角色,以便将数据发送到域接收器。

确保该域具有以下域级访问策略,该策略授予管道角色访问该域的权限。替换成您自己的区域和账户 ID:

JSON
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::your-account-id:role/OpenSearchIngestion-PipelineRole" }, "Action": "es:*", "Resource": "arn:aws:es:us-east-1:your-account-id:domain/ingestion-domain/*" } ] }

有关创建域级访问策略的更多信息,请参阅。基于资源的策略

如果您已经创建了域,请修改其现有访问策略以向 OpenSearchIngestion-PipelineRole 提供上述权限。

步骤 3:创建管道

现在您已经有了域,可以创建管道了。

创建管道
  1. 在亚马逊 OpenSearch 服务控制台中,从左侧导航窗格中选择 Pipelin es

  2. 选择 Create pipeline(创建管道)

  3. 选择空白管道,然后选择选择蓝图

  4. 在本教程中,我们将创建一个使用 HTTP 源插件的简单管道。插件接受 JSON 数组格式的日志数据。我们将指定单个 OpenSearch 服务域作为接收器,并将所有数据提取到application_logs索引中。

    在 “” 菜单中,选择 “HTTP”。在路径中,输入 /logs。

  5. 在本教程中,为简单起见,我们将配置管道的公共访问权限。对于源网络选项,请选择公共访问。有关配置 VPC 访问权限的更多信息,请参阅 为 Amazon OpenSearch Ingestion 管道配置 VPC 访问

  6. 选择下一步

  7. 对于处理者,输入日期并选择添加

  8. 启用 “从收到时间开始”。将所有其他设置保留为默认设置。

  9. 选择下一步

  10. 配置接收器详细信息。对于OpenSearch 资源类型,请选择托管群集。然后选择您在上一节中创建的 OpenSearch 服务域。

    索引名称中,输入应用程序日志。 OpenSearch 如果此索引尚不存在,Ingestion 会自动在域中创建该索引。

  11. 选择下一步

  12. 命名管道摄取管道。将容量设置保留为其默认值。

  13. 对于管道角色,选择创建并使用新的服务角色。管道角色为管道提供写入域接收器并从基于拉取的源中读取所需的权限。选择此选项即表示您允许 OpenSearch Ingestion 为您创建角色,而不是在 IAM 中手动创建角色。有关更多信息,请参阅 在 Amazon OpenSearch Ingestion 中设置角色和用户

  14. 对于服务角色名称后缀,请输入PipelineRole。在 IAM 中,角色的格式为arn:aws:iam::your-account-id:role/OpenSearchIngestion-PipelineRole

  15. 选择下一步。检查您的管道配置,然后选择创建管道。管道需要 5-10 分钟才能变为活动状态。

步骤 4:摄取一些示例数据

当管道状态为 Active 时,您可以开始将数据摄取到管道。您必须使用 Signature 版本 4 对向管道发出的所有 HTTP 请求进行签名。使用诸如 Postmanawscurl 之类的 HTTP 工具向管道发送一些数据。与将数据直接索引到域一样,将数据提取到管道始终需要 IAM 角色或 IAM 访问密钥和私有密钥

注意

签署请求的主体必须具有 osis:Ingest IAM 权限。

首先,从管道设置页面获取摄取 URL:

Pipeline settings page showing ingestion URL and other configuration details.

然后,摄取一些示例数据。以下请求使用 awscurl 向管道发送单个日志文件:

awscurl --service osis --region us-east-1 \ -X POST \ -H "Content-Type: application/json" \ -d '[{"time":"2014-08-11T11:40:13+00:00","remote_addr":"122.226.223.69","status":"404","request":"GET http://www.k2proxy.com//hello.html HTTP/1.1","http_user_agent":"Mozilla/4.0 (compatible; WOW64; SLCC2;)"}]' \ https://pipeline-endpoint.us-east-1.osis.amazonaws.com/logs

您现在会看到 200 OK 响应。如果您遇到身份验证错误,可能是因为您从与管道不同的账户提取数据。请参阅修复权限问题

现在,查询 application_logs 索引以确保成功提取您的日志条目:

awscurl --service es --region us-east-1 \ -X GET \ https://search-ingestion-domain.us-east-1.es.amazonaws.com/application_logs/_search | json_pp

示例响应:

{ "took":984, "timed_out":false, "_shards":{ "total":1, "successful":5, "skipped":0, "failed":0 }, "hits":{ "total":{ "value":1, "relation":"eq" }, "max_score":1.0, "hits":[ { "_index":"application_logs", "_type":"_doc", "_id":"z6VY_IMBRpceX-DU6V4O", "_score":1.0, "_source":{ "time":"2014-08-11T11:40:13+00:00", "remote_addr":"122.226.223.69", "status":"404", "request":"GET http://www.k2proxy.com//hello.html HTTP/1.1", "http_user_agent":"Mozilla/4.0 (compatible; WOW64; SLCC2;)", "@timestamp":"2022-10-21T21:00:25.502Z" } } ] } }

修复权限问题

如果您按照教程中的步骤进行操作,但在尝试提取数据时仍然看到身份验证错误,则可能是因为写入管道的角色与管道本身 AWS 账户 不同。在这种情况下,您需要创建并担任一个角色,该角色让您专门用来摄取数据。有关说明,请参阅提供跨账户摄取访问权限

相关资源

本教程介绍了一个通过 HTTP 摄取单个文档的简单用例。在生产场景中,您将配置客户端应用程序(例如 Fluent Bit、Kubernetes 或 Collect OpenTelemetry or)以将数据发送到一个或多个管道。您的管道可能比本教程展示的简单示例复杂得多。

要开始配置您的客户端并摄取数据,请参阅以下资源: