FinOps Hub-Empfehlungen konfigurieren

FinOps-Hubs sammeln Empfehlungen aus mehreren Quellen und erfassen sie in das verwaltete Dataset "Empfehlungen" zusammen mit Reservierungsempfehlungen aus Kostenverwaltungsexporten. Empfehlungen stammen aus Azure Resource Graph mithilfe einer konfigurierbaren Gruppe von Abfragen, die Azure Advisor Empfehlungen abrufen und verschiedene Optimierungsszenarien basierend auf der Ressourcenkonfiguration identifizieren. Abfragen werden in einfachen JSON-Dateien im Speicher verwaltet, wodurch es einfach ist, eigene benutzerdefinierte Empfehlungen hinzuzufügen, indem Abfragedateien in den Hubspeicher hochgeladen werden.


Voraussetzungen

Vor Beginn benötigen Sie Folgendes:

  • Bereitstellung einer FinOps-Hubinstanz.
  • Weisen Sie der verwalteten Identität von Data Factory für die Verwaltungsgruppen oder Abonnements, die Sie abfragen möchten, die Rolle Leser zu. Diese Berechtigung muss separat von der FinOps-Hubbereitstellung konfiguriert werden.

Wie Empfehlungen verarbeitet werden

Die Empfehlungs-Pipeline wird täglich ausgeführt und verarbeitet Abfragedateien, die im Ordner config/queries im Hubspeicher gespeichert sind:

  1. Der queries_DailySchedule Trigger wird einmal pro Tag ausgeführt.
  2. Die queries_ExecuteETL Pipeline durchläuft alle Abfragedateien im Speicherordner "config/queries ".
  3. Die Pipeline queries_ETL_ingestion führt jede Abfrage gegen Azure Resource Graph aus, entfernt doppelte Ergebnisse und speichert die Daten als Parquet im Ordner ingestion/Recommendations.
  4. Bei Verwendung von Azure Data Explorer werden Daten in die tabelle Recommendations_raw aufgenommen und mithilfe der Funktion Recommendations_transform_v1_2() transformiert.

Hubs-Empfehlungen werden mit Reservierungsempfehlungen aus Kostenverwaltungsexporten im gleichen verwalteten Empfehlungen-Dataset kombiniert. Sie können zwischen Quellen mithilfe der x_SourceType Spalte unterscheiden.


Integrierte Empfehlungen

FinOps-Hubs enthalten die folgenden Empfehlungen. Die meisten sind standardmäßig aktiviert. Optionale Empfehlungen können Rauschen für Organisationen generieren, für die sie nicht gelten und während der Bereitstellung über den angegebenen Vorlagenparameter aktiviert werden können.

Compute

Datenbanken

Verwaltung und Governance

Netzwerk

Storage

das Internet

Um eine bestimmte Standardempfehlung zu deaktivieren, löschen Sie die Abfragedatei aus dem Ordner "config/queries " im Hubspeicher. Die Pipeline verarbeitet nur Abfragedateien, die vorhanden sind.


Hinzufügen von benutzerdefinierten Empfehlungen

Sie können benutzerdefinierte Empfehlungen hinzufügen, indem Sie Abfragedateien in den Ordner "config/queries " im Hubspeicher hochladen. Die Pipeline übernimmt neue Abfragedateien automatisch beim nächsten täglichen Durchlauf.

Benennungskonvention für Dateien

Namensabfragedateien mit dem {dataset}-{provider}-{type}.json Format:

  • Dataset - Das Ziel-Dataset (z. B Recommendations. ).
  • Provider – Der Anbieter der Dienstdaten ist für (z. B. Microsoft, Contoso).
  • Type — Der Bezeichner des Empfehlungstyps in PascalCase (z. B. StoppedVMs, IdleCosmosDB).

Beispiel: Recommendations-Contoso-IdleCosmosDB.json

Abfragedateiformat

Jede Abfragedatei ist eine JSON-Datei mit den folgenden Eigenschaften:

{
  "dataset": "Recommendations",
  "provider": "Microsoft",
  "query": "<Azure Resource Graph query>",
  "queryEngine": "ResourceGraph",
  "scope": "Tenant",
  "source": "<descriptive source name>",
  "type": "<unique type identifier>",
  "version": "1.0"
}
Eigentum Description
dataset Muss "Recommendations" sein.
provider Anbietername (z. B. "Microsoft").
query Die auszuführende Azure Resource Graph Abfrage in einer einzelnen Zeile.
queryEngine Muss "ResourceGraph" sein.
scope Abfragebereich. Verwenden Sie "Tenant", um alle Abonnements abzufragen, auf die die verwaltete Identität von Data Factory innerhalb des Mandanten Zugriff hat. Mandantenübergreifende Abfragen werden nicht unterstützt, aber Ressourcen, die über Azure Lighthouse delegiert werden, sind in Mandantenbereichsabfragen enthalten.
source Beschreibender Name für die Empfehlungsquelle (z. B. "Azure Advisor" oder "FinOps hubs").
type Programmatischer Bezeichner für diesen Empfehlungstyp. Verwenden Sie ein {provider}-{name} Format nur mit alphanumerischen Zeichen und Bindestrichen (z. B "Contoso-IdleCosmosDB". ). Dieser Wert wird als Teil des Ausgabedateinamens verwendet.
version Schemaversion. Verwenden Sie "1.0".

Erforderliche Ausgabespalten

Ihre Abfrage muss die folgenden Spalten zurückgeben:

Kolumne Description
ResourceId Ressourcen-ID (Kleinbuchstabe).
ResourceName Ressourcenname (Kleinbuchstabe).
SubAccountId Abonnement-ID
SubAccountName Abonnementname. Verbinden Sie sich mit resourcecontainers, um dies auszufüllen.
x_RecommendationCategory Empfehlungskategorie. Verwenden Sie "Cost", "HighAvailability", "OperationalExcellence", "Performance" oder "Security".
x_RecommendationDate Empfehlungsdatum (für Point-in-Time-Abfragen now() verwenden).
x_RecommendationDescription Kurze Beschreibung des Problems.
x_RecommendationDetails JSON-Zeichenfolge mit zusätzlichen Eigenschaften. Fügen Sie x_RecommendationProvider, x_RecommendationSolution, x_RecommendationTypeId und x_ResourceType sowie alle benutzerdefinierten Eigenschaften ein, die für die Empfehlung spezifisch sind.
x_RecommendationId Eindeutiger Bezeichner für die Empfehlung (z. B. Ressourcen-ID + Suffix).
x_ResourceGroupName Ressourcengruppenname (Kleinbuchstabe).

Tipps zum Schreiben von Abfragen

  • Um den Namen des Abonnements einzufügen, fügen Sie am Ende Ihrer Abfrage resourcecontainers hinzu:

    | join kind=leftouter (
        resourcecontainers
        | where type == 'microsoft.resources/subscriptions'
        | project SubAccountName=name, SubAccountId=subscriptionId
    ) on SubAccountId
    | project-away SubAccountId1
    
  • Generieren Sie x_RecommendationId , indem Sie die Ressourcen-ID mit einem beschreibenden Suffix (z. B strcat(tolower(id), '-idle'). ) kombinieren.

  • Erstellen Sie x_RecommendationDetails mithilfe von tostring(bag_pack(...)), um eine JSON-Zeichenfolge zu erzeugen. Das Umschließen mit tostring() ist erforderlich, da die Datenpipeline dynamische Objekte nicht nach Parquet serialisieren kann; der Wert muss eine Zeichenfolge sein. Sie können auch strcat() verwenden, um einen JSON-String manuell zu erstellen, aber bag_pack() wird empfohlen, da es das Escaping automatisch übernimmt.

  • Fügen Sie x_RecommendationTypeId als stabile GUID ein, um den Empfehlungstyp über mehrere Ausführungen hinweg eindeutig zu identifizieren.

Beispiele: Überprüfen Sie die integrierten Abfragedateien im Quellcode des FinOps-Toolkits.


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.