Azure 儲存體 blob 清查
Azure 儲存體 Blob 清查會提供儲存體帳戶中容器、Blob、Blob 版本和快照集的清單,以及其相關聯的屬性。 它會每日或每週產生逗點分隔值 (CSV) 或 Apache Parquet 格式的輸出報表。 您可以使用報表來稽核儲存體帳戶內容的保留、法律保留或加密狀態,或是使用它來了解資料的總大小、存留期、階層散發或其他資料屬性。 您也可以透過使用 Blob 清查作為清單容器和清單 Blob API 中排定的自動化,使用 Blob 清查來簡化商務工作流程或加快資料處理作業。 Blob 清查規則可讓您依 Blob 類型、前置詞,或者選取要包含在報表中的 Blob 屬性,來篩選報表的內容。
Azure 儲存體 Blob 清查適用於下列類型的儲存體帳戶:
- 標準一般用途 v2
- 進階區塊 Blob 儲存體
- Blob 儲存體
清查功能
下列清單描述 Azure 儲存體 blob 清查目前版本中可用的功能和功能。
Blob 和容器的清查報表
您可以產生 blob 和容器的清查報告。 Blob 的報表可以包含基底 Blob、快照集、內容長度、Blob 版本及其相關聯的屬性,例如建立時間、上次修改時間。 空白容器不會列在 Blob 清查報表中。 容器的報告會描述容器及其相關聯的屬性,例如永久性原則狀態、合法保存狀態。
自訂架構
您可以選擇要顯示在報表中的欄位。 從支援的欄位清單中選擇。 本文稍後會顯示該清單。
CSV 和 Apache Parquet 輸出格式
您可以使用 CSV 或 Apache Parquet 輸出格式來產生清查報告。
每個清查報表的資訊清單檔案和 Azure 事件方格事件
每份清查報告都會產生資訊清單文件和 Azure 事件方格事件。 本文稍後將說明這些項目。
啟用清查報表
將具有一或多個規則的原則新增至您的儲存體帳戶,以啟用 blob 清查報表。 如需指引,請參閱啟用 Azure 儲存體 blob 清查報表。
升級清查原則
如果您是現有的 Azure 儲存體 Blob 清查使用者,且已在 2021 年 6 月之前設定清查,您可以透過載入原則來開始使用新功能,然後在進行變更之後將原則儲存回來。 當您重載原則時,原則中的新欄位將會填入預設值。 您可以視需要變更這些值。 此外,也會提供下列兩項功能。
所有規則現在都支援目的地容器,而不是僅支援原則。
資訊清單檔案和 Azure 事件方格事件現在會針對每個規則產生,而不是每個原則。
清查原則
清查報表的設定方式是新增具有一或多個規則的清查原則。 清查原則是 JSON 檔中的一組規則。
{
"enabled": true,
"rules": [
{
"enabled": true,
"name": "inventoryrule1",
"destination": "inventory-destination-container",
"definition": {. . .}
},
{
"enabled": true,
"name": "inventoryrule2",
"destination": "inventory-destination-container",
"definition": {. . .}
}]
}
在 Azure 入口網站的 [ Blob 清查] 區段中選取 [程式代碼] 索引標籤,以查看清查原則的 JSON。
參數名稱 | 參數類型 | 備註 | 是必要的嗎? |
---|---|---|---|
已啟用 | boolean | 用來停用整個原則。 當設為 true時,[已啟用規則層級] 欄位會覆寫此參數。 停用時,將會停用所有規則的清查。 | Yes |
規則 | 規則物件的陣列 | 每個原則至少都需要一項規則。 每個原則最多可支援 100 個規則。 | Yes |
清查規則
規則會捕捉用來產生清查報表的篩選準則和輸出參數。 每個規則都會建立清查報告。 規則可以有重迭的首碼。 Blob 可以根據規則定義出現在多個清查中。
原則內的每個規則都有數個參數:
參數名稱 | 參數類型 | 備註 | 是必要的嗎? |
---|---|---|---|
NAME | 字串 | 規則名稱最多可包含 256 個英數位元。 名稱在原則中必須是唯一的。 | Yes |
已啟用 | boolean | 允許啟用或停用規則的旗標。 預設值為 true。 | Yes |
定義 | JSON 清查規則定義 | 每個定義都是由一組規則篩選器所組成。 | Yes |
目的地 | 字串 | 會產生所有清查檔案的目的地容器。 目的地容器必須已經存在。 |
全域 Blob 清查啟用 旗標優先於規則中的 enabled 參數。
規則定義
參數名稱 | 參數類型 | 備註 | 必要 |
---|---|---|---|
篩選 | json | 篩選準則會決定 blob 或容器是否為清查的一部分。 | Yes |
format | string | 決定清查檔案的輸出。 有效的值是 csv (CSV 格式) 和 parquet (Apache Parquet 格式)。 |
Yes |
objectType | string | 表示這是否為 blob 或容器的清查規則。 有效值為 blob 和 container 。 |
Yes |
排程 | string | 要執行此規則的排程。 有效值為 daily 和 weekly 。 |
Yes |
schemaFields | JSON 陣列 | 要納入清查一部分的架構欄位清單。 | Yes |
規則篩選
有幾個篩選準則可用來自訂 blob 清查報表:
篩選名稱 | 篩選類型 | 備註 | 是必要的嗎? |
---|---|---|---|
blobTypes | 預先定義的列舉值陣列。 | blockBlob 有效值為和 appendBlob 適用於已啟用階層命名空間的帳戶,以及 blockBlob 其他帳戶的、 appendBlob pageBlob 和。 此欄位不適用於容器上的清查,(objectType:container )。 |
Yes |
creationTime | 數字 | 指定 Blob 必須在多久之前建立的天數。 例如,3 的值只會包含過去 3 天內建立的 Blob。 |
No |
prefixMatch | 要比對的前置詞最多 10 個字串的陣列。 | 如果您未定義 prefixMatch 或提供空的前置詞,則規則會套用至儲存體帳戶內的所有 Blob。 前置詞必須是容器名稱前置詞或容器名稱。 例如,container 、container1/foo 。 |
No |
excludePrefix | 要排除的前置詞最多 10 個字串的陣列。 | 指定要從清查報表中排除的 Blob 路徑。 excludePrefix 必須是容器名稱前置詞或容器名稱。 空白的 excludePrefix 表示會列出名稱符合任何 prefixMatch 字串的所有 Blob。 如果您想要包含特定前置詞,但從中排除某些特定子集,則可以使用 excludePrefix 篩選條件。 例如,如果您想要在 container-a 下包含除了資料夾 container-a/folder 下項目以外的所有 Blob,則 prefixMatch 應設定為 container-a ,而 excludePrefix 應設定為 container-a/folder 。 |
No |
includeSnapshots | boolean | 指定清查是否應包含快照集。 預設值為 false 。 此欄位不適用於容器上的清查,(objectType:container )。 |
No |
includeBlobVersions | boolean | 指定清查是否應包含 Blob 版本。 預設值為 false 。 此欄位不適用於容器上的清查,(objectType:container )。 |
No |
includeDeleted | boolean | 指定清查是否應包含已刪除的 Blob。 預設值為 false 。 在具有階層命名空間的帳戶中,此篩選包含資料夾,也包含處於虛刪除狀態的 Blob。 只有明確刪除的資料夾和檔案 (Blob) 才會出現在報表中。 因為刪除父資料夾而遭到刪除的子資料夾和檔案不會包含在報表中。 |
No |
在 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 |
---|---|---|
名稱 (必要) | ||
建立時間 | ||
Last-Modified | ||
LastAccessTime1 | ||
ETag | ||
Content-Length | ||
內容-類型 | ||
Content-Encoding | ||
Content-Language | ||
Content-CRC64 | ||
Content-MD5 | ||
Cache-Control | ||
Cache-Disposition | ||
BlobType | ||
AccessTier | ||
AccessTierChangeTime | ||
LeaseStatus | ||
LeaseState | ||
ServerEncrypted | ||
CustomerProvidedKeySHA256 | ||
中繼資料 | ||
到期時間 | ||
hdi_isfolder | ||
擁有者 | ||
群組 | ||
權限 | ||
Acl | ||
當您選擇在報表中包含快照集時,可以使用和要求快照 | ||
已刪除 | ||
DeletedId | ||
DeletedTime | ||
RemainingRetentionDays | ||
當您選擇在報表中包含 Blob 版本時,可以使用和需要 VersionId | ||
當您選擇在報表中包含 Blob 版本時,可以使用 IsCurrentVersion | ||
TagCount | ||
標籤 | ||
CopyId | ||
CopySource | ||
CopyStatus | ||
CopyProgress | ||
CopyCompletionTime | ||
CopyStatusDescription | ||
ImmutabilityPolicyUntilDate | ||
ImmutabilityPolicyMode | ||
LegalHold | ||
RehydratePriority | ||
ArchiveStatus | ||
EncryptionScope | ||
IncrementalCopy | ||
x-ms-blob-sequence-number |
1 預設為停用。 選擇性地啟用存取時間追蹤。
容器清查支援的自訂架構欄位
注意
針對已啟用階層命名空間功能的帳戶,Data Lake Storage 資料行會顯示支援的項目。
欄位 | Blob 儲存體 (預設支援) | Data Lake Storage |
---|---|---|
名稱 (必要) | ||
Last-Modified | ||
ETag | ||
LeaseStatus | ||
LeaseState | ||
LeaseDuration | ||
中繼資料 | ||
PublicAccess | ||
DefaultEncryptionScope | ||
DenyEncryptionScopeOverride | ||
HasImmutabilityPolicy | ||
HasLegalHold | ||
ImmutableStorageWithVersioningEnabled | ||
Deleted (僅只選取 [包含刪除的容器] 時,才會出現) | ||
Version (僅只選取 [包含刪除的容器] 時,才會出現) | ||
DeletedTime (僅當選取 [包含刪除的容器] 時,才會顯示) | ||
RemainingRetentionDays (僅當選取 [包含刪除的容器] 時,才會顯示) |
清查執行
如果您將規則設定為每日執行,則其將排定為每日執行。 如果您將規則設定為每週執行,則其將在每週星期日 UTC 時間執行。
大部分的清查都會在 24 小時內完成。 針對已啟用階層命名空間的帳戶,執行可能需要兩天的時間,而且視所處理的檔案數目而定,執行可能不會在這兩天結束時完成。 執行可在失敗前完成的時間上限為六天。
執行不會重疊,因此執行必須先完成,才能開始執行相同規則中的另一個執行。 例如,如果某個規則排定為每日執行,但該相同規則前一天的執行仍在進行,則當天將不會起始新的執行。 排定為每週執行的規則將在每個星期日執行,而不論先前的執行成功還是失敗。 如果執行未順利完成,請檢查後續的執行,查看其是否已完成,然後再聯繫支援人員。 執行的效能可能有所不同,因此,如果執行未完成,則可能會執行後續的執行。
清查原則會完整讀取或寫入。 不支援部分更新。 清查規則每日均會進行評估。 因此,如果您變更規則的定義,但當天已評估過原則的規則,則您的更新將等到隔天才會進行評估。
清查已完成事件
當規則的清查執行完成時,就會產生此 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 | string | 排定清查規則的時間。 |
accountName | string | 儲存體帳戶名稱。 |
ruleName | string | 規則名稱。 |
policyRunStatus | string | 清查執行的狀態。 可能的值是 Succeeded 、PartiallySucceeded 、Failed 。 |
policyRunStatusMessage | string | 清查執行的狀態訊息。 |
policyRunId | string | 清查執行的原則執行識別碼。 |
manifestBlobUrl | string | 清查執行的資訊清單檔案的 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 格式的檔案。 每個這類檔案都包含相符的物件和其中繼資料。
重要
從 2023 年 10 月開始,如果物件計數很大,清查執行將會產生多個檔案。 若要深入了解,請參閱多個清查檔案輸出常見問題集 (部分機器翻譯)。
Apache Parquet 格式的報表會以下列格式呈現日期:
timestamp_millis [number of milliseconds since 1970-01-01 00:00:00 UTC
]。 若為 CSV 格式的檔案,第一個資料列一律為架構資料列。 下圖顯示在 Microsoft Excel 中開啟的清查 CSV 檔案。重要
清查檔案中顯示的 blob 路徑可能不會以任何特定順序出現。
總和檢查碼檔案:總和檢查碼檔案包含資訊清單 JSON 檔案內容的 MD5 總和檢查碼。 總和檢查碼檔案的名稱是
<ruleName>-manifest.checksum
。 產生總和檢查碼檔案會標示清查規則執行的完成。資訊清單檔: Manifest. json 檔案包含為該規則產生的清查檔案 () 的詳細資料。 該檔案名稱為
<ruleName>-manifest.json
。 這個檔案也會捕捉使用者提供的規則定義,以及該規則的清查路徑。 下列 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
)。
定價和帳務
清查的定價取決於計費期間所掃描的 blob 和容器數目。 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
的物件會出現在這兩個清查報表中。
即使您已將和 includeSnapshots
篩選設定 includeVersions
為 false
,blob 的快照集和版本也會計入帳單。 這些篩選值不會影響計費。 您只能使用它們來篩選報表中顯示的內容。
如需 Azure 儲存體 blob 清查定價的詳細資訊,請參閱Azure Blob 儲存體定價。
功能支援
啟用 Data Lake Storage Gen2、網路檔案系統 (NFS) 3.0 通訊協定,或 SSH 檔案傳輸通訊協定 (SFTP),可能會影響到此功能的支援。 如果您已啟用上述任何功能,請參閱 Azure 儲存體帳戶中的 Blob 儲存體功能支援,以評估此功能的支援。
已知問題與限制
本節說明 Azure 儲存體 blob 清查功能的限制和已知問題。
清查報表物件計數和數據大小不應與計費進行比較
清查報表不包含元數據、系統記錄和屬性,因此不應與記憶體帳戶的計費物件計數和數據大小進行比較。
在某些情況下,清查作業需要較長的時間才能完成
在下列情況下,清查作業可能需要較長的時間:
新增了大量的新資料
第一次執行規則或規則集
相較於後續的清查執行,該清查執行可能需要較長的時間才能執行。
清查執行正在已啟用階層命名空間的帳戶中處理大量資料
針對已啟用階層命名空間且具有數億個 Blob 的帳戶,清查作業可能需要一天以上的時間才能完成。 有時,清查作業會失敗且不會建立清查檔案。 如果作業未順利完成,請檢查後續的作業,查看其是否已完成,然後再聯繫支援人員。
無法追溯性地產生特定日期的報表。
清查作業無法將報表寫入具有物件複寫原則的容器
物件複寫原則可以防止清查作業將清查報表寫入目的地容器。 某些其他案例可以封存報表,或在報表部分完成時使其變成不可變,這可能導致清查作業失敗。
清查和不可變儲存體
如果在帳戶上啟用對版本層級不變性的支援,或者針對在清查原則中定義的目的地容器上啟用對版本層級不變性的支援,則您無法在該帳戶中設定清查原則。
報表可能會排除具有階層命名空間之帳戶中的虛刪除 Blob
如果已啟用虛刪除的容器或目錄遭到刪除,則容器或目錄及其所有內容都會標示為已虛刪除。 不過,即使您將原則的 includeDeleted
欄位設定為 true,只有容器或目錄 (以零長度的 Blob 形式報告) 會出現在清查報告中,而不是該容器或目錄中虛刪除的 Blob。 這可能導致您在 Azure 入口網站中取得的容量計量和清查報表所報告的內容之間有所差異。
只有明確刪除的 Blob 會出現在報表中。 因此,若要取得所有虛刪除的 Blob (目錄和所有子 Blob) 的完整清單,工作負載應該先刪除目錄中的每個 Blob,再刪除目錄本身。