Configurare le raccomandazioni degli hub FinOps

Gli hub FinOps raccolgono raccomandazioni da più origini e li inseriscono nel set di dati gestito Recommendations insieme alle raccomandazioni per le prenotazioni dalle esportazioni di Gestione costi. Le raccomandazioni vengono generate da Azure Resource Graph usando un set configurabile di query che eseguono il pull di raccomandazioni Azure Advisor e identificano vari scenari di ottimizzazione in base alla configurazione delle risorse. Le query vengono gestite in file JSON semplici nell'archiviazione, semplificando l'aggiunta di raccomandazioni personalizzate caricando i file di query nell'archiviazione hub.


Prerequisiti

Prima di iniziare, è necessario disporre di:

  • Implementato un'istanza dell'hub FinOps.
  • Assegnare il ruolo Lettore all'identità gestita di Data Factory nei gruppi di gestione o nelle sottoscrizioni che si desidera interrogare. Questa autorizzazione deve essere configurata separatamente dalla distribuzione dell'hub FinOps.

Come vengono elaborate le raccomandazioni

La pipeline di raccomandazioni viene eseguita ogni giorno ed elabora i file di query archiviati nella cartella config/queries nell'archiviazione hub:

  1. Il trigger queries_DailySchedule viene eseguito una volta al giorno.
  2. La pipeline queries_ExecuteETL esegue l'iterazione di tutti i file di query nella cartella di archiviazione config/querys .
  3. La pipeline queries_ETL_ingestion esegue ogni query su Azure Resource Graph, rimuove i duplicati dai risultati e salva i dati in formato parquet nella cartella ingestion/Recommendations.
  4. Se si usa Esplora dati di Azure, i dati vengono inseriti nella tabella Recommendations_raw e trasformati usando la funzione Recommendations_transform_v1_2().

Le raccomandazioni relative agli hub vengono combinate con le raccomandazioni sulle prenotazioni dalle esportazioni di Cost Management nello stesso set di dati gestito Recommendations. È possibile distinguere tra le origini usando la x_SourceType colonna .


Raccomandazioni predefinite

Gli hub FinOps includono le raccomandazioni seguenti. La maggior parte delle opzioni è abilitata per impostazione predefinita. Le raccomandazioni facoltative possono generare problemi per le organizzazioni in cui non si applicano e possono essere abilitate durante la distribuzione tramite il parametro di modello specificato.

Compute

Databases

Gestione e governance

Rete

Archiviazione

Rete Internet

Per disabilitare una raccomandazione predefinita specifica, eliminare il file di query dalla cartella config/queries nell'archiviazione hub. La pipeline elabora solo i file di query effettivamente presenti.


Aggiungere raccomandazioni personalizzate

È possibile aggiungere raccomandazioni personalizzate caricando i file di query nella cartella config/queries nell'archiviazione hub. La pipeline rileva automaticamente i nuovi file di query alla successiva esecuzione giornaliera.

Convenzione di denominazione dei file

Assegnare un nome ai file di query usando il {dataset}-{provider}-{type}.json formato :

  • Set di dati : set di dati di destinazione (ad esempio, Recommendations).
  • Provider : il provider dei dati del servizio è per (ad esempio, Microsoft, Contoso).
  • Type : identificatore del tipo di raccomandazione che usa PascalCase (ad esempio, StoppedVMs, IdleCosmosDB).

Ad esempio: Recommendations-Contoso-IdleCosmosDB.json

Formato di file di query

Ogni file di query è un file JSON con le proprietà seguenti:

{
  "dataset": "Recommendations",
  "provider": "Microsoft",
  "query": "<Azure Resource Graph query>",
  "queryEngine": "ResourceGraph",
  "scope": "Tenant",
  "source": "<descriptive source name>",
  "type": "<unique type identifier>",
  "version": "1.0"
}
Proprietà Description
dataset Deve essere "Recommendations".
provider Nome provider (ad esempio, "Microsoft").
query La query di Azure Resource Graph da eseguire, in un'unica riga.
queryEngine Deve essere "ResourceGraph".
scope Ambito della query. Usare "Tenant" per eseguire query su tutte le sottoscrizioni a cui l'identità gestita di Data Factory ha accesso all'interno del tenant. Le query tra tenant non sono supportate, ma le risorse delegate tramite Azure Lighthouse sono incluse nelle query con ambito a livello di tenant.
source Nome descrittivo per l'origine della raccomandazione( ad esempio, "Azure Advisor" o "FinOps hubs").
type Identificatore programmatico per questo tipo di raccomandazione. Usare un {provider}-{name} formato con caratteri alfanumerici e trattini solo (ad esempio, "Contoso-IdleCosmosDB"). Questo valore viene usato come parte del nome del file di output.
version Versione dello schema. Utilizzare il "1.0".

Colonne di output necessarie

La query deve restituire le colonne seguenti:

colonna Description
ResourceId ID della risorsa (in minuscolo).
ResourceName Nome della risorsa (minuscolo).
SubAccountId ID della sottoscrizione.
SubAccountName nome della sottoscrizione. Esegui un join con resourcecontainers per popolare questo campo.
x_RecommendationCategory Categoria di raccomandazione. Usare "Cost", "HighAvailability", "OperationalExcellence", "Performance"o "Security".
x_RecommendationDate Data di raccomandazione (usare now() per le query point-in-time).
x_RecommendationDescription Breve descrizione del problema.
x_RecommendationDetails Stringa JSON con proprietà aggiuntive. Includere x_RecommendationProvider, x_RecommendationSolution, x_RecommendationTypeIde x_ResourceType insieme a tutte le proprietà personalizzate specifiche della raccomandazione.
x_RecommendationId Identificatore univoco per la raccomandazione (ad esempio, ID risorsa e suffisso).
x_ResourceGroupName Nome del gruppo di risorse (in minuscolo).

Suggerimenti per la scrittura di query

  • Per compilare il nome dell'abbonamento, aggiungi resourcecontainers alla fine della query:

    | join kind=leftouter (
        resourcecontainers
        | where type == 'microsoft.resources/subscriptions'
        | project SubAccountName=name, SubAccountId=subscriptionId
    ) on SubAccountId
    | project-away SubAccountId1
    
  • Generare x_RecommendationId combinando l'ID risorsa con un suffisso descrittivo , ad esempio strcat(tolower(id), '-idle').

  • Compilare x_RecommendationDetails usando tostring(bag_pack(...)) per produrre una stringa JSON. Il racchiudimento in tostring() è necessario perché la pipeline dati non può serializzare oggetti dinamici nel formato Parquet; il valore deve essere una stringa. È anche possibile usare strcat() per compilare manualmente una stringa JSON, ma bag_pack() è consigliabile perché gestisce automaticamente l'escape.

  • Includere x_RecommendationTypeId come GUID stabile per identificare in modo univoco il tipo di raccomandazione tra le esecuzioni.

Per esempi, esaminare i file di query predefiniti nel codice sorgente FinOps Toolkit.


Invia feedback

Facci sapere come ci trovi con una breve recensione. Queste revisioni vengono usate per migliorare ed espandere strumenti e risorse FinOps.

Se si sta cercando qualcosa di specifico, votare per un'idea esistente o crearne una nuova. Condividere idee con altri utenti per ottenere più voti. Ci concentriamo sulle idee con il maggior numero di voti.