Einer der wichtigsten Aspekte beim Betrieb von Arbeitslasten in Azure ist die Überwachung der Ausgaben. Dies geschieht durch die Verfolgung der Ressourcennutzung mithilfe eines detaillierten Azure-Nutzungsberichts. In diesem Artikel erfahren Sie, wie Sie ein PowerShell-Skript erstellen, um die Azure-Ressourcennutzung und -kosten über alle Ihre Azure-Ressourcen hinweg nach Datum abzufragen.
Ressourcen in Azure verursachen kontinuierlich Kosten auf verschiedene Weise. Obwohl Sie die Ressourcennutzung über ein Webportal einsehen können, ist dies begrenzt. Mit Hilfe einiger PowerShell-Cmdlets können Sie jedoch einen praktischen Bericht erstellen, der Ihnen einen Überblick darüber gibt, welche Art von Nutzung (und damit verbundene Kosten) Ihre Azure-Ressourcen haben.
Dieser Artikel wurde aus einem TechSnips-YouTube-Video erstellt. Wenn Sie eher visuell lernen, können Sie sich gerne das Video ansehen. Andernfalls lesen Sie weiter!
Abrufen von Berichten über das Azure Account Center
Sie können viele verschiedene Nutzungsberichte aus dem Azure Account Center herunterladen. Das Azure Account Center ist ein Webportal, das es Ihnen ermöglicht, Ihren Abrechnungszyklusverlauf einzusehen, Rechnungen herunterzuladen und eine Übersicht über Ihr Azure-Abonnement zu erhalten.
Obwohl Sie Azure-Nutzungsberichte über das Azure Account Center herunterladen können, besteht keine Flexibilität bei der Auswahl eines Datumsbereichs. Sie können die Nutzung nicht auf einen bestimmten Zeitraum beschränken, da die Daten so festgelegt sind, dass sie mit Ihrem Abrechnungszyklus übereinstimmen.
Unten sehen Sie ein Beispiel für einen Abrechnungszeitraum und Links zum Herunterladen von Nutzungsberichten.

In diesen Nutzungsberichten finden Sie viele weitere Informationen, die Sie möglicherweise nicht benötigen.
Möglicherweise benötigen Sie Nutzungsberichte für die letzten 60 Tage. Um diese Informationen mithilfe des Azure Account Center zu erhalten, müssten Sie Nutzungsberichte für mindestens drei Abrechnungszyklen herunterladen, um alle erforderlichen Daten abzudecken.
Nachdem die Berichte heruntergeladen wurden, müssten Sie dann die überschüssigen Daten entfernen. Sie müssten dann eine Möglichkeit finden, diese Daten irgendwie zusammenzufassen. Nein danke! Das ist zu viel Aufwand.
Mit PowerShell können Sie ein wiederverwendbares Skript, eine Funktion oder ein Modul erstellen, um Azure-Ressourcennutzungsberichte abzurufen. Diese können wiederum manuell mit ein paar Zeilen Befehlen oder als geplante Aufgabe zur Automatisierung der Ausführung ausgeführt werden.
Voraussetzungen
Dies ist ein Schritt-für-Schritt-Artikel. Um mitzumachen, müssen Sie einige Dinge bereithalten.
- Windows 10 oder neuer.
- Windows Powershell v5.1
- A script editor, like Notepad++ or an Integrated Scripting Environment (ISE) like Windows PowerShell ISE and Visual Studio Code.
- Ein Azure-Abonnement.
- Das Azure PowerShell-Modul. Die neueste Version zum Zeitpunkt dieses Beitrags ist 2.6.0. Dieses Modul muss auf Ihrem Computer installiert sein. Wenn Sie es noch nicht haben, können Sie es mit PowerShellGet
- Eine etablierte Verbindung zu Azure mit dem Connect-AzAccount Cmdlet
Wie man Ressourcennutzungsdaten erhält
Bevor wir das Skript erstellen, diskutieren wir zuerst die Grundlagen unter Verwendung des Get-UsageAggregates
-Cmdlets. Dies ist ein Cmdlet, mit dem Sie Azure-Ressourcennutzung nach Datum, Metriken wie Stunden oder Tage und mehr abrufen können. Das Get-UsageAggregates
-Cmdlet ist das Haupt-Cmdlet, das den Großteil der Magie ausführt, die Sie in diesem Artikel lernen werden.
Um das Get-UsageAggregates
-Cmdlet zu demonstrieren, nehmen wir an, Sie müssen die Azure-Ressourcennutzung vom 1. April 2019 bis zum 12. September 2019 finden. Die gleiche Technik kann für jeden beliebigen Zeitraum verwendet werden. Im Folgenden finden Sie einen Ausschnitt, um die Nutzungsinformationen basierend auf diesen Daten zu finden.
Parameter | Value | Usage Explanation |
ReportStartTime | 04-01-19 | This is the oldest date you want to retrieve.
(Monat Tag Jahr) |
ReportEndTime | 09-12-19 | This is the latest date you want to retrieve.
(Monat Tag Jahr) |
AggregationGranularity | Hourly | The granularity of data to return. Valid values are “Daily” and “Hourly” |
ShowDetails | $True | Indicates whether the instance-level details are expanded |
Wenn Daten zurückgegeben werden, sollten Sie ähnliche Ergebnisse wie in diesem Screenshot sehen. Sie können sehen, dass die tatsächlichen Nutzungsdaten in der UsageAggregations
-Eigenschaft gespeichert sind.

Umgang mit Paging in Get-UsageAggregates
In dem obigen Abschnitt ist es üblich, dass der Befehl viele tausend Objekte zurückgibt, insbesondere für lange Zeiträume. Um die API nicht zu überlasten, gibt der Befehl Get-UsageAggregates
maximal 1000 Ergebnisse zurück. Wenn Sie die Variable $usageData
wie im vorherigen Abschnitt gespeichert haben, können Sie dies bestätigen, indem Sie den Befehl $usageData.UsageAggregations.count
ausführen.
Was ist, wenn es mehr als 1000 Ergebnisse gibt? Du musst ein wenig mehr Arbeit leisten.
Wenn du die von Get-UsageAggregates
zurückgegebenen Eigenschaften untersuchst, wirst du eine Eigenschaft namens ContinuationToken
bemerken, wie unten gezeigt. Du kannst sehen, dass dieser Token eine lange Zeichenkette ist.

Der ContinuationToken
ist ein Zeiger auf den nächsten Satz von Ergebnissen. Diese Eigenschaft fungiert als Lesezeichen, um zu wissen, von welcher Seite die nächsten Ergebnisse abgerufen werden sollen.
Zur Veranschaulichung: Rufe das letzte Element im vorherigen Ergebnis mit $usageData.UsageAggregations[-1]
ab, wie unten gezeigt. Beachte die Zeiten für Usage Start
und Usage End
.

Gib nun dieselben Parameter erneut an den Befehl Get-UsageAggregates
weiter. Verwende jedoch diesmal den Parameter ContinuationToken
und den Wert der zuvor zurückgegebenen Eigenschaft ContinuationToken
. Unten siehst du ein Beispiel, wie dies gemacht wird.
Rufe nun das letzte Element im Array UsageAggregations
mit $usageData.UsageAggregations[-1]
ab. Vergleiche es mit dem vorherigen Ergebnis, um zu bestätigen, dass die neuen Ergebnisse unterschiedlich sind.
Der Vergleich sollte ähnlich aussehen wie die unten gezeigten. Beachte, dass die Datumsbereiche sieben Tage auseinanderliegen. Durch Verwendung des ContinuationToken
hast du die zweite Seite der Ergebnisse abgerufen.


Erstellen einer Azure-Ressourcen-Nutzungsberichtsfunktion
Sie sollten wissen, wie das Paging funktioniert und wie Sie die Eigenschaft und den Parameter „ContinuationToken“ verwenden können. Aber was ist, wenn Sie Zehntausende oder sogar Hunderttausende von Ergebnissen abrufen müssen? Das manuelle Verwenden des Tokens auf diese Weise funktioniert nicht besonders gut.
Lasst uns ein PowerShell-Skript erstellen, das diese Paging-Anforderung für uns behandelt und uns einige weitere Flexibilität ermöglicht. Mit diesem Skript können Sie Ihre eigenen Parameter angeben und die Paging-Anforderung behandeln. Es gibt Ihnen auch die Flexibilität, es später zu erweitern, um bei Bedarf andere Aufgaben auszuführen.
Erstellen der Parameter
Zuerst erstellen Sie ein Funktionsskelett. Im Folgenden sehen Sie ein Beispiel für eine Funktion namens „Get-AzureUsage“. Diese Funktion hat drei Parameter, die Ihnen vielleicht bekannt vorkommen.
Zuvor wurden diese Parameter direkt im „Get-UsageAggregates“ Cmdlet definiert. Sie erstellen jetzt jedoch eine „Wrapper“-Funktion, die Werte an dieses Cmdlet übergibt.
Im Folgenden finden Sie eine Tabelle mit weiteren Informationen zu all diesen Parametern.
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. |
Abrufen der Ressourcennutzung
Sobald die Funktion erstellt und alle Parameter definiert wurden, ist es an der Zeit, den Rest der Funktion auszufüllen.
Im Folgenden sehen Sie den Rest der „Get-AzureUsage“ Funktion. Beachten Sie die Kommentare für ein tieferes Verständnis dessen, was der Code tut.
Das abgeschlossene Skript (kopierbar)
Nachdem Sie die Parameter und den Funktionscode zusammengefügt haben, erhalten Sie ein abgeschlossenes Skript, wie Sie unten sehen können. Sie können dies nun in Ihr eigenes Skript oder direkt in die PowerShell-Konsole kopieren, um es zu testen.
Abrufen von Ressourcennutzung mit unserer Funktion
Jetzt ist es an der Zeit, die Funktion zu testen. Entweder fügen Sie den obenstehenden Code in ein Skript ein und dot sourcen Sie es in Ihre aktuelle PowerShell-Sitzung ein oder kopieren Sie den Code direkt in die PowerShell-Sitzung.
Tipp: Wenn Sie PowerShell ISE oder Visual Studio Code verwenden, können Sie den Code, den Sie importieren möchten, markieren und F8 drücken. Andernfalls ist es einfacher, den Code in eine PowerShell-Sitzung zu kopieren und einzufügen.
Führen Sie nun die Funktion aus, indem Sie einen Wert für FromTime
, ToTime
und das gewünschte Intervall angeben, um die Ergebnisse anzuzeigen. Sie können unten ein Beispiel sehen, wie Sie diese Funktion aufrufen.
Sobald dies ausgeführt wird, sehen Sie einige ausführliche Meldungen, wenn Sie den optionalen Verbose
-Parameter verwendet haben. Wie Sie aus dem folgenden Beispiel sehen können, beträgt die Anzahl der Nutzungsmeldungen 4.659. Sie werden auch bemerken, dass die Funktion die Funktion Get-UsageAggregates
viermal ausgeführt hat, um jeweils die nächste Seite der Ergebnisse zu erhalten. Die Funktion konnte dies tun, weil sie für jeden Aufruf den richtigen ContinuationToken
-Wert verwendet hat.

Filtern des Berichts
Zu diesem Zeitpunkt enthält der Bericht alle Nutzungsdetails zu allen verfügbaren Ressourcentypen. Sie können jedoch den Bericht filtern, um nur die gewünschte Ressource anzuzeigen. Dazu könnten Sie entweder die Funktion erweitern, um diese Funktionalität zu ermöglichen, oder die Ausgabe an andere PowerShell-Cmdlets weiterleiten.
Die Ausgabe der Funktion Get-Azure
enthält alle Ressourcentypen, aber auch eine Eigenschaft namens MeterCategory
. Diese Eigenschaft definiert den Typ der Ressource, die diese Zeile darstellt. Um beispielsweise nur Berichte über die Nutzung von Azure Virtual Machines zu erhalten, könnten Sie alle Objekte mit einer MeterCategory
von Virtual Machines
mit dem Cmdlet Group-Object
gruppieren.
Das Cmdlet Group-Object
gibt zurück, wie viele Zeilen in der Ausgabe vorhanden waren, als Eigenschaft Count
. Dann können Sie die Ausgabe auf die Eigenschaften Count
und Name
(Wert für MeterCategory
) beschränken, um zu sehen, wie viele Nutzungsberichtszeilen für alle Azure-Ressourcentypen vorhanden sind.
Wie Sie im untenstehenden Screenshot sehen können, gibt es 768 Einträge für virtuelle Maschinen im Bericht.

Um dieses Filterkonzept noch weiter zu entwickeln, könnten Sie auch berechnete Eigenschaften nutzen, um eine benutzerfreundlichere Ausgabe zu erstellen, wie unten gezeigt.
Wenn Sie den obigen Code-Ausschnitt ausführen, sollten Sie eine ähnliche Ausgabe wie unten sehen.

Ideen zur Erweiterung des Berichts
Mit dem in diesem Artikel gezeigten Code können Sie die Funktionalität des erstellten Tools auf verschiedene Weise erweitern.
Sie könnten die Ausgabe in eine CSV-Datei exportieren und Ihre Daten in Excel bearbeiten oder einen HTML-Bericht mit ConvertTo-HTML oder dem PowerShell-Modul EnhancedHTML2 erstellen.
Gehen Sie noch einen Schritt weiter und fügen Sie der Ausgabe eine E-Mail-Benachrichtigung mit dem Cmdlet Send-MailMessage hinzu. Die Welt steht Ihnen offen!
Zusammenfassung
In diesem Beitrag haben Sie gelernt, wie Sie Nutzungsberichte für Ressourcen aus Azure abrufen können. Sie haben auch gelernt, wie Sie eine benutzerdefinierte PowerShell-Funktion erstellen, um den Prozess zu automatisieren und die Ausgabe zu manipulieren.
Das nächste Mal, wenn Sie mit einer unerwarteten Azure-Rechnung konfrontiert werden, haben Sie keine Ausrede! Erstellen Sie sich selbst eine PowerShell-Funktion, um die Azure-Ressourcennutzung jederzeit abzufragen und ein Auge auf diese Rechnung zu haben.
Weitere Informationen
Source:
https://adamtheautomator.com/azure-detailed-usage-report/