如何使用 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
要创建订阅筛选条件,请执行以下操作:
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 跨账户设置问题。