使用日志查看器导出

本页介绍如何使用 Cloud Console 导出日志条目。您还可以使用 Cloud Logging APIgcloud 命令行工具导出日志条目。

如需从概念上大致了解 Logging 中的导出日志,请参阅日志导出概览。概括地说,您可以通过创建包含日志过滤条件导出目标位置的一个或多个接收器来导出日志。Cloud Logging 在收到新的日志条目后,会将这些日志条目与每个接收器进行对比。如果某个日志条目与接收器的过滤条件匹配,则会将该日志条目的副本写入导出目标位置。

支持以下导出日志条目的目标位置:Cloud StorageBigQueryPub/SubCloud Logging

如需了解如何设置导出日志的格式和对其进行整理,以及如何查看导出的日志,请转到使用导出的日志

准备工作

  • 项目:您必须具有一个 Google Cloud 项目,且可以在日志查看器中查看该项目的日志。

    您还必须具有项目的所有者Logging/日志配置写入者 IAM 角色,才能创建、删除或修改接收器。如需了解详情,请转到权限和角色

  • 目标位置服务:如需导出日志,您必须注册要向其中写入日志的 Google Cloud 服务:Cloud StorageBigQueryPub/Sub

使用入门

  1. 从“日志记录”菜单中选择日志路由器

    转到“日志路由器”

  2. 在页面顶部选择一个现有 Google Cloud 项目。

“日志路由器”界面

日志路由器界面包含接收器表摘要。表中的每一行都包含与日志导出中所述的某些接收器属性相对应的信息:

  • 名称:当前项目中接收器的标识符。
  • 目标位置:导出的日志条目将存储在何处。
  • 状态:用于指示是启用还是停用接收器。

表中每一行都有一个菜单 ,并具有以下选项:

  • 查看接收器详情:显示接收器的过滤条件。点击修改后,您可以更改接收器的属性或过滤条件。
  • 修改接收器:打开修改接收器面板,您可在其中更改接收器的参数。
  • 停用接收器:允许您停用接收器并停止将日志路由到接收器的目标位置。
  • 启用接收器:用于启用已停用的接收器,并重新开始将日志路由到接收器的目标位置。
  • 删除接收器:允许您删除接收器,并停止将日志路由到接收器的目标位置。无法删除 _Default_Required 接收器,但您可以停用 _Default 接收器以停止将日志路由到 _Default 日志存储分区。

点击任意列名称可按升序或降序对数据进行排序。在表格的底部,您还可以选择要显示的行数。

创建接收器

您可以使用日志查看器或日志路由器创建接收器。

使用日志查看器(经典版)创建接收器

若要创建导出接收器,请点击日志路由器页顶部位置的创建接收器。您也可以在“日志查看器”页的顶部执行此操作。

如果您的服务帐号无权为项目创建导出,则此选项不可用。请查看上面的准备工作了解详情。

以下屏幕截图展示了修改接收器面板,其中已填写了某些字段:

显示导出修改面板的界面。

若要创建接收器,请按如下所示在修改接收器面板中填写信息:

  1. (过滤条件):输入一个高级日志查询。查询无需用引号引起来,并且您可以使用多行。初始查询由您点击创建导出时显示的日志条目决定。

    每次修改查询时,点击提交查询即可显示匹配的日志条目。点击跳转到最新的日志可获取最新日志。

    如果您希望使用基本查看界面来选择日志,请使用搜索查询框中的下拉菜单

  2. 接收器名称:输入要分配给接收器的标识符。

  3. 接收器服务:选择一项目标服务:Cloud StoragePub/SubBigQuery自定义目标位置

    自定义导出目标位置仍然必须位于 Cloud Storage、BigQuery 或 Pub/Sub 中,但您可以将日志发送到其他 Google Cloud 项目中的接收器。接收器的来源和目标位置不必位于同一 Google Cloud 组织中。

  4. 接收器目标位置

    1. Cloud Storage:选择或创建用于接收导出日志的特定存储分区。
    2. Pub/Sub:选择或创建用于接收导出日志的特定主题。
    3. BigQuery:选择或创建用于接收导出日志的特定数据集。您还可以选择使用分区表
    4. 自定义目标位置:以字符串形式添加 Cloud Storage、Pub/Sub 或 BigQuery Google Cloud 项目。如需了解如何设置项目名称的格式,请参阅接收器属性
  5. 点击更新接收器,以创建接收器。

    在创建接收器时,Logging 将尝试向接收器的写入者身份授予写入到目标位置的权限。如果您的导出目标位置不在日志所属的项目内,则必须向新目标位置的管理员授予相应权限。您应该向管理员发送接收器的写入者身份,该信息随接收器列于路由器页面中。

与接收器匹配的新日志条目开始输出到接收器的目标位置。转到 BigQuery 或 Pub/Sub 的日志条目会立即流式传输到这些导出目标位置。目标服务为 Cloud Storage 的日志条目按大约每小时一次的频率进行批处理和发送。如需了解详情,请转到使用导出的日志

如果 Logging 在尝试将日志导出到导出目标位置时遇到错误,则相应错误会显示在项目的活动流中。在 Google Cloud Console 的项目主页顶部选择活动。如需诊断常见错误,请转到下面的问题排查

使用日志路由器创建接收器

如需将日志路由到日志存储分区或自定义目标位置,请完成以下步骤。

GCLOUD

如需创建连接到目标位置的接收器,请运行 gcloud alpha logging sinks create 命令:

gcloud alpha logging sinks create SINK_NAME SINK_LOCATION OPTIONAL_FLAGS

例如,如需创建以 Cloud Logging 日志存储分区为目标位置的接收器,请运行以下命令:

gcloud alpha 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"

控制台

如需创建连接到目标位置的接收器,请完成以下步骤:

  1. 从“日志记录”菜单中选择日志路由器

    转到“日志路由器”

  2. 点击创建接收器

  3. 选择接收器服务面板中,选择目标位置。

  4. 输入接收器的名称说明

  5. 点击下一步

  6. 选择接收器目标位置中,选择要向其发送日志的存储分区。

  7. 点击下一步

  8. 构建包含项过滤条件,以指定要将哪些日志路由到该存储分区。在构建过滤条件时,您可以点击预览日志,以确保包含正确的日志。

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

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

  9. 完成后,点击下一步

  10. 或者,您可以构建排除项过滤条件,以指定要从存储分区中排除哪些日志。

    如需详细了解过滤条件,请参阅使用排除项过滤条件常见用例的过滤条件

  11. 完成后,点击创建接收器。新接收器将显示在日志路由接收器列表中。

将日志从一个项目路由到另一项目中的存储分区

如需将当前项目的日志路由到其他项目的存储分区,请完成以下步骤。

请注意,跨项目存储分区接收器需要向 Logging 为其创建的服务帐号添加适当的 Identity and Access Management 权限

GCLOUD

  1. 在另一项目中创建一个存储分区(如果您尚未创建):

    gcloud alpha logging buckets create BUCKET_ID --project=DESTINATION_PROJECT_ID
    
  2. 创建接收器,以将日志路由到另一个存储分区:

    gcloud alpha logging sinks create SINK_NAME \
      logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/global/buckets/BUCKET_ID \
      --log-filter='FILTER_CONDITIONS'
    
  3. 从接收器中的 writerIdentity 字段获取服务帐号:

    gcloud alpha logging sinks describe SINK_NAME
    

    服务帐号格式类似于以下内容:

    serviceAccount:p123456789012-12345@gcp-sa-logging.iam.gserviceaccount.com
    
  4. roles/logging.bucketWriter 角色授予服务帐号。

    1. 获取目标项目的 Identity and Access Management 政策,并将其写入 JSON 格式的本地文件:
    gcloud projects get-iam-policy DESTINATION_PROJECT_ID --format json > output.json
    
    1. 添加一个 IAM 条件,仅允许服务帐号写入您创建的存储分区。例如:

      {
      "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
      }
    2. 更新 IAM 政策:

    gcloud projects set-iam-policy DESTINATION_PROJECT_ID output.json
    

控制台

  1. 从“日志记录”菜单中选择日志路由器

    转到“日志路由器”

  2. 点击创建接收器

  3. 选择接收器服务窗口中,选择其他项目,然后点击下一步

  4. 接收器详情部分,输入接收器名称接收器说明

  5. 点击下一步

  6. 接收器目标位置字段,输入目标项目的存储分区位置。

    logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/global/buckets/BUCKET_ID
    
  7. 构建包含项过滤条件,以指定要将哪些日志路由到该存储分区。在构建过滤条件时,您可以点击预览日志,以确保包含正确的日志。

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

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

  8. 过滤条件构建完毕后,点击下一步

  9. 可选:指定要从存储分区中排除哪些日志条目。

    如需详细了解过滤条件,请参阅使用排除项过滤条件常见用例的过滤条件

  10. 完成后,点击创建接收器。新接收器将显示在日志路由接收器列表中。

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

    gcloud alpha logging sinks describe SINK_NAME
    

    服务帐号格式类似于以下内容:

    serviceAccount:p123456789012-12345@gcp-sa-logging.iam.gserviceaccount.com
    
  12. roles/logging.bucketWriter 角色授予服务帐号。

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

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

      {
      "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
      

更新接收器

在日志查看器(经典版)中更新接收器

如需更新接收器,请从接收器名称右侧的菜单 中选择 修改接收器 命令。您可以更改以下任何参数:

  • 目标位置
  • 查询

要更改接收器的其他参数,请使用 projects.sinks.update API 方法。

在日志查看器中更新接收器

您可以通过完成以下步骤来使用日志路由器修改现有接收器。

  1. 从“日志记录”菜单中选择日志路由器

    转到“日志路由器”

  2. 对于要查看排除项过滤条件的接收器,请点击更多

  3. 点击修改接收器

  4. 根据需要修改接收器。

  5. 完成后,点击更新接收器

删除接收器

删除接收器会将其从 Cloud Logging 中移除,并阻止将未来的日志路由到目标位置。

在日志查看器(经典版)中删除接收器

如需删除接收器,请在路由器页面中选择接收器,然后点击页面顶部的删除。或者,从接收器名称右侧的菜单 中选择删除接收器

在日志路由器中删除接收器

如需删除接收器,请完成以下步骤。

控制台

  1. 从“日志记录”菜单中选择日志路由器

    转到“日志路由器”

  2. 对于要删除的接收器,点击更多

  3. 选择删除接收器

  4. 在确认面板中,点击删除

  5. 此时,接收器会被删除。

停用接收器

停用接收器可防止将未来的日志路由到其目标位置,但不会从 Cloud Logging 中移除此接收器。

使日志路由器停用接收器

如需停用接收器,请完成以下步骤。

控制台

  1. 从“日志记录”菜单中选择日志路由器

    转到“日志路由器”

  2. 对于要停用的接收器,点击更多

  3. 选择停用接收器

  4. 在确认面板中,点击停用

  5. 此时,接收器状态会更改为已停用

启用接收器

启用接收器后,系统将重启已停用的接收器,并恢复向其目标位置路由日志。

启用已停用的接收器

如需启用已停用的接收器,请完成以下步骤。

控制台

  1. 从“日志记录”菜单中选择日志路由器

    转到“日志路由器”

  2. 对于要启用的接收器,点击更多

  3. 选择启用接收器

  4. 在确认面板中,点击启用

  5. 接收器状态会更改为已启用

目标位置权限

本部分介绍如何向 Logging 授予身 Identity and Access Management 权限,以将导出的日志写入接收器的导出目标位置。

当您创建接收器后,Logging 会为该接收器创建一个新的服务帐号(称为唯一写入者身份)。您无法直接管理此服务帐号,因为它由 Cloud Logging 拥有和管理。如果接收器被删除,则此服务帐号也会被删除。

您的导出目标位置必须允许此服务帐号写入日志条目。如需设置此权限,请按以下步骤操作:

  1. 在 Cloud Console、gcloud logging 命令行界面或 Logging API 中创建新接收器。

  2. 如果您在 Cloud Console 中创建了接收器并且拥有对目标位置的 Owner 访问权限,那么 Cloud Logging 应该已经代表您设置了必要的权限。如果 Cloud Logging 确实已经这样做了,则表示您已大功告成。如果没有,请继续操作。

  3. 从新接收器获取接收器的写入者身份,也就是一个电子邮件地址:

    • 如果您使用的是 Cloud Console,则写入者身份会显示在路由器页上的接收器列表中。
    • 如果您使用的是 Logging API,则可以从 LogSink 对象获取写入者身份。
    • 如果您使用的是 gcloud logging,则系统会在您列出接收器时显示写入者身份。
  4. 如果您拥有对目标位置的 Owner 访问权限,则按以下方式将服务帐号添加到目标位置:

    • 对于 Cloud Storage 目标位置,将接收器的写入者身份添加到存储分区,并为其指定 Storage Object Creator 角色。
    • 对于 BigQuery 目标位置,将接收器的写入者身份添加到数据集,并为其提供 BigQuery Data Editor 角色。
    • 对于 Cloud Pub/Sub,将接收器的写入者身份添加到您的主题,并为其指定 Pub/Sub Publisher 角色。

    授权过程到此结束。

  5. 如果您没有对导出目标位置的 Owner 访问权限,则将写入者身份服务帐号名称发送给具有该权限的人员。然后,该人员应按照上一步骤中的说明将写入者身份添加到导出目标位置。

授权延迟

如果接收器尝试导出某个日志条目,但缺少对导出目标位置的相应 IAM 权限,则接收器会报告错误并跳过该日志条目。这种情况将持续到接收器获得授权,然后接收器将开始导出新的日志条目。

在创建接收器之后,需要等一段时间才能使用接收器的新服务帐号授权写入导出目标位置。创建接收器后的前 24 小时内,您可能会在项目的活动页上看到来自接收器的与权限相关的错误消息;您可以忽略它们。

优势和限制

与使用 Logging API 相比,Cloud Console 具有以下优势:

  • Cloud Console 可在一个位置显示所有接收器。
  • 在创建接收器之前,Cloud Console 会显示接收器查询所匹配的日志条目。
  • Cloud Console 可以为接收器创建导出目标位置并为其授权。

但是,Cloud Console 只能在项目中创建或查看接收器。如需在组织、文件夹或结算帐号中创建接收器,请参阅汇总接收器

问题排查

以下是在导出日志时可能会遇到的一些常见问题,以及相关处理方法:

  • 目标位置出现错误:检查接收器中导出目标位置的规范。使用 projects.sinks.get 查找接收器的写入者身份,并确保该身份具备对导出目标位置的写入权限。

  • 没有导出任何日志:以下是一些可能的原因:

    • 您的查询不正确。检查导出查询,以确认与查询匹配的日志条目是否刚刚出现在 Logging;更正拼写错误或格式设置错误。

    • 自接收器创建或更新后,尚未收到任何匹配的日志条目;仅导出新的日志条目。

      您可能需要等待一段时间才能在目标位置中查看导出的日志。使用 Cloud Storage 目标位置时尤其如此。如需了解详情,请转到导出日志的可用性

      您还可以查看导出系统指标。导出系统指标可以告诉您导出了多少日志条目以及由于错误而丢弃了多少日志条目。

修正错误后,您的接收器将开始导出日志。

如需使用日志查看器查看接收器错误,请执行以下操作:

  1. 转到在其中创建接收器的项目或其他资源的活动流

    转到“活动流”

  2. 过滤条件面板中,依次选择活动类型 > 配置资源类型 > 日志导出接收器

  3. 调整日期/时间以查看相应时间范围内的接收器错误。

    系统会显示接收器错误。

以下部分列出了一些可能出现的服务特定的错误和意外结果,并说明了相关处理方法。

导出到 Cloud Storage 时出错

下表列出了将日志导出到 Cloud Storage 时最常见的错误:

错误 原因 解决方案
存储分区“[YOUR_BUCKET]”的现有权限不允许日志组创建新对象。 接收器的写入者身份没有对存储分区的正确权限。 向存储分区添加必要的权限或将接收器更新为使用其他存储分区。请参阅目标位置权限
没有名为“[YOUR_BUCKET]”的存储分区。 存储分区名称中可能存在错误,或者存储分区可能已被删除。 使用正确的存储分区目标位置更新接收器。
接收器已成功创建。但是,我们无法向目标位置授予正确的权限。 存储分区创建后,存储分区的访问控制模型已设置为统一

(添加服务帐号后,持续显示此错误消息。)
在创建存储分区时,选择精细访问控制模型。对于现有存储分区,您可以使用权限标签页在存储分区创建后的前 90 天更改访问控制模型。

导出到 BigQuery 时出错

下表列出了将日志导出到 BigQuery 时最常见的错误:

错误 原因 解决方案
数据集“[YOUR_DATASET]”的现有权限不允许日志组创建新表。 接收器的写入者身份对数据集没有足够的权限。 为相应数据集添加权限。请参阅目标位置权限
没有名为“[YOUR_DATASET]”的数据集。 接收器的目标位置可能存在错误,或者有人可能已删除数据集。 重新创建数据集或将导出接收器更新为使用其他数据集。
传输到数据集“[YOUR_DATASET]”中的“[YOUR_TABLE]”表的日志与表架构不匹配。 您正在尝试导出与当前表架构不兼容的日志。 确保您的日志条目与表架构匹配。常见问题包括发送数据类型不同的日志条目。例如,日志条目中的一个字段是整数,而架构中的相应列为字符串类型。活动流中包含指向一个无效日志条目的链接。修复错误源后,您可以重命名当前表,并让 Logging 再次创建该表。
数据集“[YOUR_DATASET]”中的表“[YOUR_TABLE]”已超出每个表的流式插入配额。 您导出的日志条目过多且导出速度过快。请参阅适用于日志流式传输的 BigQuery 默认配额限制 减少接收器生成的日志数据量。您可以更新接收器的查询,以匹配更少的日志条目,或使用 sample() 函数
流式传输到分区表“[YOUR_TABLE]”的日志在允许的时间范围之外。 BigQuery 不接受日期距现在过于久远的日志(过去或未来)。 无法使用接收器导出允许的时间范围以外的日志。您可以将这些日志导出到 Cloud Storage 并改为运行 BigQuery 加载作业。如需详细了解说明,请参阅 BigQuery 文档
日志无法流式传输到数据集“[YOUR_DATASET]”,因为组织政策禁止执行该操作。 存在阻止写入到所选数据集的组织政策。如需详细了解组织政策,请参阅文档 修改导出接收器以使用兼容的数据集。

将日志导出到 Pub/Sub 时出错

下表列出了将日志导出到 Pub/Sub 时最常见的错误:

错误 原因 解决方案
[ACCOUNT] 需要有 [PROJECT] 的修改权限才能发布到 [TOPIC] 接收器的写入者身份没有对主题的正确权限。 为项目添加必要的权限。请参阅目标位置权限
主题“[TOPIC]”不存在。 您可能删除了为接收导出日志而配置的主题。 使用同一名称重新创建主题,或将导出配置更改为使用其他主题。

后续步骤