Konfigurera FinOps Hubs-rekommendationer

FinOps-hubbar samlar in rekommendationer från flera källor och matar in dem i den hanterade datauppsättningen Rekommendationer tillsammans med reservationsrekommendationer från Cost Management-exporter. Rekommendationer kommer från Azure Resource Graph med hjälp av en konfigurerbar uppsättning frågor som hämtar Azure Advisor rekommendationer och identifierar olika optimeringsscenarier baserat på resurskonfiguration. Frågor hanteras i enkla JSON-filer i lagring, vilket gör det enkelt att lägga till egna anpassade rekommendationer genom att ladda upp frågefiler till hubblagring.


Förutsättningar

Innan du börjar måste du ha:

  • Distribuerade en FinOps-hubbinstans.
  • Tilldela rollen Läsare till den hanterade identiteten för Data Factory på de hanteringsgrupper eller prenumerationer som du vill fråga. Den här behörigheten måste konfigureras separat från FinOps Hub-distributionen.

Hur rekommendationer bearbetas

Rekommendationspipelinen körs dagligen och bearbetar frågefiler som lagras i mappen config/querys i hubblagringen:

  1. Utlösaren queries_DailySchedule körs en gång per dag.
  2. Den queries_ExecuteETL pipelinen itererar genom alla frågefiler i lagringsmappen config/querys.
  3. Pipelinen queries_ETL_ingestion kör varje fråga mot Azure Resource Graph, deduplicerar resultat och sparar data som parquet i mappen ingestion/Recommendations.
  4. Om du använder Azure Data Explorer matas data in i tabellen Recommendations_raw och transformeras med hjälp av funktionen Recommendations_transform_v1_2().

Hubbrekommendationer kombineras med reservationsrekommendationer från Cost Management-exporter i samma rekommendationer för hanterad datauppsättning. Du kan skilja mellan källor med hjälp av x_SourceType kolumnen.


Inbyggda rekommendationer

FinOps-hubbar innehåller följande rekommendationer. De flesta är aktiverade som standard. Valfria rekommendationer kan generera brus för organisationer där de inte tillämpas och kan aktiveras under distributionen via den angivna mallparametern.

Compute

Databaser

Hantering och styrning

Networking

Storage

Webb

Om du vill inaktivera en specifik standardrekommendering tar du bort dess frågefil från mappen config/querys i hubblagringen. Pipelinen bearbetar endast frågefiler som finns.


Lägga till anpassade rekommendationer

Du kan lägga till anpassade rekommendationer genom att ladda upp frågefiler till mappen config/querys i hubblagringen. Pipelinen hämtar nya frågefiler automatiskt vid nästa dagliga körning.

Namngivningskonvention för filer

Namnge frågefiler med formatet {dataset}-{provider}-{type}.json :

  • Datauppsättning – måldatauppsättningen (till exempel Recommendations).
  • Provider – Leverantören som tjänstens data gäller för (till exempel Microsoft, Contoso).
  • Type – Rekommendationstypidentifieraren med hjälp av PascalCase (till exempel StoppedVMs, IdleCosmosDB).

Till exempel: Recommendations-Contoso-IdleCosmosDB.json

Frågefilformat

Varje frågefil är en JSON-fil med följande egenskaper:

{
  "dataset": "Recommendations",
  "provider": "Microsoft",
  "query": "<Azure Resource Graph query>",
  "queryEngine": "ResourceGraph",
  "scope": "Tenant",
  "source": "<descriptive source name>",
  "type": "<unique type identifier>",
  "version": "1.0"
}
Fastighet Description
dataset Måste vara "Recommendations".
provider Providernamn (till exempel "Microsoft").
query Den Azure Resource Graph fråga som ska köras på en enda rad.
queryEngine Måste vara "ResourceGraph".
scope Frågeomfång. Använd "Tenant" för att fråga efter alla prenumerationer som Data Factorys hanterade identitet har åtkomst till i klientorganisationen. Frågor mellan klientorganisationer stöds inte, men resurser som delegeras via Azure Lighthouse ingår i frågor om klientomfattning.
source Beskrivande namn för rekommendationskällan (till exempel "Azure Advisor" eller "FinOps hubs").
type Programmatisk identifierare för den här rekommendationstypen. Använd ett {provider}-{name} format med alfanumeriska tecken och bindestreck (till exempel "Contoso-IdleCosmosDB"). Det här värdet används som en del av utdatafilens namn.
version Schema-version Använd "1.0".

Obligatoriska utdatakolumner

Frågan måste returnera följande kolumner:

Column Description
ResourceId Resurs-ID (gemener).
ResourceName Resursnamn (små bokstäver).
SubAccountId Prenumerations-ID.
SubAccountName Prenumerationsnamn. Anslut med resourcecontainers för att fylla i detta.
x_RecommendationCategory Rekommendationskategori. Använd "Cost", "HighAvailability", "OperationalExcellence", "Performance"eller "Security".
x_RecommendationDate Rekommendationsdatum (använd now() för frågor vid en viss tidpunkt).
x_RecommendationDescription Kort beskrivning av problemet.
x_RecommendationDetails JSON-sträng med ytterligare egenskaper. Inkludera x_RecommendationProvider, x_RecommendationSolution, x_RecommendationTypeIdoch x_ResourceType tillsammans med anpassade egenskaper som är specifika för rekommendationen.
x_RecommendationId Unik identifierare för rekommendationen (till exempel resurs-ID + suffix).
x_ResourceGroupName Resursgruppsnamn (med små bokstäver).

Tips för att skriva frågor

  • Om du vill fylla i prenumerationsnamnet ansluter du med resourcecontainers i slutet av frågan:

    | join kind=leftouter (
        resourcecontainers
        | where type == 'microsoft.resources/subscriptions'
        | project SubAccountName=name, SubAccountId=subscriptionId
    ) on SubAccountId
    | project-away SubAccountId1
    
  • Generera x_RecommendationId genom att kombinera resurs-ID:t med ett beskrivande suffix (till exempel strcat(tolower(id), '-idle')).

  • Skapa x_RecommendationDetails med hjälp av tostring(bag_pack(...)) för att skapa en JSON-sträng. Omslutning i tostring() krävs eftersom datapipelinen inte kan serialisera dynamiska objekt till Parquet; värdet måste vara en sträng. Du kan också använda strcat() för att skapa en JSON-sträng manuellt, men bag_pack() rekommenderas eftersom den hanterar utrymning automatiskt.

  • Inkludera x_RecommendationTypeId som ett stabilt GUID för att entydigt identifiera rekommendationstypen över olika körningar.

Du kan till exempel granska de inbyggda frågefilerna i källkoden FinOps toolkit.


Lämna feedback

Låt oss veta hur det går med en snabb granskning. Vi använder dessa granskningar för att förbättra och utöka FinOps-verktyg och -resurser.

Om du letar efter något specifikt kan du rösta på en befintlig eller skapa en ny idé. Dela idéer med andra för att få fler röster. Vi fokuserar på idéer med flest röster.