以追溯方式批量处理日志和路由日志

本页面介绍如何将已存储在 Cloud Logging 日志存储分区中的日志条目手动复制到 Cloud Storage 存储分区。您可能希望将日志条目从日志存储分区复制到 Cloud Storage 存储分区,原因如下:

  • 如果您在将日志条目存储在 Logging 中之前忘记将日志条目路由到 Cloud Storage。
  • 与 Logging 外部的审核人员共享日志条目。
  • 使用 Cloud Storage 中的脚本分析日志条目。

将日志条目复制到 Cloud Storage 时,日志条目也会保留在复制它们的日志存储桶中。

复制操作不会取代接收器,后者会自动将所有传入日志条目发送到预先选定的受支持存储目标位置(包括 Cloud Storage 存储分区)。如果您知道要将日志条目存储在 Cloud Storage 存储桶中,请使用接收器。

如需复制日志,然后管理和监控操作,您必须使用 Google Cloud CLI

限制

复制日志条目时,存在以下限制:

  • 您只能将日志复制到 Cloud Storage 存储桶,其他目标位置不可用。

  • 您无法从配置了 CMEK 的日志存储分区中复制日志。

准备工作

在开始复制日志之前,请执行以下操作:

  • 如需获取从 Logging 复制日志条目并将日志条目写入 Cloud Storage 所需的权限,请让管理员授予您项目的以下 IAM 角色:

  • 如需获取查看和管理复制操作状态所需的权限,请让管理员授予您项目的 Logs Configuration Writer (roles/logging.configWriter) IAM 角色。

复制日志条目

Logging 仅在复制操作开始时复制存储在日志存储桶中的日志条目。复制操作开始后存储在日志存储分区中的日志条目不会复制到 Cloud Storage。

如需将日志条目复制到 Cloud Storage,您需要知道以下信息:

  • 您要从中复制数据的日志存储桶的 ID 和位置。如需检索日志存储桶 ID 及其位置,请使用 gcloud CLI 命令 gcloud logging buckets list
  • 作为复制目标的 Cloud Storage 存储桶的名称。如需了解如何检索 Cloud Storage 存储桶名称,请参阅获取 Cloud Storage 存储桶信息
  • 您要复制的日志条目的过滤条件

如需复制日志条目,请运行 gcloud logging copy 命令:

gcloud logging copy BUCKET_ID storage.googleapis.com/CLOUD_STORAGE_BUCKET_NAME
--location=LOCATION [--log-filter=FILTER] --project=PROJECT_ID

在运行上一个命令之前,请执行以下操作:

  • BUCKET_ID 替换为您的日志存储桶的名称。
  • CLOUD_STORAGE_BUCKET_NAME 替换为您的 Cloud Storage 存储桶的名称。
  • LOCATION 替换为日志存储桶的位置。
  • (可选):将 FILTER 替换为定义要复制哪些日志的过滤条件。

  • PROJECT_ID 替换为您的 Google Cloud 项目 ID。如果活跃的 gcloud CLI 配置设置为正确的 Google Cloud 项目,则可以省略此标志。

示例命令:

gcloud logging copy my-log-bucket storage.googleapis.com/my-gcs-bucket \
--location=global --log-filter='timestamp > "2021-03-18T10:00:00.0Z"' \
--project=my-project

此命令会创建一个长时间运行的操作,用于在后台运行以及返回复制操作的名称以及日志存储桶的位置:

name: projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID

复制操作的位置与要从中复制日志的日志存储桶的位置相同。

查看和管理复制操作

您可以使用 gcloud logging operations 命令查看和管理复制操作,该命令可用于列出、查看和取消操作。

以下命令要求您指定操作的位置。 使用日志存储桶的位置。如需了解如何查找日志存储桶的位置,请参阅查看存储桶的详细信息

列出复制操作

您可以列出最近的复制操作,包括已安排、正在运行、已完成、失败和已取消的操作。近期的复制操作会在结束时间后的最多 30 天内显示在结果中。

如需列出复制操作,请运行以下命令:

gcloud logging operations list --location=LOCATION \
--operation-filter=request_type=CopyLogEntries \
--project=PROJECT_ID

在运行上一个命令之前,请执行以下操作:

  • LOCATION 替换为您要从其中复制日志的日志存储桶的位置。
  • PROJECT_ID 替换为您的 Google Cloud 项目 ID。

该命令会返回有关长时间运行的操作的信息,包括操作 ID:

projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID

查看复制操作的状态

您可以检索有关复制操作的状态和其他元数据,包括:

  • startTime:指示操作创建的时间戳。
  • endTime:指示操作完成的时间戳。
  • state:操作的状态(已安排、正在运行、已取消、失败或成功)。
  • cancellation:用户是否已请求取消操作。
  • progress:操作的估算进度 (0-100%)。
  • destination:操作将日志复制到的 Cloud Storage 存储桶的名称。
  • filter:用于指定要复制的日志条目的过滤条件。
  • name:操作要从中复制日志的日志存储桶的名称。
  • logEntriesCopiedCount:操作成功复制到 Cloud Storage 存储桶的日志条目数。

请注意,并非所有列出的元数据字段都适用于所有复制操作。例如,如果复制操作仍在运行,则 endtime 元数据不会应用于该操作。再举一例,如果在运行 gcloud logging copy 命令时未使用 --log-filter=FILTER 标志,则 filter 元数据不适用于该操作。

如需检索复制操作的相关信息,请运行以下命令:

gcloud logging operations describe OPERATION_ID \
--location=LOCATION --project=PROJECT_ID

在运行上一个命令之前,请执行以下操作:

  • OPERATION_ID 替换为该操作的 ID。
  • LOCATION 替换为您要从其中复制日志的日志存储桶的位置。
  • PROJECT_ID 替换为您的 Google Cloud 项目 ID。

该命令返回有关复制操作的元数据。例如,以下是正在进行的操作的输出:

done: false
metadata:
  `@type`: type.googleapis.com/google.logging.v2.CopyLogEntriesMetadata
  progress: 75
  destination: storage.googleapis.com/my-storage-bucket-1
  source: projects/my-test-project/locations/us-central1/buckets/my-logging-bucket-2
  verb: copy
  startTime: `2023-05-23T10:52:40.039751Z`
  state: OPERATION_STATE_RUNNING
name: projects/my-test-project/locations/us-central1/buckets/my-logging-bucket-2
   </pre>

取消复制操作

您可以取消正在进行的复制操作。如果您取消复制操作,则操作取消之前复制的所有日志条目都会保留在 Cloud Storage 存储桶中。

取消复制操作后,Logging 会完成所有正在进行的进程,然后再完成取消。因此,取消操作后,某些日志条目可能仍会被复制到 Cloud Storage。

要取消复制操作,请运行以下命令:

gcloud logging operations cancel OPERATION_ID \
--location=LOCATION --project=PROJECT_ID

在运行上一个命令之前,请执行以下操作:

  • OPERATION_ID 替换为该操作的 ID。
  • LOCATION 替换为您要从其中复制日志的日志存储桶的位置。
  • PROJECT_ID 替换为您的 Google Cloud 项目 ID。

查看 Cloud Storage 中的日志

如需查看并了解您复制到 Cloud Storage 的日志,请参阅查看路由到 Cloud Storage 的日志

配额和限制

无论复制的数据量是多少,所有复制操作都需要至少一小时才能完成。

如需复制大量卷(例如 PB 级),请使用 --filter 标志中的 timestamp 字段在多个复制操作之间拆分复制。

价格

在将日志路由到受支持的目标位置时,Cloud Logging 不会产生费用;但是,目标位置可能会产生费用。除 _Required 日志存储桶外,Cloud Logging 会针对将日志流式传输到日志存储桶,以及对超出日志存储桶默认保留期限的存储收费。

Cloud Logging 不对日志复制或通过 Logs Explorer 页面或 Log Analytics 页面发出的查询收费。

有关详情,请参阅以下文档: