Een van de belangrijkste aspecten van het uitvoeren van workloads in Azure is het bijhouden van kosten. Hoe je dat doet, is door het bijhouden van het gebruik van resources met een gedetailleerd gebruiksoverzicht van Azure. In dit artikel leer je hoe je een PowerShell-script kunt maken om eenvoudig het gebruik van Azure-resources en kosten over al je Azure-resources op datum te bevragen.
Resources in Azure draaien voortdurend op je factuur op vele verschillende manieren. Hoewel je het gebruik van resources kunt zien via een webportaal, is het beperkt. Maar door een paar PowerShell-cmdlets te gebruiken, kun je een handig rapport opbouwen om een overzicht te krijgen van het soort gebruik (en dus kosten) waaraan je Azure-resources bijdragen.
Dit artikel is gemaakt op basis van een TechSnips YouTube-video. Als je meer visueel bent ingesteld, bekijk dan gerust de video. Anders, lees verder!
Het downloaden van rapporten via het Azure-accountcentrum
Je kunt veel verschillende gebruiksrapporten downloaden vanuit het Azure Account Center. Het Azure Account Center is een webportaal waarmee je je factureringscyclusgeschiedenis kunt bekijken, facturen kunt downloaden en het overzicht van je Azure-abonnement kunt zien.
Hoewel je Azure gebruiksrapporten kunt downloaden via het Azure Account Center, is er geen flexibiliteit in het kiezen van een datumbereik. Je kunt het gebruik niet beperken tot een datumbereik omdat de datums vastliggen om samen te vallen met je factureringscyclus.
Hieronder zie je een voorbeeld van een factureringsperiode en links om gebruiksrapporten te downloaden.

In deze gebruiksrapporten staat veel andere informatie die je misschien niet nodig hebt.
Misschien heb je gebruiksrapporten nodig voor de laatste 60 dagen. Om deze informatie te krijgen via het Azure Account Center, moet je gebruiksrapporten downloaden voor minstens drie factureringscycli om al je vereiste datums te dekken.
Nadat de rapporten zijn gedownload, moet je vervolgens de overtollige gegevens verwijderen. Je moet dan een manier bedenken om die gegevens op de een of andere manier te consolideren. Nee bedankt! Dat is te veel overhead.
Met PowerShell kunt u een herbruikbaar script, functie of module bouwen om Azure-bronverbruiksrapporten op te halen. Deze kunnen op hun beurt handmatig worden uitgevoerd met een paar regels commando’s, of als een geplande taak om de uitvoering te automatiseren.
Vereisten
Dit is een stapsgewijze handleiding. Om mee te doen, moet je een paar dingen op hun plaats hebben.
- Windows 10 of later.
- Windows Powershell v5.1
- A script editor, like Notepad++ or an Integrated Scripting Environment (ISE) like Windows PowerShell ISE and Visual Studio Code.
- Een Azure-abonnement.
- Een Azure PowerShell-module. De nieuwste versie op het moment van deze post is 2.6.0. Deze module moet op uw machine zijn geïnstalleerd. Als je het nog niet hebt, kun je het installeren met PowerShellGet
- Een gevestigde verbinding met Azure met behulp van het Connect-AzAccount cmdlet
Hoe krijg je gegevens over het gebruik van resources
Voor het maken van het script, laten we eerst de basisprincipes bespreken met behulp van de Get-UsageAggregates
cmdlet. Dit is een cmdlet waarmee u Azure-bronverbruik per datumreeks, metrische gegevens zoals uur- of daggegevens en meer kunt ophalen. De Get-UsageAggregates
cmdlet is de belangrijkste cmdlet die het grootste deel van de magie uitvoert die u in dit artikel zult leren.
Om de Get-UsageAggregates
cmdlet te demonstreren, laten we zeggen dat u Azure-bronverbruik van 1 april 2019 tot 12 september 2019 moet vinden. Dezelfde techniek kan worden gebruikt voor elke datumreeks. Hieronder ziet u een voorbeeld om gebruik te maken van die data’s.
Parameter | Value | Usage Explanation |
ReportStartTime | 04-01-19 | This is the oldest date you want to retrieve.
(Maand Dag Jaar) |
ReportEndTime | 09-12-19 | This is the latest date you want to retrieve.
(Maand Dag Jaar) |
AggregationGranularity | Hourly | The granularity of data to return. Valid values are “Daily” and “Hourly” |
ShowDetails | $True | Indicates whether the instance-level details are expanded |
Als er gegevens worden geretourneerd, zou u resultaten moeten krijgen die vergelijkbaar zijn met de onderstaande screenshot. U kunt zien dat de werkelijke gebruikte gegevens zijn opgeslagen in de UsageAggregations
eigenschap.

Omgaan met Paging in Get-UsageAggregates
In de bovenstaande sectie zou het gebruikelijk zijn dat de opdracht vele duizenden objecten retourneert, vooral voor lange datumreeksen. Om de API niet te overbelasten, retourneert de Get-UsageAggregates
opdracht slechts een maximum van 1000 resultaten. Als u de $usageData
variabele zoals beschreven in de vorige sectie heeft opgeslagen, kunt u dit bevestigen door deze opdracht uit te voeren $usageData.UsageAggregations.count
.
Wat als er meer dan 1000 resultaten zijn? Je zult een beetje meer werk moeten doen.
Wanneer je de eigenschappen bekijkt die worden geretourneerd door Get-UsageAggregates
, zul je een eigenschap genaamd ContinuationToken
opmerken zoals hieronder getoond. Je ziet dat deze token een lange reeks karakters is.

De ContinuationToken
is een verwijzer naar de volgende reeks resultaten. Deze eigenschap fungeert als een bladwijzer om te weten vanaf welke pagina de volgende batch resultaten moet worden opgehaald.
Om dit te demonstreren, haal je het laatste item uit het vorige resultaat op met $usageData.UsageAggregations[-1]
zoals hieronder getoond. Let op de tijden van Usage Start
en Usage End
.

Geef nu dezelfde parameters door aan de opdracht Get-UsageAggregates
. Maar gebruik deze keer de parameter ContinuationToken
en gebruik de waarde van de eerder geretourneerde eigenschap ContinuationToken
. Hieronder zie je een voorbeeld van hoe je dit kunt doen.
Haal nu het laatste item op in de array van de eigenschap UsageAggregations
met $usageData.UsageAggregations[-1]
. Vergelijk het met het vorige resultaat om te bevestigen dat de nieuwe resultaten verschillend zijn.
De vergelijking moet vergelijkbaar zijn met degene die je hieronder ziet. Let op dat de datums zeven dagen uit elkaar liggen. Door de ContinuationToken
te gebruiken, heb je de tweede pagina met resultaten opgehaald.


Het bouwen van een Azure Resource Usage Reporting Functie
Je moet weten hoe paginering werkt en hoe je de eigenschap en parameter ContinuationToken
gebruikt. Maar wat als er tientallen of zelfs honderdduizenden resultaten zijn om op te halen? Handmatig de token op deze manier gebruiken werkt niet zo goed.
Laten we een PowerShell-script bouwen dat deze paginabehoefte voor ons afhandelt en ons wat verdere flexibiliteit biedt. Dit script stelt je in staat om je eigen parameters op te geven en de paginabehoefte te beheren. Het geeft je ook de flexibiliteit om het in de toekomst uit te breiden om andere taken uit te voeren indien nodig.
Opbouwen van de Parameters
Bouw eerst wat functioneel skelet. Hieronder zie je een voorbeeldfunctie genaamd Get-AzureUsage
. Deze functie heeft drie parameters die er bekend uit kunnen zien.
Deze parameters werden eerder gedefinieerd op de cmdlet Get-UsageAggregates
zelf. Je bouwt nu een “wrapper” functie die waarden naar deze cmdlet zal doorgeven.
Hieronder staat een tabel met verdere informatie over al deze parameters.
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. |
Queryen van Resourcegebruik
Als de functie is gemaakt en alle parameters zijn gedefinieerd, is het tijd om de rest van de functie in te vullen.
Je kunt hieronder de rest van de functie Get-AzureUsage
zien. Neem zeker een kijkje naar de opmerkingen voor een dieper begrip van wat de code doet.
Het Voltooide Script (Kopieerbaar)
Na het samenvoegen van de parameters en functionele code, krijg je een voltooid script zoals je hieronder kunt zien. Je kunt dit nu kopiëren naar je eigen script of rechtstreeks in de PowerShell-console plakken voor testdoeleinden.
Opvragen van Resourcegebruik met Onze Functie
Het is nu tijd om de functie te testen. Plak de code hierboven in een script en dot source het in je huidige PowerShell-sessie of kopieer de code rechtstreeks naar je PowerShell-sessie.
Tip: Als je PowerShell ISE of Visual Studio Code gebruikt, kun je de code die je wilt importeren markeren en op F8 drukken. Anders is het gemakkelijker om de code te kopiëren en te plakken in een PowerShell-sessie.
Voer nu de functie uit met een waarde voor FromTime
, ToTime
en het interval waarin je de resultaten wilt zien. Hieronder zie je een voorbeeld van hoe je deze functie kunt aanroepen.
Zodra dit wordt uitgevoerd, ziet u enkele uitgebreide berichten als u ervoor hebt gekozen om de optionele Verbose
-parameter te gebruiken. Zoals u kunt zien in het onderstaande voorbeeld, is het gebruikstellingstellingstellingstellingstellingstellingen 4.659. U zult ook opmerken dat de functie de Get-UsageAggregates
-functie vier keer heeft uitgevoerd om telkens de volgende pagina met resultaten op te halen. De functie kon dit doen omdat het de juiste ContinuationToken
w waarde gebruikte voor elke oproep.

Het rapport filteren
Op dit punt bevat het rapport alle gebruiksgegevens over alle beschikbare resourcetypen. Maar u kunt het rapport filteren om alleen de resource weer te geven die u wilt. Dit kunt u doen door ofwel de functie uit te breiden om deze functionaliteit toe te staan, of de uitvoer door te leiden naar andere PowerShell-cmdlets.
De uitvoer van de Get-Azure
-functie retourneert alle soorten resources, maar bevat een eigenschap genaamd MeterCategory
. Deze eigenschap definieert het type resource dat de rij vertegenwoordigt. Bijvoorbeeld, om alleen Azure Virtual Machine-gebruiksrapporten te krijgen, kunt u alle objecten met een MeterCategory
van Virtual Machines
groeperen met behulp van de Group-Object
-cmdlet.
De Group-Object
-cmdlet geeft terug hoeveel rijen aanwezig waren in de uitvoer als de eigenschap Count
. Vervolgens, door de uitvoer te beperken tot alleen de eigenschap Count
en Name
(waarde voor MeterCategory
), kunt u zien hoeveel gebruiksrapportrijen er zijn voor alle Azure-resourcetypen.
Zoals je kunt zien in de onderstaande schermafbeelding, zijn er 768 vermeldingen voor Virtual Machines in het rapport.

Om dit filterconcept een stap verder te brengen, kun je ook gebruikmaken van berekende eigenschappen om een vriendelijkere uitvoer te creëren, zoals hieronder wordt getoond.
Wanneer je de bovenstaande codefragment uitvoert, zou je een uitvoer moeten zien die vergelijkbaar is met wat je hieronder ziet.

Ideeën voor het uitbreiden van het rapport
Met de code in dit artikel kun je de functionaliteit van de zojuist gecreëerde tool op vele verschillende manieren uitbreiden.
Je kunt de uitvoer bijvoorbeeld exporteren naar een CSV-bestand en je gegevens in Excel manipuleren of een HTML-rapport maken met behulp van ConvertTo-HTML of de EnhancedHTML2 PowerShell-module.
Ga nog een stap verder en voeg ook een e-mailmelding toe aan het resultaat met de Send-MailMessage cmdlet. De wereld ligt aan je voeten!
Samenvatting
In deze post heb je geleerd hoe je rapporten over het gebruik van resources uit Azure kunt halen. Je hebt ook geleerd hoe je een aangepaste PowerShell-functie kunt bouwen om het proces te automatiseren en die functie kunt gebruiken om de uitvoer te manipuleren.
De volgende keer dat je wordt verrast door een onverwachte Azure-rekening, heb je geen excuus meer! Bouw zelf een PowerShell-functie om op elk moment Azure-brongebruik op te vragen en zo een oogje te houden op die rekening.
Verder lezen
Source:
https://adamtheautomator.com/azure-detailed-usage-report/