使用日志查看器导出

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

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

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

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

准备工作

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

    您还必须具有项目的 OwnerLogging/Logs Configuration Writer Cloud IAM 角色,才能创建、删除或修改接收器。如需了解详情,请转到权限和角色

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

开始使用

  1. 转到 Cloud Console 中的 Cloud Logging > 日志路由器

    转到“日志路由器”

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

以下屏幕截图展示了日志路由器页面的示例,其中已经配置了几个日志接收器:

显示导出列表的界面。

如果您尚未配置任何日志接收器,则会显示消息未配置任何日志接收器

“日志路由器”界面

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

  • 接收器名称:当前项目中接收器的标识符。
  • 目标位置:导出的日志条目将存储在何处。
  • 写入者身份:Logging 将日志条目写入目标位置时所用的服务帐号。此服务帐号必须有权写入接收器的导出目标位置。

表中每一行的最右侧都有一个菜单 ,其中具有以下选项:

  • 修改接收器:打开修改接收器面板,您可在其中更改接收器的参数。
  • 删除接收器:允许您删除接收器并停止导出日志。
  • 查看接收器详情:显示接收器的查询。点击修改后,您可以更改接收器的属性或查询。

借助此表上方的搜索查询框,您可以通过文本搜索或接收器名称目标位置写入者身份等接收器属性来查询您的接收器。例如,以下屏幕截图中所示的搜索针对目标位置 bigquery 执行,还展示了通过 ORAND 是默认选项)将其他接收器属性连接到参数的选项:

显示搜索查询的界面。

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

创建接收器

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

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

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

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

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

  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 的项目主页顶部选择活动。如需诊断常见错误,请转到下面的问题排查

更新接收器

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

  • 目标位置
  • 查询

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

删除接收器

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

目标位置权限

本部分介绍如何授予 Logging Cloud 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 访问权限,则将写入者身份服务帐号名称发送给具有该权限的人员。然后,该人员应按照上一步骤中的说明将写入者身份添加到导出目标位置。

授权延迟

如果接收器尝试导出某个日志条目,但缺少对导出目标位置的相应 Cloud 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]”不存在。 您可能删除了为接收导出日志而配置的主题。 使用同一名称重新创建主题,或将导出配置更改为使用其他主题。

后续步骤