Recuperare in modo ricorrente set di dati sui costi di grandi dimensioni con Esportazioni

Questo articolo descrive come esportare regolarmente grandi quantità di dati con esportazioni da Gestione dei costi. L'esportazione è la modalità consigliata per recuperare i dati dei costi non aggregati. Soprattutto quando i file dei dati di utilizzo sono troppo grandi per essere richiamati e scaricati in modo affidabile usando l'API Dettagli dei costi. I dati esportati vengono inseriti nell'account di archiviazione di Azure scelto. Da qui è possibile caricarli nei propri sistemi e analizzarli in base alle esigenze. Per configurare le esportazioni nel portale di Azure, vedere Esportare dati.

Se si vogliono automatizzare le esportazioni in diversi ambiti, la richiesta di API di esempio nella sezione successiva è un buon punto di partenza. È possibile usare l'API Esportazioni per creare esportazioni automatiche nell'ambito della configurazione generale dell'ambiente. Le esportazioni automatiche consentono di ottenere i dati necessari. È possibile usarle nei sistemi della propria organizzazione man mano che si espande l'utilizzo di Azure.

Configurazioni di esportazione comuni

Prima di creare la prima esportazione, considerare lo scenario e le opzioni di configurazione necessarie per abilitarlo. Considerare le opzioni di esportazione seguenti:

  • Ricorrenza: determina la frequenza con cui viene eseguito il processo di esportazione e quando si inserisce un file nell'account di archiviazione di Azure. Scegliere tra Ogni giorno, Ogni settimana e Ogni mese. Provare a configurare la ricorrenza in modo che corrisponda a quella dei processi di importazione dei dati usati dal sistema interno dell'organizzazione.
  • Periodo di ricorrenza: determina per quanto tempo rimane valida l'esportazione. I file vengono esportati solo durante il periodo di ricorrenza.
  • Intervallo di tempo: determina la quantità di dati generati dall'esportazione in una determinata esecuzione. Le opzioni comuni sono MonthToDate e WeekToDate.
  • StartDate: configura quando avviare la pianificazione dell'esportazione. L'esportazione viene creata in base alla data di inizio indicata in StartDate e successivamente in base alla ricorrenza.
  • Tipo: sono disponibili tre tipi di esportazione:
    • ActualCost: mostra l'utilizzo totale e i costi per il periodo specificato, man mano che vengono accumulati e visualizzati nella fattura.
    • AmortizedCost: mostra l'utilizzo totale e i costi per il periodo specificato, con ammortamento applicato ai costi di acquisto della prenotazione applicabili.
    • Usage: tutte le esportazioni create prima del 20 luglio 2020 sono di tipo Usage. Aggiornare tutte le esportazioni pianificate come ActualCost o AmortizedCost.
  • Colonne: definisce i campi dati da includere nel file di esportazione. Corrispondono ai campi disponibili nell'API Dettagli dei costi.
  • Partizionamento: impostare l'opzione su true se si dispone di un set di dati di grandi dimensioni e si vuole suddividerlo in più file. Rende l'inserimento dei dati più veloce e più semplice. Per altre informazioni sul partizionamento, vedere Partizionamento di file per set di dati di grandi dimensioni.

Creare un'esportazione giornaliera da inizio mese per una sottoscrizione

URL richiesta: 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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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"
          ]
        }
      }
    }
}

Copiare BLOB di Archiviazione di Azure di grandi dimensioni

È possibile usare Gestione dei costi per pianificare le esportazioni dei dettagli di utilizzo di Azure in account di Archiviazione di Azure come BLOB. Le dimensioni dei BLOB risultanti potrebbero essere di svariati gigabyte. Il team di Gestione dei costi ha collaborato con il team di Archiviazione di Azure per testare il processo di copia di BLOB di Archiviazione di Azure di grandi dimensioni. Questi risultati sono documentati nelle sezioni seguenti: È possibile prevedere risultati simili durante la copia dei BLOB di archiviazione da un'area di Azure a un'altra.

Il team ha eseguito un test delle prestazioni trasferendo i BLOB dagli account di archiviazione situati nell'area Stati Uniti occidentali alla stessa area e ad altre aree. Il team ha misurato velocità che vanno da 2 GB al secondo nella stessa area a 150 MB al secondo per gli account di archiviazione nell'area Asia sud-orientale.

configurazione di test

Per misurare la velocità di trasferimento dei BLOB, il team ha creato una semplice applicazione console .NET che fa riferimento alla versione più recente (v2.0.1) della libreria di spostamento dati di Azure (DLM) tramite NuGet. DLM è un SDK fornito dal team di Archiviazione di Azure che consente l'accesso a livello di codice ai servizi di trasferimento. Il team ha quindi creato account di archiviazione V2 Standard in più aree e usato gli Stati Uniti occidentali come area di origine. Gli account di archiviazione sono stati popolati con contenitori, ciascuno contenente dieci BLOB in blocchi da 2 GB. I contenitori sono stati copiati in altri account di archiviazione usando il metodo DLM TransferManager.CopyDirectoryAsync() con l'opzione CopyMethod.ServiceSideSyncCopy. I test sono stati eseguiti in un computer che esegue Windows 10 con 12 core e una rete 1 GbE.

Impostazioni dell'applicazione usate:

  • TransferManager.Configurations.ParallelOperations = Environment.ProcessorCount * 32. Il team ha rilevato che questa impostazione ha avuto l'impatto sulla velocità effettiva complessiva, ovvero un valore pari a 32 volte il numero di core ha fornito la velocità effettiva migliore per il client di test.
  • ServicePointManager.DefaultConnectionLimit = int.MaxValue. Impostandolo su un valore massimo passa in modo efficace il controllo completo del parallelismo di trasferimento all'impostazione ParallelOperations indicata in precedenza.
  • TransferManager.Configurations.BlockSize = 4,194,304. Questa impostazione ha avuto un certo effetto sulla velocità di trasferimento con 4 MB, dimostrando di essere l'impostazione migliore per i test.

Per altre informazioni e codice di esempio, vedere i collegamenti nella sezione Contenuto correlato.

Risultati del test

Numero di test Regione di destinazione BLOB Tempo (sec) MB/s Commenti
1 WestUS 2 GB x 10 10 2,000
2 Stati Uniti occidentali 2 2 GB x 10 33 600
3 EastUS 2 GB x 10 67 300
4 EastUS 2 GB x 10 x 4 99 200 Quattro trasferimenti paralleli con otto account di archiviazione: da quattro a quattro medie orientali per trasferimento
6 EastUS 2 GB x 10 x 4 92 870 Quattro trasferimenti paralleli da un account di archiviazione a un altro
5 EastUS 2 GB x 10 x 8 148 135 Otto trasferimenti paralleli che usano otto account di archiviazione: da quattro a quattro medie orientali per trasferimento
7 SE Asia 2 GB x 10 133 150
8 SE Asia 2 GB x 10 x 4 444 180 Quattro trasferimenti paralleli da un account di archiviazione a un altro

Caratteristiche di trasferimento della sincronizzazione

Ecco alcune delle caratteristiche del trasferimento di sincronizzazione sul lato servizio usato con DML rilevante per l'uso:

  • DML può trasferire un singolo BLOB o una directory. Per il trasferimento della directory, è possibile usare un criterio di ricerca per trovare una corrispondenza con il prefisso BLOB.
  • I trasferimenti di BLOB in blocchi vengono eseguiti in parallelo. L'intera operazione viene completata verso la fine del processo di trasferimento. I singoli blocchi di BLOB vengono trasferiti in parallelo.
  • Il trasferimento viene eseguito in modo asincrono nel client. Lo stato del trasferimento è disponibile periodicamente tramite un callback a un metodo che può essere definito in un oggetto TransferContext.
  • Durante l'esecuzione il trasferimento crea checkpoint ed espone un oggetto TransferCheckpoint. L'oggetto rappresenta il checkpoint più recente tramite l'oggetto TransferContext. Se l'oggetto transferCheckpoint viene salvato prima dell'annullamento o dell'interruzione di un trasferimento, il trasferimento può essere ripreso dal checkpoint per un massimo di sette giorni. Il trasferimento può essere ripreso da qualsiasi checkpoint, non solo da quello più recente.
  • Se il processo client di trasferimento viene terminato e riavviato senza implementare la funzionalità di checkpoint:
    • Prima del completamento dei trasferimenti DI BLOB, il trasferimento viene riavviato.
    • Al termine di alcuni BLOB, il trasferimento viene riavviato solo per i BLOB incompleti.
  • La sospensione dell'esecuzione client sospende i trasferimenti.
  • La funzionalità di trasferimento dei BLOB astrae il client da errori temporanei. Ad esempio, la limitazione dell'account di archiviazione in genere non causa un errore di trasferimento, ma rallenta il trasferimento.
  • I trasferimenti lato servizio hanno un utilizzo ridotto a livello di risorse client per CPU e memoria, larghezza di banda di rete e connessioni.

Caratteristiche di trasferimento asincrono

È possibile richiamare il metodo TransferManager.CopyDirectoryAsync() con l'opzione CopyMethod.ServiceSideAsyncCopy. Funziona in modo simile al meccanismo di trasferimento della sincronizzazione dal punto di vista del client, ma con le differenze seguenti:

  • Le velocità di trasferimento sono più lente rispetto al trasferimento di sincronizzazione equivalente (in genere 10 MB/s o inferiore).
  • Il trasferimento continua anche se termina il processo client.
  • Anche se i checkpoint sono supportati, la ripresa di un trasferimento tramite TransferCheckpoint non riprende al momento del checkpoint, ma allo stato corrente del trasferimento.

Riepilogo del test

Archiviazione BLOB di Azure supporta velocità di trasferimento globali elevate con la funzionalità di trasferimento della sincronizzazione lato servizio. L'uso della funzionalità nelle applicazioni .NET è semplice grazie alla libreria di spostamento dati. È possibile che le esportazioni di Gestione dei costi copino in modo affidabile centinaia di gigabyte di dati in un account di archiviazione in una posizione qualsiasi in meno di un'ora.