Obter grandes conjuntos de dados de custos de forma recorrente com as exportações

Este artigo ajuda você a exportar regularmente grandes quantidades de dados com exportações do Gerenciamento de Custos. A exportação é o método recomendado para a obtenção de dados de custo não agregados. Especialmente quando os arquivos de uso são muito grandes para chamar e baixar de forma confiável usando a API de detalhes de custo. Os dados exportados são colocados na conta de Armazenamento do Azure escolhida por si. A partir daí, pode carregá-los nos seus próprios sistemas e analisá-los conforme necessário. Para configurar as exportações no portal do Azure, veja Exportar dados.

Se pretender automatizar as exportações em vários âmbitos, o exemplo de pedido de API apresentado na secção seguinte é um bom ponto de partida. Pode utilizar a API de Exportações para criar exportações automáticas como parte da configuração do ambiente geral. As exportações automáticas ajudam a garantir que tem os dados de que necessita. Pode utilizá-los nos sistemas da sua própria organização à medida que for expandindo a utilização do Azure.

Configurações de exportação comuns

Antes de criar a sua primeira exportação, reflita sobre o seu cenário e as opções de configuração de que necessita para o tornar possível. Considere as seguintes opções de exportação:

  • Periodicidade – Determina a frequência com que a tarefa de exportação é executada quando um ficheiro é colocado na sua conta de Armazenamento do Azure. Escolha entre Diariamente, Semanalmente e Mensalmente. Tente configurar a periodicidade de modo a corresponder às tarefas de importação de dados utilizadas pelo sistema interno da sua organização.
  • Período de Periodicidade – Determina o período de validade da Exportação. Os ficheiros só são exportados durante o período de periodicidade.
  • 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 o início da agenda de exportações pretendido. É criada uma exportação na data de início (StartDate) e, mais tarde, com base na Periodicidade escolhida.
  • Tipo - Existem três tipos de exportação:
    • ActualCost – Mostra o total da utilização e dos custos para o período especificado, à medida que os valores vão sendo acumulados, e apresenta-o na sua fatura.
    • AmortizedCost – Mostra o total da utilização e dos custos para o período especificado, com a amortização aplicada aos custos de compra de reserva aplicáveis.
    • Utilização – Todas as exportações criadas antes de 20 de julho de 2020 são do tipo Utilização. Atualize todas as exportações agendadas como ActualCost ou AmortizedCost.
  • Colunas – Define os campos de dados que pretende ver incluídos no ficheiro de exportação. Eles correspondem aos campos disponíveis na API de detalhes de custo.
  • 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. Torna a ingestão de dados mais rápida e fácil. Para obter mais informações sobre particionamento, consulte Particionamento de arquivos para grandes conjuntos de dados.

Criar uma exportação do mês acumulada até hoje diária para uma subscrição

URL do Pedido: 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 de seus 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 do Azure. Os resultados estão documentados nas secções seguintes. Você pode esperar ter resultados semelhantes ao copiar blobs de armazenamento de uma região do Azure para outra.

A equipe conduziu 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 velocidades que variaram de 2 GB por segundo na mesma região a 150 MB por segundo para contas de armazenamento na região do Sudeste Asiático.

Configuração de teste

Para medir as velocidades de transferência de blob, a equipe criou um aplicativo de console .NET simples fazendo referência à versão mais recente (v2.0.1) da Biblioteca de Movimento de Dados (DLM) do Azure via NuGet. O DLM é um SDK fornecido pela equipe de Armazenamento do Azure que permite o acesso programático aos seus serviços de transferência. Em seguida, eles criaram contas de armazenamento V2 padrão em várias regiões e usam o oeste dos EUA como a região de origem. Eles preencheram as contas de armazenamento com contêineres, onde cada um continha dez blobs de bloco de 2 GB. Eles copiaram os contêineres para outras contas de armazenamento usando o método TransferManager.CopyDirectoryAsync() do DLM com a opção CopyMethod.ServiceSideSyncCopy. Os testes foram realizados em um computador com Windows 10 com 12 núcleos e rede de 1 GbE.

Configurações do aplicativo usadas:

  • TransferManager.Configurations.ParallelOperations = Environment.ProcessorCount * 32. A equipe descobriu que a configuração tinha 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. Defini-lo para um valor máximo efetivamente passa o controle total do paralelismo de transferência para a configuração ParallelOperations mencionada anteriormente.
  • TransferManager.Configurations.BlockSize = 4.194.304. Teve algum efeito nas taxas de transferência com 4 MB, revelando-se o melhor para testes.

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

Resultados do teste

Número do ensaio Para a região Blobs Tempo (segs) 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 de 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 ocidentais a quatro orientais por transferência
7 SE Ásia 2 GB x 10 133 150
8 SE Ásia 2 GB x 10 x 4 444 180 Quatro transferências paralelas de uma conta de armazenamento para outra

Sincronizar características de transferência

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:

  • DML pode transferir um único blob ou um diretório. Para transferência de diretório, você pode usar um padrão de pesquisa para corresponder no prefixo blob.
  • As transferências de blob de bloco acontecem em paralelo. Tudo concluído no final do processo de transferência. Os blocos de blob individuais são transferidos em paralelo.
  • A transferência é executada de forma assíncrona no cliente. O status de 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/abortada, a transferência pode ser retomada do ponto de verificação por até sete dias. A transferência pode ser retomada a partir de qualquer ponto de controlo, não apenas do mais recente.
  • Se o processo do cliente de transferência for morto e reiniciado sem implementar o recurso de ponto de verificação:
    • Antes de qualquer transferência de blob ser concluída, a transferência é reiniciada.
    • Após a conclusão de alguns dos blobs, a transferência é reiniciada apenas para os blobs incompletos.
  • Pausar a execução do cliente pausa as transferências.
  • O recurso de transferência de 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 de transferência assíncrona

Você pode invocar o método TransferManager.CopyDirectoryAsync() com a opção CopyMethod.ServiceSideAsyncCopy . Ele opera de forma semelhante ao mecanismo de transferência de sincronização da perspetiva do cliente, mas com as seguintes diferenças de 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 continua mesmo se o processo do cliente terminar.
  • Embora os pontos de verificação sejam suportados, retomar uma transferência usando um TransferCheckpoint não é retomado no momento do ponto de verificação, mas no estado atual da transferência.

Resumo do teste

O armazenamento de blob do Azure oferece suporte a altas taxas de transferência globais com seu recurso de transferência de sincronização do lado do serviço. Usar o recurso em aplicativos .NET é simples usando a Biblioteca de Movimentação de Dados. É possível que as exportações do Cost Management copiem de forma confiável centenas de gigabytes de dados para uma conta de armazenamento em qualquer lugar em menos de uma hora.