将日志路由到支持的目的地

本文档介绍如何创建和管理接收器,以将日志条目路由到支持的目标位置。

Cloud Logging 会自动为日志接收器创建和管理服务帐号,以将日志路由到并非当前 Google Cloud 项目中的日志存储桶的目标位置。您可以创建和管理供多个项目中的接收器使用的服务帐号。如需了解详情,请参阅使用用户代管式服务帐号配置日志接收器

概览

接收器控制 Cloud Logging 路由日志的方式。使用接收器,您可以将部分或全部日志路由到以下目标位置:

  • Cloud Logging 日志存储分区:在 Cloud Logging 中提供存储空间。日志存储桶可以存储多个 Google Cloud 项目接收的日志。如需将 Cloud Logging 数据与其他数据合并,您可以升级日志存储桶以使用 Log Analytics,然后创建关联的 BigQuery 数据集。如需了解如何查看存储在日志存储分区中的日志,请参阅查询和查看日志概览查看路由到 Cloud Logging 存储分区的日志
  • Google Cloud 项目:将日志条目路由到其他 Google Cloud 项目。当您将日志路由到其他 Google Cloud 项目时,目标项目的日志路由器会接收并处理这些日志。目标项目中的接收器确定收到的日志条目的路由方式。Error Reporting 无法分析路由到其他 Google Cloud 项目的日志条目。
  • Pub/Sub 主题:支持第三方集成,例如 Splunk。日志条目会格式化为 JSON,然后路由到 Pub/Sub 主题。如需了解如何查看路由到 Pub/Sub 的日志,请参阅查看路由到 Pub/Sub 的日志
  • BigQuery 数据集:提供 BigQuery 数据集中日志条目的存储服务。您可以对存储的日志使用大数据分析功能。如需将 Cloud Logging 数据与其他数据源相结合,我们建议您升级日志存储分区以使用 Log Analytics,然后创建关联的 BigQuery 数据集。如需了解如何查看路由到 BigQuery 的日志,请参阅查看路由到 BigQuery 的日志
  • Cloud Storage 存储分区:在 Cloud Storage 中提供日志数据存储。日志条目以 JSON 文件的形式存储。如需了解如何查看路由到 Cloud Storage 的日志,请参阅查看路由到 Cloud Storage 的日志

接收器属于给定的 Google Cloud 资源:Google Cloud 项目、结算帐号、文件夹和组织。当资源收到日志条目时,它会根据该资源中包含的接收器来路由日志条目。日志条目会被发送到与每个匹配接收器关联的目标位置。

聚合接收器是一种接收器,可组合并路由组织或文件夹包含的 Google Cloud 资源中的日志条目。如需了解相关说明,请参阅整理组织级日志并将其路由到支持的目标位置

如需创建和管理接收器,您可以使用 Google Cloud 控制台、Cloud Logging API 和 Google Cloud CLI。与其他方法相比,使用 Google Cloud 控制台具有以下优势:

  • 在一个位置查看和管理所有接收器。
  • 在创建接收器之前,预览接收器的过滤条件所匹配的日志条目。
  • 为接收器创建接收器目标位置并为其授权。

准备工作

本文档中的说明介绍了如何在 Google Cloud 项目级创建和管理接收器。您还可以为结算帐号、文件夹和组织创建非汇总接收器。

如需开始使用,请执行以下操作:

  1. 确保您的 Google Cloud 项目具有可在日志浏览器中查看的日志。

  2. 启用 Cloud Logging API。

    启用 API

  3. 如需获取创建、修改或删除接收器所需的权限,请让管理员授予您项目的 Logs Configuration Writer (roles/logging.configWriter) IAM 角色。 如需详细了解如何授予角色,请参阅管理访问权限

    您也可以通过自定义角色或其他预定义角色来获取所需的权限。

    如需了解如何授予 IAM 角色,请参阅 Logging 访问权限控制指南

  4. 您在受支持的目标位置中拥有资源,或者能够创建资源。

    如需将日志路由到某个目标位置,该目标位置必须已经存在,然后您才能创建接收器。您可以在任何组织的任何 Google Cloud 项目中创建目标位置。

    将日志路由到其他目标位置时,可能存在一些限制。如需了解详情,请参阅目标页面限制

创建接收器

以下是在 Google Cloud 项目中创建接收器的说明。您可以指定结算帐号、文件夹或组织,而不是 Google Cloud 项目。

每个 Google Cloud 项目最多可以创建 200 个接收器。

创建接收器后,请确保 Logging 具有将日志写入接收器的目标位置的相应权限;请参阅设置目标位置权限

要创建接收器,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台的导航面板中,选择 Logging,然后选择日志路由器

    前往日志路由器

  2. 选择现有的 Google Cloud 项目。

  3. 选择创建接收器

  4. 接收器详情面板中,输入以下详细信息:

    • 接收器名称:提供接收器的标识符。请注意,创建接收器后,您无法重命名接收器,但可以将其删除并创建新的接收器。

    • 接收器说明(可选):描述接收器的用途或使用场景。

  5. 接收器目标位置面板中,使用选择接收器服务菜单选择接收器服务和目标位置。

    1. 如需将日志路由到同一 Google Cloud 项目中的服务,请选择以下选项之一:

      • Cloud Logging 存储桶:选择或创建 Logging 存储桶
      • BigQuery 表:选择或创建用于接收路由日志的特定数据集。您还可以选择使用分区表
      • Cloud Storage 存储桶:选择或创建用于接收路由日志的特定 Cloud Storage 存储桶。
      • Pub/Sub 主题:选择或创建用于接收路由日志的特定主题。
      • Splunk:为您的 Splunk 服务选择 Pub/Sub 主题。
      • 其他项目:按照目标路径格式中所述填充接收器目标位置字段。
  6. 选择要包含在接收器中的日志面板中,执行以下操作:

    1. 构建包含项过滤条件字段中,输入与要包含的日志条目匹配的过滤条件表达式。如需详细了解用于编写过滤条件的语法,请参阅日志记录查询语言

      如果您未设置过滤条件,则所选资源中的所有日志都会路由到目标位置。

      例如,您可能希望构建一个过滤条件,将所有数据访问日志都路由到单个 Logging 存储桶。此过滤条件大致如下所示:

      log_id("cloudaudit.googleapis.com/data_access") OR log_id("externalaudit.googleapis.com/data_access")
      

      请注意,过滤条件的长度不能超过 20000 个字符。

    2. 要验证您输入的过滤条件是否正确,请选择预览日志。此操作会在新的标签页中打开日志浏览器且其中预填充了过滤条件。

  7. (可选)在选择要从接收器中过滤掉的日志面板中,执行以下操作:

    1. 排除项过滤条件名称字段中输入名称。

    2. 构建排除项过滤条件部分,输入与要排除的日志条目匹配的过滤条件表达式。您还可以使用 sample 函数选择要排除的日志条目。

    您最多可以为每个接收器创建 50 个排除过滤器。请注意,过滤条件的长度不能超过 20000 个字符。

  8. 选择创建接收器

API

  1. 如需在 Google Cloud 项目中创建日志记录接收器,请在 Logging API 中使用 projects.sinks.create。在 LogSink 对象中,在方法请求正文中提供适当的必需值:

    • name:接收器的标识符。请注意,创建接收器后,您无法重命名接收器,但可以删除它并创建新的接收器。
    • destination:您希望将日志路由到的服务和目标位置。如需将日志路由到其他项目或位于另一个项目中的目标位置,请使用适当的路径设置 destination 字段,如目标路径格式中所述。

      例如,如果您的接收器目标位置是 BigQuery 数据集,则 destination 如下所示:

      bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET_ID
      
  2. LogSink 对象中,提供适当的可选信息:

    • filter:设置 filter 属性,使其与要包含在接收器中的日志条目匹配。如果您未设置过滤条件,则 Google Cloud 项目中的所有日志都将路由到目标位置。请注意,过滤条件的长度不能超过 20000 个字符。
    • exclusions:设置此属性以匹配要从接收器中排除的日志条目。您还可以使用 sample 函数选择要排除的日志条目。您最多可以为每个接收器创建 50 个排除过滤器。
    • description:设置此属性,以描述接收器的用途或用例。
  3. 调用 projects.sinks.create 以创建接收器。

  4. 如果 API 响应包含标记为 "writerIdentity" 的 JSON 密钥,则向接收器的服务帐号授予写入接收器目标位置的权限。如需了解详情,请参阅设置目标位置权限

    如果 API 响应不包含标记为 "writerIdentity" 的 JSON 键,则无需设置目标位置权限。

如需详细了解如何使用 Logging API 创建接收器,请参阅 LogSink 参考。

gcloud

如需创建接收器,请运行以下 gcloud logging sinks create 命令。

为命令中的变量提供适当的值,如下所示:

  • SINK_NAME:接收器的标识符。请注意,创建接收器后,您无法重命名接收器,但可以删除它并创建新的接收器。
  • SINK_DESTINATION:您希望将日志路由到的服务和目标位置。如需将日志路由到其他项目或位于另一个项目中的目标位置,请使用适当的路径设置 SINK_DESTINATION,如目标路径格式中所述。

    例如,如果您的接收器目标位置是 BigQuery 数据集,则 SINK_DESTINATION 如下所示:

    bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET_ID
    
  • OPTIONAL_FLAGS 包括以下标志:

    • --log-filter:使用此标志可设置与要包含在接收器中的日志条目匹配的过滤条件。如果您未设置过滤条件,则 Google Cloud 项目中的所有日志都将路由到目标位置。
    • --exclusion:使用此标志可设置要从接收器中排除的日志条目的排除过滤器。您还可以使用 sample 函数选择要排除的日志条目。此标志可以重复;您最多可以为每个接收器创建 50 个排除过滤器。
    • --description:使用此标志来描述接收器的用途或用例。
gcloud logging sinks create SINK_NAME SINK_DESTINATION OPTIONAL_FLAGS

例如,如需创建 Logging 存储桶的接收器,您的命令可能如下所示:

gcloud logging sinks create my-sink logging.googleapis.com/projects/myproject123/locations/global/buckets/my-bucket \
  --log-filter='logName="projects/myproject123/logs/matched"' --description="My first sink"

如需详细了解如何使用 Google Cloud CLI 创建接收器(包括更多标志和示例),请参阅 gcloud logging sinks 参考文档。

Cloud Storage 存储分区的新日志接收器可能需要几个小时才能开始路由日志。Cloud Storage 的接收器每小时处理一次,而其他目标位置类型则实时处理。

接收器不会定义 BigQuery 数据集的架构。 相反,BigQuery 收到的第一个日志条目将确定目标表的架构。如需了解详情,请参阅路由日志的 BigQuery 架构

如需了解如何查看接收器目标位置中的日志,请参阅查看路由到 Cloud Logging 存储分区的日志

创建接收器后,您可以使用 logging.googleapis.com/exports/ 指标来查看收到的日志条目的数量和容量。

如果您收到错误通知,请参阅路由和接收器问题排查

不要将敏感信息放在接收器过滤条件中。接收器过滤条件被视为服务数据。

目标路径格式

如果您要路由到另一个项目中的目标位置,则必须提供 Logging、BigQuery、Cloud Storage 或 Pub/Sub 服务和目标位置信息:

  • 如需将日志条目路由到其他 Google Cloud 项目中的 Cloud Logging 日志存储桶,接收器目标位置如下:

    logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME
    
  • 如需将日志条目路由到另一个 Google Cloud 项目,接收器目标位置路径如下:

    logging.googleapis.com/projects/DESTINATION_PROJECT_ID
    
  • 如需将日志条目路由到 BigQuery 数据集,接收器目标位置如下所示:

    bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET_ID
    
  • 如需将日志条目路由到 Cloud Storage 存储桶,接收器目标位置如下所示:

    storage.googleapis.com/BUCKET_NAME
    
  • 如需将日志条目路由到 Pub/Sub 主题,接收器目标位置如下:

    pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID
    

管理接收器

创建接收器后,您可以对其执行以下操作:

  • 查看接收器详情
  • 更新接收器
  • 停用接收器
  • 删除接收器
  • 排查接收器问题
  • 查看接收器日志量和错误率

在删除接收器之前,请考虑以下事项:

  • 您无法删除 _Default_Required 接收器,但可以停用 _Default 接收器,以停止将日志路由到 _Default Logging 存储分区。
  • 接收器删除后,就会停止路由日志条目。
  • 如果接收器具有专用服务帐号,则删除该接收器也会删除该服务帐号。2023 年 5 月 22 日之前创建的接收器具有专用服务帐号。2023 年 5 月 22 日或之后创建的接收器具有共享服务帐号。删除接收器不会删除共享服务帐号。

对接收器所做的任何更改可能需要几分钟才能应用。

以下是有关如何在 Google Cloud 项目中管理接收器的说明。您可以指定结算帐号、文件夹或组织,而不是指定 Google Cloud 项目:

控制台

  1. 在 Google Cloud 控制台的导航面板中,选择 Logging,然后选择日志路由器

    前往日志路由器

  2. 在 Google Cloud 控制台中的任意位置使用资源选择器选择包含您的接收器的 Google Cloud 项目:

    已从下拉菜单中选择了一个项目。

  3. 如需查看汇总接收器,请选择包含接收器的组织、文件夹或结算账号。

日志路由器页面包含接收器表摘要。表中每一行都包含接收器属性的相关信息:

  • 已启用:指示是启用还是停用接收器的状态。
  • 类型:接收器的目标服务,例如 Cloud Logging bucket
  • 名称:接收器的标识符,在创建接收器时提供,例如 _Default
  • 说明:接收器的说明,在创建接收器时提供。
  • 目标位置:要将路由的日志条目发送到的目标位置的全名。
  • 已创建:创建接收器的日期和时间。
  • 上次更新时间:上次修改接收器的日期和时间。

对于表格的每一行, 更多操作菜单提供了以下选项:

  • 查看接收器详情:显示接收器的名称、说明、服务、目标位置、包含过滤器和排除过滤器。选择修改后,系统会打开修改接收器面板。
  • 修改接收器:打开修改接收器面板,您可在其中更改接收器的参数。
  • 停用接收器:允许您停用接收器并停止将日志路由到接收器的目标位置。如需详细了解如何停用接收器,请参阅停止在日志存储分区中存储日志
  • 启用接收器:允许您启用已停用的接收器,并重新开始将日志路由到接收器的目标位置。
  • 删除接收器:允许您删除接收器并停止将日志路由到接收器的目标位置。
  • 排查接收器问题:打开日志浏览器,您可以在其中排查接收器错误。
  • 查看接收器日志量和错误率:打开 Metrics Explorer,您可以在其中查看和分析接收器中的数据。

点击任意列名称可按升序或降序对数据进行排序。

API

  • 如需查看 Google Cloud 项目的接收器,请调用 projects.sinks.list

  • 如需查看接收器的详细信息,请调用 projects.sinks.get

  • 如需更新接收器,请调用 projects.sink.update

    您可以更新接收器的目标位置、过滤条件和说明。您还可以停用或重新启用接收器。

  • 如需停用接收器,请调用 projects.sink.update 并将 disabled 属性设置为 true

    如需重新启用接收器,请调用 projects.sink.update 并将 disabled 属性设置为 false

  • 要删除接收器,请调用 projects.sinks.delete

    如需详细了解使用 Logging API 管理接收器的任一方法,请参阅 LogSink 参考。

gcloud

  • 如需查看 Google Cloud 项目的接收器列表,请使用与 Logging API 方法 projects.sinks.list 对应的 gcloud logging sinks list 命令:

    gcloud logging sinks list
    

    如需查看汇总接收器列表,请使用适当的标志指定包含接收器的资源。例如,如果您在组织级层创建接收器,请使用 --organization=ORGANIZATION_ID 标志列出组织的接收器。

  • 如需描述接收器,请使用 gcloud logging sinks describe 命令,它对应于 Logging API 方法 projects.sinks.get

    gcloud logging sinks describe SINK_NAME
    
  • 如需更新接收器,请使用 gcloud logging sinks update 命令,它对应于 API 方法 projects.sink.update

    您可更新接收器以更改目标位置、过滤条件和说明,或者停用或重新启用接收器:

    gcloud logging sinks update SINK_NAME NEW_DESTINATION --log-filter=NEW_FILTER

    如果这些部分未更改,请省略 NEW_DESTINATION--log-filter

    例如,要将名为 my-project-sink 的接收器的目标位置更新为名为 my-second-gcs-bucket 的新 Cloud Storage 存储桶目标位置,您的命令如下所示:

    gcloud logging sinks update  my-project-sink  storage.googleapis.com/my-second-gcs-bucket
    
  • 如需停用接收器,请使用与 API 方法 projects.sink.update 相对应的 gcloud logging sinks update 命令,并添加 --disabled 标志:

    gcloud logging sinks update _Default  --disabled
    

    如需重新启用接收器,请使用 gcloud logging sinks update 命令、移除 --disabled 标志并添加 --no-disabled 标志:

    gcloud logging sinks update _Default  --no-disabled
    
  • 如需删除接收器,请使用 gcloud logging sinks delete 命令,它对应于 API 方法 projects.sinks.delete

    gcloud logging sinks delete SINK_NAME
    

    如需详细了解如何使用 Google Cloud CLI 管理接收器,请参阅 gcloud logging sinks 参考文档。

停止在日志存储分区中存储日志

对于每个 Google Cloud 项目,Logging 都会自动创建两个日志存储分区_Required_Default。Logging 会自动创建两个日志接收器 _Required_Default,用于将日志路由到相应命名的存储分区。

您无法停用 _Required 接收器。您可以停用 _Default 接收器,以停止将日志存储在 _Default 存储桶中。此外,您还可以停用任何用户定义的接收器。

停用 Google Cloud 项目中所有将日志发送到 _Default 存储桶的接收器后,该日志存储桶中将不会存储新的日志。如果 _Default 存储桶中之前存储的所有日志都达到了 _Default 存储桶的保留期限,则该存储桶为空。

如需停用将日志路由到 _Default 存储桶的 Google Cloud 项目接收器,请完成以下步骤:

控制台

  1. 在 Google Cloud 控制台的导航面板中,选择 Logging,然后选择日志路由器

    前往日志路由器

  2. 如需查找将日志路由到 _Default 存储桶的所有接收器,请按目标位置过滤接收器,然后输入 _Default

    查找将日志路由到默认存储桶的所有接收器。

  3. 对于每个接收器,选择 菜单,然后选择停用接收器

这些接收器现已停用,您的 Google Cloud 项目接收器不会再将日志路由到 _Default 存储桶。

如需重新启用已停用的接收器,并重新开始将日志路由到接收器的目标位置,请执行以下操作:

  1. 在 Google Cloud 控制台的导航面板中,选择 Logging,然后选择日志路由器

    前往日志路由器

  2. 如需查找之前配置为将日志路由到 _Default 存储桶的所有已停用接收器,请按目标位置过滤接收器,然后输入 _Default

  3. 对于每个接收器,选择 菜单,然后选择启用接收器

API

  1. 如需查看 Google Cloud 项目的接收器,请调用 Logging API 方法 projects.sinks.list

    确定路由到 _Default 存储桶的任何接收器。

  2. 例如,如需停用 _Default 接收器,请调用 projects.sink.update 并将 disabled 属性设置为 true

_Default 接收器现已停用,它不再将日志路由到 _Default 存储桶。

如需停用 Google Cloud 项目中路由到 _Default 存储桶的其他接收器,请重复上述步骤。

如需重新启用接收器,请调用 projects.sink.update 并将 disabled 属性设置为 false

gcloud

  1. 如需查看 Google Cloud 项目的接收器列表,请使用与 Logging API 方法 projects.sinks.list 对应的 gcloud logging sinks list 命令:

    gcloud logging sinks list
    
  2. 确定路由到 _Default 存储桶的任何接收器。如需描述接收器(包括查看目标位置名称),请使用 gcloud logging sinks describe命令,它对应于 Logging API 方法 projects.sinks.get

    gcloud logging sinks describe SINK_NAME
    
  3. 例如,如需停用 _Default 接收器,请使用 gcloud logging sinks update 命令并添加 --disabled 标志:

    gcloud logging sinks update _Default  --disabled
    

_Default 接收器现已停用,它不再将日志路由到 _Default 存储桶。

如需停用 Google Cloud 项目中路由到 _Default 存储桶的其他接收器,请重复上述步骤。

如需重新启用接收器,请使用 gcloud logging sinks update 命令、移除 --disabled 标志并添加 --no-disabled 标志:

gcloud logging sinks update _Default  --no-disabled

设置目标位置权限

本部分介绍如何向 Logging 授予将日志写入接收器目标位置的 Identity and Access Management 权限。如需查看 Logging 角色和权限的完整列表,请参阅访问权限控制

创建日志接收器时,Cloud Logging 会为资源创建共享服务帐号,除非所需的服务帐号已存在。之所以存在服务帐号,是因为底层资源中的所有接收器都使用同一服务帐号。资源可以是 Google Cloud 项目、组织、文件夹或结算帐号。

接收器的写入者身份是与该接收器关联的服务帐号的标识符。所有接收器都具有写入者身份,但写入当前 Google Cloud 项目中的日志存储桶的接收器除外。如果接收器的目标位置是当前 Google Cloud 项目中的日志存储桶,则接收器不需要任何额外的目标位置权限。因此,写入者身份字段的值会在控制台中列为 None,并且 API 和 Google Cloud CLI 命令不会报告该值。

以下说明介绍了如何为接收器设置 Google Cloud 项目级权限,以路由到其目标位置。您可以指定结算帐号、文件夹或组织,而不是指定 Google Cloud 项目:

控制台

  1. 如需从新接收器获取接收器的写入者身份(电子邮件地址),请执行以下操作:

    1. 在 Google Cloud 控制台的导航面板中,选择 Logging,然后选择日志路由器

      前往日志路由器

    2. 选择 菜单,然后选择查看接收器详情。写入者身份会显示在接收器详情面板中。

  2. 如果 writerIdentity 字段的值包含电子邮件地址,请继续执行下一步。当值为 None 时,您无需为接收器配置目标位置权限。

  3. 如需将接收器的写入者身份复制到剪贴板,请点击 复制

  4. 如果您拥有对目标位置的 Owner 访问权限,请在目标项目中将服务帐号添加为 IAM 主帐号:

    • 对于 Cloud Storage 目标位置,请使用 IAM 将接收器的写入者身份添加为主帐号,然后向其授予 Storage Object Creator 角色 (roles/storage.objectCreator)。
    • 对于 BigQuery 目标位置,请使用 IAM 将接收器的写入者身份添加为主帐号,然后向其授予 BigQuery Data Editor 角色 (roles/bigquery.dataEditor)。
    • 对于 Pub/Sub 目标位置(包括 Splunk),请使用 IAM 将接收器的写入者身份添加为主帐号,然后向其授予 Pub/Sub Publisher 角色 (roles/pubsub.publisher)。
    • 对于不同 Google Cloud 项目中的 Logging 存储桶目标位置,请使用 IAM 将接收器的写入者身份添加为主帐号,然后向其授予 Logs Bucket Writer 角色 (roles/logging.bucketWriter)。
    • 对于 Google Cloud 项目目标位置,请使用 IAM 将接收器的写入者身份添加为主账号,然后向其授予 Logs Writer 角色 (roles/logging.logWriter)。具体而言,主账号需要 logging.logEntries.route 权限。
    如果您没有对接收器目标位置的 Owner 访问权限,则可以请求项目所有者将写入者身份添加为主帐号。

API

  1. 调用 API 方法 projects.sinks.list 以列出 Google Cloud 项目中的接收器。

  2. 找到要修改其权限的接收器,如果接收器详细信息包含标记为 "writerIdentity" 的 JSON 密钥,请继续执行下一步。如果详细信息不包含 "writerIdentity" 字段,则无需为接收器配置目标位置权限。

  3. 如果您拥有对目标位置的 IAM Owner 访问权限,请执行以下操作,将服务帐号添加到目标位置:

    • 对于 Cloud Storage 目标位置,请使用 IAM 将接收器的写入者身份添加为主帐号,然后向其授予 Storage Object Creator 角色 (roles/storage.objectCreator)。
    • 对于 BigQuery 目标位置,请使用 IAM 将接收器的写入者身份添加为主帐号,然后向其授予 BigQuery Data Editor 角色 (roles/bigquery.dataEditor)。
    • 对于 Pub/Sub 目标位置(包括 Splunk),请使用 IAM 将接收器的写入者身份添加为主帐号,然后向其授予 Pub/Sub Publisher 角色 (roles/pubsub.publisher)。
    • 对于不同 Google Cloud 项目中的 Logging 存储桶目标位置,请使用 IAM 将接收器的写入者身份添加为主帐号,然后向其授予 Logs Bucket Writer 角色 (roles/logging.bucketWriter)。
    • 对于 Google Cloud 项目目标位置,请使用 IAM 将接收器的写入者身份添加为主账号,然后向其授予 Logs Writer 角色 (roles/logging.logWriter)。具体而言,主账号需要 logging.logEntries.route 权限。
    如果您没有对接收器目标位置的 Owner 访问权限,则可以请求项目所有者将写入者身份添加为主帐号。

gcloud

  1. 从接收器中的 writerIdentity 字段获取服务账号:

    gcloud logging sinks describe SINK_NAME
    
  2. 找到要修改其权限的接收器,如果接收器详细信息包含包含 writerIdentity 的行,请继续执行下一步。如果详细信息不包含 writerIdentity 字段,则无需为接收器配置目标位置权限。

    以下步骤中 SERVICE_ACCT_NAME 字段的值是写入者身份,类似于以下内容:

    serviceAccount:service-123456789012@gcp-sa-logging.iam.gserviceaccount.com
    
  3. 如果您拥有对目标位置的 IAM Owner 访问权限,请执行以下操作,将服务帐号添加到目标位置:

    • 对于 Cloud Storage 目标位置,请使用 IAM 将接收器的写入者身份添加为主帐号,然后向其授予 Storage Object Creator 角色 (roles/storage.objectCreator)。
    • 对于 BigQuery 目标位置,请使用 IAM 将接收器的写入者身份添加为主帐号,然后向其授予 BigQuery Data Editor 角色 (roles/bigquery.dataEditor)。
    • 对于 Pub/Sub 目标位置(包括 Splunk),请使用 IAM 将接收器的写入者身份添加为主帐号,然后向其授予 Pub/Sub Publisher 角色 (roles/pubsub.publisher)。
    • 对于不同 Google Cloud 项目中的 Logging 存储桶目标位置,请使用 IAM 将接收器的写入者身份添加为主帐号,然后向其授予 Logs Bucket Writer 角色 (roles/logging.bucketWriter)。
    • 对于 Google Cloud 项目目标位置,请使用 IAM 将接收器的写入者身份添加为主账号,然后向其授予 Logs Writer 角色 (roles/logging.logWriter)。具体而言,主账号需要 logging.logEntries.route 权限。
    如果您没有对接收器目标位置的 Owner 访问权限,请让项目所有者将写入者身份添加为主帐号。

    例如,如需向项目 my-test-project 中的服务帐号 service-123456789012@gcp-sa-logging.iam.gserviceaccount.com 授予 Logs Writer 角色 (roles/logging.logWriter) 角色,请运行以下命令:

    gcloud projects add-iam-policy-binding my-test-project --member='serviceAccount:service-123456789012@gcp-sa-logging.iam.gserviceaccount.com' --role='roles/logging.logWriter'
    

目标页面限制

根据您将日志路由到的目的地,可能会存在一些限制。

以路由方式发送到不同 Google Cloud 项目中的日志存储分区

将日志路由到不同 Google Cloud 项目中的日志存储分区时,存在以下限制:

  • 如果您将日志路由到存储在其他项目中的日志存储桶,则 Error Reporting 无法分析这些日志。

  • 对于存储在使用客户管理的加密密钥的日志存储分区中的日志,已停用 Error Reporting。

以路由方式发送到不同的 Google Cloud 项目

将日志路由到不同的 Google Cloud 项目时,存在以下限制:

  • 如果您将日志路由到其他项目,Error Reporting 将无法分析这些日志。

  • 存在单跳限制。例如,如果您将日志条目从项目 A 路由到项目 B,则无法将日志条目从项目 B 路由到其他项目。

  • 审核日志不会路由到目标项目中的 _Required 存储桶。您必须再创建一个接收器或存储桶来存储它们。

  • 如果您要路由到的 Google Cloud 项目所在的组织或文件夹具有现有的汇总接收器,则这些汇总接收器不会路由日志。

代码示例

如需使用客户端库代码配置您所选语言的接收器,请参阅 Logging 客户端库:日志接收器

过滤条件示例

下面是一些在创建接收器时特别有用的过滤条件示例。

如需了解在构建包含过滤器和排除过滤器时可能有用的其他示例,请参阅查询示例

恢复 _Default 接收器过滤条件

如果您修改了 _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")

排除 Google Kubernetes Engine 容器和 pod 日志

如需为 GKE 系统 namespaces 排除 Google Kubernetes Engine 容器和 Pod 日志,请使用以下过滤条件:

resource.type = ("k8s_container" OR "k8s_pod")
resource.labels.namespace_name = (
"cnrm-system" OR
"config-management-system" OR
"gatekeeper-system" OR
"gke-connect" OR
"gke-system" OR
"istio-system" OR
"knative-serving" OR
"monitoring-system" OR
"kube-system")

如需排除 GKE 系统 logNames 的 Google Kubernetes Engine 节点日志,请使用以下过滤条件:

resource.type = "k8s_node"
logName:( "logs/container-runtime" OR
"logs/docker" OR
"logs/kube-container-runtime-monitor" OR
"logs/kube-logrotate" OR
"logs/kube-node-configuration" OR
"logs/kube-node-installation" OR
"logs/kubelet" OR
"logs/kubelet-monitor" OR
"logs/node-journal" OR
"logs/node-problem-detector")

如需查看存储在日志存储分区中的 Google Kubernetes Engine 节点podcontainer 日志的卷,请使用 Cloud Monitoring 中的 Metrics Explorer

排除支持性不需要的 Dataflow 日志

如需排除支持性不需要的 Dataflow 日志,请使用以下过滤条件:

resource.type="dataflow_step"
labels."dataflow.googleapis.com/log_type"!="system" AND labels."dataflow.googleapis.com/log_type"!="supportability"

如需查看存储在日志存储分区中的 Dataflow 日志量,请使用 Cloud Monitoring 中的 Metrics Explorer

可支持性

虽然 Cloud Logging 可让您排除存储在日志存储桶中的日志,但您可能需要考虑保留有助于提升支持的日志。使用这些日志可帮助您快速排查并识别应用的问题。

例如,GKE 系统日志对于排查 GKE 应用和集群问题非常有用,因为它们是针对集群中发生的事件生成的。这些日志可帮助您确定是应用代码还是底层 GKE 集群导致了应用错误。GKE 系统日志还包括由 Kubernetes API 服务器组件生成的 Kubernetes 审核日志,其中包括使用 kubectl 命令和 Kubernetes 事件所做的更改。

对于 Dataflow,我们建议您至少将系统日志 (labels."dataflow.googleapis.com/log_type"="system") 和支持性日志 (labels."dataflow.googleapis.com/log_type"="supportability") 写入日志存储分区。这些日志对于开发者观察 Dataflow 流水线并排查问题至关重要,用户可能无法使用 Dataflow 作业详情页面来查看作业日志。

后续步骤