Uno degli aspetti più importanti nell’eseguire carichi di lavoro in Azure è tenere traccia delle spese. Come fare ciò è tramite il monitoraggio dell’utilizzo delle risorse con un report dettagliato sull’utilizzo di Azure. In questo articolo, imparerai come creare uno script PowerShell per interrogare facilmente l’utilizzo delle risorse di Azure e le spese di tutte le tue risorse di Azure per data.
Le risorse in Azure aumentano costantemente la tua fattura in molti modi diversi. Sebbene sia possibile visualizzare l’utilizzo delle risorse tramite un portale web, è limitato. Ma utilizzando un paio di cmdlet PowerShell, puoi creare un pratico rapporto per darti una panoramica di che tipo di utilizzo (e quindi di spese) le tue risorse di Azure stanno facendo.
Questo articolo è stato creato da un video di TechSnips su YouTube. Se sei un apprendista più visivo, sentiti libero di guardare il video. Altrimenti, continua a leggere!
Scaricando i report tramite il Centro account di Azure
È possibile scaricare molti diversi report di utilizzo dal Centro account Azure. Il Centro account Azure è un portale web che consente di visualizzare la cronologia del ciclo di fatturazione, scaricare le fatture e vedere la panoramica dell’abbonamento Azure.
Anche se è possibile scaricare i report di utilizzo di Azure tramite il Centro account Azure, non è possibile selezionare un intervallo di date. Non è possibile limitare l’utilizzo a un intervallo di date perché le date sono fisse e coincidono con il ciclo di fatturazione.
Di seguito è riportato un esempio di periodo di fatturazione e i link per scaricare i report di utilizzo.

All’interno di questi report di utilizzo sono presenti molte altre informazioni che potrebbero non essere necessarie.
Forse hai bisogno di report di utilizzo degli ultimi 60 giorni. Per ottenere queste informazioni utilizzando il Centro account Azure, dovresti scaricare i report di utilizzo per almeno tre cicli di fatturazione per coprire tutte le date richieste.
Dopo aver scaricato i report, dovrai quindi rimuovere i dati in eccesso. Dovrai poi trovare un modo per consolidare quei dati in qualche modo. No grazie! È troppo lavoro aggiuntivo.
Utilizzando PowerShell, puoi creare uno script, una funzione o un modulo riutilizzabile per estrarre i report sull’utilizzo delle risorse di Azure. Questi, a loro volta, possono essere eseguiti manualmente con poche righe di comandi, o come attività pianificata per automatizzare l’esecuzione.
Prerequisiti
Questo è un articolo passo-passo. Per seguirmi, avrai bisogno di alcune cose già in atto.
- Windows 10 o versioni successive.
- Windows Powershell v5.1
- A script editor, like Notepad++ or an Integrated Scripting Environment (ISE) like Windows PowerShell ISE and Visual Studio Code.
- Una sottoscrizione Azure.
- Modulo Azure PowerShell. L’ultima versione al momento di questa pubblicazione è la 2.6.0. Questo modulo deve essere installato nel tuo computer. Se non lo hai ancora, puoi installarlo utilizzando PowerShellGet
- Una connessione stabilita ad Azure utilizzando il cmdlet Connect-AzAccount
Come ottenere i dati sull’utilizzo delle risorse
Prima di creare lo script, discutiamo prima delle basi utilizzando il cmdlet Get-UsageAggregates
. Questo è un cmdlet che ti consente di estrarre l’utilizzo delle risorse di Azure per intervallo di date, metriche come orarie o giornaliere e altro ancora. Il cmdlet Get-UsageAggregates
è il cmdlet principale che permette di ottenere la maggior parte delle funzionalità che imparerai in questo articolo.
Per dimostrare il cmdlet Get-UsageAggregates
, supponiamo che tu abbia bisogno di trovare l’utilizzo delle risorse di Azure dal 1° aprile 2019 al 12 settembre 2019. La stessa tecnica può essere utilizzata per qualsiasi intervallo di date. Di seguito troverai un esempio per trovare i dati di utilizzo in base a quelle date.
Parameter | Value | Usage Explanation |
ReportStartTime | 04-01-19 | This is the oldest date you want to retrieve.
(Mese Giorno Anno) |
ReportEndTime | 09-12-19 | This is the latest date you want to retrieve.
(Mese Giorno Anno) |
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 vengono restituiti dei dati, dovresti ottenere risultati simili a quelli mostrati nella schermata sottostante. Puoi vedere che i dati di utilizzo effettivi sono memorizzati nella proprietà UsageAggregations
.

Gestione della paginazione in Get-UsageAggregates
Nella sezione precedente, sarebbe comune che il comando restituisse molti oggetti, specialmente per intervalli di date lunghi. Per evitare di sovraccaricare l’API, il comando Get-UsageAggregates
restituisce solo un massimo di 1000 risultati. Se hai salvato la variabile $usageData
come descritto nella sezione precedente, puoi confermarlo eseguendo questo comando $usageData.UsageAggregations.count
.
Cosa succede se ci sono più di 1000 risultati? Dovrai fare un po’ più di lavoro.
Quando esamini le proprietà restituite da Get-UsageAggregates
, noterai una proprietà chiamata ContinuationToken
come mostrato di seguito. Puoi vedere che questo token è una lunga stringa di caratteri.

Il ContinuationToken
è un puntatore al set successivo di risultati. Questa proprietà funge da segnalibro per sapere da quale pagina ottenere il prossimo lotto di risultati.
Per dimostrare, ottieni l’ultimo elemento nel risultato precedente utilizzando $usageData.UsageAggregations[-1]
come mostrato di seguito. Nota gli orari di Usage Start
e Usage End
.

Ora passa gli stessi parametri al comando Get-UsageAggregates
di nuovo. Ma questa volta, utilizza il parametro ContinuationToken
e usa il valore della proprietà ContinuationToken
restituito in precedenza. Di seguito puoi vedere un esempio di come fare ciò.
Ora ottieni l’ultimo elemento nell’array della proprietà UsageAggregations
utilizzando $usageData.UsageAggregations[-1]
. Confrontalo con il risultato precedente per confermare che i nuovi risultati siano diversi.
Il confronto dovrebbe essere simile a quelli che vedi di seguito. Nota che gli intervalli di date sono distanziati di sette giorni. Utilizzando il ContinuationToken
, hai recuperato la seconda pagina di risultati.


Creazione di una funzione di report sull’utilizzo delle risorse di Azure
Dovresti sapere come funziona il paging e come utilizzare la proprietà e il parametro ContinuationToken
. Ma cosa succede se ci sono decine o addirittura centinaia di migliaia di risultati da recuperare? Utilizzare manualmente il token in questo modo non funzionerà molto bene.
Costruiamo uno script PowerShell che gestisca questo requisito di paging per noi e ci permetta una maggiore flessibilità. Questo script ti permetterà di fornire i tuoi parametri e gestire il requisito di paging. Ti darà anche la flessibilità di estenderlo in futuro per svolgere altre attività se necessario.
Costruzione dei parametri
Prima costruisci una struttura di base per la funzione. Di seguito puoi vedere un esempio di funzione chiamata Get-AzureUsage
. Questa funzione ha tre parametri che potrebbero sembrarti familiari.
In precedenza, questi parametri erano definiti nel cmdlet Get-UsageAggregates
stesso. Ora stai costruendo una funzione “wrapper” che passerà i valori a questo cmdlet.
Di seguito è riportata una tabella che fornisce ulteriori informazioni su tutti questi parametri.
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. |
Recupero dell’utilizzo delle risorse
Una volta creata la funzione e definiti tutti i parametri, è ora di completare il resto della funzione.
Puoi vedere il resto della funzione Get-AzureUsage
di seguito. Assicurati di leggere i commenti per una comprensione più approfondita di ciò che il codice sta facendo.
Script completato (copiabile/incollabile)
Dopo aver messo insieme i parametri e il codice funzionale, otterrai uno script completato come puoi vedere di seguito. Ora puoi copiare questo script nel tuo script o direttamente nella console di PowerShell per testarlo.
Interrogazione dell’utilizzo delle risorse con la nostra funzione
È ora il momento di mettere alla prova la funzione. Puoi incollare il codice sopra in uno script e eseguirlo come script nella tua sessione corrente di PowerShell o copiare direttamente il codice nella tua sessione di PowerShell.
Suggerimento: se stai usando PowerShell ISE o Visual Studio Code, puoi evidenziare il codice che desideri importare e premere F8. Altrimenti, è più facile copiare e incollare il codice in una sessione di PowerShell.
Ora esegui la funzione fornendo un valore per FromTime
, ToTime
e l’intervallo con cui desideri visualizzare i risultati. Puoi vedere un esempio di come chiamare questa funzione di seguito.
Una volta che questo viene eseguito, vedrai alcuni messaggi dettagliati se hai scelto di utilizzare il parametro Verbose
opzionale. Come puoi vedere dall’esempio qui sotto, il conteggio del rapporto di utilizzo è di 4.659. Noterai anche che la funzione ha eseguito la funzione Get-UsageAggregates
quattro volte ottenendo ogni volta la pagina successiva dei risultati. La funzione è stata in grado di fare ciò perché ha utilizzato il corretto valore ContinuationToke
per ogni chiamata.

Filtraggio del rapporto
A questo punto, il rapporto include tutti i dettagli sull’utilizzo di tutti i tipi di risorse disponibili. Ma è possibile filtrare il rapporto per visualizzare solo la risorsa desiderata. Per fare ciò, potresti estendere la funzione per consentire questa funzionalità o instradare l’output ad altri cmdlet di PowerShell.
L’output della funzione Get-Azure
restituisce tutti i tipi di risorse, ma include una proprietà chiamata MeterCategory
. Questa proprietà definisce il tipo di risorsa che quella riga rappresenta. Ad esempio, per ottenere solo i rapporti sull’utilizzo delle macchine virtuali di Azure, potresti raggruppare tutti gli oggetti con una MeterCategory
di Virtual Machines
utilizzando il cmdlet Group-Object
.
Il cmdlet Group-Object
restituirà il numero di righe presenti nell’output come proprietà Count
. Quindi, limitando l’output solo alle proprietà Count
e Name
(valore per MeterCategory
), puoi vedere quante righe di rapporto sull’utilizzo esistono per tutti i tipi di risorse di Azure.
Come puoi vedere dallo screenshot qui sotto, ci sono 768 voci per Macchine Virtuali nel report.

Per portare avanti questo concetto di filtraggio, potresti anche sfruttare le proprietà calcolate per creare un output più user-friendly come mostrato di seguito.
Quando esegui il frammento di codice sopra, dovresti vedere un output simile a quello mostrato di seguito.

Idee per estendere il report
Utilizzando il codice in questo articolo, puoi estendere la funzionalità dello strumento appena creato in molti modi diversi.
Potresti esportare l’output in un file CSVe manipolare i tuoi dati in Excel o creare un report HTML utilizzando ConvertTo-HTML o il modulo PowerShell EnhancedHTML2.
Porta le cose un po’ più avanti e aggiungi anche una notifica email al risultato con il cmdlet Send-MailMessage. Il mondo è tuo!
Riepilogo
In questo post, hai imparato come recuperare i report sull’utilizzo delle risorse da Azure. Hai anche imparato come creare una funzione PowerShell personalizzata per automatizzare il processo e utilizzare quella funzione per manipolare l’output.
La prossima volta che ti trovi di fronte a una fattura Azure inaspettata, non hai scuse! Costruisciti una funzione PowerShell per interrogare l’utilizzo delle risorse di Azure in qualsiasi momento per tenere d’occhio quella fattura.
Ulteriori letture
Source:
https://adamtheautomator.com/azure-detailed-usage-report/