Azure 儲存體 Blob 清查

Azure 儲存體 blob inventory 會列出你儲存帳號中的容器、blob、blob 版本、快照及相關屬性。 該服務每日或每週以逗號分隔值(CSV)或 Apache Parquet 格式產生報告。

利用庫存報告來審核您的儲存帳戶內容的保留狀態、法定保管狀態或加密狀態。 你也可以分析資料的總規模、年齡、層級分布及其他屬性。

Blob 庫存能簡化業務工作流程並加速資料處理工作。 它提供 清單容器 與 清單 Blobs API 的排程自動化。 庫存規則會依 Blob 類型、前綴或選取的 Blob 屬性來篩選報表內容。

Azure 儲存體 Blob 清查功能可用於下列類型的儲存體帳戶:

  • 標準一般用途 v2
  • 進階區塊 Blob 儲存體
  • Blob 儲存體

庫存功能

Azure 儲存體 blob inventory 支援以下功能與能力。

  • Blob 與容器的庫存報告

    您可以針對 Blob 和容器產生庫存報告。 blob 報告可以包含基礎 blob、快照、內容長度、blob 版本,以及其相關屬性,例如建立時間和最後修改時間。 報告中沒有列出空容器。 容器報告描述容器及其相關屬性,如不可變性政策狀態與法律保留狀態。

  • 自訂結構描述

    您可以選擇要顯示在報表中的欄位。 從支援的欄位清單中選擇。 本文稍後會顯示該清單。

  • CSV 和 Apache Parquet 輸出格式

    您可以使用 CSV 或 Apache Parquet 輸出格式來產生清查報告。

  • 每份庫存報告的資訊清單檔案和 Azure 事件方格

    該服務會為每個庫存報告產生清單檔案和 Azure 事件方格 事件。 文章稍後會詳細說明這些物品。

啟用庫存報表

將包含一或多項規則的原則新增至您的儲存體帳戶,以啟用 Blob 庫存報告。 如需指引,請參閱啟用 Azure 儲存體 blob 清查報表。

升級庫存政策

如果你在 2021 年 6 月之前設定了 Azure 儲存體 的 blob inventory,載入政策,做必要的修改,然後儲存。 當你重新載入政策時,服務會以預設值填入每個規則的目的地、清單檔案和 Azure 事件方格 事件設定。 你可以改變這些價值觀。

  • 每個規則都支援一個目的地容器,而非在政策層級共享單一目的地。

  • 該服務會為每個規則產生一個 manifest 檔案和 Azure 事件方格 事件,而不是針對政策本身。

清查原則

要設定庫存報告,請在 JSON 文件中加入包含一個或多個規則的庫存政策。

{
  "enabled": true,
  "rules": [
  {
    "enabled": true,
    "name": "inventoryrule1",
    "destination": "inventory-destination-container",
    "definition": {
      "filters": {
        "blobTypes": ["blockBlob"]
      },
      "format": "csv",
      "objectType": "blob",
      "schedule": "daily",
      "schemaFields": ["Name"]
    }
  },
  {
    "enabled": true,
    "name": "inventoryrule2",
    "destination": "inventory-destination-container",
    "definition": {
      "filters": {},
      "format": "csv",
      "objectType": "container",
      "schedule": "weekly",
      "schemaFields": ["Name"]
    }
  }]
}

在 Azure 入口網站的 Blob 清查 區段中,選取 程式碼檢視 索引標籤,即可查看清查原則的 JSON。

參數名稱 參數類型 備註 是必要的嗎?
enabled boolean 用於停用整個原則。 當設定為 true(true)時,規則層 enabled 級欄位會覆蓋此參數。 停用時,所有規則的庫存功能都會被停用。 是的
rules 規則物件的陣列 政策中至少需要一項規則。 每個原則最多支援 100 個規則。 是的

清查規則

規則會捕捉用來產生清查報表的篩選準則和輸出參數。 每個規則都會建立清查報告。 規則可以有重疊的首碼。 根據規則定義,Blob 可以出現在多個庫存中。

原則內的每個規則都有數個參數:

參數名稱 參數類型 備註 是必要的嗎?
name 字串 規則名稱最多可包含 256 個區分大小寫的英數字元。 名稱在原則中必須是唯一的。 是的
enabled boolean 一個用來啟用或停用規則的旗標。 預設值為 true。 是的
definition JSON 清查規則定義 每個定義都是由一組規則篩選器所組成。 是的
destination 字串 服務產生所有庫存檔案的目的地容器。 目的地容器必須已經存在。

全域 Blob 庫存已啟用旗標優先於規則中的已啟用參數。

規則定義

參數名稱 參數類型 備註 必填
filters JSON 篩選條件會決定 Blob 或容器是否屬於清查的一部分。 是的
format 字串 決定庫存檔案的輸出格式。 有效的數值為 csv (CSV 格式)和 parquet (Apache Parquet 格式)。 是的
objectType 字串 顯示庫存規則是適用於膠塊還是容器。 有效值為 blob 和 container。 是的
schedule 字串 指定何時執行該規則。 有效值為 daily 和 weekly。 是的
schemaFields JSON 陣列 列出要納入庫存中的結構描述欄位。 是的

規則篩選

請使用以下篩選器自訂 blob 庫存報告:

篩選名稱 篩選類型 備註 是必要的嗎?
blobTypes 預先定義的列舉值陣列。 對於啟用階層式命名空間的帳戶,有效值為 appendBlob 和 blockBlob;對於其他帳戶,則為 pageBlob、blockBlob 和 appendBlob。 此欄位不適用於貨櫃庫存(objectType: container)。 是的
creationTime 數值 說明那個膠狀物是在幾天前被創造出來的。 例如,值為 3 時,僅包含在過去三天內建立的 Blob。 否
prefixMatch 最多可達 10 個字串的陣列 如果您未定義 prefixMatch,或提供空白前置詞,則此規則會套用至該儲存帳戶中的所有 blob。 前置詞必須是容器名稱前置詞或容器名稱。 例如,container 或 container1/foo。 否
excludePrefix 最多可達 10 個字串的陣列 指定要從清查報表中排除的 Blob 路徑。

A excludePrefix 必須是容器名稱前綴或容器名稱。 當 excludePrefix 為空時,報告會列出所有名稱符合任一 prefixMatch 字串的 Blob。

若要包含前綴但排除特定子集,請使用篩選器 excludePrefix 。 例如,若要包含 container-a 下的所有 blob,但不包括 container-a/folder 下的 blob,請將 excludePrefix 設為 prefixMatch,並將 container-a 設為 container-a/folder。
否
includeSnapshots boolean 規定清單是否包含快照。 預設值為 false。 此欄位不適用於貨櫃庫存(objectType: container)。 否
includeBlobVersions boolean 指定物品欄是否包含 blob 版本。 預設值為 false。 此欄位不適用於貨櫃庫存(objectType: container)。 否
includeDeleted boolean 指定清查是否包含已刪除的 Blob。 預設值為 false。 在擁有階層命名空間的帳號中,這個篩選器會包含軟刪除狀態的資料夾和 blobs。

報告中只會顯示明確刪除的資料夾和檔案。 刪除父資料夾後被刪除的子資料夾和檔案則不包含在內。
否

在 Azure 入口網站的 Blob 清查 區段中,選取 程式碼檢視 索引標籤,以檢視清查規則的 JSON。 你在規則定義中指定過濾器。

{
  "destination": "inventory-destination-container",
  "enabled": true,
  "rules": [
  {
    "definition": {
      "filters": {
        "blobTypes": ["blockBlob", "appendBlob", "pageBlob"],
        "prefixMatch": ["inventorytestcontainer1", "inventorytestcontainer2/abcd", "etc"],
        "excludePrefix": ["inventorytestcontainer10", "etc/logs"],
        "includeSnapshots": false,
        "includeBlobVersions": true
      },
      "format": "csv",
      "objectType": "blob",
      "schedule": "daily",
      "schemaFields": ["Name", "Creation-Time"]
    },
    "enabled": true,
    "name": "blobinventorytest",
    "destination": "inventorydestinationContainer"
  },
  {
    "definition": {
      "filters": {
        "prefixMatch": ["inventorytestcontainer1", "inventorytestcontainer2/abcd", "etc"]
      },
      "format": "csv",
      "objectType": "container",
      "schedule": "weekly",
      "schemaFields": ["Name", "HasImmutabilityPolicy", "HasLegalHold"]
    },
    "enabled": true,
    "name": "containerinventorytest",
    "destination": "inventorydestinationContainer"
    }
  ]
}

Blob 庫存支援的自訂結構描述欄位

注意

Data Lake Storage 資料行會顯示已啟用階層式命名空間功能的帳戶是否受支援。

欄位 Blob 儲存體 (預設支援) Data Lake Storage
名稱 (必要) 是的 是的
建立時間 是的 是的
上次修改時間 是的 是的
最後存取時間1 是的 是的
Etag 是的 是的
內容長度 是的 是的
內容-類型 是的 是的
內容編碼 是的 是的
內容語言 是的 是的
內容-CRC64 是的 是的
Content-MD5 是的 是的
Cache-Control 是的 是的
Cache-Disposition 是的 是的
BlobType 是的 是的
AccessTier 是的 是的
AccessTierChangeTime 是的 是的
LeaseStatus 是的 是的
LeaseState 是的 是的
伺服器加密 是的 是的
客戶提供的密鑰SHA256 是的 是的
中繼資料 是的 是的
到期時間 否 是的
hdi_isfolder 否 是的
擁有者 否 是的
群組 否 是的
權限 否 是的
Acl 否 是的
快照(當您選擇在報表中包含快照時可用且為必填) 是的 是的
已刪除 是的 是的
DeletionId 否 是的
DeletedTime 否 是的
剩餘保留天數 是的 是的
VersionId(當您選擇在報表中包含 Blob 版本時可用且為必填) 是的 否
IsCurrentVersion (當您選擇在報告中包含 Blob 版本時可用且為必要欄位) 是的 否
TagCount 是的 否
標籤 是的 否
CopyId 是的 是的
CopySource 是的 是的
CopyStatus 是的 是的
CopyProgress 是的 是的
複製完成時間 是的 是的
CopyStatusDescription 是的 是的
ImmutabilityPolicyUntilDate 是的 是的
ImmutabilityPolicyMode 是的 是的
LegalHold 是的 是的
重新還原優先順序 是的 是的
ArchiveStatus 是的 是的
EncryptionScope 是的 是的
IncrementalCopy 是的 是的
x-ms-blob-sequence-number 是的 否

1 預設為停用。 選擇性地啟用存取時間追蹤。

容器清查支援的自訂架構欄位

注意

Data Lake Storage 資料行會顯示已啟用階層式命名空間功能的帳戶是否受支援。

欄位 Blob 儲存體 (預設支援) Data Lake Storage
名稱 (必要) 是的 是的
上次修改時間 是的 是的
Etag 是的 是的
LeaseStatus 是的 是的
LeaseState 是的 是的
租約期限 是的 是的
中繼資料 是的 是的
PublicAccess 是的 是的
預設加密範圍 是的 是的
DenyEncryptionScopeOverride 是的 是的
HasImmutabilityPolicy 是的 是的
HasLegalHold 是的 是的
ImmutableStorageWithVersioningEnabled 是的 是的
已刪除(僅在選取「包含已刪除的容器」時才會顯示) 是的 是的
版本(僅在選取了 [包含刪除的容器] 時才會顯示) 是的 是的
DeletedTime(僅在選擇包含已刪除容器時才顯示) 是的 是的
剩餘保留天數(僅在選擇包含已刪除容器時顯示) 是的 是的

庫存執行

如果你設定規則是每天執行,它就會每天執行。 如果你設定規則每週執行,它會在 UTC 時間的每個星期天執行。

盤點作業可能會在失敗前持續長達六天。 欲了解影響執行時間的因素,請參閱 Blob 庫存效能特性。

各次執行不會重疊,因此同一規則的一次執行必須先完成,才能開始下一次執行。 例如,如果每日規則前一天的執行作業仍在進行中,服務當天就不會啟動新的執行作業。 每週規則都會在每個星期日執行,無論前一次執行是成功還是失敗。 如果某次執行未成功完成,請先檢查後續的執行作業,再聯絡支援團隊。 執行效能可能有所不同,因此後續執行可能會成功完成。

庫存原則會完整讀取或完整寫入。 不支援部分更新。 系統會每日評估庫存規則。 如果你在服務完成當天原則評估後變更規則定義,服務會在次日評估你所做的更新。

庫存已完成事件

當某規則的清查作業完成時,系統會產生 BlobInventoryPolicyCompleted 事件。 如果清查作業在開始執行之前因使用者錯誤而失敗,也會發生此事件。 例如,無效的政策或缺少目的地容器會觸發事件。 以下 JSON 展示了一個範例 BlobInventoryPolicyCompleted 事件。

{
  "topic": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/BlobInventory/providers/Microsoft.EventGrid/topics/BlobInventoryTopic",
  "subject": "BlobDataManagement/BlobInventory",
  "eventType": "Microsoft.Storage.BlobInventoryPolicyCompleted",
  "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "data": {
    "scheduleDateTime": "2021-05-28T03:50:27Z",
    "accountName": "testaccount",
    "ruleName": "Rule_1",
    "policyRunStatus": "Succeeded",
    "policyRunStatusMessage": "Inventory run succeeded, refer manifest file for inventory details.",
    "policyRunId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "manifestBlobUrl": "https://testaccount.blob.core.windows.net/inventory-destination-container/2021/05/26/13-25-36/Rule_1/Rule_1-manifest.json"
  },
  "dataVersion": "1.0",
  "metadataVersion": "1",
  "eventTime": "2021-05-28T15:03:18Z"
}

下表描述事件的架構 BlobInventoryPolicyCompleted。

欄位 類型 描述
scheduleDateTime 字串 排定庫存規則的時間。
帳戶名稱 字串 儲存體帳戶名稱。
規則名稱 字串 規則名稱。
policyRunStatus 字串 清查作業的狀態。 可能的值是 Succeeded、PartiallySucceeded、Failed。
policyRunStatusMessage 字串 清查作業的狀態訊息。
policyRunId 字串 庫存執行作業的原則執行識別碼。
manifestBlobUrl 字串 庫存執行的資訊清單檔案的 Blob URL。

庫存輸出

每個庫存規則會在該規則指定的庫存目的地容器中建立一組檔案。 庫存輸出可依以下路徑取得: https://<accountName>.blob.core.windows.net/<inventory-destination-container>/YYYY/MM/DD/HH-MM-SS/<ruleName> 其中:

  • accountName是您的 Azure Blob 儲存體帳戶名稱。
  • 清查-目的地-容器 是您在清查規則中指定的目的地容器。
  • YYYY/MM/DD/HH-MM-SS 是開始盤點的時間。
  • ruleName 是清查規則名稱。

清單檔案

針對規則執行的每個清查都會產生下列檔案:

  • 清查檔案:規則的清查執行會產生 CSV 或 Apache Parquet 格式的檔案。 每個這類檔案都包含相符的物件和其中繼資料。

    重要

    如果物件數量很大,庫存執行會產生多個檔案。 若要進一步瞭解,請參閱 多個庫存檔案輸出常見問題。

    Apache Parquet 格式的報告以以下格式呈現日期: timestamp_millis [number of milliseconds since 1970-01-01 00:00:00 UTC]。 若為 CSV 格式的檔案,第一個資料列一律為架構資料列。 下圖顯示在 Microsoft Excel 中開啟的清查 CSV 檔案。

    此螢幕擷取畫面顯示在 Microsoft Excel 中開啟的清查 CSV 檔案

    重要

    清查檔案中顯示的 blob 路徑可能不會以任何特定順序出現。

  • 檢查碼檔案: 檢查碼檔案包含 manifest.json 檔案內容的 MD5 檢查碼。 總和檢查碼檔案的名稱是 <ruleName>-manifest.checksum。 產生總和檢查碼檔案會標示庫存規則執行的完成。

  • 清單檔案: 檔案 manifest.json 包含該規則產生的庫存檔案細節。 該檔案名稱為 <ruleName>-manifest.json。 此檔案同時記錄該規則的定義及通往該規則庫存的路徑。 以下 JSON 顯示一個範例 manifest.json 檔案的內容。

    {
    "destinationContainer" : "inventory-destination-container",
    "endpoint" : "https://testaccount.blob.core.windows.net",
    "files" : [
      {
        "blob" : "2021/05/26/13-25-36/Rule_1/Rule_1.csv",
        "size" : 12710092
      }
    ],
    "inventoryCompletionTime" : "2021-05-26T13:35:56Z",
    "inventoryStartTime" : "2021-05-26T13:25:36Z",
    "ruleDefinition" : {
      "filters" : {
        "blobTypes" : [ "blockBlob" ],
        "includeBlobVersions" : false,
        "includeSnapshots" : false,
        "prefixMatch" : [ "penner-test-container-100003" ]
      },
      "format" : "csv",
      "objectType" : "blob",
      "schedule" : "daily",
      "schemaFields" : [
        "Name",
        "Creation-Time",
        "BlobType",
        "Content-Length",
        "LastAccessTime",
        "Last-Modified",
        "Metadata",
        "AccessTier"
      ]
    },
    "ruleName" : "Rule_1",
    "status" : "Succeeded",
    "summary" : {
      "objectCount" : 110000,
      "totalObjectSize" : 23789775
    },
    "version" : "1.0"
    }
    

    此檔案會在執行開始時建立。 此檔案的 status 欄位會設定為 Pending,直到執行完成為止。 執行完成後,此欄位會被設定為完成狀態(例如: Succeeded 或 Failed)。

定價和帳務

庫存價格是根據你在帳單期間掃描的膠塊和容器數量來計算的。 Azure Blob 儲存體定價頁面會顯示每掃描一百萬個物件的價格。 例如,如果掃描一百萬個物件的價格是 $0.003、您的帳戶包含三百萬個物件,而您在一個月內產生四份報表,則您的帳單會是 4 * 3 * $0.003 = $0.036。

建立庫存檔案後,儲存、讀取及寫入庫存產生檔案的標準資料儲存與作業費用會額外增加。

如果某條規則包含的前綴與任何其他規則的前綴重疊,則同一個 Blob 可能會出現在多份庫存報告中。 在這種情況下,你要為這兩個情況付費。 例如,假設 prefixMatch 規則的元素設定為 ["inventory-blob-1", "inventory-blob-2"] ,而另一個規則的 prefixMatch 元素設定為 ["inventory-blob-10", "inventory-blob-20"]。 名為 inventory-blob-200 的物件會出現在這兩個清查報表中。

即使你將 includeBlobVersions 和 includeSnapshots 篩選器設為 false,blob 的快照和版本仍會列入計費。 這些篩選值不會影響計費。 您只能使用它們來篩選報表中顯示的內容。

如需 Azure 儲存體 Blob 庫存定價的詳細資訊,請參閱 Azure Blob 儲存體定價。

功能支援

啟用 Data Lake Storage Gen2、網路檔案系統 (NFS) 3.0 通訊協定,或 SSH 檔案傳輸通訊協定 (SFTP),可能會影響到此功能的支援。 如果您已啟用上述任何功能,請參閱 Azure 儲存體帳戶中的 Blob 儲存體功能支援,以評估此功能的支援。

已知問題與限制

本節說明 Azure 儲存體 blob 清查功能的限制和已知問題。

庫存報告的物件數量和資料大小不應該與帳單比較

庫存報告不包含元資料、系統日誌和屬性,所以不要把它和儲存帳號的帳單物件數量和資料大小做比較。

在某些情況下,庫存工作完成時間會比較長

在以下情況下,盤點作業可能會花更長時間:

  • 你會新增大量新資料。

  • 你第一次執行一條規則或一套規則。

    首次盤點作業可能會比後續執行花費更長時間。

  • 清查作業會在已啟用階層式命名空間的帳戶中處理大量資料。

    對於擁有數億個 blob 的階層式命名空間帳戶,庫存作業可能需要超過一天才能完成。 有時,清查作業會失敗且不會建立清查檔案。 如果作業未順利完成,請檢查後續的作業,查看其是否已完成,然後再聯繫支援人員。

  • 無法追溯性地產生特定日期的報表。

清查作業無法將報表寫入具有物件複寫原則的容器

物件複寫原則可以防止清查作業將清查報表寫入目的地容器。 其他情況則可能將報告歸檔,或在部分完成時使報告變為不可更改,這可能導致庫存作業失敗。

庫存與不可變儲存

如果帳戶啟用了版本層級不可變性的支援,或你在庫存政策中定義的目的地容器啟用了版本層級不可變性,你就無法在該帳戶中設定庫存政策。

報告可能會排除具有階層式命名空間的帳戶中已虛刪除的 Blob

如果你在啟用軟刪除時刪除容器或目錄,服務會標記該容器及其所有內容為軟刪除。 然而,只有容器或目錄(以零長度的 blob 形式報告)會出現在庫存報告中。 即使您將原則的 includeDeleted 欄位設為 true,報告也不會包含已虛刪除的子 Blob。 這種行為可能會在 Azure 入口網站的容量指標與庫存報告之間產生差異。

只有你明確刪除的 blob 會出現在報告中。 若要取得所有已軟刪除 blob(該目錄及其所有子 blob)的完整列表,工作負載應先刪除目錄中的每個 blob,再刪除目錄本身。

處理 Blob 清查中的重複項目

Blob Inventory 採用分散式系統運作,這表示在極少數情況下,報告中可能會出現重複的 blob 條目。

如果您的使用案例需要在對庫存報告進行後續處理時取得唯一的 blob 項目,請使用 Name 欄位以僅傳回唯一的 blob。

如果你的報告包含 blob 版本,請同時使用 Name 和 Version ID 欄位,以識別並回傳唯一的 blob 和版本。

下一步