排查 Storage Intelligence 问题

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

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./v2/projects/PROJECT_ID/locations/global/intelligenceConfig?updateMask=edition_config,filter"

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

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

解决方案:在请求中提供非空的 UPDATE_MASKUPDATE_MASK 用于指定 IntelligenceConfig 资源中要更新的 FieldMask 字段的英文逗号分隔列表(例如 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 都不是空字符串。

存储空间分析常见问题

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

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

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

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

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

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

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

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

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

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

      进入“存储桶”

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

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

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

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

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

资产清单报告延迟

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

解决方案:报告生成时间各不相同。延迟时间不超过 24 小时属于正常情况。

数据集未填充

问题:存储空间分析数据集表仍然为空。

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

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

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

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

如果您在 BigQuery 中查询存储空间分析数据集时,ref 列返回 null 值,请验证您是否已授予所需的连接权限和角色,包括对 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])?),以及完整的作业资源路径 (projects/PROJECT_ID/locations/LOCATION/jobs/JOB_ID) 是否不超过 200 字节。如果路径超过 200 字节,请缩短作业 ID。如需了解详情,请参阅作业名称

400:职位描述超出限制

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

解决方案:确保作业说明不超过 1,024 字节。如果超出此限制,请缩短文本。如需了解详情,请参阅作业说明

400:缺少或存在无效的招聘信息来源配置

问题:作业创建请求返回 400 Bad Request (INVALID_ARGUMENT) 响应,并包含以下任一原因:

  • SOURCE_NOT_SPECIFIED
  • BUCKET_LIST_EMPTY
  • TOO_MANY_BUCKETS
  • MULTI_BUCKET_NOT_SUPPORTED
  • BUCKET_NAME_REQUIRED
  • OBJECT_CONFIGURATION_REQUIRED

解决方案:确保您的作业指定了有效的来源配置(bucket_listproject_source),并且每个存储桶都定义了对象选择方法。如需了解详情,请参阅创建和管理批量操作作业

400:存储桶或对象名称无效

问题:作业创建请求返回 400 Bad Request (INVALID_ARGUMENT) 响应,原因代码为 BUCKET_NAME_INVALIDOBJECT_NAME_INVALID

解决方案:确保所有存储桶和对象名称都符合 Cloud Storage 命名要求。如需了解详情,请参阅存储分区命名准则对象命名准则

400:项目源配置错误

问题:作业创建请求返回 400 Bad Request (INVALID_ARGUMENT) 响应,并包含以下任一原因:

  • PROJECT_SOURCE_PROJECT_INVALID
  • PROJECT_SOURCE_DRY_RUN_FIELDS_EXCLUSIVE
  • PROJECT_SOURCE_DRY_RUN_ID_INVALID

解决方案:验证项目源配置是否符合格式和字段排他性要求。如果您指定了试运行作业 ID,请省略所有其他 project_source 参数。如需了解详情,请参阅使用高级过滤条件创建作业

400:转换参数冲突或缺失

问题:作业创建请求返回 400 Bad Request (INVALID_ARGUMENT) 响应,并包含以下任一原因:

  • TRANSFORMATION_NOT_SPECIFIED
  • REWRITE_OBJECT_MISSING_PARAMETERS
  • PUT_OBJECT_HOLD_MISSING_PARAMETERS
  • PUT_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 RequestINVALID_ARGUMENTFAILED_PRECONDITION)响应,原因如下:

  • BUCKET_DISCOVERY_SNAPSHOT_TOO_OLD
  • TARGET_LOCATIONS_REQUIRED_FOR_SNAPSHOT_TIME
  • BUCKET_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 角色。如需了解详情,请参阅向服务代理授予权限

对象重写期间的 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 中检查每个对象的执行失败情况和错误载荷,请参阅查看存储批量操作日志

后续步骤