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

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

概览

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

  • Cloud Logging 日志存储分区:提供 Cloud Logging 中的存储空间。日志存储桶可以存储多个 Google Cloud 项目注入的日志。您可以将 Cloud Logging 数据与其他数据相结合,方法是升级日志存储桶以使用日志分析,然后创建关联的 BigQuery 数据集。如需了解如何查看日志存储分区中存储的日志,请参阅查询和查看日志概览以及查看路由到 Cloud Logging 存储分区的日志
  • Google Cloud 项目:将日志条目路由到其他 Google Cloud 项目。当您将日志路由到其他 Google Cloud 项目时,目标项目的日志路由器会接收日志并进行处理。目标项目中的接收器决定了接收的日志条目的路由方式。
  • Pub/Sub 主题:支持 Splunk 等第三方集成。日志条目采用 JSON 格式,然后路由到 Pub/Sub 主题。如需了解如何查看路由到 Pub/Sub 的日志,请参阅查看路由到 Pub/Sub 的日志
  • BigQuery 数据集:在 BigQuery 数据集中提供日志条目。您可以对所存储的日志使用大数据分析功能。要将 Cloud Logging 数据与其他数据源组合,我们建议您升级日志存储分区以使用日志分析,然后创建关联的 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. 如需创建、修改或删除接收器,您必须拥有用于路由日志的 Google Cloud 项目的以下 Identity and Access Management 角色之一。

    • Logs Configuration Writer (roles/logging.configWriter)
    • Logging 管理员 (roles/logging.admin)
    • Owner (roles/owner)

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

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

    如需将日志路由到目标位置,该目标位置必须已存在,您才能创建接收器。您可以在任何组织的任何 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 查询语言

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

      例如,您可能希望构建一个过滤条件,将所有数据访问日志都路由到单个 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
    
  • 如需将日志条目路由到另一个 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
    
  • 如需将日志条目路由到 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 接收器,提取价格和存储价格也不适用于 _Required 日志存储桶中存储的日志数据。您可停用 _Default 接收器来停止将日志提取到 _Default 存储桶。此外,您还可以停用任何用户定义的接收器。

当您通过停用将日志发送到 _Default 存储桶的 Google Cloud 项目中的所有接收器停止为 _Default 存储桶提取日志时,Google Cloud 项目不会针对 _Default 存储桶产生新的 Cloud Logging 注入费用。当 _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 发布商角色 (roles/pubsub.publisher)。
    • 对于不同 Google Cloud 项目中的 Logging 存储桶目标位置,请使用 IAM 将接收器的写入者身份添加为主帐号,然后向其授予 Logs Bucket Writer 角色 (roles/logging.bucketWriter)。
    • (预览版)对于不同的 Google Cloud 项目目标位置,请使用 IAM 将接收器的写入者身份添加为主帐号,然后向其授予日志写入者角色 (roles/logging.logWriter)。具体而言,主帐号需要 logging.logEntries.route 权限。
    如果您没有接收器的目标位置访问权限,请让项目所有者将写入者身份添加为主帐号。

API

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

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

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

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

gcloud

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

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

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

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

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

    例如,如果要在不同 Google Cloud 项目的 Logging 存储分区之间路由日志,则需要将 roles/logging.bucketWriter 添加到服务帐号,如下所示:

    1. 获取目标 Google Cloud 项目的 Identity and Access Management 政策,并将其写入 JSON 格式的本地文件:

      gcloud projects get-iam-policy DESTINATION_PROJECT_ID --format json > output.json
      
    2. 添加一个 IAM 条件,仅允许服务帐号写入您创建的 Cloud Logging 存储桶。例如:

      {
      "bindings": [
       {
         "members": [
           "user:username@gmail.com"
         ],
         "role": "roles/owner"
       },
       {
         "members": [
           "SERVICE_ACCOUNT"
         ],
         "role": "roles/logging.bucketWriter",
         "condition": {
             "title": "Bucket writer condition example",
             "description": "Grants logging.bucketWriter role to service account SERVICE_ACCOUNT used by log sink [SINK_NAME]",
             "expression":
               "resource.name.endsWith(\'locations/global/buckets/BUCKET_ID\')"
         }
       }
      ],
      "etag": "BwWd_6eERR4=",
      "version": 3
      }
    3. 更新 IAM 政策:

      gcloud projects set-iam-policy DESTINATION_PROJECT_ID output.json
      

目标页面限制

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

路由到不同 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")

如需查看提取到 Cloud Logging 中的 Google Kubernetes Engine 节点pod容器日志量,请使用 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"

如需查看提取到 Cloud Logging 中的 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 作业详情页面查看作业日志。

后续步骤