我想要使用 Amazon CloudWatch 控制台创建订阅筛选条件,用于将我的 Amazon CloudWatch Logs 流式传输到 Amazon Kinesis。
简短描述
使用订阅筛选条件将 CloudWatch 日志近乎实时地发送到同一个账户,或者发送到跨账户 Kinesis 或 Amazon Kinesis Data Firehose 目标。CloudWatch Logs 控制台支持目标和设置配置。
有关如何使用筛选模式语法来配置订阅筛选条件的信息,请参阅 筛选条件和模式语法。
解决方法
在同一账户或当前账户中为 Kinesis 数据流配置订阅
**注意:**CloudWatch 日志组的 AWS 区域与 Kinesis 目标必须相同。
在创建订阅之前,请完成以下操作:
要创建 自定义 IAM 角色 和角色策略,请完成以下步骤:
-
使用具有管理员权限的用户打开 IAM 控制台。
-
在导航窗格中,选择策略。
-
在内容窗格中,选择创建策略。
-
在 JSON 选项卡中输入以下角色权限策略文档。用您自己的详细信息替换REGION、ACCOUNT_ID和STREAM_NAME:
{
"Statement": \[{
"Effect": "Allow",
"Action": "kinesis:PutRecord",
"Resource": "arn:aws:kinesis:REGION:ACCOUNT\_ID:stream/STREAM\_NAME"
}\]
}
5. 打开 IAM 控制台。
6. 在导航窗格中,选择角色,然后选择创建角色。
-
选择自定义信任策略角色类型。
-
在自定义信任策略部分中,输入或粘贴角色的自定义 信任策略。请参阅以下信任策略示例:
{
"Statement": {
"Effect": "Allow",
"Principal": {
"Service": "logs.region.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringLike": {
"aws:SourceArn": "arn:aws:logs:REGION:ACCOUNT\_ID:\*"
}
}
}
}
9. 选择下一步。
-
选择您在第 4 步中创建的自定义 IAM 策略。
-
选择下一步,然后选择创建角色。
创建 Kinesis 流和 IAM 角色后,创建订阅筛选条件:
-
打开 CloudWatch 控制台。
-
选择日志组。
-
依次选择操作和订阅筛选条件。
-
要配置目标,请选择创建 Kinesis 订阅筛选条件。
-
选择当前账户。
-
从下拉列表中选择您的 Kinesis 数据流。
-
选择您创建的 IAM 角色。
-
选择**分配方法:
按日志流:**这验证了下游使用者可以按日志流聚合日志事件,但效率可能较低。这种方法还可能产生更高的流媒体成本,因为它需要更多的分片。
**随机:**这会将负载分布在 Kinesis 流分片上,但下游使用者无法通过日志流聚合日志事件。
-
配置日志格式和筛选条件:
选择日志格式。对于 Amazon VPC、CloudTrail 或 Lambda 发布的日志,其格式可以是 Amazon VPC Flow Logs、AWS CloudTrail 或 AWS Lambda。或者,您可以根据传入的日志事件选择 JSON、空格分隔或其他。
在订阅筛选模式部分定义 筛选模式。
输入订阅筛选条件的名称。
-
使用现有的日志事件数据验证您的模式。
-
验证后,选择开始流式传输。
-
(可选)确认日志事件流以验证您的数据流正常。
跨账户 Kinesis 数据流目标的配置
**注意:**如果您在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请 确保您使用的是最新版本的 AWS CLI。
您可以将 CloudWatch Logs 事件传送到不同 AWS 账户和区域中的 Kinesis 数据流。为此,请设置与订阅共享的跨账户日志数据并指定区域。
在以下示例中,us-east-1 区域中的 CloudWatch 日志被传输到 us-west-2 中另一个 AWS 用户的 Kinesis 数据流。日志数据接收者的账户 ID 为 222222222222,日志数据发送者的账户 ID 为 111111111111。
在接收者账户 222222222222 中创建目标数据流
使用 IAM 角色和信任策略,在数据接收者账户中的 Kinesis 中 创建目标 数据流。
在源账户 111111111111 中创建订阅筛选条件
要创建订阅筛选条件,请完成以下步骤:
-
选择日志组。
-
依次选择操作和订阅筛选条件。
-
要选择目标,请选择创建,然后选择创建 Kinesis 订阅筛选条件。
-
选择其他账户。
-
对于跨账户 Kinesis 或 Kinesis 数据 Firehose 目标,请提供目标 ARN。
-
选择分配方法:
**按日志流:**这验证了下游使用者可以按日志流聚合日志事件,但效率可能较低。这种方法还可能产生更高的流媒体成本,因为它需要更多的分片。
**随机:**这会将负载分布在 Kinesis 流分片上,但下游使用者无法通过日志流聚合日志事件。
-
配置日志格式和筛选条件:
选择日志格式。对于 Amazon VPC、CloudTrail 或 Lambda 发布的日志,其格式可以是 Amazon VPC Flow Logs、CloudTrail 或 AWS Lambda。或者,您可以根据传入的日志事件选择 JSON、空格分隔或其他。
在订阅筛选模式部分定义 筛选模式。
输入订阅筛选条件的名称。
-
使用现有的日志事件数据验证您的模式。
-
验证后,选择开始流式传输。
-
(可选)确认流日志事件以验证您的数据流正常。
故障排除
- 确保您的 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 跨账户设置问题进行故障排除。