教程:使用 Amazon OpenSearch Ingestion 将数据摄取到集合 - 亚马逊 OpenSearch 服务
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

教程:使用 Amazon OpenSearch Ingestion 将数据摄取到集合

本教程向您展示如何使用 Amazon OpenSearch Ingestion 配置简单管道并将数据摄取到 Amazon OpenSearch 无服务器集合。管道是 OpenSearch Ingestion 预调配和管理的资源。您可以使用管道筛选、丰富、转换、规范化和聚合数据,以便在 OpenSearch Service 中执行下游分析和可视化。

有关演示如何将数据摄取到预置 OpenSearch Service 的教程,请参阅 教程:使用 Amazon OpenSearch Ingestion 将数据提取到域

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

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

  • 名为 ingestion-pipeline-serverless 的管道

  • 管道将写入的名为 ingestion-collection 的集合

  • 名为 PipelineRole 的 IAM 角色,管道将担任此角色,对集合执行写入操作

所需的权限

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

此外,还需要对管道角色资源拥有 iam:PassRole 权限。此权限允许您将管道角色传递给 OpenSearch Ingestion,以便向集合写入数据。

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

步骤 1:创建管道角色

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

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

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

  3. 选择 JSON,然后将下面的策略粘贴到编辑器中。修改集合 ARN 并相应地命名。

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "aoss:BatchGetCollection", "aoss:APIAccessAll" ], "Effect": "Allow", "Resource": "arn:aws:aoss:us-east-1:your-account-id:collection/collection-id" }, { "Action": [ "aoss:CreateSecurityPolicy", "aoss:GetSecurityPolicy", "aoss:UpdateSecurityPolicy" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "aoss:collection": "collection-name" } } } ] }
  4. 选择下一步,选择下一步,将策略命名为 collection-pipeline-policy

  5. 选择创建策略

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

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

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

  9. 选择下一步,将角色命名为 PipelineRole

  10. 选择 创建角色

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

步骤 2:创建集合

接下来,创建集合,将数据摄取到其中。将集合命名为 ingestion-collection

  1. 导航到位于 https://console.aws.amazon.com/aos/home 的 Amazon OpenSearch Service 控制台。

  2. 选择左侧导航窗格中的集合,然后选择创建集合

  3. 将集合命名为 ingestion-collection

  4. 对于安全,选择标准创建

  5. 网络访问设置下,将访问类型更改为公有

  6. 所有其他设置保留为默认值,然后选择 Next(下一步)。

  7. 现在,配置集合的数据访问策略。对于定义方法,选择 JSON,然后将下面的策略粘贴到编辑器中。此策略具有两个作用:

    • 允许管道角色写入集合。

    • 允许从集合中读取。稍后,在将一些示例数据摄取到管道后,查询集合,以确保数据已成功摄取并写入索引。

      [ { "Rules": [ { "Resource": [ "index/ingestion-collection/*" ], "Permission": [ "aoss:CreateIndex", "aoss:UpdateIndex", "aoss:DescribeIndex", "aoss:ReadDocument", "aoss:WriteDocument" ], "ResourceType": "index" } ], "Principal": [ "arn:aws:iam::your-account-id:role/PipelineRole", "arn:aws:iam::your-account-id:role/Admin" ], "Description": "Rule 1" } ]
  8. 替换 Principal 元素。第一个主体应指定您创建的管道角色。第二个主体应指定用户或角色,供您稍后用于查询集合。

  9. 选择下一步。将访问策略命名为 pipeline-domain-access,然后再次选择下一步

  10. 查看集合配置并选择 Submit(提交)。

当集合处于活动状态时,请记录端点下的 OpenSearch 端点(例如,https://{collection-id}.us-east-1.aoss.amazonaws.com)。您创建管道时需要用到。

步骤 3:创建管道

现在,您已经拥有集合和具有相应访问权限的角色,可以创建管道了。

要创建管道
  1. 在 Amazon OpenSearch Service 控制台的左侧导航窗格中,选择管道

  2. 选择 创建管道

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

  4. 将管道命名为 serverless-ingestion,并将容量设置保留为默认值。

  5. 在本教程中,我们将创建名为 log-pipeline 且使用 HTTP 源插件的简单子管道。插件接受 JSON 数组格式的日志数据。我们将指定一个 OpenSearch 无服务器集合作为接收器,并将所有数据摄取到 my_logs 索引。

    管道配置下,将以下 YAML 配置粘贴到编辑器中:

    version: "2" log-pipeline: source: http: path: "/${pipelineName}/test_ingestion_path" processor: - date: from_time_received: true destination: "@timestamp" sink: - opensearch: hosts: [ "https://collection-id.us-east-1.aoss.amazonaws.com" ] index: "my_logs" aws: sts_role_arn: "arn:aws:iam::your-account-id:role/PipelineRole" region: "us-east-1" serverless: true
  6. hosts URL 替换为您在上一节中创建的集合端点。将 sts_role_arn 参数替换为 PipelineRole 的 ARN。或者,修改 region

  7. 选择验证管道并确保验证成功。

  8. 在本教程中,为简单起见,我们将配置管道的公共访问权限。在 网络下,选择 公有访问权限

    有关配置 VPC 访问权限的更多信息,请参阅 为 Amazon OpenSearch Ingestion 管道配置 VPC 访问

  9. 保持日志发布为启用状态,以防您在完成本教程时遇到任何问题。有关更多信息,请参阅 监控管道日志

    指定以下日志组名称:/aws/vendedlogs/OpenSearchIngestion/serverless-ingestion/audit-logs

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

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

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

注意

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

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

Pipeline settings page showing ingestion URL for an active ingestion pipeline.

然后,摄取一些示例数据。以下示例请求使用 awscurlmy_logs 索引发送单个日志文件:

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/log-pipeline/test_ingestion_path

您现在会看到 200 OK 响应。

现在,查询 my_logs 索引,确保成功摄取日志条目:

awscurl --service aoss --region us-east-1 \ -X GET \ https://collection-id.us-east-1.aoss.amazonaws.com/my_logs/_search | json_pp

示例响应:

{ "took":348, "timed_out":false, "_shards":{ "total":0, "successful":0, "skipped":0, "failed":0 }, "hits":{ "total":{ "value":1, "relation":"eq" }, "max_score":1.0, "hits":[ { "_index":"my_logs", "_id":"1%3A0%3ARJgDvIcBTy5m12xrKE-y", "_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":"2023-04-26T05:22:16.204Z" } } ] } }

相关资源

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

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