Uno de los aspectos más importantes al ejecutar cargas de trabajo en Azure es llevar un seguimiento de los gastos. La forma de hacerlo es mediante el seguimiento del uso de recursos con un informe detallado de uso de Azure. En este artículo, aprenderás cómo crear un script de PowerShell para consultar fácilmente el uso de recursos y los cargos en Azure en todas tus recursos de Azure por fecha.
Los recursos en Azure están constantemente acumulando costos de diversas maneras. Aunque puedes ver el uso de recursos a través de un portal web, es limitado. Pero utilizando algunos cmdlets de PowerShell, puedes construir un informe útil que te brinde una visión general de qué tipo de uso (y, por lo tanto, gastos) tienen tus recursos de Azure.
Este artículo fue creado a partir de un video de TechSnips en YouTube. Si eres más visual, siéntete libre de ver el video. ¡De lo contrario, sigue leyendo!
Descarga de informes a través del Centro de Cuentas de Azure
Puede descargar muchos informes de uso diferentes desde el Centro de cuentas de Azure. El Centro de cuentas de Azure es un portal web que le permite ver el historial de su ciclo de facturación, descargar facturas y ver el resumen de su suscripción a Azure.
Aunque puede descargar informes de uso de Azure a través del Centro de cuentas de Azure, no hay flexibilidad para elegir un rango de fechas. No puede limitar el uso a un rango de fechas porque las fechas están fijadas para coincidir con su ciclo de facturación.
A continuación, puede ver un ejemplo de un período de facturación y enlaces para descargar informes de uso.

Dentro de estos informes de uso se incluye mucha otra información que quizás no necesite.
Tal vez necesite informes de uso de los últimos 60 días. Para obtener esta información utilizando el Centro de cuentas de Azure, tendría que descargar informes de uso durante al menos tres ciclos de facturación para cubrir todas las fechas requeridas.
Después de descargar los informes, tendrías que eliminar los datos excesivos. Luego tendrías que encontrar una manera de consolidar esos datos de alguna manera. ¡No gracias! Eso es demasiada sobrecarga.
Usando PowerShell, puedes crear un script, función o módulo reutilizable para extraer informes de uso de recursos de Azure. Estos, a su vez, se pueden ejecutar manualmente con unas pocas líneas de comandos, o como una tarea programada para automatizar la ejecución.
Prerrequisitos
Este es un artículo de guía paso a paso. Para seguirlo, necesitarás tener algunas cosas en su lugar.
- Windows 10 o posterior.
- Windows Powershell v5.1
- A script editor, like Notepad++ or an Integrated Scripting Environment (ISE) like Windows PowerShell ISE and Visual Studio Code.
- Una suscripción de Azure.
- Módulo Azure PowerShell. La última versión hasta la fecha de esta publicación es 2.6.0. Este módulo debe estar instalado en tu máquina. Si aún no lo tienes, puedes instalarlo usando PowerShellGet
- Una conexión establecida con Azure usando el cmdlet Connect-AzAccount
Cómo obtener los datos de uso de recursos
Antes de crear el script, discutamos primero los conceptos básicos utilizando el cmdlet Get-UsageAggregates
. Este es un cmdlet que te permite obtener el uso de recursos de Azure por rango de fechas, métricas como por hora o por día, y más. El cmdlet Get-UsageAggregates
es el principal responsable de la mayoría de las funciones que aprenderás en este artículo.
Para demostrar el cmdlet Get-UsageAggregates
, supongamos que necesitas encontrar el uso de recursos de Azure desde el 1 de abril de 2019 hasta el 12 de septiembre de 2019. La misma técnica se puede utilizar para cualquier rango de fechas. A continuación, verás un fragmento para encontrar datos de uso basados en esas fechas.
Parameter | Value | Usage Explanation |
ReportStartTime | 04-01-19 | This is the oldest date you want to retrieve.
(Mes Día Año) |
ReportEndTime | 09-12-19 | This is the latest date you want to retrieve.
(Mes Día Año) |
AggregationGranularity | Hourly | The granularity of data to return. Valid values are “Daily” and “Hourly” |
ShowDetails | $True | Indicates whether the instance-level details are expanded |
Si hay datos devueltos, deberías obtener resultados similares a los de la captura de pantalla que se muestra a continuación. Puedes ver que los datos reales de uso se almacenan en la propiedad UsageAggregations
.

Manejo de Paginación en Get-UsageAggregates
En la sección anterior, sería común que el comando devolviera muchos miles de objetos, especialmente para rangos de fechas extensos. Para evitar abrumar la API, el comando Get-UsageAggregates
solo devuelve un máximo de 1000 resultados. Si has guardado la variable $usageData
como se explicó en la sección anterior, puedes confirmarlo ejecutando este comando $usageData.UsageAggregations.count
.
¿Qué pasa si hay más de 1000 resultados? Vas a tener que hacer un poco más de trabajo.
Cuando examinas las propiedades devueltas por Get-UsageAggregates
, notarás una propiedad llamada ContinuationToken
, como se muestra a continuación. Puedes ver que este token es una larga cadena de caracteres.

El ContinuationToken
es un puntero al siguiente conjunto de resultados. Esta propiedad actúa como un marcador para saber desde qué página obtener el siguiente lote de resultados.
Para demostrarlo, obtén el último elemento en el resultado anterior usando $usageData.UsageAggregations[-1]
, como se muestra a continuación. Observa las horas de inicio y fin de uso (Usage Start
y Usage End
).

Ahora pasa los mismos parámetros al comando Get-UsageAggregates
nuevamente. Pero esta vez, usa el parámetro ContinuationToken
y utiliza el valor de la propiedad ContinuationToken
devuelta anteriormente. A continuación, puedes ver un ejemplo de cómo hacer esto.
Ahora obtén el último elemento en la matriz de propiedades UsageAggregations
usando $usageData.UsageAggregations[-1]
. Compáralo con el resultado anterior para confirmar que los nuevos resultados son diferentes.
La comparación debería ser similar a las que ves a continuación. Observa que los rangos de fechas tienen una diferencia de siete días. Al utilizar el ContinuationToken
, has recuperado la segunda página de resultados.


Creación de una Función de Informes de Uso de Recursos de Azure
Debe conocer cómo funciona el paginado y cómo utilizar la propiedad y parámetro ContinuationToken
. Pero ¿qué pasa si hay decenas o incluso cientos de miles de resultados para recuperar? Utilizar manualmente el token de esta manera no funcionará demasiado bien.
Vamos a construir un script de PowerShell que maneje este requisito de paginado para nosotros y nos permita cierta flexibilidad adicional. Este script le permitirá proporcionar sus propios parámetros y manejar el requisito de paginado. También le dará la flexibilidad de ampliarlo más adelante para realizar otras tareas si es necesario.
Construyendo los Parámetros
Primero construya algún armazón de función. A continuación, puede ver un ejemplo de función llamada Get-AzureUsage
. Esta función tiene tres parámetros que pueden resultar familiares.
Anteriormente, estos parámetros se definían en el propio cmdlet Get-UsageAggregates
. Ahora está construyendo una función “envoltorio” que pasará valores a este cmdlet.
A continuación se muestra una tabla que proporciona más información sobre todos estos 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 el Uso de Recursos
Una vez que se ha creado la función y se han definido todos los parámetros, es hora de completar el resto de la función.
Puede ver el resto de la función Get-AzureUsage
a continuación. Asegúrese de revisar los comentarios para comprender más profundamente qué está haciendo el código.
El Script Completado (Copiable/Pegable)
Después de juntar los parámetros y el código funcional, obtendrás un script completo como puedes ver a continuación. Ahora puedes copiar esto en tu propio script o directamente en la consola de PowerShell para probarlo.
Consultando el Uso de Recursos con Nuestra Función
Ahora es el momento de poner a prueba la función. Pega el código anterior en un script y haz un dot source en tu sesión actual de PowerShell, o copia el código directamente en tu sesión de PowerShell.
Consejo: Si estás utilizando PowerShell ISE o Visual Studio Code, puedes resaltar el código que deseas importar y presionar F8. De lo contrario, es más fácil copiar y pegar el código en una sesión de PowerShell.
Ahora ejecuta la función proporcionando un valor para FromTime
, ToTime
y el intervalo que te gustaría ver en los resultados. Puedes ver un ejemplo a continuación de cómo llamar a esta función.
Una vez que esto se ejecute, verás algunos mensajes detallados si has elegido usar el parámetro opcional Verbose
. Como puedes ver en el ejemplo a continuación, el recuento de informes de uso es de 4,659. También notarás que la función ejecutó la función Get-UsageAggregates
cuatro veces, obteniendo la siguiente página de resultados cada vez. La función pudo hacer esto porque utilizó el valor correcto de ContinuationToken
para cada llamada.

Filtrando el Informe
En este punto, el informe incluye todos los detalles de uso sobre todos los tipos de recursos disponibles. Pero puedes filtrar el informe para mostrar solo el recurso que deseas. Para hacer esto, podrías extender la función para permitir esta funcionalidad o canalizar la salida a otros cmdlets de PowerShell.
La salida de la función Get-Azure
devuelve todos los tipos de recursos pero incluye una propiedad llamada MeterCategory
. Esta propiedad define el tipo de recurso que representa esa fila. Por ejemplo, para obtener solo informes de uso de máquinas virtuales de Azure, podrías agrupar todos los objetos con una MeterCategory
de Virtual Machines
usando el cmdlet Group-Object
.
El cmdlet Group-Object
devolverá cuántas filas estaban presentes en la salida como la propiedad Count
. Luego, limitando la salida solo a las propiedades Count
y Name
(valor para MeterCategory
), puedes ver cuántas filas de informe de uso existen para todos los tipos de recursos de Azure.
Como puede ver en la captura de pantalla a continuación, hay 768 entradas para Máquinas virtuales en el informe.

Para llevar este concepto de filtrado un poco más lejos, también podría aprovechar propiedades calculadas para crear una salida más amigable como se muestra a continuación.
Cuando ejecuta el fragmento de código anterior, debería ver una salida similar a la que se muestra a continuación.

Ideas para ampliar el informe
Utilizando el código de este artículo, puede ampliar la funcionalidad de la herramienta creada de muchas maneras diferentes.
Puede exportar la salida a un archivo CSV y manipular sus datos en Excel o crear un informe HTML utilizando ConvertTo-HTML o el módulo de PowerShell EnhancedHTML2.
Lleve las cosas un poco más lejos y agregue una notificación por correo electrónico al resultado también con el cmdlet Send-MailMessage. ¡El mundo es suyo!
Resumen
En esta publicación, aprendió cómo obtener informes de uso de recursos de Azure. También aprendió cómo construir una función personalizada de PowerShell para automatizar el proceso y utilizar esa función para manipular la salida.
La próxima vez que te encuentres con una factura inesperada de Azure, ¡no tienes excusa! Constrúyete una función de PowerShell para consultar el uso de recursos de Azure en cualquier momento y así vigilar esa factura.
Lecturas Adicionales
Source:
https://adamtheautomator.com/azure-detailed-usage-report/