排查 Storage Intelligence 问题

本文档介绍了如何排查 Storage IntelligenceStorage Insights 资产清单报告Storage Insights 数据集存储批量操作的常见问题。

Storage Intelligence 配置错误

以下部分介绍了在为资源配置或 管理 Storage Intelligence 时可能遇到的错误。

400:存储桶名称无效

问题:请求返回 400 Bad Request,并显示消息 The specified bucket is not valid.

解决方案:请求无效。确保请求满足以下要求:

  • 使用 locations/global。Storage Intelligence 不支持其他位置。
  • 确保 bucket_id_regexes 中的存储桶名称或正则表达式有效。

以下是有效请求的示例:

curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d '{
      "edition_config": "STANDARD",
      "filter": {
        "included_cloud_storage_buckets": {
          "bucket_id_regexes": [
            "my-bucket-name",
            "prod-data-.*"
          ]
        }
      }
    }' \
    "https://storage.googleapis.com/v2/projects/PROJECT_ID/locations/global/intelligenceConfig?updateMask=edition_config,filter"

400:参数无效 - 更新掩码为空

问题:当您发送配置或更新请求时,请求返回 400 Bad Request,并显示消息 Empty UPDATE_MASK in the request.

解决方案:在请求中提供非空的 UPDATE_MASKUPDATE_MASK 指定了 FieldMask 资源中要 更新的 IntelligenceConfig字段的逗号分隔列表(例如 updateMask=edition_configupdateMask=edition_config,filter)。

400:更新掩码路径无效

问题:更新配置时,请求返回 400 Bad Request 并显示消息 Invalid UPDATE_MASK paths.

解决方案:验证 UPDATE_MASK 中的每个字段名称是否与 IntelligenceConfig 资源中的有效字段匹配。

400:字段不可修改

问题:更新配置时,请求返回 400 Bad Request 并显示消息 Invalid UPDATE_MASK: UPDATE_TIME field is not editable.

解决方案:从 UPDATE_MASK中移除不可修改的系统字段(例如UPDATE_TIME)。仅指定 IntelligenceConfig中定义的可变字段。

400:该值无效

问题:请求返回 400 Bad Request,并显示消息 Invalid value at storage_intelligence.edition_config.

解决方案:将 edition_config 设置为受支持的值:INHERITSTANDARDDISABLED

400:非空过滤条件

问题:请求返回 400 Bad Request,并显示消息 Non-empty filter cannot be specified for INHERIT or DISABLED edition configuration.

解决方案:从请求中移除存储桶过滤条件。当 edition_config 设置为 INHERITDISABLED 时,不支持存储分区过滤条件 。

400:过滤条件中的位置或存储桶值为空

问题:请求返回 400 Bad Request,并显示消息 Empty location or bucket values in filter.

解决方案:确保存储桶过滤条件中的 locationbucket 都不是空字符串。 您的 存储桶过滤条件

存储空间分析常见问题

本部分介绍了如何解决资产清单报告数据集的常见问题。

每天生成多个资产清单报告

问题:资产清单报告配置每天生成多个报告文件 。

解决方案:Cloud Storage 会对包含 超过 100 万个对象的存储分区的资产清单报告进行分片,每 100 万个对象生成一个分片。例如,一个包含 350 万个对象的存储桶会生成 4 个报告分片和一个 列出每个分片的清单文件

资产清单报告未显示在目标存储桶中

问题:资产清单报告未显示在目标存储桶中。

解决方案:如果报告未传送至目标存储桶,请验证以下 内容:

  • 确保配置的开始日期已过。如需了解详情,请参阅 创建资产清单报告配置

  • 查看资产清单报告历史记录,以检查是否存在失败及其根本原因。如需查看资产清单报告历史记录,请完成以下步骤:

    1. 在 Google Cloud 控制台中,转到 Cloud Storage 存储桶页面。

      进入“存储桶”

    2. 在存储桶列表中,点击包含资产清单报告配置的源存储桶的名称。

    3. 存储桶详细信息页面上,点击库存报告标签页。

    4. 在资产清单报告配置列表中,点击生成您要检查的报告的资产清单报告配置的 UUID。

    5. 资产清单报告历史记录部分中检查失败情况。将指针悬停在帮助 () 上,即可详细了解失败的原因。

  • 确保向项目级层服务代理授予读取和写入资产清单报告所需的 IAM 角色。如需了解详情,请参阅向服务代理授予所需的角色

资产清单报告延迟

问题:资产清单报告生成延迟。

解决方案:报告生成时间各不相同。延迟不超过 24 小时是正常现象。

数据集未填充

问题:存储空间分析数据集表保持为空。

解决方案:在关联的 BigQuery 数据集中,检查 error_attributes_view中的错误代码。如需了解详情,请参阅 排查数据集错误

查询数据集时,“ref”列中的空值

问题:在 BigQuery 中查询存储空间分析数据集时, ref 列返回 null

解决方案:对于以 / 结尾的对象,数据集中的 ref 列为空。

如果您在 BigQuery 中查询存储空间分析 数据集时,ref 列返回空值,请验证您是否已授予所需的 连接权限和角色(包括访问 Cloud Storage 资源的权限),如使用 BigQuery 分析对象数据和元数据 中所述

存储批量操作作业验证错误

本部分介绍了向 storagebatchoperations.googleapis.com 提交 批量 操作作业 请求时发生的验证错误。

400:作业 ID 或资源名称无效

问题:作业创建请求返回 400 Bad Request (INVALID_ARGUMENT) 响应,原因是 JOB_ID_INVALIDRESOURCE_NAME_TOO_LONG

解决方案:验证作业 ID 是否由 1 到 63 个小写字母数字 字符或连字符 ([a-z0-9]([-a-z0-9]*[a-z0-9])?) 组成,以及完整 资源路径是否不超过 1,024 字节。如需了解详情,请参阅 作业名称

400:转换参数冲突或缺失

问题:作业创建请求返回 400 Bad Request (INVALID_ARGUMENT) 响应,原因是 TRANSFORMATION_NOT_SPECIFIEDREWRITE_OBJECT_MISSING_PARAMETERSPUT_OBJECT_HOLD_MISSING_PARAMETERSPUT_METADATA_MISSING_PARAMETERS

解决方案:指定一个转换类型以及所有必需的 参数。如果配置对象保留,请验证是否已在存储桶上启用 对象锁定,以及时间戳是否使用 RFC 3339 UTC 格式。如需详细了解按服务类型划分的参数要求,请参阅 服务类型

400:对象前缀重叠或重复

问题:作业创建请求返回 400 Bad Request (INVALID_ARGUMENT) 响应,原因是 OBJECT_PREFIX_OVERLAPDUPLICATE_OBJECT_PREFIX

解决方案:移除重复的前缀,并确保 included_object_prefixes中的任何前缀都不是列表中其他条目的前缀。如需了解更多 信息,请参阅对象前缀

400:清单文件格式和访问问题

问题:作业创建请求返回 400 Bad Request (INVALID_ARGUMENT) 响应,原因是 MANIFEST_LOCATION_REQUIREDMANIFEST_LOCATION_INVALID, 或者作业无法读取清单。

解决方案:验证清单 URI 是否为有效的 CSV 路径 (gs://<bucket_name>/<path>/<object_name>.csv),以及 存储批量操作服务代理是否对清单存储桶具有 roles/storage.objectViewer 角色。如需详细了解 CSV 格式和 架构要求,请参阅清单

400:存储空间分析数据集发现错误

问题:使用存储空间分析数据集进行对象发现时,返回 400 Bad Request (INVALID_ARGUMENTFAILED_PRECONDITION) 响应,原因是 BUCKET_DISCOVERY_SNAPSHOT_TOO_OLDTARGET_LOCATIONS_REQUIRED_FOR_SNAPSHOT_TIMEBUCKET_DISCOVERY_TOO_MANY_BUCKETS

解决方案:验证 snapshot_time 是否在过去 48 小时内,为存储分区指定 target_locations,并确保发现查询匹配的存储分区不超过 1,000 个。如需了解详情,请参阅使用 存储空间分析集创建清单。

400:在启用了 Autoclass 的存储分区上,存储类别转换失败

问题:作业创建请求返回 400 Bad Request (FAILED_PRECONDITION) 响应,原因是 AUTOCLASS_STORAGE_CLASS_TRANSFORMATION_UNSUPPORTED

解决方案:您无法在启用了 Autoclass 的存储分区上运行存储类别转换。您可以将目标存储桶设为未启用 Autoclass 的存储桶,也可以移除存储类别转换。如需了解详情,请参阅 Autoclass 限制

400:在启用了统一存储桶级访问权限的存储桶上,对象 ACL 更新失败

问题:作业创建请求返回 400 Bad Request (FAILED_PRECONDITION) 响应,原因是 UBLA_OBJECT_ACL_UPDATE_UNSUPPORTED

解决方案:您无法在启用了 统一存储桶级访问权限的存储桶上更新对象 ACL。请改用存储桶级或项目级 IAM 角色来管理访问权限。如需了解更多 信息,请参阅统一存储桶级访问权限

存储批量操作运行时和执行问题

本部分介绍了在异步执行批量操作作业期间发生的问题。

403:执行期间出现权限错误

问题:批量作业在执行期间失败,并显示 403 Forbidden (PERMISSION_DENIED)。

解决方案:为存储批量操作服务代理 (service-PROJECT_NUMBER@gcp-sa-storagebatchoperations.iam.gserviceaccount.com) 授予转换类型所需的 IAM 角色。如需了解更多 信息,请参阅向服务代理授予权限

对象重写期间出现 CMEK 加密错误

问题:由于 Cloud KMS 密钥状态或权限错误,对象重写失败,并显示 400 Bad Request403 Forbidden

解决方案:验证 Cloud KMS 密钥是否为 Enabled 状态,是否与目标存储桶位于 同一区域,以及服务代理是否具有 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色。如需了解详情,请参阅 服务类型:重写对象

error_summaries 中的失败次数过多

问题:批量作业完成,但 counters.failed_object_count 不为零,并且 error_summaries 中包含错误代码(例如 404 NOT_FOUND412 FAILED_PRECONDITION403 PERMISSION_DENIED)。

解决方案:使用 --location标志运行gcloud storage batch-operations jobs describe(例如 gcloud storage batch-operations jobs describe JOB_ID --location=LOCATION),以 查看汇总的错误细分,并检查 Cloud Logging 以获取每个对象的 错误日志。如需了解详情,请参阅获取作业详细信息

存储批量操作作业因快照已超过两天而失败

问题:当您创建基于 CEL 过滤条件的存储批量操作作业时,作业创建失败。错误消息指出快照时间已超过两天。

解决方案:为防止对过时的对象状态执行操作,存储批量操作会自动使作业创建失败。如果所选快照已超过两天,则会发生此失败。请选择以下方法之一来解决此问题:

  • 使用清单文件:在 BigQuery 中手动查询数据集。将结果导出到 CSV 清单文件,并将该文件上传到 Cloud Storage 存储桶。然后,您可以使用清单方法创建批量操作作业,以避免两天限制。
  • 检查数据集配置:验证您的数据集配置是否处于有效状态且未暂停。确认数据集快照已成功运行。如需了解如何验证配置,请参阅查看数据集配置
  • 使用目标位置和快照时间替换项:指定 --target-snapshot-time 标志,通过以 RFC 3339 格式显式选择快照来绕过两天过时失败。指定 --target-locations 标志,将操作限制为快照存在的位置。您可以使用这些替换项来解决阻止自动全局快照更新的同步延迟问题。因此,您可以手动定位到较新的区域快照。如需了解命令语法,请参阅使用高级过滤条件创建作业

基于 CEL 过滤条件的存储批量操作作业在新订阅的项目上失败

问题:在新订阅的项目上运行基于 CEL 过滤条件的存储批量操作作业失败,因为系统找不到有效的快照。

解决方案:启用 Storage Intelligence 订阅后,您必须等待 24 小时才能运行基于 CEL 过滤条件的存储批量操作作业。此延迟可让系统执行初始元数据快照并确定起始快照时间。

基于 CEL 过滤条件的存储批量操作作业失败,并显示权限错误或抛出运行时错误

问题:基于 CEL 过滤条件的存储批量操作作业在执行期间失败,或返回运行时权限错误。

解决方案:存储批量操作使用您的用户凭据来处理对象。如果您对目标存储分区和对象没有必要的 IAM 读取者或写入者权限,作业将失败。当您的 CEL 过滤条件选择您无权访问的资源时,会出现此问题。确认您的账号对作业范围内的所有存储分区和对象具有 Storage Admin (roles/storage.admin)、Storage Object Admin (roles/storage.objectAdmin) 或等效角色。如需了解如何授予角色,请参阅使用 IAM 权限

监控和日志分析

如需详细了解如何在 Cloud Logging 中检查每个对象的执行失败情况和错误 载荷,请参阅查看存储批量操作 日志

后续步骤