为 Storage Transfer Service 启用日志记录

本页面介绍了如何配置 Storage Transfer Service 以生成记录操作和状态的日志数据。您可以使用 Cloud Logging 查看和分析日志数据。

Storage Transfer Service 可以为所有转移作业生成日志数据。不过,对于基于代理的转移作业,系统不会记录 FIND 操作。

文件系统转移作业还可以配置 文件系统转移日志

准备工作

在开始之前,请验证您是否有权访问 Cloud Logging。我们建议使用 Logs Viewer (roles/logging.viewer) Identity and Access Management 角色。如需详细了解 Logging 访问权限,请参阅使用 IAM 进行访问权限控制

以下文档介绍了如何验证当前访问权限以及如何授予 IAM 角色:

可记录的操作

可以记录以下操作:

  • FIND:查找待办事项,例如列出目录中的文件、列出存储桶中的对象或列出存储桶中的托管文件夹。基于代理的转移作业不支持此操作。
  • COPY:将文件或对象复制到 Cloud Storage。
  • DELETE:删除来源或目标位置的文件或对象。对于在两个文件系统之间进行的转移作业,系统还会记录从中间 Cloud Storage 存储桶中删除文件的操作。

可记录的状态

对于每项操作,您还可以记录以下一个或多个状态:

  • SUCCEEDED:操作成功。
  • FAILED:操作失败。
  • SKIPPED:仅适用于 COPY 操作,且仅支持基于代理的转移作业。必须使用 gcloud 或 REST API 进行设置。此状态表示复制操作已跳过。如果文件已存在于接收器中,并且您的转移作业配置为忽略现有文件,则会发生这种情况。

最佳做法

FIND 操作或为 SUCCEEDED 状态启用日志记录可能会 导致日志数据量过大,这可能会影响您的 Cloud Logging 费用

您可以使用以下策略来减少存储的日志数据量:

  • 仅记录失败。如果您不需要完整的对象级合规性审核,请将作业配置为仅针对复制和删除操作写入日志,并且仅在发生失败时写入日志。

  • 使用指标数据监控吞吐量、字节数以及跳过或失败的对象。您可以创建图表, 也可以使用提醒政策监控指标数据。 如需查看可用指标的列表,请参阅 Storage Transfer Service

  • 将 Cloud Logging 配置为舍弃价值较低的大量日志数据。如需进行此更改,请更新项目中的 日志接收器 ,以排除价值较低的 Storage Transfer Service 日志数据。 由于项目中的所有日志接收器都会评估所有日志条目,因此您可能需要更新多个日志接收器。

    使用以下排除项过滤条件排除记录成功操作的 Storage Transfer Service 日志条目:

    resource.type="storage_transfer_job" AND
    jsonPayload.status.statusCode="OK"
    

    如需了解如何查找和修改日志接收器,请参阅 将日志路由到支持的目标位置

启用日志记录

如需将 Storage Transfer Service 配置为生成日志数据,请指定要记录的操作和状态。

gcloud CLI

使用 gcloud transfer jobs create 创建转移作业时,请使用以下标志启用日志记录:

gcloud transfer jobs create SOURCE DESTINATION \
  --log-actions=copy,delete,find \
  --log-action-states=succeeded,failed,skipped

您必须为每个标志至少指定一个值。

REST

如需创建日志记录配置,请使用带有 LoggingConfigtransferJobs.create

{
  "name":"transferJobs/myFirstTransfer",
  "status": "ENABLED",
  "projectId": "test-id-001",
  "loggingConfig": {
     "logActions": ["FIND", "DELETE", "COPY"],
     "logActionStates": ["SUCCEEDED", "FAILED", "SKIPPED"], #SKIPPED is only supported for agent-based transfers
  },
  "transferSpec": {
      "awsS3DataSource": {
          "bucketName": "AWS_SOURCE_NAME",
          "awsAccessKey": {
              "accessKeyId": "AWS_ACCESS_KEY_ID",
              "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
          }
      },
      "gcsDataSink": {
           "bucketName": "destination_bucket",
           "path": "foo/bar/"
      },
   }
}

调整 loggingConfig 以包含要记录的特定 logActionslogActionStates。例如,如需记录失败的复制和查找操作,请提供以下 loggingConfig

"loggingConfig": {
  "logActions": ["COPY", "FIND"],
  "logActionStates": ["FAILED"],
}

更新日志记录配置

gcloud CLI

如需更新现有作业的日志记录配置,请使用 gcloud transfer jobs update 命令和相应的标志:

gcloud transfer jobs update NAME \
  --log-actions=copy,delete,find \
  --log-action-states=succeeded,failed,skipped

如需停用此作业的日志记录,请指定 --clear-log-config

gcloud transfer jobs update NAME --clear-log-config

REST

如需更新现有转移作业的日志记录配置,请使用 transferJobs.patch with LoggingConfig

{
  "projectId": "test-id-001",
  "transferJob": {
    "loggingConfig": {
       "logActions": ["FIND", "DELETE", "COPY"],
       "logActionStates": ["SUCCEEDED", "FAILED", "SKIPPED"], #SKIPPED is only supported for agent-based transfers
    },
  },
  "updateTransferJobFieldMask": "loggingConfig"
}

updateTransferJobFieldMask 指定此请求中要更新的字段,并且此字段为必填字段。

如需停用此作业的日志记录,请发送 loggingConfig 以及 logActionslogActionStates 的空列表:

{
  "projectId": "test-id-001",
  "transferJob": {
    "loggingConfig": {
       "logActions": [],
       "logActionStates": [],
    },
  },
  "updateTransferJobFieldMask": "loggingConfig"
}

查看日志

如需查看转移日志,请执行以下操作:

Google Cloud 控制台

  1. 转到 Google Cloud 导航菜单 ,然后选择 Logging > 日志浏览器 :

    转到 Logs Explorer

  2. 选择一个 Google Cloud 项目。

  3. 升级 菜单中,从旧版日志查看器 切换到Logs Explorer

  4. 如需过滤日志以仅显示 Storage Transfer Service 条目,请在查询字段中输入 storage_transfer_job,然后点击运行查询

  5. 查询结果窗格中,点击修改时间以更改返回结果的时间段。

如需详细了解如何使用 Logs Explorer,请参阅 使用 Logs Explorer

gcloud CLI

如需使用 gcloud CLI 搜索 Storage Transfer Service 日志,请使用 gcloud logging read 命令。

指定过滤条件以将结果限制为 Storage Transfer Service 日志。

gcloud logging read "resource.type=storage_transfer_job"

Cloud Logging API

使用 entries.list Cloud Logging API 方法。

如需过滤结果以仅包含与 Storage Transfer Service 相关的条目,请使用 filter 字段。示例 JSON 请求对象如下。

{
"resourceNames":
  [
    "projects/my-project-name"
  ],
  "orderBy": "timestamp desc",
  "filter": "resource.type=\"storage_transfer_job\""
}

转移日志格式

以下部分介绍 Storage Transfer Service 日志的字段。

所有特定于 Storage Transfer Service 的字段都包含在 jsonPayload 对象中。

FIND 操作

{
  "jsonPayload": {
    "@type": "type.googleapis.com/google.storagetransfer.logging.TransferActivityLog",
    "action": "FIND",
    "completeTime": "2021-12-16T18:58:49.344509695Z",
    "destinationContainer": {
      "gcsBucket": {
        "bucket": "my-bucket-2",
      },
      "type": "GCS",
    },
    "operation": "transferOperations/transferJobs-7876027868280507149--3019866490856027148",
    "sourceContainer": {
      "gcsBucket": {
        "bucket": "my-bucket-1"
      },
      "type": "GCS"
    },
    "status": {
      "statusCode": "OK"
    }
  }
}

COPYDELETE 操作

{
  "jsonPayload": {
    "@type": "type.googleapis.com/google.storagetransfer.logging.TransferActivityLog",
    "action": "COPY",
    "completeTime": "2021-12-16T18:59:00.510509049Z",
    "destinationObject": {
      "gcsObject": {
        "bucket": "my-bucket-2",
        "objectKey": "README.md"
      },
      "type": "GCS",
    },
    "operation": "transferOperations/transferJobs-7876027868280507149--3019866490856027148",
    "sourceObject": {
      "gcsObject": {
        "bucket": "my-bucket-1",
        "lastModifiedTime": "2021-12-07T16:41:09.456Z",
        "md5": "WgnCOIdfCXNTUDpQJSKb2w==",
        "objectKey": "README.md",
      },
      "type": "GCS",
    },
    "status": {
      "statusCode": "OK"
    }
  }
}
日志字段 说明
@type 值始终为 type.googleapis.com/google.storagetransfer.logging.TransferActivityLog
action

描述此特定任务的操作。以下项之一:

  • FIND:查找待办事项,例如列出 目录中的文件或列出存储桶中的对象。基于代理的转移作业不会报告此操作。
  • COPY:将文件或对象复制到 Cloud Storage。
  • DELETE:删除来源、目标位置或中间存储桶中的文件或对象。
findAction

指定查找操作的主题是对象还是 托管文件夹

completeTime 操作完成时符合 ISO 8601 标准的时间戳。
destinationContainer

仅适用于 FIND 操作。 FIND 操作不会记录在基于代理的转移作业中。

此转移作业的目标容器。包含两个 子字段:

  • gcsBucket.bucket:目标 Cloud Storage 存储桶名称。
  • type:始终为 GCS
destinationObject

仅适用于 COPYDELETE 操作。

与目标位置的对象相关的信息。包含两个 子字段:

  • 根据目标位置,可以是 gcsObjectgcsManagedFolderposixFile 之一。所有选项 包含多个子字段,用于指定名称、位置、日期/时间 信息以及对象或文件的哈希。
  • typeGCSPOSIX_FS 中的一个。

例如:

"destinationObject": {
  "type": "POSIX_FS",
  "posixFile": {
    "crc32c": "0",
    "path": "/tmp/data/filename.txt",
    "lastModifiedTime": "2022-09-22T04:33:45Z"
  }
}
operation 完全限定的 transferOperations 名称。
sourceContainer

仅适用于 FIND 操作。 FIND 操作不会记录在基于代理的转移作业中。

此转移的来源容器。包含两个子字段:

  • 指定来源位置的条目。该字段根据来源类型命名。可能的字段如下所示。
    • awsS3Bucket.bucket:AWS S3 存储桶名称。
    • azureBlobContainer:包含 accountcontainer 子字段,它们共同定义 Microsoft Azure Blob 存储 URI。
    • gcsBucket.bucket:Cloud Storage 存储桶名称。
    • httpManifest.url网址列表的网址。该网址指定了要从 HTTP(S) 服务器下载的公开提供的文件。
  • typeAWS_S3AZURE_BLOBGCSHTTP 中的一个。

例如:

"sourceContainer": {
  "gcsBucket": {
    "bucket": "my-bucket-1"
  },
  type: "GCS"
}
sourceObject

仅适用于 COPYDELETE 操作。

与源对象相关的信息。包含两个子字段:

  • 特定于来源对象的主机的条目。该字段根据来源类型命名,并包含元数据的子字段。可能的字段如下所示。
    • awsS3Object:AWS S3 对象。
    • azureBlob:Azure Blob Storage 中的文件。
    • gcsObject:Cloud Storage 对象。
    • gcsManagedFolder:Cloud Storage 托管 文件夹。
    • httpFile:由 网址列表指定的文件。
    • posixFile:POSIX 文件系统上的文件。
  • typeAWS_S3AZURE_BLOBGCSHTTPPOSIX_FS 中的一个。

例如:

"sourceObject": {
  "gcsObject": {
    "bucket": "my-bucket-1"
    "lastModifiedTime": "2021-12-07T16:41:09.456Z"
    "md5": "WgnCOIdfCXNTUDpQJSKb2w=="
    "objectKey": "README.md"
  },
  type: "GCS"
}
status

操作的状态。如果 status.statusCodeOK,则表示操作成功。否则,操作失败。仅当状态不是 OK 时,才会填充 status.errorTypestatus.errorMessage 字段。

此外,顶级 resource 字段包含以下字段。

"resource": {
  "labels": {
    "job_id": "transferJobs/7876027868280507149"
    "project_id": "my-project-id"
  },
  "type": "storage_transfer_job"
}
日志字段 说明
resource.labels.job_id 日志所属的 Storage Transfer Service 作业名称。
resource.labels.project_id 转移作业的 Google Cloud 项目 ID。