路由日志条目

本文档介绍了 Cloud Logging 如何路由 Google Cloud接收的日志条目。路由目标位置有几种不同的类型。例如,您可以将日志条目路由到目标位置(例如用于存储日志条目的日志存储桶)。如果您想将日志数据导出到第三方目标位置,则可以将日志条目路由到 Pub/Sub。此外,日志条目可以路由到多个目标位置。

概括来讲,了解 Cloud Logging 如何路由和存储日志条目:

演示 Cloud Logging 如何路由日志条目的图。

日志路由器简介

每个 Google Cloud 项目、结算账号、文件夹和组织都有一个日志路由器,用于通过资源级接收器管理日志条目的流动。日志路由器还会通过日志条目所在的资源层次结构中的接收器来管理日志条目的流动。接收器控制日志条目如何路由到目标位置。

日志路由器会临时存储日志条目。此行为可实现缓冲,以防范在日志条目流经接收器时可能发生的暂时中断和停机。临时存储无法防范配置错误。

日志路由器的临时存储不同于 Logging 存储桶提供的长期存储。

对于传入的日志条目,如果其时间戳是早于日志保留期限的过去时间或是 24 小时以后的将来时间,则会被舍弃。

日志接收器简介

当日志接收器收到日志条目时,它会确定是应忽略还是路由该日志条目。系统会将日志条目与日志接收器中的过滤条件进行比较,以做出此决策。路由日志条目后,日志接收器会将日志条目发送到日志接收器指定的目标位置。该目标位置可以是项目、存储位置或服务。

日志接收器属于给定 Google Cloud 资源: Google Cloud 项目、结算账号、文件夹和组织。这些资源还包含多个日志接收器。当资源收到日志条目时,该资源中的每个日志接收器都会独立评估该日志条目。因此,多个日志接收器可以路由同一日志条目。

默认情况下,日志数据存储在数据源自的项目中。不过,您可能需要更改此配置的原因有以下几种:

  • 集中存储日志数据。
  • 将日志数据与其他业务数据联接。
  • 以对您有用的方式整理日志数据。
  • 将日志流式传输到其他应用、其他存储区或第三方。 例如,您可能需要从 Google Cloud 导出日志,以便在第三方平台上查看日志。如需导出日志条目,请创建一个日志接收器,将日志条目路由到 Pub/Sub。

配置错误的日志接收器不会路由日志条目。如果接收器配置不正确,系统会写入报告错误详情的日志条目。此外,系统还会向该资源的重要联系人发送邮件。如需了解详情,请参阅问题排查:查看错误

日志接收器无法以追溯方式路由日志条目。也就是说,日志接收器无法路由在创建接收器之前收到的日志条目。同样,如果接收器配置不正确,则接收器仅会路由在配置错误解决后到达的日志条目。不过,您可以以追溯方式将日志数据从日志存储桶复制到 Cloud Storage。如需了解详情,请参阅复制日志

对组织和文件夹的支持

为帮助您管理组织或文件夹中的日志数据,您可以执行以下操作:

  • 您可以创建汇总接收器,以将组织或文件夹及其子级的日志条目路由到接收器指定的目标位置。汇总接收器有两种类型:

    • 非拦截汇总接收器
    • 拦截汇总接收器

    这两种接收器类型之间的区别在于,在资源层次结构中某一级层的拦截接收器可能会影响该层次结构中较低级层资源的路由。非拦截接收器不会影响其他资源的路由。如果资源中的拦截接收器与日志条目匹配,系统不会将该日志条目发送到子资源中的接收器,但日志条目始终会发送到日志条目源自的资源中的 _Required 日志接收器

  • 您可以配置默认资源设置,以指定组织或文件夹中新资源的系统创建的 _Default 接收器的配置。例如,您可以使用这些设置来停用 _Default 接收器或指定该接收器中的过滤条件。

路由示例

本部分说明了源自项目的日志条目如何流经其资源层次结构中的接收器。

示例:不存在汇总接收器

如果日志条目的资源层次结构中不存在汇总接收器,则系统会将日志条目发送到日志条目源自的项目中的日志接收器。如果日志条目与接收器的包含项过滤条件匹配,但与接收器的任何排除项过滤条件都不匹配,则项目级接收器会将日志条目路由到接收器的目标位置。

示例:存在非拦截汇总接收器

假设日志条目的资源层次结构中存在非拦截汇总接收器。日志路由器将日志条目发送到非拦截汇总接收器后,会发生以下情况:

  1. 如果日志条目与包含项过滤条件匹配,但与任何排除项过滤条件都不匹配,则非拦截汇总接收器会将日志条目路由到接收器的目标位置。

  2. 日志路由器会将日志条目发送到日志条目源自的项目中的日志接收器。

    如果日志条目与接收器的包含项过滤条件匹配,但与接收器的任何排除项过滤条件都不匹配,则项目级接收器会将日志条目路由到接收器的目标位置。

示例:存在拦截汇总接收器

假设日志条目的资源层次结构中存在拦截汇总接收器。日志路由器将日志条目发送到拦截汇总接收器后,会发生以下情况之一:

  • 日志条目与包含项过滤条件匹配,但与任何排除项过滤条件都不匹配:

    1. 日志条目会路由到拦截汇总接收器的目标位置。
    2. 日志条目会发送到日志条目源自的项目中的 _Required 接收器。
  • 日志条目与包含项过滤条件不匹配,或者与至少一个排除项过滤条件匹配:

    1. 日志条目不会由拦截汇总接收器路由。
    2. 日志路由器会将日志条目发送到日志条目源自的项目中的日志接收器。

      如果日志条目与接收器的包含项过滤条件匹配,但与接收器的任何排除项过滤条件都不匹配,则项目级接收器会将日志条目路由到接收器的目标位置。

日志接收器过滤条件

每个日志接收器都包含一个包含项过滤条件,并且可以包含多个排除项过滤条件。这些过滤条件决定了日志接收器是否将日志条目路由到接收器的目标位置。如果您未指定任何过滤条件,则系统会将每个日志条目路由到接收器的目标位置。

日志条目会由日志接收器根据以下规则进行路由:

  • 如果日志条目与包含项过滤条件不匹配,则不会进行路由。如果接收器未指定包含项过滤条件,则每个日志条目都与该过滤条件匹配。

  • 如果日志条目与包含项过滤条件和至少一个排除项过滤条件匹配,则不会进行路由。

  • 如果日志条目与包含项过滤条件匹配,并且与任何排除项过滤条件都不匹配,则会路由到接收器的目标位置。

日志接收器中的过滤条件是使用 Logging 查询语言指定的。

您无法使用排除项过滤条件来减少 entries.write API 配额使用或 entries.write API 调用次数。系统会在 Logging API 收到日志条目后应用排除项过滤条件。

系统创建的日志接收器

对于每个 Google Cloud 项目、结算账号、文件夹和组织,Cloud Logging 都会创建两个日志接收器,一个名为 _Required,另一个名为 _Default。这些接收器的包含项过滤条件和排除项过滤条件可验证到达资源的每个日志条目是否都由其中一个接收器进行路由。这两个接收器会将日志数据路由到与日志接收器位于同一资源中的日志存储桶。

本部分的其余内容介绍了系统创建的日志接收器的过滤条件和目标位置。

_Required 日志接收器

资源中的 _Required 日志接收器会将部分审核日志路由到资源的 _Required 日志存储桶。此接收器不会指定任何排除项过滤条件,且包含项过滤条件如下所示:

LOG_ID("cloudaudit.googleapis.com/activity") OR
LOG_ID("externalaudit.googleapis.com/activity") OR
LOG_ID("cloudaudit.googleapis.com/system_event") OR
LOG_ID("externalaudit.googleapis.com/system_event") OR
LOG_ID("cloudaudit.googleapis.com/access_transparency") OR
LOG_ID("externalaudit.googleapis.com/access_transparency")

_Required 日志接收器仅会匹配源自定义了 _Required 日志接收器的资源的日志条目。例如,假设日志接收器将活动日志条目从项目 A 路由到项目 B。由于日志条目并非源自项目 B,因此项目 B 中的 _Required 日志接收器不会将此日志条目路由到 _Required 日志存储桶。

您无法修改或删除 _Required 日志接收器。

_Default 日志接收器

资源中的 _Default 日志接收器会将所有日志条目(除了与 _Required 日志接收器的过滤条件匹配的日志条目)路由到资源的 _Default 日志存储桶。由于此接收器的包含项过滤条件为空,因此它会与所有日志条目匹配。不过,排除项过滤条件的配置如下:

NOT LOG_ID("cloudaudit.googleapis.com/activity") AND
NOT LOG_ID("externalaudit.googleapis.com/activity") AND
NOT LOG_ID("cloudaudit.googleapis.com/system_event") AND
NOT LOG_ID("externalaudit.googleapis.com/system_event") AND
NOT LOG_ID("cloudaudit.googleapis.com/access_transparency") AND
NOT LOG_ID("externalaudit.googleapis.com/access_transparency")

您可以修改和停用 _Default 日志接收器。例如,您可以修改 _Default 日志接收器并更改目标位置。您还可以修改任何现有过滤条件并添加排除项过滤条件。

接收器目标位置

接收器的目标位置可以位于与接收器不同的资源中。例如,您可以使用日志接收器将日志条目从一个项目路由到存储在其他项目中的日志存储桶。

支持以下目标位置:

Google Cloud 项目

如果您希望目标项目中的日志接收器重新路由日志条目,或者您已创建拦截汇总接收器,请选择此目标位置。项目中作为接收器目标位置的日志接收器可以将日志条目重新路由到除项目之外的任何受支持的目标位置。

日志存储桶

如果您想将日志数据存储在由 Cloud Logging 管理的资源中,请选择此目标位置。您可以使用 Logs Explorer 和 Log Analytics 等服务查看和分析存储在日志存储桶中的日志数据。

如果您想将日志数据与其他业务数据联接,可以将日志数据存储在日志存储桶中,然后创建关联的 BigQuery 数据集。关联数据集是一个只读数据集,可以像任何其他 BigQuery 数据集一样进行查询。

BigQuery 数据集
如果您想将日志数据与其他业务数据联接,请选择此目标位置。您指定的数据集必须启用了写入功能。请勿将接收器的目标位置设置为关联的 BigQuery 数据集。关联数据集为只读数据集。
Cloud Storage 存储桶
如果您想长期存储日志数据,请选择此目标位置。Cloud Storage 存储桶可以位于作为日志条目来源的项目中,也可以位于其他项目中。日志条目会存储为 JSON 文件。
Pub/Sub 主题
如果您想从Google Cloud 导出日志数据,然后使用第三方集成(例如 Splunk 或 Datadog),请选择此目标位置。日志条目的格式会设置为 JSON,然后路由到 Pub/Sub 主题。

目标位置限制

本部分介绍了特定于目标位置的限制:

  • 如果您将日志条目路由到其他 Google Cloud 项目中的日志存储桶,Error Reporting 不会分析这些日志条目。如需了解详情,请参阅 Error Reporting 概览
  • 如果您将日志条目路由到 BigQuery 数据集,则 BigQuery 数据集必须启用了写入功能。您无法将日志条目路由到关联的数据集,因为这些数据集是只读数据集。
  • 将日志数据路由到 Cloud Storage 存储桶的新接收器可能需要几个小时才能开始路由日志条目。这些接收器每小时处理一次。
  • 如果日志接收器的目标位置是 Google Cloud 项目,则存在以下限制:

    • 仅限存在一个跃点。
    • _Required 日志接收器的过滤条件匹配的日志条目仅在源自目标项目时才会路由到目标项目的 _Required 日志存储桶。
    • 只有位于日志条目的资源层次结构中的汇总接收器才会处理日志条目。

    例如,假设项目 A 中的日志接收器的目标位置是项目 B。然后,以下情况成立:

    • 由于单跃点限制,项目 B 中的日志接收器无法将日志条目重新路由到 Google Cloud 项目。
    • 项目 B_Required 日志存储桶仅存储源自项目 B 的日志条目。该日志存储桶不会存储源自任何其他资源的任何日志条目,包括源自项目 A 的日志条目。
    • 如果项目 A 和项目 B 的资源层次结构不同,则项目 A 中的日志接收器将日志条目路由到项目 B 时,该日志条目不会发送到项目 B 的资源层次结构中的汇总接收器。
    • 如果项目 A 和项目 B 具有相同的资源层次结构,则日志条目会发送到该层次结构中的汇总接收器。如果日志条目未被汇总接收器拦截,则日志路由器会将日志条目发送到项目 A 中的接收器。

路由日志条目如何影响基于日志的指标

基于日志的指标是指源自日志条目内容的 Cloud Monitoring 指标。例如,您可以使用基于日志的指标来统计包含特定消息的日志条目数量,或提取日志条目中记录的延迟时间信息。您可以在 Cloud Monitoring 图表中显示基于日志的指标,而提醒政策可以监控这些指标。

系统定义的基于日志的指标在项目级层进行应用。用户定义的基于日志的指标可在项目级层或日志存储桶级层进行应用。当您使用汇总接收器将日志条目路由到日志存储桶时,以及将日志条目从一个项目路由到另一项目中的日志存储桶时,基于日志的存储桶级指标非常有用。

系统定义的基于日志的指标
当满足以下所有条件时,日志路由器会统计日志条目:
  • 日志条目通过定义了基于日志的指标的项目的日志接收器。
  • 日志条目存储在日志存储桶中。日志存储桶可以位于任何项目中。

    例如,假设项目 A 有一个日志接收器,其目标位置是项目 B。此外,假设项目 B 中的日志接收器将日志条目路由到日志存储桶。在此场景中,从项目 A 路由到项目 B 的日志条目会计入项目 A 的系统定义的基于日志的指标。这些日志条目还会计入项目 B 的系统定义的基于日志的指标。

用户定义的基于日志的指标
当满足以下所有条件时,日志路由器会统计日志条目:
  • 在定义了基于日志的指标的项目中启用了结算功能。
  • 对于存储桶级指标,日志条目会存储在定义了基于日志的指标的存储桶中。
  • 对于项目级指标,日志条目会通过定义了基于日志的指标的项目的日志接收器。

如需了解详情,请参阅基于日志的指标概览

最佳做法

如需了解有关如何使用路由进行数据治理的最佳实践或常见应用场景,请参阅以下文档:

示例:集中存储日志

本部分简要介绍了如何配置集中式存储。集中式存储提供了单一位置来查询日志数据,这在您搜索趋势或调查问题时可简化查询。从安全角度来看,您还有一个存储位置,这可以简化安全分析师的任务。

如果您集中存储日志,请考虑是否对存储日志数据的项目设置安全锁。安全锁可防止项目被意外删除。如需了解详情,请参阅使用安全锁保护项目

将项目的日志集中存储在文件夹中

假设您管理一个文件夹,并希望集中存储日志条目。对于此应用场景,您可能会执行以下操作:

  1. 在文件夹中,创建一个名为 CentralStorage 的项目。
  2. 为文件夹创建拦截汇总接收器,并将其配置为路由所有日志条目。您可以将接收器的目标位置设置为名为 CentralStorage 的项目。

当源自该文件夹或其某个子资源的日志条目到达时,该日志条目会发送到您创建的拦截汇总接收器。该接收器会将日志条目路由到名为 CentralStorage 的项目。此项目中的日志接收器会处理日志条目:

  • _Default 日志接收器会将与接收器的过滤条件匹配的所有日志条目路由到 _Default 日志存储桶。此日志存储桶是集中式存储位置。

  • _Required 日志接收器会将与接收器的过滤条件匹配且源自 CentralStorage 项目的日志条目路由到 _Required 日志存储桶。此日志存储桶不是集中式存储位置。不过,您可以集中存储所有日志数据。如需查看示例,请参阅在中心位置存储审核日志

汇总接收器处理完成后,系统会将日志条目发送到日志条目源自的资源中的 _Required 日志接收器。如果日志条目与 _Required 日志接收器中的过滤条件匹配,则系统会将日志条目路由到资源的 _Required 日志存储桶。因此,文件夹中的每个 Google Cloud 项目都会将日志条目存储在其 _Required 日志存储桶中。

集中存储一组项目的日志

如果您没有组织或文件夹,也可以将日志条目存储在单个位置。例如,您可能会执行以下操作:

  1. 创建一个名为 CentralStorage 的项目。
  2. 对于除 CentralStorage 之外的每个项目,您都需要修改 _Default 日志接收器,并将目标位置设置为名为 CentralStorage 的项目。

您可能想知道,为什么上述示例将 _Default 日志接收器的目标位置设置为项目,而不是该项目中的 _Default 日志存储桶。主要原因是简单性和一致性。将日志条目路由到某个项目时,目标项目中的日志接收器会控制存储的日志条目和存储位置。也就是说,您可以集中管理过滤条件和目标位置功能。如果您想更改存储的日志条目或存储位置,则只需修改一个项目中的日志接收器即可。

集中存储审核日志

您可以集中存储与 _Required 日志接收器匹配的日志条目。如果您想集中存储这些日志条目,请执行以下操作之一:

  • 创建日志接收器,以将与 _Required 日志接收器匹配的日志条目路由到集中式日志存储桶。

  • 按照前两个示例配置日志接收器,然后在目标项目中添加一个日志接收器,以将与 _Required 日志接收器匹配的日志条目路由到日志存储桶。您还可以在 _Default 日志接收器中修改过滤条件。

在实施此类策略之前,请查看价格准则。

价格

如需了解 Cloud Logging 的价格,请参阅 Google Cloud Observability 价格

后续步骤

为帮助您路由和存储 Cloud Logging 数据,请参阅以下文档: