Recuperar grandes conjuntos de dados de custo de modo recorrente com exportações

Este artigo ajuda você a exportar regularmente grandes quantidades de dados com exportações do Gerenciamento de Custos. A exportação é a maneira recomendada para recuperar dados de custos não agregados. Especialmente quando os arquivos de uso são muito grandes para serem chamados e baixados de maneira confiável usando a API Informações de custo. Os dados exportados serão colocados na conta do Armazenamento do Azure que você escolher. Nela, você poderá carregá-los nos próprios sistemas e analisá-los conforme necessário. Para configurar as exportações no portal do Azure, confira Exportar dados.

Caso você deseje automatizar as exportações em vários escopos, a solicitação de API de exemplo da próxima seção será um bom ponto de partida. Use a API de Exportações para criar exportações automáticas como parte da configuração de ambiente geral. As exportações automáticas ajudam a garantir que você tenha os dados de que precisa. Use-os nos próprios sistemas da organização conforme expandir o seu uso do Azure.

Configurações comuns de exportação

Antes de criar sua primeira exportação, considere seu cenário e as opções de configuração necessárias para habilitá-lo. Considere as seguintes opções de exportação:

  • Recorrência: determina com que frequência o trabalho de exportação é executado e quando um arquivo é colocado na sua conta do Armazenamento do Azure. Escolha entre as opções Diária, Semanal e Mensal. Tente configurar sua recorrência para que corresponda aos trabalhos de importação de dados usados pelo sistema interno da sua organização.
  • Período de Recorrência: determina por quanto tempo a exportação permanecerá válida. Os arquivos são exportados somente durante o período de recorrência.
  • Período de Tempo – Determina a quantidade de dados gerados pela exportação em uma determinada execução. As opções comuns são MonthToDate e WeekToDate.
  • StartDate: configura quando você deseja que a agenda de exportação seja iniciada. Uma exportação é criada na StartDate e, posteriormente, com base na Recorrência.
  • Tipo: há três tipos de exportação:
    • ActualCost: mostra o uso total e os custos para o período especificado, conforme eles são acumulados e mostrados na sua fatura.
    • AmortizedCost: mostra o uso total e os custos para o período especificado, com amortização aplicada aos custos de compra de reserva aplicáveis.
    • Usage: todas as exportações criadas antes de 20 de julho de 2020 são do tipo Usage. Atualize todas as exportações agendadas como ActualCost ou AmortizedCost.
  • Colunas: define os campos de dados que você deseja incluir no arquivo de exportação. Elas correspondem aos campos disponíveis na API Informações de custos.
  • Particionamento – defina a opção como “true” se você tiver um conjunto de dados grande e quiser que ele seja dividido em vários arquivos. Isso torna a ingestão de dados mais rápida e fácil. Para obter mais informações, consulte Particionamento de arquivos para grandes conjuntos de dados.

Criar uma exportação diária do mês atual para uma assinatura

URL da solicitação: 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"
          ]
        }
      }
    }
}

Copiar grandes blobs de armazenamento do Azure

Você pode usar o Gerenciamento de Custos para agendar exportações dos detalhes de uso do Azure para suas contas de armazenamento do Azure como blobs. Os tamanhos de blob resultantes podem ter mais de gigabytes de tamanho. A equipe de Gerenciamento de Custos trabalhou com a equipe de Armazenamento do Azure para testar a cópia de grandes blobs de armazenamento. Os resultados estão documentados nas seções a seguir. Você pode esperar ter resultados semelhantes ao copiar blobs de armazenamento de uma região do Azure para outra.

A equipe realizou um teste de desempenho transferindo blobs de contas de armazenamento localizadas na região Oeste dos EUA para a mesma região e para outras regiões. A equipe mediu as velocidades, que variaram de 2 GB por segundo na mesma região a 150 MB por segundo em contas de armazenamento na região do Sudeste da Ásia.

Configuração de teste

Para medir as velocidades de transferência de blobs, a equipe criou um aplicativo de console .NET simples que faz referência à versão mais recente (v 2.0.1) da DLM (Biblioteca de Movimentação de Dados) do Azure via NuGet. A DLM é um SDK fornecido pela equipe de Armazenamento do Microsoft Azure que facilita o acesso programático aos seus serviços de transferência. Eles criaram contas de armazenamento Standard V2 em várias regiões e usaram Oeste dos EUA como a região de origem. Eles preencheram as contas de armazenamento com contêineres, cada um contendo dez blobs de blocos de 2 GB. Depois, copiaram os contêineres para outras contas de armazenamento usando o método TransferManager.CopyDirectoryAsync() do DLM com a opção CopyMethod.ServiceSideSyncCopy. Testes foram conduzidos em um computador que executa o Windows 10 com 12 núcleos e uma rede de 1 GbE.

Configurações de aplicativo usadas:

  • TransferManager.Configurations.ParallelOperations = Environment.ProcessorCount * 32. A equipe descobriu que a configuração tem o maior efeito na taxa de transferência geral. Um valor de 32 vezes o número de núcleos forneceu a melhor taxa de transferência para o cliente de teste.
  • ServicePointManager.DefaultConnectionLimit = int.MaxValue. Configurar como um valor máximo transmite efetivamente o controle total do paralelismo de transferência para a configuração ParallelOperations mencionada anteriormente.
  • TransferManager.Configurations.BlockSize = 4,194,304. Teve algum efeito sobre as taxas de transferência com 4 MB, provando que é melhor para os testes.

Para obter mais informações e código de exemplo, confira os links na seção Conteúdo relacionado.

Resultados do teste

Número do teste Para a região Blobs Tempo (segundos) MB/s Comentários
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 Quatro transferências paralelas usando oito contas de armazenamento: quatro médias oeste para quatro leste por transferência
6 EastUS 2 GB x 10 x 4 92 870 Quatro transferências paralelas de uma conta de armazenamento para outra
5 EastUS 2 GB x 10 x 8 148 135 Oito transferências paralelas usando oito contas de armazenamento: quatro médias oeste para quatro leste por transferência
7 Sudeste da Ásia 2 GB x 10 133 150
8 Sudeste da Ásia 2 GB x 10 x 4 444 180 Quatro transferências paralelas de uma conta de armazenamento para outra

Características da transferência síncrona

Aqui estão algumas das características da transferência de sincronização do lado do serviço usada com DML que é relevante para seu uso:

  • O DML pode transferir um único blob ou um diretório. Para a transferência de diretório, você pode usar um padrão de pesquisa para corresponder ao prefixo do blob.
  • As transferências do blob de blocos acontecem em paralelo. Tudo é concluído próximo ao final do processo de transferência. Blocos de blob individuais são transferidos em paralelo.
  • A transferência é executada de forma assíncrona no cliente. O status da transferência está disponível periodicamente por meio de um retorno de chamada para um método que pode ser definido em um objeto TransferContext.
  • A transferência cria pontos de verificação durante seu progresso e expõe um objeto TransferCheckpoint. O objeto representa o ponto de verificação mais recente por meio do objeto TransferContext. Se o TransferCheckpoint for salvo antes de uma transferência ser cancelada/anulada, a transferência poderá ser retomada do ponto de verificação por até sete dias. A transferência pode ser retomada de qualquer ponto de verificação, não apenas do mais recente.
  • Se o processo de transferência do cliente for eliminado e reiniciado sem implementar o recurso de ponto de verificação:
    • Antes de qualquer transferência de blob ser concluída, a transferência será reiniciada.
    • Depois que alguns blobs forem concluídos, a transferência será reiniciada apenas para os blobs incompletos.
  • Pausar a execução do cliente pausa as transferências.
  • O recurso de transferência do blob abstrai o cliente de falhas transitórias. Por exemplo, a limitação da conta de armazenamento normalmente não faz com que uma transferência falhe, mas atrasa a transferência.
  • As transferências do lado do serviço têm baixo uso de recursos do cliente para CPU e memória, alguma largura de banda de rede e conexões.

Características da transferência assíncrona

Você pode invocar o método TransferManager.CopyDirectoryAsync() com a opção CopyMethod.ServiceSideAsyncCopy. Ele funciona de forma semelhante ao mecanismo de transferência síncrona da perspectiva do cliente, mas com as seguintes diferenças na operação:

  • As taxas de transferência são mais lentas do que a transferência de sincronização equivalente (normalmente 10 MB/s ou menos).
  • A transferência continuará mesmo que o processo do cliente seja encerrado.
  • Embora haja suporte para pontos de verificação, a retomada de uma transferência usando um TransferCheckpoint não retomará no momento do ponto de verificação, mas no estado atual da transferência.

Resumo do teste

O Armazenamento de Blobs do Azure dá suporte a altas taxas de transferência globais com seu recurso de transferência síncrona do lado do serviço. O uso do recurso em aplicativos .NET é simples por meio da Biblioteca de Movimentação de Dados. É possível que as exportações de Gerenciamento de Custos copiem centenas de gigabytes de dados de forma confiável para uma conta de armazenamento em qualquer lugar em menos de uma hora.