如何对在 CloudWatch 中按照订阅筛选器传输日志失败的问题进行故障排除?
我想对在 Amazon CloudWatch 中按照订阅筛选器传输日志失败的问题进行故障排除。
简短描述
当您开始流式传输时,请检查 CloudWatch Logs 指标以确保筛选模式正确且与传入的日志事件一致。以下是故障排除时需要查看的最常见指标:
- **ForwardedBytes:**转发到订阅目标的日志事件量(以压缩字节为单位)。
- **ForwardedLogEvents:**转发到订阅目标的日志事件的数量。
- **DeliveryErrors:**CloudWatch Logs 在将数据转发到订阅目标时收到错误的日志事件的数量。
- **DeliveryThrottling:**表明 CloudWatch Logs 在将数据转发到订阅目标时受到限制的日志事件的数量。
**注意:**如果目标服务收到可重试的错误,例如限制或服务错误,则 CloudWatch Logs 会尝试发送 24 小时的数据。如果错误无法重试,例如 AccessDenied 或 ResourceNotFound 错误,则 CloudWatch Logs 不会尝试进一步传输。
解决方法
根据您使用的目标服务,对按照订阅筛选器传输日志失败的问题进行故障排除。
Amazon Kinesis Data Streams
要解决按照订阅筛选器向 Amazon Kinesis Data Streams 传输日志失败的问题,请完成以下任务:
-
检查您的 Kinesis 数据流是否处于活动状态。要查看状态,请使用 Kinesis 控制台或 DescribeStream API 调用。
-
检查 CloudWatch 日志组和 Kinesis 数据流是否在同一 AWS 区域中。
-
检查与订阅筛选器关联的 AWS Identity and Access Management (IAM) 角色。确保 CloudWatch Logs 具有必要的权限,可以将数据存入您的数据流。以下是角色权限策略示例:
**注意:**将 example-region 替换为您的区域,将 example-account-id 替换为您的 AWS 账户 ID,将 example-stream-name 替换为您的数据流名称。{ "Statement": [{ "Effect": "Allow", "Action": "kinesis:PutRecord", "Resource": "arn:aws:kinesis:example-region:example-account-id:stream/example-stream-name" }] } -
检查 IAM 角色是否配置了相应的信任策略。以下是信任策略示例:
**注意:**将 example-region 替换为您的区域,将 example-account-id 替换为您的账户 ID。{ "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:logs:example-region:example-account-id:*" } } } } -
如果您有专用 Kinesis 数据流,请检查数据流指标以确认其正常运行。有关详细信息,请参阅使用 Amazon CloudWatch 监控 Amazon Kinesis Data Streams 服务。
-
如果您遇到跨账户日志记录问题,请参阅如何对 CloudWatch 中的跨账户日志记录问题进行故障排除?
Amazon Data Firehose
要解决按照订阅筛选器向 Amazon Data Firehose 传输日志失败的问题,请完成以下任务:
-
检查您的 Firehose 流是否处于活动状态。要查看状态,请使用 Kinesis 控制台或 DescribeDeliveryStream API 调用。如果您使用数据转换功能,请确保指定的 AWS Lambda 函数存在。
-
检查 Firehose 指标,以确认数据正在流入 Firehose。检查 IncomingBytes、IncomingRecords、DataReadFromKinesisStream.Bytes 和 DataReadFromKinesisStream.Records 等指标。
-
如果 Firehose 未接收数据,请检查 API 级别 CloudWatch 指标。问题可能源于上游。诸如 PutRecord 和 PutRecordBatch 之类的 API 会向 Firehose 发送数据,并且必须正确调用。
-
检查错误日志,以查看有关传输失败原因的详细信息。确保相关的 IAM 策略包含 logs:PutLogEvents 权限。以下是具有 logs:PutLogEvents 权限的 IAM 策略示例:
**注意:**将 example-region 替换为您的区域,将 example-account-id 替换为您的账户 ID。{ "Sid": "", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:example-region:example-account-id:log-group:/aws/kinesisfirehose/Delivery_Stream:log-stream:*", "arn:aws:logs:example-region:example-account-id:log-group:%FIREHOSE_POLICY_TEMPLATE_PLACEHOLDER%:log-stream:*" ] } -
检查与您的 Firehose 流关联的 IAM 角色是否具有允许 CloudWatch Logs 存放数据的相应权限。以下是权限策略示例:
**注意:**将 example-region 替换为您的区域,将 example-account-id 替换为您的账户 ID,将 example-stream-name 替换为您的数据流名称。{ "Statement": [{ "Effect": "Allow", "Action": "firehose:PutRecord", "Resource": "arn:aws:firehose:example-region:example-account-id:deliverystream/example-stream-name" }] } -
检查 IAM 角色是否配置了相应的信任策略。以下是信任策略示例:
**注意:**将 example-region 替换为您的区域,将 example-account-id 替换为您的账户 ID。{ "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:example-region:example-account-id:*" } } } } -
如果您遇到跨账户日志记录问题,请参阅如何对 CloudWatch 中的跨账户日志记录问题进行故障排除?
-
有关与不同目标相关的问题,请参阅 Amazon Data Firehose 故障排除。
Lambda
要解决按照订阅筛选器向 Lambda 传输日志失败的问题,请完成以下任务:
-
检查 Lambda 函数是否具有所需的基于资源的策略,以授予 CloudWatch Logs 运行您的函数的权限。以下是策略声明示例:
**注意:**将 example-region、example-account-id、example-lambda-function 和 example-log-name 替换为您的区域、账户 ID、Lambda 函数和日志名称。"Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:example-region:example-account-id:function:example-lambda-function", "Condition": { "StringEquals": { "AWS:SourceAccount": "example-account-id" }, "ArnLike": { "AWS:SourceArn": "arn:aws:logs:example-region:example-account-id:log-group:example-log-name:*" } } } ] -
使用以下角色策略检查 Lambda 函数的 IAM 角色是否与 lambda.amazonaws.com 存在信任关系:
"Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ]
OpenSearch Service
要解决按照订阅筛选器向 Amazon OpenSearch Service 传输日志失败的问题,请完成以下任务:
-
使用以下角色策略检查 Lambda 函数的 IAM 角色是否与 lambda.amazonaws.com 存在信任关系:
**注意:**将 example-region 替换为您的区域,将 example-account-id 替换为您的账户 ID,将 example-target-domain 替换为目标域的名称。{"Version": "2012-10-17", "Statement": [ { "Action": [ "es:*" ], "Effect": "Allow", "Resource": "arn:aws:es:example-region:exampleaccount-id:domain/example-target-domain/*" } ] } -
如果您遇到跨账户日志记录问题,请参阅如何对 CloudWatch 中的跨账户日志记录问题进行故障排除?
-
要解决包含 OpenSearch Service 订阅筛选器的 CloudWatch Logs 问题,请参阅如何对 CloudWatch Logs 进行故障排除,使其流式传输到我的 OpenSearch Service 域?
相关信息
如何使用 CloudWatch 控制台创建、配置 Kinesis 订阅筛选器并对其进行故障排除?
- 语言
- 中文 (简体)

相关内容
AWS 官方已更新 2 年前