环境准备

当我们使用 Amazon OpenSearch Service 进行日志分析时, 可以使用 Kinesis Data Firehose (Firehose) 作为一个完整的开箱即用的摄取管道。Firehose 提供了记录转换、可配置的缓冲、错误和重试处理, 以及备份到 Amazon Simple Storage Service (S3)。

许多收集器可以直接将数据发送到 Amazon OpenSearch Service。但是, 如果每个收集器都发送到 Amazon OpenSearch Service, 我们将很快使我们的Domain超负荷连接。我们需要使用一个聚合器来"汇集"连接, 缓冲数据。Firehose 是一个很好的工具。

作为网站管理员的角色, 我们决定使用 Firehose 作为日志聚合管道, 收集 Web 服务器生成的 Web 日志。

首先, 我们将配置 Firehose 将数据发送到我们的 Amazon OpenSearch Service 域。我们将使用 Kinesis Data Generator 生成数据, 该生成器将持续向 Firehose 发布事件流。


创建Firehose

创建 Kinesis Data Firehose:

image-20240616181609727

选择以下选项:

  • : Direct PUT
  • 目标: Amazon OpenSearch Service

Firehose stream name 设置为 web-logs

image-20240616181859196

跳过 Transform records 部分。

当使用 Firehose 将数据传送到 Amazon OpenSearch Service 时, 我们可以启用 转换记录。这样, Firehose 将调用指定的 Lambda 函数。OpenSearch 的索引 API 需要 JSON 数据,而日志文件通常是基于行的字符串。我们需要在摄取管道中的某个地方转换该数据。使用 Firehose, 我们可以编写一个 Lambda 函数, 解析每个日志行并从中生成一个 JSON 记录。

对于本实验, 我们将从Kinesis Data Generator 发送 JSON, 因此不需要启用转换。

在向导的 目标设置 部分, 我们将配置多个选项。

  • 通过单击 Browse 按钮设置 OpenSearch Service 域, 并选择我们的 Amazon OpenSearch Service 域旁边的单选按钮。单击 选择

  • index 下, 将发送到 Amazon OpenSearch Service 的数据的索引名称设置为 web-logs

image-20240616182035274

跳过 索引轮换 设置。对于本实验, 我们不需要管理数据的生命周期。

当我们启用 index rotation 时, Firehose 会在索引名称后添加一个日期/时间戳后缀。这样我们就可以管理日志数据的生命周期。最常见的选择是启用每日轮换。然后, 我们可以将索引迁移到 Amazon OpenSearch Service 的 UltraWarm 层以降低成本, 进行长期存储。当我们完成数据使用后, 可以删除索引 - 这是从OpenSearch中删除数据的最有效方式。

重试持续时间 保留为默认值, 300s


Document ID type 从默认值更改。OpenSearch Service 生成的文档 ID 是推荐的, 因为它具有更好的性能。

  • 单击 buffer hints 旁边的展开三角形
  • 缓冲大小 设置为 1 MB缓冲间隔 设置为 60 秒。

Firehose 在将数据发送到 Amazon OpenSearch Service 之前会对其进行缓冲。我们在向导的 buffer hints 部分设置缓冲特性。在选择缓冲大小和间隔时, 请考虑以下特性。

  • 较大的缓冲大小可能会提高 OpenSearch 的索引吞吐量和延迟。缓冲大小的最佳值取决于工作负载, 我们需要进行测试和调整以找到最佳值。

  • 实践中, 当 OpenSearch _bulk(索引)请求为 3-5MiB 时性能最佳。

  • 较大的缓冲大小也会引入延迟, 特别是在索引量较低时。在缓冲大小和访问日志数据的速度之间进行权衡。

image-20240616182439525

在向导的 备份设置 部分, 我们指定一个 S3 存储桶, Firehose 将所有数据传送到该存储桶, 同时也传送到 Amazon OpenSearch Service 域。我们可以使用这个数据副本作为备份, 并与其他 AWS 服务一起使用, 如 Amazon AthenaAmazon Redshift Spectrum

S3 备份存储桶 部分单击 Browse 按钮

image-20240616182719351

选择一个桶。最后点击创建

Firehose 需要一两分钟才能创建完成。一旦完成, 就可以继续下一步了。

设置OpenSearch权限

现在我们已经创建了 Firehose,还需要更新 Amazon OpenSearch Service 中的权限,以允许 Firehose 向其发送数据。首先,我们需要获取刚创建Kinesis Firehose 的Role的ARN

单击 IAM Role 进入 IAM 角色页面:

image-20240616183013403

在 IAM 角色页面,单击 Role ARN 旁边的 Copy 按钮:

image-20240616183103368

在后续步骤中需要此 ARN,将其粘贴到临时文档中,以免意外丢失

现在我们已经获取了 Kinesis Firehose Role的 ARN,配置 Amazon OpenSearch Service 授予它写入权限

从Amazon OpenSearch Service 仪表板选项卡,单击 Management 部分的 安全

单击 安全 菜单下的 Roles

image-20240616183415957

角色 列表中单击 all_access 角色

单击顶部的 Mapped users 选项卡,然后单击 Manage mapping 按钮

backend roles 部分粘贴我们在上一步中复制的 ARN,然后单击 Map

image-20240616183617775

我们的 all_access 角色现在应该看起来类似于此:

Amazon OpenSearch Service 允许创建和映射内部用户(我们将在未来的步骤中执行此操作),以及外部、联合用户和组(包括 IAM)。在本例中,我们刚刚将 Kinesis Firehose的 IAM 角色 映射到 all_access OpenSearch 角色

我们现在已成功授予 Firehose 向 OpenSearch 集群发送数据的权限。