Freigeben über


Verarbeitung von Daten in FinOps-Hubs

FinOps-Hubs führen viele Datenverarbeitungsaktivitäten aus, um Daten zu bereinigen, zu normalisieren und zu optimieren. In den folgenden Abschnitten wird gezeigt, wie Daten aus Kostenverwaltung in eine Hubinstanz fließen.


Bereichseinrichtung

Ein Bereich ist eine Ebene innerhalb der Cloudressourcen- und Kontohierarchie, die Zugriff auf Kosten-, Nutzungs- und Co2-Daten bietet. Für FinOps-Hubs empfehlen wir in der Regel die Verwendung von Konzernvertrag (EA)-Abrechnungskonten oder Microsoft-Kundenvereinbarung (MCA)-Abrechnungsprofilen, jedoch reicht jeder Cloudumfang für die grundlegende Analyse aus. Das Hauptproblem besteht darin, ob Preis- und Reservierungsdaten erforderlich sind, da die Kostenverwaltung nur die Daten für EA-Abrechnungskonten und MCA-Abrechnungsprofile verfügbar macht.

FinOps-Hubs unterstützen die Konfiguration von Bereichen durch manuelle Konfiguration von Kostenverwaltungsexporten oder durch Gewähren des Zugriffs auf FinOps-Hubs zum Verwalten von Bereichen in Ihrem Auftrag. Verwaltete Bereiche werden in der Config/settings.json-Datei im Hubspeicher konfiguriert. In den Informationen wird beschrieben, was passiert, wenn in dieser Datei ein neuer verwalteter Bereich hinzugefügt wird. Nicht verwaltete Bereiche, bei denen Kostenverwaltungsexporte manuell konfiguriert werden, erfordern keine andere Einrichtung.

Diagramm, das den Bereichseinrichtungsprozess darstellt.

  1. Der config_SettingsUpdated Trigger wird ausgeführt, wenn die settings.json Datei aktualisiert wird.
  2. Die config_ConfigureExports Pipeline erstellt neue Exporte für alle neuen Bereiche, die hinzugefügt wurden.

Datenerfassung

Das folgende Diagramm zeigt den End-to-End-Datenaufnahmeprozess innerhalb von FinOps-Hubs:

Diagramm, das den Datenaufnahmeprozess darstellt.

  1. (Optional) Bei Verwendung von verwalteten Exporten:
    1. Die config_DailySchedule und config_MonthlySchedule Trigger laufen auf ihren jeweiligen Zeitplänen aus, um die Datenaufnahme zu starten.
    2. Die config_StartExportProcess Pipeline ruft die entsprechenden Exporte für den ausgeführten Zeitplan ab.
    3. Die config_RunExportJobs Pipeline führt jeden der ausgewählten Exporte aus.
  2. Kostenverwaltung exportiert Rohkostendetails in den Msexports-Container . Weitere Informationen
  3. Die msexports_ExecuteETL-Pipeline reiht die ETL-Pipeline (Extrahieren, Transformieren und Laden) in die Warteschlange ein, wenn dem msexports-Container Dateien hinzugefügt werden.
  4. Die msexports_ETL_ingestion-Pipeline wandelt die Daten in das Parquet-Format um und verschiebt sie mithilfe einer skalierbaren Dateistruktur in den Ingestion-Container. Weitere Informationen
  5. (Optional) Bei Verwendung von Azure Data Explorer:
    1. Die ingestion_ExecuteETL-Pipeline reiht die Data Explorer-Erfassungspipeline in die Warteschlange ein, wenn dem ingestion-Container manifest.json-Dateien hinzugefügt werden.
      • Wenn Sie benutzerdefinierte Datasets außerhalb der Kostenverwaltungsexporte aufnehmen, erstellen Sie eine leere manifest.json Datei im Zielaufnahmeordner, nachdem alle anderen Dateien bereit sind (fügen Sie diese Datei nicht hinzu, wenn Dateien weiterhin hochgeladen werden). Die manifest.json Datei wird nicht analysiert und kann leer sein. Der einzige Zweck besteht darin, anzugeben, dass alle Dateien für diesen Aufnahmeauftrag hinzugefügt werden.
    2. Die ingestion_ETL_dataExplorer-Pipeline erfasst Daten in der {dataset}_raw-Tabelle in Data Explorer.
      • Der Datasetname ist der erste Ordner im ingestion-Container.
      • Alle raw-Tabellen befinden sich in der Ingestion-Datenbank in Data Explorer.
    3. Wenn Daten in raw-Tabellen in Data Explorer aufgenommen werden, kopiert eine Updaterichtlinie die Daten mithilfe der {dataset}_final_v1_0-Funktion in die entsprechende {dataset}_transform_v1_0()-Tabelle, um alle Daten so zu normalisieren, dass sie FOCUS 1.0 entsprechen.
    4. Nach der Erfassung führt die ingestion_ETL_dataExplorer-Pipeline einige Bereinigungen durch, einschließlich der Löschung von Daten in der endgültigen Tabelle, deren Aufbewahrungszeitraum abgelaufen ist.
      • Ab Version 0.7 wendet Data Explorer die Datenaufbewahrung in Rohdatentabellen an, während die Datenaufbewahrung in endgültigen Tabellen von der Ingestionspipeline durchgeführt wird. Wenn die Datenaufnahme beendet wird, werden historische Daten nicht gelöscht.
      • Die Datenaufbewahrung kann während der Vorlagenbereitstellung oder manuell in der Config/settings.json Datei im Speicher konfiguriert werden.
  6. Berichte und andere Tools wie Power BI lesen Daten aus Data Explorer oder dem ingestion-Container.
    • In Data Explorer können Daten aus der Hub-Datenbank gelesen werden.
      • Verwenden Sie die {dataset}() Funktion, um das neueste Schema zu verwenden.
        • Diese Funktion ist nützlich für eine schnelle Erkundung, kann jedoch wichtige Änderungen verursachen, wenn die FinOps-Hubinstanz aktualisiert wird.
      • Verwenden Sie die {dataset}_v1_0() Funktion, um das FOCUS 1.0-Schema zu verwenden.
        • Versionierte Funktionsschemata sollten sich im Laufe der Zeit nicht ändern, aber die Werte können sich ändern, wenn die Datenquelle sie ändert.
      • Die Ingestion-Datenbank sollte nicht für Abfragen verwendet werden. Die Erfassungsdatenbank sollte zwar nicht explizit verboten werden, sollte jedoch als interner Bereich für die Staging- und Datenvorbereitung betrachtet werden.
    • Daten im Speicher können aus ingestion/<dataset>/<year>/<month>/<scope-path> gelesen werden.
      • Daten sollten rekursiv aus dem Datasetordner gelesen werden, wobei bei Bedarf weitere Ordner für eine höhere Genauigkeit eingeschlossen werden sollten.
      • Dateien in jedem Datasetordner verfügen möglicherweise über unterschiedliche Schemas basierend auf der Datenquelle und dem Kontotyp. Seien Sie darauf vorbereitet, Daten zu transformieren, wenn sie in anderen Systemen wie Microsoft Fabric erfasst werden.
      • Das Lesen vom Speicher wird aufgrund von Leistungsgründen abgeraten. Der Daten-Explorer wird empfohlen, wenn mehr als 1 Mio. US-Dollar Kosten anfallen.

Informationen zur Erfassung in Data Explorer

Wenn Daten in den Daten-Explorer aufgenommen werden, wenden die {dataset}_transform_v1_0() Funktionen Transformationsregeln in der Erfassungsdatenbank an. Jedes Dataset verfügt über einen anderen Satz von Transformationsregeln, die in den folgenden Abschnitten behandelt werden.

Eine Liste der angeforderten Änderungen, in Betracht gezogener Ideen und offenen Fragen zu den zugrunde liegenden Cost Management-Datasets finden Sie in Issue Nr. 1111. Hinterlassen Sie Kommentare zu diesem Problem, wenn Sie Möglichkeiten finden, Bedenken zu beheben oder Ihre Unterstützung für alle spezifischen Probleme zu äußern.

Transformationen von Kostendaten

Unterstützte Datensätze:

  • Microsoft FocusCost: 1.0r2, 1.01.0-preview(v1)

Die folgenden Datasets wurden im Design berücksichtigt, werden jedoch nicht nativ unterstützt. Um diese Datasets zu erfassen, erstellen Sie eine Datenpipeline (oder einen externen Prozess), die (bzw. der) die Parquet-Dateien in den ingestion/Costs/yyyy/mm/{scope-path}-Ordner im Speicher verschiebt. {scope-path} kann ein beliebiger eindeutiger Pfad wie aws/123 oder gcp/projects/foo sein. Die einzige Anforderung besteht darin, sicherzustellen, dass sich jeder Bereich in einem separaten Ordner befindet. Erstellen Sie nach dem Kopieren externer Inhalte auch eine manifest.json-Datei, um die Erfassung in Data Explorer auszulösen.

  • Amazon Web Services (AWS) FOCUS 1.0
  • Google Cloud Platform (GCP) FOCUS 1.0
  • Oracle Cloud Infrastructure (OCI) FOCUS 1.0

Transformationen:

  • v0.7+:
    • Anpassung der Spaltennamen von FOCUS 1.0-Vorschau an FOCUS 1.0.
      • Enthält die Konvertierung der FOCUS 1.0-Vorschau auf 1.0.
    • Fügen Sie x_IngestionTime hinzu, um anzugeben, wann die Zeile zuletzt aktualisiert wurde.
    • Fügen Sie x_SourceChanges hinzu, um zu erkennen, wann Daten in einer Zeile von den Hubs geändert werden.
    • Aktualisieren Sie ProviderName und PublisherName, wenn sie nicht angegeben sind.
    • Fügen Sie x_SourceName, x_SourceProvider, x_SourceType und x_SourceVersion hinzu, um das ursprünglich erfasste Dataset zu ermitteln.
    • Füllen Sie die fehlenden ListCost-, ListUnitPrice-, ContractedCost- und ContractedUnitPrice-Werte auf Basis des Preisblatts auf.
      • Bei diesem Prozess müssen die Preise vor den Kosten exportiert werden. Die Preise für den ersten Tag des Monats fehlen, wenn die Kosten bereits erfasst werden, bevor die Preise für den Monat verfügbar sind.
    • Korrigiere ContractedCost, wenn es aufgrund eines Fehlers im Kostenmanagement fehlerhaft eingestellt wurde.
    • Setzen Sie ResourceName und x_ResourceGroupName in Kleinbuchstaben, um Probleme mit der Einheitlichkeit von Groß- und Kleinschreibung zu beheben, die das Gruppieren und Filtern beeinträchtigen.
    • Fügen Sie x_BillingAccountAgreement basierend auf dem Kontotyp hinzu.
  • v0.8+:
    • Korrigieren Sie alle ResourceType Werte, die interne Ressourcentyp-IDs verwenden (z. B. microsoft.compute/virtualmachines).
  • v0.9+:
    • Kleinschreibung von BillingAccountId, um sicherzustellen, dass die Preisverknüpfung für alle Zeilen passt.
    • Setzen Sie CommitmentDiscountId in Kleinbuchstaben, um doppelte Zeilen beim Aggregieren von Daten zu vermeiden.
    • Fügen Sie neue x_SourceChanges Prüfungen für ListCostLessThanContractedCost und ContractedCostLessThanEffectiveCost.
  • v0.10+:
    • Beheben Sie x_EffectiveUnitPrice, wenn es berechnet wird und ein Rundungsfehler im Vergleich zu x_BilledUnitPrice oder ContractedUnitPrice auftritt.
    • Berechnen Sie PricingQuantity und Verbrauchsmenge, wenn Kosten, aber keine Mengen vorhanden sind.
    • Legen Sie ContractedCost auf EffectiveCost fest, wenn es nicht festgelegt ist.
    • Legen Sie ListCost auf ContractedCost fest, wenn es nicht festgelegt ist.
    • Entfernen Sie "-2" in der x_InvoiceSectionId Spalte.
    • Entfernen Sie "Nicht zugewiesen" in der x_InvoiceSectionName Spalte.
    • Korrigiert x_EffectiveUnitPrice, wenn dieses berechnet wird und einen Rundungsfehler aufweist.
    • Fügen Sie neue x_SourceChanges Überprüfungen für MissingConsumedQuantity, MissingPricingQuantityund XEffectiveUnitPriceRoundingError.
  • v0.11+:
    • Ändern Sie BillingPeriodStart und BillingPeriodEnd so, dass sie der erste des Monats sind.

Transformationen von Preisdaten

Unterstützte Datensätze:

  • Microsoft PriceSheet: 2023-05-01 (EA und MCA)

Transformationen:

  • v0.7+
    • Richten Sie die Spaltennamen an FOCUS 1.0 aus.
      • Umfasst die Erzwingung der Einheitlichkeit von EA- und MCA-Spaltennamen.
      • Ändert nicht die zugrunde liegenden Werte, die sich in EA und MCA unterscheiden können.
    • Wandeln Sie x_SkuTerm die ISO-Dauer in die bestimmte Anzahl von Monaten um, um die Kostendetails abzugleichen.
      • Wir warten darauf, dass FOCUS bestimmt, wie Dauer definiert werden soll, bevor dieser Wert in ISO oder ein anderes Format geändert wird.
    • Ersetzen Sie ContractedUnitPrice für die Nutzung des Sparplans durch das On-Demand-Äquivalent.
    • Setzen Sie ListUnitPrice für das Sparplanverbrauchsset auf das On-Demand-Äquivalent fest.
    • Fügen Sie SkuPriceIdv2 als genaueren SkuPriceId-Wert als den hinzu, der derzeit in den Kostendetails enthalten ist.
    • Fügen Sie x_IngestionTime hinzu, um anzugeben, wann die Zeile zuletzt aktualisiert wurde.
    • Fügen Sie x_CommitmentDiscountSpendEligibility und x_CommitmentDiscountUsageEligibilityhinzu.
    • Teilen Sie x_PricingUnitDescription in PricingUnit und x_PricingBlockSizeauf.
    • Fügen Sie x_BillingAccountAgreement basierend auf dem Kontotyp hinzu.
    • Ändern Sie x_EffectivePeriodEnd zu einem exklusiven Enddatum.
    • Fügen Sie x_EffectiveUnitPriceDiscount, x_ContractedUnitPriceDiscountund x_TotalUnitPriceDiscount hinzu, um verfügbare Rabatte pro SKU zusammenzufassen.
    • Fügen Sie x_EffectiveUnitPriceDiscountPercent, x_ContractedUnitPriceDiscountPercentund x_TotalUnitPriceDiscountPercent hinzu, um den Prozentsatz des Rabatts pro SKU zusammenzufassen.
    • Fügen Sie x_SourceName, x_SourceProvider, x_SourceType und x_SourceVersion hinzu, um das ursprünglich erfasste Dataset zu ermitteln.
  • v0.9+:
    • Kleinschreibung von BillingAccountId, um sicherzustellen, dass die Preisverknüpfung für alle Zeilen passt.

Transformationen von Empfehlungsdaten

Unterstützte Datensätze:

  • Microsoft ReservationRecommendations: 2023-05-01 (EA und MCA)

Transformationen:

  1. Richten Sie die Spaltennamen an FOCUS 1.0 aus.
    • Umfasst die Erzwingung der Einheitlichkeit von EA- und MCA-Spaltennamen.
    • Ändert nicht die zugrunde liegenden Werte, die sich in EA und MCA unterscheiden können.
  2. Fügen Sie x_SourceName, x_SourceProvider, x_SourceType und x_SourceVersion hinzu, um das ursprünglich erfasste Dataset zu ermitteln.

Transformationen von Transaktionsdaten

Unterstützte Datensätze:

  • Microsoft ReservationTransactions: 2023-05-01 (EA und MCA)

Transformationen:

  1. Richten Sie die Spaltennamen an FOCUS 1.0 aus.
    • Umfasst die Erzwingung der Einheitlichkeit von EA- und MCA-Spaltennamen.
    • Ändert nicht die zugrunde liegenden Werte, die sich in EA und MCA unterscheiden können.
  2. Fügen Sie x_SourceName, x_SourceProvider, x_SourceType und x_SourceVersion hinzu, um das ursprünglich erfasste Dataset zu ermitteln.

Transformation von Verpflichtungsrabattnutzungsdaten

Unterstützte Datensätze:

  • Microsoft ReservationDetails: 2023-03-01 (EA und MCA)

Transformationen:

  1. Richten Sie die Spaltennamen an FOCUS 1.0 aus.
    • Umfasst die Erzwingung der Einheitlichkeit von EA- und MCA-Spaltennamen.
    • Ändert nicht die zugrunde liegenden Werte, die sich in EA und MCA unterscheiden können.
  2. Fügen Sie die ResourceType-Spalte mit dem Anzeigenamen des Ressourcentyps hinzu.
  3. Fügen Sie Spalten ServiceName, ServiceCategoryund x_ServiceModel hinzu.
  4. Ersetzen Sie „NA“ für x_CommitmentDiscountNormalizedGroup durch NULL.
  5. Fügen Sie x_CommitmentDiscountQuantity basierend auf FOCUS 1.1 hinzu.

Informationen zum Erfassungscontainer

FinOps-Hubs basieren auf einem bestimmten Format für Ordnerpfade und Dateinamen im ingestion-Speichercontainer.

ingestion/{dataset}/{date-folder-path}/{scope-id-path}/{ingestion-id}__{original-file-name}.parquet
  • ingestion ist der Container, in dem die Datenpipeline Daten speichert.
  • {dataset} ist der exportierte Datasettyp. Wenn sie in Azure Data Explorer aufgenommen werden, muss die Erfassungsdatenbank eine übereinstimmende Tabelle "_raw" (z. B. "Costs_raw") aufweisen. FinOps-Hubs unterstützen die folgenden Datasets in dieser Version:
    • CommitmentDiscountUsage: Export von Cost Management-Reservierungsdetails.
    • Kosten – FOCUS-Kosten- und Nutzungsdaten.
    • Prices: Export des Cost Management-Preisblatts.
    • Recommendations: Export von Cost Management-Reservierungsempfehlungen.
    • Transactions: Export von Cost Management-Reservierungstransaktionen.
    • Um benutzerdefinierte Datasets zu erfassen, erstellen Sie eine entsprechende {dataset}_raw-Tabelle und Parquet-Erfassungszuordnung in der Ingestion-Datenbank.
  • {date-folder-path} kann aus einem oder mehreren Verzeichnissen bestehen, die angeben, wie viele ingestierte Datensätze aufbewahrt werden sollen. Beispiele
    • all (oder ein beliebiger Platzhalter), um den Verlauf des Datasets nicht nachzuverfolgen. Jede Aufnahme ersetzt die vorherigen Daten. In speicherbasierten Power BI-Berichten wird dies nicht unterstützt.
    • {yyyy} als ein vierstelliges Jahr des exportierten Datasets, damit pro Jahr nur die neueste Erfassung aufbewahrt wird. In speicherbasierten Power BI-Berichten wird dies nicht unterstützt.
    • {yyyy}/{mm} als ein vierstelliger Jahres- und zweistelliger Monat des exportierten Datasets, um die neueste Aufnahme pro Monat beizubehalten.
    • {yyyy}/{mm}/{dd} als ein vierstelliger Jahres-, zweistelliger Monat und zweistelliger Tag des exportierten Datasets, um die neueste Aufnahme pro Tag beizubehalten. In speicherbasierten Power BI-Berichten wird dies nicht unterstützt.
  • {scope-id-path} ist die vollqualifizierte Ressourcen-ID des Bereichs, von dem die Daten stammen. Wir empfehlen, beim Erfassen von Nicht-Azure-Daten eine logische Hierarchie basierend auf dem Datenumfang zu verwenden, zum Beispiel aws/{account-id}, gcp/{project-name}, oci/{component-id}/{component-id}.
  • {ingestion-id} ist eine eindeutige ID für den aufgenommenen Datensatz. Diese ID kann eine GUID, ein Zeitstempel oder ein beliebiger Wert sein, solange sie für alle Dateien für das aufgenommene Dataset konsistent ist. Dieser Wert wird verwendet, um zuvor aufgenommene Daten im selben Ordnerpfad zu entfernen.
  • {original-file-name} ist der ursprüngliche Dateiname oder ein anderer Bezeichner, der angibt, wo die Daten in der Datei stammen. Dieser Wert dient nur zu Zwecken der Problembehandlung.

Der vollständige Ordnerpfad und die Aufnahme-ID werden beide verwendet, um sicherzustellen, dass Daten nicht im Speicher oder im Azure-Daten-Explorer dupliziert werden. Der ursprüngliche Dateiname wird zu Azure Data Explorer-Erweiterungen für Problembehandlungszwecke hinzugefügt, wird jedoch nicht anderweitig von FinOps-Hubs nachverfolgt oder verwendet.

Wenn Sie Hubs verwenden müssen, um Nicht-Azure-Daten zu überwachen, konvertieren Sie die Daten in FOCUS , und legen Sie sie mithilfe dieser Anleitung in den Aufnahmecontainer ab. Beachten Sie, dass die Unterstützung für Nicht-Azure-Daten in der neuesten Version nicht explizit getestet wurde. Wenn Probleme auftreten, erstellen Sie ein Problem.


Informationen zu Exporten

FinOps Hubs nutzen Kostenmanagementexporte, um Kostendaten zu erhalten. Cost Management steuert die Ordnerstruktur der exportierten Daten im msexports-Speichercontainer. Ein typischer Pfad sieht wie folgt aus:

{container}/{path}/{date-range}/{export-name}/{export-time}/{guid}/{file}

FinOps-Hubs verwenden die Manifestdatei, um den Bereich, das Dataset, den Monat usw. zu ermitteln. Der einzige für Hubs wichtige Pfadteil ist der Container, der msexportslauten muss.

Exportieren Sie keine Daten in den Ingestion-Container. Exportierte CSVs müssen im Msexports-Container veröffentlicht werden, damit sie vom Hubmodul verarbeitet werden.

Um benutzerdefinierte Daten aufzunehmen, speichern Sie FOCUS-ausgerichtete Parkettdateien im Ingestioncontainer für das FinOps-Toolkit Power BI-Berichte so, dass sie wie erwartet funktionieren. Nachdem alle Parkettdateien hinzugefügt wurden, fügen Sie eine leere manifest.json Datei hinzu, um die Aufnahme auszulösen.

Zum Aufnehmen einer CSV-Datei aus Kostenverwaltungsexporten speichern Sie Dateien in einem bestimmten Ordner im Container "msexports ". Nachdem alle Dateien hinzugefügt wurden, fügen Sie eine manifest.json Datei basierend auf der folgenden Vorlage hinzu. Nehmen Sie die folgenden Änderungen vor, um eine erfolgreiche Aufnahme sicherzustellen:

  1. Ändern Sie <export-name> sich in einen eindeutigen Wert innerhalb des Bereichs für das Dataset, das Sie aufnehmen.
    • Dies wird nur für Empfehlungen verwendet, um die vielen verschiedenen Arten von Empfehlungen zu unterscheiden, die aufgenommen werden, die nicht allein aus dem Exportmanifest identifizierbar sind. Für Reservierungsempfehlungen sollten Sie idealerweise den Dienst, den Umfang (einzeln/gemeinsam) und den Lookback-Zeitraum einschließen.
  2. Ändere <dataset> und <version> in den Exporttyp und die Version des Kostenmanagements. In der nachstehenden Liste finden Sie unterstützte Datasets.
  3. Ändern Sie <scope> die Azure-Ressourcen-ID für den Bereich, aus dem die Daten stammen.
  4. Ändern Sie <guid> in eine eindeutige GUID.
  5. Ändern Sie <yyyy-MM> in das Jahr und den Monat des Datasets.
  6. Ändern Sie <path-to-file> zu dem vollständigen Ordnerpfad im Container (schließen Sie "msexports" nicht ein).
  7. Ändern Sie <file-name> den Namen der ersten in den Speicher hochgeladenen Datei.
  8. Wenn Sie über mehrere CSV-Dateien verfügen, kopieren Sie das BLOB-Objekt für jede datei, die Sie hochgeladen haben, und aktualisieren Sie den Dateinamen.
{
  "blobCount": 1,
  "dataRowCount": 1,
  "exportConfig": {
    "exportName": "<export-name>",
    "type": "<dataset>",
    "dataVersion": "<version>",
    "resourceId": "<scope>/providers/Microsoft.CostManagement/exports/export-name"
  },
  "runInfo": {
    "runId": "<guid>",
    "startDate": "<yyyy-MM>-01T00:00:00"
  },
  "blobs": [
    {
      "blobName": "<path-to-file>/<file-name>.csv"
    }
  ]
}

FinOps-Hubs unterstützen die folgenden Datasettypen, Versionen und API-Versionen:

  • FocusCost: 1.0r2, 1.01.0-preview(v1)
  • Preisliste: 2023-05-01
  • Reservierungsdetails: 2023-03-01
  • Reservierungsempfehlungen: 2023-05-01
  • ReservierungsTransaktionen: 2023-05-01
  • API-Versionen: 2023-07-01-preview

FinOps Hubs v0.6

In den folgenden Abschnitten wird der Datenprozess in FinOps Hubs 0.6 erläutert.

Bereichssetup in v0.6

Die folgenden Schritte werden ausgeführt, wenn einer Hubinstanz ein neuer verwalteter Bereich hinzugefügt wird. Nicht verwaltete Bereiche (bei denen Kostenverwaltungsexporte manuell konfiguriert werden) erfordern keine Einrichtung in Hubs.

  1. Der config_SettingsUpdated Trigger wird ausgeführt, wenn die settings.json Datei aktualisiert wird.
  2. Die config_ConfigureExports Pipeline erstellt neue Exporte für alle neuen Bereiche, die hinzugefügt wurden.

Datenübernahme in v0.6

Die Datenaufnahme kann in zwei Teile unterteilt werden:

  1. Exportiert Pushdaten in den Speicher.
  2. Hubs verarbeitet und erfasst Daten.

Für verwaltete Bereiche führen Hubs die folgenden Schritte aus:

  1. Die config_DailySchedule und config_MonthlySchedule Trigger laufen auf ihren jeweiligen Zeitplänen aus, um die Datenaufnahme zu starten.
  2. Die config_StartExportProcess Pipeline ruft die entsprechenden Exporte für den ausgeführten Zeitplan ab.
  3. Die config_RunExportJobs Pipeline führt jeden der ausgewählten Exporte aus.
  4. Kostenverwaltung exportiert Rohkostendetails in den Msexports-Container . Weitere Informationen
  5. Die msexports_ExecuteETL-Pipeline reiht die ETL-Pipeline (Extrahieren, Transformieren und Laden) in die Warteschlange ein, wenn dem msexports-Container Dateien hinzugefügt werden.
  6. Die msexports_ETL_ingestion-Pipeline wandelt die Daten in das Parquet-Format um und verschiebt sie mithilfe einer skalierbaren Dateistruktur in den Ingestion-Container. Weitere Informationen
  7. Power BI oder andere Tools lesen Daten aus dem Ingestionscontainer.

Nachdem Exporte ausgeführt wurden, unabhängig davon, ob verwaltet oder nicht verwaltet, führen Hubs die folgenden Schritte aus:

  1. Die msexports_ExecuteETL Pipeline startet den ETL-Prozess (Extract-Transform-Load), wenn Dateien zum Speicher hinzugefügt werden.
  2. Die msexports_ETL_ingestion-Pipeline wandelt die Daten in das Parquet-Format um und verschiebt sie mithilfe einer skalierbaren Dateistruktur in den Ingestion-Container. Weitere Informationen
  3. Power BI oder andere Tools lesen Daten aus dem Ingestionscontainer.

Informationen zur Erfassung in v0.6

FinOps-Hubs basieren auf einem bestimmten Format für Ordnerpfade und Dateinamen im ingestion-Container:

ingestion/{dataset}/{date-folder-path}/{scope-id-path}/{ingestion-id}__{original-file-name}.parquet
  • ingestion ist der Container, in dem die Datenpipeline Daten speichert.
  • {dataset} ist der exportierte Datasettyp.
  • {date-folder-path} kann aus einem oder mehreren Verzeichnissen bestehen, die angeben, wie viele ingestierte Datensätze aufbewahrt werden sollen. Beispiele
    • all (oder ein beliebiger Platzhalter), um den Verlauf des Datasets nicht nachzuverfolgen. Jede Aufnahme ersetzt die vorherigen Daten. In speicherbasierten Power BI-Berichten wird dies nicht unterstützt.
    • {yyyy} als ein vierstelliges Jahr des exportierten Datasets, damit pro Jahr nur die neueste Erfassung aufbewahrt wird. In speicherbasierten Power BI-Berichten wird dies nicht unterstützt.
    • {yyyy}/{mm} als ein vierstelliger Jahres- und zweistelliger Monat des exportierten Datasets, um die neueste Aufnahme pro Monat beizubehalten.
    • {yyyy}/{mm}/{dd} als ein vierstelliger Jahres-, zweistelliger Monat und zweistelliger Tag des exportierten Datasets, um die neueste Aufnahme pro Tag beizubehalten. In speicherbasierten Power BI-Berichten wird dies nicht unterstützt.
  • {scope-id-path} ist die vollqualifizierte Ressourcen-ID des Bereichs, von dem die Daten stammen. Wenn Nicht-Azure-Daten aufgenommen werden, empfehlen wir die Verwendung einer logischen Hierarchie basierend auf dem Umfang der Daten (z. B. "aws/{account-id}", "gcp/{project-name}", "oci/{component-id}/{component-id}").
  • {ingestion-id} ist eine eindeutige ID für den aufgenommenen Datensatz. Diese ID kann eine GUID, ein Zeitstempel oder ein beliebiger Wert sein, solange sie für alle Dateien für das aufgenommene Dataset konsistent ist. Dieser Wert wird verwendet, um zuvor aufgenommene Daten im selben Ordnerpfad zu entfernen.
  • {original-file-name} ist der ursprüngliche Dateiname oder ein anderer Bezeichner, der angibt, wo die Daten in der Datei stammen. Dieser Wert dient nur zu Zwecken der Problembehandlung.

Der vollständige Ordnerpfad und die Aufnahme-ID werden beide verwendet, um sicherzustellen, dass Daten nicht im Speicher oder im Azure-Daten-Explorer dupliziert werden. Der ursprüngliche Dateiname wird zu Azure Data Explorer-Erweiterungen für Problembehandlungszwecke hinzugefügt, wird jedoch nicht anderweitig von FinOps-Hubs nachverfolgt oder verwendet.

Wenn Sie Hubs verwenden müssen, um Nicht-Azure-Daten zu überwachen, konvertieren Sie die Daten in FOCUS , und legen Sie sie mithilfe dieser Anleitung in den Aufnahmecontainer ab. Beachten Sie, dass die Unterstützung für Nicht-Azure-Daten in der neuesten Version nicht explizit getestet wurde. Wenn Probleme auftreten, erstellen Sie ein Problem.


Informationen zu Exporten in v0.6

FinOps-Hubs verwenden Kostenverwaltungsexporte, um Kostendaten zu erhalten. Die Kostenverwaltung steuert die Ordnerstruktur für die exportierten Daten im Msexports-Container . Ein typischer Pfad sieht wie folgt aus:

{container}/{path}/{date-range}/{export-name}/{export-time}/{guid}/{file}

Ab 0.4 verlassen sich FinOps-Hubs nicht auf Dateipfade. Hubs verwenden die Manifestdatei, um den Bereich, das Dataset, den Monat usw. zu identifizieren. Der einzige wichtige Teil des Pfads für Hubs ist der Container, der msexports sein muss.

Warnung

  • Exportieren Sie keine Daten in den Ingestion-Container. Exportierte CSVs müssen im Msexports-Container veröffentlicht werden, damit sie vom Hubmodul verarbeitet werden.
  • Um benutzerdefinierte Daten aufzunehmen, speichern Sie FOCUS-ausgerichtete Parkettdateien im Ingestioncontainer für das FinOps-Toolkit Power BI-Berichte so, dass sie wie erwartet funktionieren.

Exportmanifeste können sich mit API-Versionen ändern. Hier ist ein Beispiel mit API-Version 2023-07-01-preview:

{
  "exportConfig": {
    "exportName": "<export-name>",
    "resourceId": "/<scope>/providers/Microsoft.CostManagement/exports/<export-name>",
    "dataVersion": "<dataset-version>",
    "apiVersion": "<api-version>",
    "type": "<dataset-type>",
    "timeFrame": "OneTime|TheLastMonth|MonthToDate",
    "granularity": "Daily"
  },
  "deliveryConfig": {
    "partitionData": true,
    "dataOverwriteBehavior": "CreateNewReport|OverwritePreviousReport",
    "fileFormat": "Csv",
    "containerUri": "<storage-resource-id>",
    "rootFolderPath": "<path>"
  },
  "runInfo": {
    "executionType": "Scheduled",
    "submittedTime": "2024-02-03T18:33:03.1032074Z",
    "runId": "af754a8e-30fc-4ef3-bfc6-71bd1efb8598",
    "startDate": "2024-01-01T00:00:00",
    "endDate": "2024-01-31T00:00:00"
  },
  "blobs": [
    {
      "blobName": "<path>/<export-name>/<date-range>/<export-time>/<guid>/<file-name>.<file-type>",
      "byteCount": ###
    }
  ]
}

FinOps-Hubs verwenden die folgenden Eigenschaften:

  • exportConfig.resourceId um den Bereich zu identifizieren.
  • exportConfig.type um den Datasettyp zu identifizieren.
  • exportConfig.dataVersion um die Datasetversion zu identifizieren.
  • runInfo.startDate um den exportierten Monat zu identifizieren.

FinOps-Hubs unterstützen die folgenden Datasettypen, Versionen und API-Versionen:

  • FocusCost: 1.0, 1.0-preview(v1)
  • Preisliste: 2023-05-01
  • Reservierungsdetails: 2023-03-01
  • Reservierungsempfehlungen: 2023-05-01
  • ReservierungsTransaktionen: 2023-05-01
  • API-Versionen: 2023-07-01-preview

FinOps Hubs v0.4-0.5

Die folgenden Informationen beschreiben, wie Daten in FinOps Hubs v0.4 und v0.5 verarbeitet werden.

Bereichssetup in v0.4-0.5

  1. Der config_SettingsUpdated Trigger wird ausgeführt, wenn die settings.json Datei aktualisiert wird.
  2. Die config_ConfigureExports Pipeline erstellt neue Exporte für alle neuen Bereiche, die hinzugefügt wurden.

Datenerfassung in v0.4-0.5

Für verwaltete Bereiche:

  1. Die config_DailySchedule und config_MonthlySchedule Trigger laufen auf ihren jeweiligen Zeitplänen aus, um die Datenaufnahme zu starten.
  2. Die config_ExportData Pipeline ruft die entsprechenden Exporte für den ausgeführten Zeitplan ab.
  3. Die config_RunExports Pipeline führt jeden der ausgewählten Exporte aus.
  4. Kostenverwaltung exportiert Rohkostendetails in den Msexports-Container . Weitere Informationen finden Sie unter "Informationen zu Exporten" in v04-05.

Nach Abschluss der Exporte für verwaltete und nicht verwaltete Bereiche:

  1. Die msexports_ExecuteETL Pipeline startet den ETL-Prozess (Extract-Transform-Load), wenn Dateien zum Speicher hinzugefügt werden.
  2. Die msexports_ETL_ingestion-Pipeline transformiert die Daten in ein Standardschema und speichert die Rohdaten im Parquet-Format im Ingestionscontainer. Weitere Informationen finden Sie unter "Informationen zur Ingestion in v04-05".
  3. Power BI liest Kostendaten aus dem Ingestionscontainer.

Informationen zur Ingestion in v0.4-0.5

FinOps-Hubs basieren auf einem bestimmten Ordnerpfad im Aufnahmecontainer :

ingestion/{dataset}/{yyyy}/{mm}/{scope-id}
  • ingestion ist der Container, in dem die Datenpipeline Daten speichert.
  • {dataset} ist der exportierte Datasettyp.
  • {month} ist das Jahr und der Monat der exportierten Daten, die als yyyyMMformatiert sind.
  • {scope-id} es wird erwartet, dass es sich um die vollqualifizierte Ressourcen-ID des Bereichs handelt, von dem die Daten stammen.

Wenn Sie Hubs verwenden müssen, um Nicht-Azure-Daten zu überwachen, konvertieren Sie die Daten in FOCUS , und legen Sie sie in den Aufnahmecontainer ab. Dieser Prozess wurde in der neuesten Version nicht explizit getestet. Wenn Probleme auftreten, erstellen Sie ein Problem.

Informationen zu Exporten in v0.4-0.5

FinOps-Hubs verwenden Kostenverwaltungsexporte, um Kostendaten zu erhalten. Die Kostenverwaltung steuert die Ordnerstruktur für die exportierten Daten im Msexports-Container . Ein typischer Pfad sieht wie folgt aus:

{container}/{path}/{date-range}/{export-name}/{export-time}/{guid}/{file}

Ab 0.4 verlassen sich FinOps-Hubs nicht auf Dateipfade. Hubs verwenden die Manifestdatei, um den Bereich, das Dataset, den Monat usw. zu identifizieren. Der einzige wichtige Teil des Pfads für Hubs ist der Container, der msexports sein muss.

Hinweis

Exportieren Sie keine Daten in den Ingestion-Container. Exportierte CSVs müssen im Msexports-Container veröffentlicht werden, damit sie vom Hubmodul verarbeitet werden.

Um benutzerdefinierte Daten aufzunehmen, speichern Sie FOCUS-ausgerichtete Parkettdateien im Ingestioncontainer für das FinOps-Toolkit Power BI-Berichte so, dass sie wie erwartet funktionieren.

Exportmanifeste können sich mit API-Versionen ändern. Hier ist ein Beispiel mit API-Version 2023-07-01-preview:

{
  "exportConfig": {
    "exportName": "<export-name>",
    "resourceId": "/<scope>/providers/Microsoft.CostManagement/exports/<export-name>",
    "dataVersion": "<dataset-version>",
    "apiVersion": "<api-version>",
    "type": "<dataset-type>",
    "timeFrame": "OneTime|TheLastMonth|MonthToDate",
    "granularity": "Daily"
  },
  "deliveryConfig": {
    "partitionData": true,
    "dataOverwriteBehavior": "CreateNewReport|OverwritePreviousReport",
    "fileFormat": "Csv",
    "containerUri": "<storage-resource-id>",
    "rootFolderPath": "<path>"
  },
  "runInfo": {
    "executionType": "Scheduled",
    "submittedTime": "2024-02-03T18:33:03.1032074Z",
    "runId": "af754a8e-30fc-4ef3-bfc6-71bd1efb8598",
    "startDate": "2024-01-01T00:00:00",
    "endDate": "2024-01-31T00:00:00"
  },
  "blobs": [
    {
      "blobName": "<path>/<export-name>/<date-range>/<export-time>/<guid>/<file-name>.csv",
      "byteCount": ###
    }
  ]
}

FinOps-Hubs verwenden die folgenden Eigenschaften:

  • exportConfig.resourceId um den Bereich zu identifizieren.
  • exportConfig.type um den Datasettyp zu identifizieren.
  • exportConfig.dataVersion um die Datasetversion zu identifizieren.
  • runInfo.startDate um den exportierten Monat zu identifizieren.

FinOps-Hubs unterstützen die folgenden Datasettypen, Versionen und API-Versionen:

  • FocusCost: 1.0, 1.0-preview(v1)
  • Preisliste: 2023-05-01
  • Reservierungsdetails: 2023-03-01
  • Reservierungsempfehlungen: 2023-05-01
  • ReservierungsTransaktionen: 2023-05-01
  • API-Versionen: 2023-07-01-preview

FinOps Hubs v0.2-0.3

In den folgenden Schritten wird der Prozess zum Exportieren und Verarbeiten von Kostendaten mithilfe der FinOps Hubs-Versionen 0.2-0.3 beschrieben:

  1. Kostenverwaltung exportiert Rohkostendetails in den Msexports-Container .
  2. Die msexports_ExecuteETL Pipeline startet den ETL-Prozess (Extract-Transform-Load), wenn Dateien zum Speicher hinzugefügt werden.
  3. Die msexports_ETL_ingestion Pipeline speichert exportierte Daten im Parkettformat im Ingestion-Container.
  4. Power BI liest Kostendaten aus dem Ingestionscontainer.

FinOps Hubs 0.2-0.3 verwenden den Exportpfad, um den exportierten Bereich und Monat zu bestimmen. Dieser Punkt ist wichtig, da Aktualisierungen des Pfads die Datenpipelinen unterbrechen können. Um dieses Problem zu vermeiden, empfehlen wir, auf FinOps Hubs 0.4 zu aktualisieren. Der erwartete Pfad sollte imitieren:

msexports/{scope-id}/{export-name}/{date-range}/{export-time}/{guid}/{file}
  • msexports ist der im Export angegebene Container.
  • {scope-id} ist der im Export angegebene Ordnerpfad.

    Hubs 0.3 und früher verwenden diese, um zu ermitteln, aus welchem Bereich die Daten stammen. Es wird empfohlen, die Bereichs-ID zu verwenden, aber jeder Wert kann verwendet werden. Beispiele für Bereichs-IDs umfassen:

    Bereichstyp Beispielwert
    Abonnement /subscriptions/###
    Ressourcengruppe /subscriptions/###/resourceGroups/###
    Abrechnungskonto /providers/Microsoft.Billing/billingAccounts/###
    Abrechnungsprofil /providers/Microsoft.Billing/billingAccounts/###/billingProfiles/###
  • {export-name} ist der Name des Exports.

    Hubs ignorieren diesen Ordner.

  • {date-range} ist die Datumsbereichsdaten, die exportiert werden.

    Hubs 0.3 und früher verwenden diese, um den Monat zu identifizieren. Format für diesen Ordner ist yyyyMMdd-yyyyMMdd. Hubs 0.4 verwendet stattdessen das Manifest.

  • {export-time} ist ein Zeitstempel des Zeitpunkts, zu dem der Export ausgeführt wurde.

    Hubs ignorieren dies. Format für diesen Ordner ist yyyyMMddHHmm.

  • {guid} ist eine eindeutige GUID und ist nicht immer vorhanden.

    Hubs ignorieren dies. Die Kostenverwaltung enthält diesen Ordner nicht immer. Ob sie enthalten ist, hängt von der API-Version ab, die zum Erstellen des Exports verwendet wird.

  • {file} ist entweder ein Manifest oder exportierte Daten.

    Version 0.3 und früher ignorieren Manifestdateien und überwachen nur *.csv Dateien. In einer zukünftigen Version überwachen Hubs das Manifest.


FinOps Hubs v0.1

Die folgenden Schritte beschreiben den Prozess zum Exportieren und Verarbeiten von Kostendaten mithilfe von FinOps Hubs Version 0.1:

  1. Kostenverwaltung exportiert Rohkostendetails in den Msexports-Container .
  2. Die msexports_transform Pipeline speichert die Rohdaten im Parkettformat im Ingestion-Container.
  3. Power BI liest Kostendaten aus dem Ingestionscontainer.

Feedback senden

Lassen Sie uns mit einer kurzen Bewertung wissen, wie wir abschneiden. Wir verwenden diese Rezensionen, um FinOps-Tools und -Ressourcen zu verbessern und zu erweitern.

Wenn Sie nach etwas Spezifischem suchen, wählen Sie eine vorhandene Idee aus, oder erstellen Sie eine neue Idee. Teilen Sie Ideen mit anderen, um mehr Stimmen zu erhalten. Wir konzentrieren uns auf Ideen mit den meisten Stimmen.