如何使用 CloudWatch 控制台创建、配置 Kinesis 订阅筛选条件并对其进行故障排除?

上次更新日期:2022 年 4 月 12 日

我想创建一个订阅筛选条件,使用 CloudWatch 控制台将我的 Amazon CloudWatch Logs 流式传输到 Amazon Kinesis。我该如何操作?

简短描述

CloudWatch 日志可以近乎实时地发送到同一个账户或跨账户的 Kinesis 或 Amazon Kinesis Data Firehose 目标。您可以使用订阅筛选条件来执行此操作。CloudWatch Logs 控制台支持目标和设置配置。

有关如何使用筛选条件模式语法配置订阅筛选条件的信息,请参阅筛选条件和模式语法

解决方法

同一账户或当前账户中的 Kinesis 数据流的订阅配置

注意:CloudWatch 日志组区域和 Kinesis 目标区域必须相同。

在创建订阅之前,请执行以下操作:

要创建自定义 IAM 角色和角色策略,请执行以下操作:

1.    使用具有管理员权限的用户打开 IAM 控制台

2.    在导航窗格中,选择策略

3.    在内容窗格中,选择创建策略

4.    复制下列 JSON 策略文档,并粘贴到 JSON 选项卡中。

角色权限

{
  "Statement": [{
    "Effect": "Allow",
    "Action": "kinesis:PutRecord",
    "Resource": "arn:aws:kinesis:<REGION>:<ACCOUNT_ID>:stream/<STREAM_NAME>"
  }]
}

5.    打开 IAM 控制台

6.    在控制台的导航窗格中,选择角色,然后选择创建角色

7.    选择自定义信任策略角色类型。

8.    在自定义信任策略部分,输入或粘贴角色的自定义信任策略。有关更多信息,请参阅创建 IAM 策略

9.    选择 Next

10.    选择在上一步骤中创建的自定义 IAM 策略。

11.    选择下一步创建角色

信任策略

{
  "Statement": {
    "Effect": "Allow",
    "Principal": {
      "Service": "logs.region.amazonaws.com"
    },
    "Action": "sts:AssumeRole",
    "Condition": {
      "StringLike": {
        "aws:SourceArn": "arn:aws:logs:<REGION>:<ACCOUNT_ID>:*"
      }
    }
  }
}

创建 Kinesis 流式传输和 IAM 角色后,可以创建订阅筛选条件:

1.    打开 CloudWatch 控制台

2.    选择日志组

3.    选择操作订阅筛选条件

4.    要配置目标,请选择创建 Kinesis 订阅筛选条件

5.    选择当前账户

6.    在下拉列表中选择 Kinesis 数据流。

7.    选择之前创建的 IAM 角色。

8.    查看分配方法

按日志流式传输 - 验证下游使用者是否可以按日志流式传输聚合录入事件,但效率可能较低。这种方法还可能导致更高的流式传输成本,因为需要更多的分片。

随机 - 将负载在 Kinesis 流式传输分片上分发,但下游使用者无法按日志流式传输聚合录入事件。

9.    配置日志格式和筛选条件

选择日志格式。该格式可以是 Amazon VPC、CloudTrail 或 Lambda 发布的 Amazon VPC Flow Logs、AWS CloudTrail 或 AWS Lambda 日志。或者,也可以根据传入的录入事件,选择 JSON空格分隔其他

订阅筛选条件模式部分中定义筛选条件模式

输入订阅筛选条件的名称。

10.    使用现有日志事件数据验证您的模式

11.    验证后,选择开启流式传输

12.    (可选)通过验证录入事件流来验证数据流是否正常工作。

跨账户 Kinesis 数据流目标的配置

注意:如果您在运行 AWS Command Line Interface (AWS CLI) 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

您可以将 CloudWatch Logs 事件传输到不同 AWS 账户和区域的 Kinesis 数据流。为此,请在指定 AWS 区域的同时设置与订阅的跨账户日志数据共享,如下例所示。

注意:在此示例中,us-east-1 区域中的 CloudWatch Logs 将传送到 us-west-2 中的另一个 AWS 用户的 Kinesis 数据流。日志数据接收方的 AWS 账户 ID 为 222222222222,日志数据发送方的 AWS 账户 ID 为 111111111111。

在接收方账户 222222222222 中创建目标数据流

1.    使用 IAM 角色和信任策略在数据接收者账户的 Kinesis 中创建目标数据流

2.    使用 create-stream 命令创建数据流。确保指定 --region。例如,以下命令将在 us-west-2 中创建数据流 YourStreamName

aws kinesis create-stream --stream-name "YourStreamName" --shard-count 1 --region us-west-2

3.    使用 describe-stream 命令检查 StreamDescription.StreamStatus 属性。确保指定 --region。例如,以下命令将在 us-west-2 中检查流式传输 YourStreamName

aws kinesis describe-stream --stream-name "YourStreamName" --region us-west-2

4.    使用 put-destination 命令创建 CloudWatch Logs 目标。将 --role-arn--region 设置为与源 CloudWatch 日志相同的区域。例如,以下命令必须在接收方/目标账户 222222222222 中运行,以便在 us-east-1 中的接收方账户 222222222222 中创建日志目标:

aws logs put-destination \
  --destination-name "testDestination" \
  --target-arn "arn:aws:kinesis:us-west-2:222222222222:stream/YourStreamName" \
  --role-arn "arn:aws:iam::222222222222:role/YourIAMRoleName" --region us-east-1

在源账户 111111111111 中创建订阅筛选条件

要创建订阅筛选条件,请执行以下操作:

1.    选择日志组。

2.    选择操作订阅筛选条件

3.    要选择目标,请从以下选项中选择:

创建 Kinesis 订阅筛选条件:为 Kinesis 数据流目标创建订阅筛选条件

4.    选择其他账户,因为目标是跨账户。

5.    对于跨账户 Kinesis 或 Kinesis Firehose 目标,请提供目标 ARN

6.    选择分配方法:

按日志流式传输 - 验证下游使用者是否可以按日志流式传输聚合录入事件,但效率可能较低。这种方法还可能导致更高的流式传输成本,因为需要更多的分片。

随机 - 将负载在 Kinesis 流式传输分片上分发,但下游使用者无法按日志流式传输聚合录入事件。

7.    配置日志格式和筛选条件

选择日志格式。对于 Amazon VPC、CloudTrail 或 Lambda 发布的日志,其格式可以是 Amazon VPC Flow Logs、CloudTrail 或 AWS Lambda。或者,也可以根据传入的录入事件,选择 JSON、空格分隔或其他。

订阅筛选条件模式部分中定义筛选条件模式

输入订阅筛选条件的名称。

8.    使用现有日志事件数据验证您的模式

9.    验证后,选择开启流式传输

10.    (可选)通过验证录入事件流来验证数据流是否正常工作。

故障排除

  • 确保 Kinesis 流式传输处于活动状态,并且可以在 Kinesis 控制台上查看。或者,可以使用 DescribeStream API 调用
  • 验证 CloudWatch 日志组和 Kinesis 数据流区域是否相同。
  • 确保有一个 IAM 角色对 logs.yourregion.amazonaws.com 具有信任权限,并允许权限 kinesis: putrecords
  • 验证 IAM 策略中的区域和资源是否正确。
  • 确保在为 Kinesis 数据流配置订阅筛选条件时未选择 Kinesis Firehose。
  • 开启流式传输后,请验证订阅筛选条件的指标是否确认筛选条件模式有效,并与传入的录入事件匹配。为此,请查看以下指标:ForwardedBytes: 转发到订阅目标的录入事件量(以压缩字节为单位)。ForwardedLogEvents: 转发到订阅目标的录入事件数。
  • 要验证将录入事件流式传输到目标时没有错误,请验证以下指标:DeliveryErrors: CloudWatch Logs 在将数据转发到订阅目标时收到错误的录入事件数。DeliveryThrottling: 在将数据转发到订阅目标时,指示 CloudWatch Logs 受到限制的录入事件数。
  • 如果您有专用 Kinesis 流式传输,请检查该流式传输的指标以确认功能正常。
  • 要解决跨账户日志问题,请参阅解决 CloudWatch 跨账户设置问题

这篇文章对您有帮助吗?


您是否需要账单或技术支持?