使用匯出功能重複擷取大型成本資料集

本文協助您從成本管理透過匯出來定期匯出大量資料。 建議您使用匯出來擷取未彙總成本資料。 特別是當使用量檔案太大,而無法使用成本詳細資料 API 可靠地進行呼叫和下載時。 匯出的資料會放在您選擇的 Azure 儲存體帳戶中。 您可以將資料從該位置載入到您自己的系統中,並視需要加以分析。 若要在 Azure 入口網站中設定匯出功能,請參閱匯出資料

如果您想要將各種範圍的匯出自動化,下一節中的範例 API 要求是很好的起點。 您可以使用匯出 API 來將自動匯出建立為一般環境設定的一部分。 自動匯出有助於確保您擁有所需的資料。 當您擴充 Azure 使用量時,則可以在自己的組織系統中使用。

一般匯出設定

在建立第一個匯出之前,請考慮您的案例以及為了實現此案例所需要的設定選項。 請考慮下列匯出選項:

  • 週期 - 決定匯出作業的執行頻率,以及何時要將檔案放在您的 Azure 儲存體帳戶中。 可選擇 [每天]、[每週] 和 [每月]。 請嘗試設定您的週期,使其符合貴組織內部系統所使用的資料匯入作業。
  • 週期期間 - 決定匯出保持有效的時間長度。 檔案只會在週期期間內匯出。
  • 時間範圍 - 決定匯出在指定的執行時所產生的資料量。 常見的選項為 MonthToDate 和 WeekToDate。
  • 開始日期 - 設定您想要的匯出排程開始時間。 系統會根據您的週期,在開始日期和之後的時間建立匯出。
  • 類型 - 有三種匯出類型:
    • ActualCost - 顯示指定期間所產生的總使用量和成本,並在帳單上顯示。
    • AmortizedCost - 顯示指定期間的總使用量和成本,並將分攤套用至適用的保留購買成本。
    • 使用量 - 在 2020 年 7 月 20 日之前建立的匯出全都是「使用量」類型。 請將所有已排程的匯出更新為 ActualCost 或 AmortizedCost。
  • 資料行 - 定義您想要包含在匯出檔案中的資料欄位。 其會對應至成本詳細資料 API 中所提供的欄位。
  • 資料分割 - 如果您有大型資料集,而且想將其分成多個檔案,請將選項設定為 true。 這可讓資料擷取更簡單快速。 如需關於資料分割的詳細資訊,請參閱大型資料集的檔案分割

針對訂用帳戶建立每日的月初至今匯出

要求 URL:PUT https://management.azure.com/{scope}/providers/Microsoft.CostManagement/exports/{exportName}?api-version=2020-06-01

{
  "properties": {
    "schedule": {
      "status": "Active",
      "recurrence": "Daily",
      "recurrencePeriod": {
        "from": "2020-06-01T00:00:00Z",
        "to": "2020-10-31T00:00:00Z"
      }
    },
    "format": "Csv",
    "deliveryInfo": {
      "destination": {
        "resourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MYDEVTESTRG/providers/Microsoft.Storage/storageAccounts/{yourStorageAccount} ",
        "container": "{yourContainer}",
        "rootFolderPath": "{yourDirectory}"
      }
    },
    "definition": {
      "type": "ActualCost",
      "timeframe": "MonthToDate",
      "dataSet": {
        "granularity": "Daily",
        "configuration": {
          "columns": [
            "Date",
            "MeterId",
            "ResourceId",
            "ResourceLocation",
            "Quantity"
          ]
        }
      }
    }
}

複製大型 Azure 儲存體 Blob

您可以使用成本管理,將 Azure 使用量詳細資料的排程匯出到 Azure 儲存體帳戶作為 Blob。 產生的 Blob 大小可能超過 GB。 成本管理小組與 Azure 儲存體小組合作,以測試複製大型 Azure 儲存體 Blob。 結果記載於以下區段中。 當您將儲存體 Blob 從一個 Azure 區域複製到另一個區域時,可能會有類似的結果。

為了測試其效能,小組已將 Blob 從美國西部區域的儲存體帳戶傳輸到相同和其他區域中的儲存體帳戶。 小組測量的速度,範圍從相同區域中每秒 2 GB 到東南亞區域中儲存體帳戶每秒 150 MB。

測試組態

為了測量 Blob 傳輸速率,小組建立了簡單的 .NET 主控台應用程式,以透過 NuGet 參考最新版 (v2.0.1) Azure 資料移動程式庫 (DLM)。 DLM 是由 Azure 儲存體小組提供的 SDK,可讓您以程式設計方式存取其傳輸服務。 然後,他們會在多個區域中建立標準 V2 儲存體帳戶,並使用美國西部作為來源區域。 他們會在儲存體帳戶中填入容器,其中每個容器會保留 10 個 2 GB 區塊 Blob。 他們會使用 DLM 的 TransferManager.CopyDirectoryAsync() 方法搭配 CopyMethod.ServiceSideSyncCopy 選項,將容器複製到其他儲存體帳戶。 測試是在以 12 個核心和 1 GbE 網路執行 Windows 10 的電腦上執行。

使用的應用程式設定:

  • TransferManager.Configurations.ParallelOperations = Environment.ProcessorCount * 32。 小組發現設定對整體輸送量的影響最大。 32 的值乘以核心數目可以為測試用戶端提供最佳輸送量。
  • ServicePointManager.DefaultConnectionLimit = int.MaxValue。 將其設定為最大值,可有效地將傳輸平行處理原則的完整控制權傳遞給上述 ParallelOperations 設定。
  • TransferManager.Configurations.BlockSize = 4,194,304。 對於傳輸速率有些微的 4 MB 影響,證明最適合用於測試。

如需詳細資訊和範例程式碼,請參閱後續步驟一節中的連結。

測試結果

測試編號 至區域 Blob 時間 (秒) MB/s 註解
1 WestUS 2 GB x 10 10 2,000
2 WestUS2 2 GB x 10 33 600
3 EastUS 2 GB x 10 67 300
4 EastUS 2 GB x 10 x 4 99 200 使用 8 個儲存體帳戶的 4 個平行傳輸:每個傳輸平均 4 個西部到 4 個東部
6 EastUS 2 GB x 10 x 4 92 870 4 個平行傳輸從 1 個儲存體帳戶到另一個儲存體帳戶
5 EastUS 2G x 10 x 8 148 135 使用 8 個儲存體帳戶的 8 個平行傳輸:每個傳輸平均 4 個西部到 4x2 個東部
7 東南亞 2 GB x 10 133 150
8 東南亞 2 GB x 10 x 4 444 180 4 個平行傳輸從 1 個儲存體帳戶到另一個儲存體帳戶

同步傳輸特性

以下是與 DML 搭配使用之服務端同步傳輸的一些特性,與其使用相關:

  • DML 可以傳輸單一 Blob 或目錄。 針對目錄傳輸,您可以使用搜尋模式來比對 Blob 前置詞。
  • 區塊 Blob 傳輸會平行進行。 所有作業都會在傳輸程序結束時完成。 個別 Blob 區塊會平行傳輸。
  • 傳輸會在用戶端上以非同步方式執行。 傳輸狀態可透過回呼方法取得,該方法可以在 TransferContext 物件中定義。
  • 傳輸會在進度期間建立檢查點,並公開 TransferCheckpoint 物件。 物件代表透過 TransferCoNtext 物件的最新檢查點。 如果在取消/中止傳輸之前儲存 TransferCheckpoint,則最多可以在七天內從檢查點繼續傳輸。 傳輸可以從任何檢查點繼續,而不只是最新的檢查點。
  • 如果傳輸用戶端程序已終止並重新啟動,而不實作檢查點功能。
    • 在完成任何 Blob 傳輸之前,傳輸會重新啟動。
    • 完成部分 Blob 之後,傳輸只會針對不完整的 Blob 重新啟動。
  • 暫停用戶端執行會暫停傳輸。
  • Blob 傳輸功能會從暫時性失敗擷取用戶端。 例如,儲存體帳戶節流通常不會造成傳輸失敗,但是會讓傳輸變慢。
  • 服務端傳輸對於 CPU 和記憶體、某些網路頻寬和連線具有低用戶端資源使用量。

非同步傳輸特性

您可以叫用 TransferManager.CopyDirectoryAsync() 方法搭配 CopyMethod.ServiceSideAsyncCopy 選項。 其運作方式類似於用戶端觀點的同步傳輸機制,但是作業有下列差異:

  • 傳輸速率比對等的同步傳輸慢很多 (通常是 10 MB/秒以下)。
  • 即使用戶端程序終止,傳輸仍會繼續。
  • 雖然支援檢查點,但是使用 TransferCheckpoint 繼續傳輸不會在檢查點時間繼續,而是在傳輸的目前狀態繼續。

測試摘要

Azure Blob 儲存體使用其服務端同步傳輸功能支援高全域傳輸速率。 使用 .NET 應用程式中的功能就是直接使用資料移動程式庫。 成本管理可以在一小時內將數百 GB 的資料可靠地複製到任何位置的儲存體帳戶。

下一步