Um dos aspectos mais importantes de executar cargas de trabalho no Azure é acompanhar os gastos. Você faz isso rastreando o uso de recursos com um relatório detalhado de uso do Azure. Neste artigo, você aprenderá como criar um script do PowerShell para consultar facilmente o uso de recursos e as cobranças do Azure em todos os seus recursos do Azure por data.
Os recursos no Azure estão constantemente aumentando sua conta de várias maneiras diferentes. Embora você possa ver o uso de recursos por meio de um portal da web, ele é limitado. Mas usando alguns cmdlets do PowerShell, você pode criar um relatório útil para ter uma visão geral do tipo de uso (e, portanto, despesas) que seus recursos do Azure estão gerando.
Este artigo foi criado a partir de um vídeo do TechSnips no YouTube. Se você é um aprendiz visual, fique à vontade para conferir o vídeo. Caso contrário, continue lendo!
Baixando Relatórios através do Centro de Contas do Azure
Você pode baixar diversos relatórios de uso diferentes do Centro de Conta do Azure. O Centro de Conta do Azure é um portal da web que permite visualizar o histórico do seu ciclo de faturamento, baixar faturas e ver uma visão geral da sua assinatura do Azure.
Embora seja possível baixar relatórios de uso do Azure por meio do Centro de Conta do Azure, não há flexibilidade na escolha do intervalo de datas. Você não pode limitar o uso a um intervalo de datas porque as datas são fixadas para coincidir com o seu ciclo de faturamento.
Você pode ver abaixo um exemplo de um período de faturamento e links para baixar relatórios de uso.

Dentro desses relatórios de uso contém muitas outras informações que você pode não precisar.
Talvez você precise de relatórios de uso dos últimos 60 dias. Para obter essas informações usando o Centro de Conta do Azure, você teria que baixar relatórios de uso por pelo menos três ciclos de faturamento para cobrir todas as datas necessárias.
Após o download dos relatórios, você teria que remover os dados em excesso. Em seguida, teria que descobrir uma maneira de consolidar esses dados de alguma forma. Não, obrigado! Isso é muita sobrecarga.
Usando o PowerShell, você pode criar um script, função ou módulo reutilizável para extrair relatórios de uso de recursos do Azure. Esses, por sua vez, podem ser executados manualmente com algumas linhas de comandos, ou como uma tarefa agendada para automatizar a execução.
Pré-requisitos
Este é um artigo passo a passo. Para acompanhar, você precisará ter algumas coisas em vigor.
- Windows 10 ou posterior.
- Windows PowerShell v5.1
- A script editor, like Notepad++ or an Integrated Scripting Environment (ISE) like Windows PowerShell ISE and Visual Studio Code.
- Uma assinatura do Azure.
- Módulo do Azure PowerShell. A versão mais recente até a data desta postagem é 2.6.0. Esse módulo deve estar instalado em sua máquina. Se você ainda não o possui, pode instalá-lo usando o PowerShellGet
- Uma conexão estabelecida com o Azure usando o cmdlet Connect-AzAccount
Como obter dados de uso de recursos
Antes de criar o script, vamos primeiro discutir os conceitos básicos usando o cmdlet Get-UsageAggregates
. Este é um cmdlet que permite extrair o uso de recursos do Azure por intervalo de datas, métricas como por hora ou diariamente e mais. O cmdlet Get-UsageAggregates
é o principal cmdlet que realiza a maioria das operações que você aprenderá neste artigo.
Para demonstrar o cmdlet Get-UsageAggregates
, digamos que você precise encontrar o uso de recursos do Azure de 1º de abril de 2019 a 12 de setembro de 2019. A mesma técnica pode ser usada para qualquer intervalo de datas. Abaixo você verá um trecho para encontrar dados de uso com base nessas datas.
Parameter | Value | Usage Explanation |
ReportStartTime | 04-01-19 | This is the oldest date you want to retrieve.
(Dia Mês Ano) |
ReportEndTime | 09-12-19 | This is the latest date you want to retrieve.
(Dia Mês Ano) |
AggregationGranularity | Hourly | The granularity of data to return. Valid values are “Daily” and “Hourly” |
ShowDetails | $True | Indicates whether the instance-level details are expanded |
Se houverem dados retornados, você deverá obter resultados semelhantes ao screenshot abaixo. Você pode ver que os dados de uso reais são armazenados na propriedade UsageAggregations
.

Lidando com a Paginação em Get-UsageAggregates
Na seção acima, seria comum o comando retornar muitos milhares de objetos, especialmente para intervalos de datas longos. Para evitar sobrecarregar a API, o comando Get-UsageAggregates
retorna apenas um máximo de 1000 resultados. Se você salvou a variável $usageData
como abordado na seção anterior, você pode confirmar isso executando o comando $usageData.UsageAggregations.count
.
E se houver mais de 1000 resultados? Você vai ter que fazer um pouco mais de trabalho.
Quando você examina as propriedades retornadas por Get-UsageAggregates
, você notará uma propriedade chamada ContinuationToken
como mostrado abaixo. Você pode ver que esse token é uma sequência longa de caracteres.

O ContinuationToken
é um ponteiro para o próximo conjunto de resultados. Essa propriedade funciona como um marcador para saber de qual página obter o próximo lote de resultados.
Para demonstrar, obtenha o último item no resultado anterior usando $usageData.UsageAggregations[-1]
como mostrado abaixo. Observe os horários de Usage Start
e Usage End
.

Agora passe os mesmos parâmetros para o comando Get-UsageAggregates
novamente. Mas desta vez, use o parâmetro ContinuationToken
e use o valor da propriedade ContinuationToken
retornada anteriormente. Abaixo você pode ver um exemplo de como fazer isso.
Agora obtenha o último item na matriz de propriedade UsageAggregations
usando $usageData.UsageAggregations[-1]
. Compare-o com o resultado anterior para confirmar que os novos resultados são diferentes.
A comparação deve ser semelhante às que você vê abaixo. Observe que os intervalos de data estão separados por sete dias. Ao usar o ContinuationToken
, você recuperou a segunda página de resultados.


Construindo uma Função de Relatório de Uso de Recursos do Azure
Você deve saber como funciona a paginação e como usar a propriedade e parâmetro ContinuationToken
. Mas e se houver dezenas ou até centenas de milhares de resultados para recuperar? Usar manualmente o token dessa maneira não vai funcionar muito bem.
Vamos construir um script PowerShell que lida com esse requisito de paginação para nós e nos permite alguma flexibilidade adicional. Este script permitirá que você forneça seus próprios parâmetros e lide com o requisito de paginação. Também lhe dará a flexibilidade de estendê-lo no futuro para realizar outras tarefas, se necessário.
Construindo os Parâmetros
Primeiro construa uma estrutura de função básica. Abaixo você pode ver um exemplo de função chamada Get-AzureUsage
. Esta função tem três parâmetros que podem parecer familiares.
Anteriormente, esses parâmetros eram definidos no próprio cmdlet Get-UsageAggregates
. Agora você está construindo uma função “embrulho” que passará valores para este cmdlet.
Abaixo está uma tabela fornecendo mais informações sobre todos esses parâmetros.
Parameter | Usage |
FromTime | This is a mandatory parameter that accepts a DateTime value. The value represents the oldest date of the report. |
ToTime | This is a mandatory parameter that accepts a DateTime value. The value represents the latest date of the report. |
Interval | This is a non-empty parameter that accepts two possible values: ‘Daily’ and ‘Hourly’. The default value is Daily. This represents the granularity of the report to return. |
Consultando o Uso de Recursos
Assim que a função for criada e todos os parâmetros definidos, é hora de preencher o restante da função.
Você pode ver o restante da função Get-AzureUsage
abaixo. Certifique-se de ler os comentários para entender melhor o que o código está fazendo.
O Script Completo (Copiável)
Após reunir os parâmetros e o código funcional, você terá um script completo, conforme mostrado abaixo. Agora você pode copiá-lo para o seu próprio script ou diretamente para o console do PowerShell para teste.
Consultando o Uso de Recursos com Nossa Função
Agora é hora de testar a função. Cole o código acima em um script e dot source no seu atual sessão do PowerShell, ou copie o código diretamente na sessão do PowerShell.
Dica: Se estiver usando o PowerShell ISE ou o Visual Studio Code, você pode destacar o código que deseja importar e pressionar F8. Caso contrário, é mais fácil copiar e colar o código em uma sessão do PowerShell.
Agora execute a função fornecendo um valor para FromTime
, ToTime
e o intervalo desejado para ver os resultados. Você pode ver um exemplo abaixo de como chamar esta função.
Assim que isso for executado, você verá algumas mensagens detalhadas se tiver escolhido usar o parâmetro opcional Verbose
. Como pode ser observado no exemplo abaixo, o contador de relatórios de uso é 4.659. Você também notará que a função executou a função Get-UsageAggregates
quatro vezes, obtendo a próxima página de resultados a cada vez. A função conseguiu fazer isso porque usou o valor correto de ContinuationToken
para cada chamada.

Filtrando o Relatório
Neste ponto, o relatório inclui todos os detalhes de uso sobre todos os tipos de recursos disponíveis. Mas você pode filtrar o relatório para exibir apenas o recurso desejado. Para fazer isso, você poderia estender a função para permitir essa funcionalidade ou encaminhar a saída para outros cmdlets do PowerShell.
A saída da função Get-Azure
retorna todos os tipos de recursos, mas inclui uma propriedade chamada MeterCategory
. Esta propriedade define o tipo de recurso que a linha representa. Por exemplo, para obter apenas relatórios de uso de Máquinas Virtuais do Azure, você poderia agrupar todos os objetos com um MeterCategory
de Máquinas Virtuais
usando o cmdlet Group-Object
.
O cmdlet Group-Object
retornará quantas linhas estavam presentes na saída como a propriedade Count
. Em seguida, limitando a saída apenas para as propriedades Count
e Name
(valor para MeterCategory
), você pode ver quantas linhas de relatório de uso existem para todos os tipos de recursos do Azure.
Como você pode ver na captura de tela abaixo, há 768 entradas para Máquinas Virtuais no relatório.

Para levar esse conceito de filtragem um pouco mais adiante, você também pode aproveitar propriedades calculadas para criar uma saída mais amigável, como mostrado abaixo.
Ao executar o trecho de código acima, você deverá ver uma saída semelhante ao que está abaixo.

Ideias para Expandir o Relatório
Usando o código neste artigo, você pode estender a funcionalidade da ferramenta criada de muitas maneiras diferentes.
Você poderia exportar a saída para um arquivo CSV e manipular seus dados no Excel ou criar um relatório HTML usando ConvertTo-HTML ou o módulo PowerShell EnhancedHTML2.
Leve as coisas um pouco mais longe e adicione uma notificação por e-mail ao resultado também com o cmdlet Send-MailMessage. O mundo é sua ostra!
Resumo
Neste post, você aprendeu como obter relatórios de uso de recursos do Azure. Você também aprendeu como construir uma função PowerShell personalizada para automatizar o processo e usar essa função para manipular a saída.
Na próxima vez que receber uma conta inesperada da Azure, não terá desculpas! Construa uma função PowerShell para consultar o uso de recursos da Azure a qualquer momento e fique de olho nessa conta.
Leitura Adicional
Source:
https://adamtheautomator.com/azure-detailed-usage-report/