

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 防止日志递归
<a name="Subscriptions-recursion-prevention"></a>

订阅过滤器存在导致无限日志递归的风险，如果不加以防止，则可能导致 CloudWatch 日志和目标中的摄取账单大幅增加。当订阅筛选条件与由于订阅传输工作流而接收日志事件的日志组关联时，会发生这种情况。提取到日志组中的日志将传输到目标位置，从而导致日志组提取更多日志，然后这些日志将再次转发到目标位置，从而形成递归循环。

例如，考虑一个目标位置为 Firehose 的订阅筛选条件，它将日志事件传输到 Amazon S3。此外，还有一个 Lambda 函数，可以处理传输到 Amazon S3 的新事件并自行生成一些日志。如果将订阅筛选条件应用于 Lambda 函数的日志组，则该函数生成的日志事件将转发到目标位置的 Firehose 和 Amazon S3，然后它们将再次调用该函数，从而生成更多日志并将其转发到 Firehose 和 Amazon S3，导致再次调用该函数等。这将陷入无限循环，导致日志提取、Firehose 和 Amazon S3 的计费意外增加。

如果 Lambda 函数附加到为 CloudWatch 日志启用了流日志的 VPC，则该 VPC 的日志组也可能导致日志递归。

我们建议您不要将订阅筛选条件应用于属于订阅传输工作流一部分的日志组。对于账户级订阅筛选条件，请使用 `PutAccountPolicy` API 中的 `selectionCriteria` 参数从策略中排除这些日志组。

排除日志组时，请考虑以下生成日志的 AWS 服务，这些服务可能是您的订阅交付工作流程的一部分：
+ 带有 Fargate 的 Amazon EC2
+ Lambda
+ AWS Step Function
+ 为日志启用的 Amazon VPC 流 CloudWatch 日志

**注意**  
Lambda 目标的日志组生成的日志事件将不会被转发回账户级订阅筛选策略的 Lambda 函数。在这种情况下，账户订阅策略不需要使用 `selectionCriteria` 排除目标 Lambda 函数的日志组。