使用日志查看器导出

本页面介绍了如何使用 GCP Console 来导出日志条目。您也可以使用 Stackdriver Logging APIgcloud logging 命令行工具来导出日志条目。

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

要了解如何设置导出日志的格式以及对其进行整理,请参阅使用导出的日志

开始使用

  1. 转到 GCP Console 中的 Stackdriver Logging > 日志导出页面:

    转到“日志导出”

  2. 在页面顶部选择一个现有 GCP 项目。您可以看到该 GCP 项目中的日志导出列表。

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

导出页面

如果尚未配置任何日志接收器,您将看到未配置任何日志接收器消息,而不是如上所示的列表。

准备工作

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

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

  • 目标服务:要导出日志,您必须注册要向其中写入日志的服务:Cloud StorageBigQueryCloud Pub/Sub

“日志导出”界面

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

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

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

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

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

导出过滤条件

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

创建接收器

要创建导出接收器,请点击日志导出页面顶部的创建导出按钮。您还可以在“日志查看器”页面顶部点击此按钮。

如果您的帐号没有为此项目创建导出的权限,则此按钮会停用。如需了解详情,请参阅上面的准备工作部分。

以下屏幕截图显示了修改导出设置面板,其中已填写了某些字段:

配置导出

要创建接收器,请按如下所示填写修改导出设置面板:

  1. (过滤条件):输入一个高级日志过滤条件。您无需在过滤条件两边使用英文引号,但可以使用多行内容。初始过滤条件由您点击创建导出后显示的日志条目确定。

    每次修改过滤条件后,按过滤框下方的提交过滤条件可显示匹配的日志条目。点击页面顶部的跳转到最新的日志图标可获取最新日志。

    如果您希望使用基本查看界面来选择日志,请使用搜索过滤框右侧的 ▾ 菜单。

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

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

    自定义导出目标位置仍必须位于 Cloud Storage、BigQuery 或 Cloud Pub/Sub 中,但支持您将日志发送到其他项目中的接收器。

  4. 接收器目标位置

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

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

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

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

更新接收器

要更新接收器,请在相应接收器名称右侧的更多菜单中选择修改接收器命令。您可以更改以下任何参数:

  • 目标位置
  • 过滤条件

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

删除接收器

要删除接收器,请在导出页面中选择相应接收器,然后按页面顶部的删除。或者,从相应接收器名称右侧的更多菜单中选择删除接收器

目标位置权限

本部分介绍了如何授予 Logging 权限,以将导出日志写入到接收器的导出目标位置。

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

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

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

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

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

    • 如果您使用的是 GCP Console,则可以在导出页面的接收器列表中看到写入者身份。
    • 如果您使用的是 Logging API,则可以从 LogSink 对象获取写入者身份。
    • 如果您使用的是 gcloud logging,则可以在列出接收器后看到写入者身份。
  4. 如果您拥有对目标位置的所有者访问权限,则按以下方式将服务帐号添加到目标位置:

    • 对于 Cloud Storage 目标位置,将接收器的写入者身份添加到存储分区,并为其指定 Storage 对象创建者角色。
    • 对于 BigQuery 目标位置,将接收器的写入者身份添加到数据集,并为其提供 BigQuery 数据编辑者角色。
    • 对于 Cloud Pub/Sub,将接收器的写入者身份添加到您的主题,并为其指定 Pub/Sub 发布者角色。

    授权过程到此结束。

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

授权延迟

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

在创建接收器与使用接收器的新服务帐号授予写入到导出目标位置的权限之间存在不可避免的延迟。您可以选择直接忽略接收器在延迟期间发出的所有错误消息。

优势和限制

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

  • GCP Console 可在一个位置显示您的所有接收器。
  • 在您创建接收器之前,GCP Console 会显示哪些日志条目与接收器过滤条件匹配。
  • GCP Console 可以为您的接收器创建导出目标位置并相应授权。

不过,GCP Console 只支持在项目中创建或查看接收器。要在组织、文件夹或结算帐号中创建接收器,请参阅汇总导出

问题排查

本部分列出了一些可能出现的错误和意外结果,并说明了处理方法。

接收器出现的错误显示在接收器创建时所在的项目或其他资源的活动流中。请参阅 GCP Console 的资源主页中的“活动流”。

一般问题

问题 原因 解决方案
新日志条目已导出,但旧日志条目未导出。 Logging 仅导出在导出设置完毕后收到的日志条目。 使用 entries.list API 方法检索旧日志条目,然后使用目标服务的 API 将其写入导出目标位置。您只能在 Stackdriver Logging 中检索尚未到期的日志条目。如需了解详情,请参阅{0日志保留限制

导出到 Cloud Storage 时出错

下表列出了您通过配置 Logging 来将日志导出到 Cloud Storage 时最常遇到的错误:

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

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

导出到 BigQuery 时出错

下表列出了您通过配置 Logging 来将日志导出到 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]”,因为组织政策禁止执行该操作。 存在阻止写入到所选数据集的组织政策。如需详细了解组织政策,请参阅文档 修改导出接收器以使用兼容的数据集。

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

下表列出了您通过配置 Logging 来将日志导出到 Cloud Pub/Sub 时最常遇到的错误:

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

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Stackdriver Logging
需要帮助?请访问我们的支持页面