回溯性批量处理和路由日志

本页介绍了如何手动将已存储在 Cloud Logging 日志存储分区中的日志条目复制到 Cloud Storage 存储分区。复制操作不需要日志存储桶和 Cloud Storage 存储桶位于同一 Google Cloud 项目中。

出于以下原因,您可能需要将日志条目从日志存储分区复制到 Cloud Storage 存储分区:

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

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

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

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

限制

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

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

  • 您无法从已配置 CMEK 的日志桶中复制日志。

准备工作

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

  • 如需获得复制日志条目所需的权限,请让管理员向您授予包含要从中复制的日志存储桶的项目的以下 IAM 角色:

  • 如需获得将日志条目写入 Cloud Storage 所需的权限,请让您的管理员为您授予包含 Cloud Storage 存储桶的项目的 Storage Object Creator (roles/storage.objectCreator) IAM 角色。

复制日志条目

Logging 仅在复制操作开始时复制存储在日志存储桶中的日志条目。在复制操作开始后存储在日志存储分区中的日志条目不会复制到 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 替换为用于定义要复制的日志的过滤条件。

    如果您省略 --log-filter 标志,则日志存储桶中的所有日志条目都将复制到 Cloud Storage 存储桶。

  • 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 > "2024-07-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: `2024-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 的日志

配额和限制

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

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

复制命令无法复制保留期限已过的日志条目。

价格

Cloud Logging 不会对将日志路由到受支持的目标位置收费;但目标位置可能会收费。除了 _Required 日志存储桶外,Cloud Logging 会对将日志流式传输到日志存储桶以及存储时间超过日志存储桶默认保留期限的部分收费。

Cloud Logging 不会对复制日志、定义日志范围或通过日志浏览器Log Analytics 页面发出的查询收费。

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