Configurer les recommandations de FinOps hubs

Les hubs FinOps collectent des recommandations à partir de plusieurs sources et les ingèrent dans le jeu de données géré Recommendations en même temps que les recommandations de réservation des exportations Cost Management. Les recommandations sont issues de Azure Resource Graph à l’aide d’un ensemble configurable de requêtes qui extrayent des recommandations Azure Advisor et identifient différents scénarios d’optimisation en fonction de la configuration des ressources. Les requêtes sont gérées dans des fichiers JSON simples dans le stockage, ce qui facilite l’ajout de vos propres recommandations personnalisées en chargeant les fichiers de requête dans le stockage hub.


Prerequisites

Avant de commencer, vous devez disposer des éléments suivants :

  • Déployé une instance de hub FinOps.
  • Attribuez le rôle Lecteur à l’identité managée de Data Factory sur les groupes d’administration ou les abonnements que vous souhaitez interroger. Cette autorisation doit être configurée séparément du déploiement du hub FinOps.

Traitement des recommandations

Le pipeline de recommandations s’exécute quotidiennement et traite les fichiers de requête stockés dans le dossier config/requêtes dans le stockage hub :

  1. Le déclencheur queries_DailySchedule s’exécute une fois par jour.
  2. Le pipeline queries_ExecuteETL effectue une itération dans tous les fichiers de requête dans le dossier de stockage config/requêtes .
  3. Le pipeline queries_ETL_ingestion exécute chaque requête dans Azure Resource Graph, supprime les doublons des résultats et enregistre les données au format Parquet dans le dossier ingestion/Recommendations.
  4. Si vous utilisez Azure Data Explorer, les données sont ingérées dans la table Recommendations_raw et transformées à l’aide de la fonction Recommendations_transform_v1_2().

Les recommandations relatives aux hubs sont regroupées avec les recommandations de réservation issues des exportations de Cost Management dans le même jeu de données géré Recommandations. Vous pouvez faire la distinction entre les sources à l’aide de la x_SourceType colonne.


Recommandations intégrées

Les hubs FinOps incluent les recommandations suivantes. La plupart sont activées par défaut. Les recommandations facultatives peuvent générer du bruit pour les organisations où elles ne s’appliquent pas et peuvent être activées pendant le déploiement via le paramètre de modèle spécifié.

Compute

Databases

Gestion et gouvernance

Mise en réseau

Stockage

Web

Pour désactiver une recommandation par défaut spécifique, supprimez son fichier de requête du dossier config/requêtes dans le stockage hub. Le pipeline traite uniquement les fichiers de requête présents.


Ajouter des recommandations personnalisées

Vous pouvez ajouter des recommandations personnalisées en chargeant des fichiers de requête dans le dossier config/requêtes dans le stockage hub. Le pipeline récupère automatiquement les nouveaux fichiers de requête lors de la prochaine exécution quotidienne.

Convention d’affectation de noms de fichiers

Nommez les fichiers de requête à l’aide du {dataset}-{provider}-{type}.json format suivant :

  • Jeu de données : jeu de données cible (par exemple, Recommendations).
  • Fournisseur — le fournisseur auquel les données de service sont associées (par exemple, Microsoft, Contoso).
  • Type : identificateur de type de recommandation à l’aide de PascalCase (par exemple, StoppedVMs, IdleCosmosDB).

Par exemple : Recommendations-Contoso-IdleCosmosDB.json

Format de fichier de requête

Chaque fichier de requête est un fichier JSON avec les propriétés suivantes :

{
  "dataset": "Recommendations",
  "provider": "Microsoft",
  "query": "<Azure Resource Graph query>",
  "queryEngine": "ResourceGraph",
  "scope": "Tenant",
  "source": "<descriptive source name>",
  "type": "<unique type identifier>",
  "version": "1.0"
}
Propriété Description
dataset Doit être "Recommendations".
provider Nom du fournisseur (par exemple, "Microsoft").
query Requête Azure Resource Graph à exécuter, sur une seule ligne.
queryEngine Doit être "ResourceGraph".
scope Étendue de requête. Permet "Tenant" d’interroger tous les abonnements auxquels l’identité managée Data Factory a accès au sein du locataire. Les requêtes inter-locataires ne sont pas prises en charge, mais les ressources déléguées via Azure Lighthouse sont incluses dans les requêtes à l’échelle du locataire.
source Nom descriptif de la source de recommandation (par exemple, "Azure Advisor" ou "FinOps hubs").
type Identificateur programmatique pour ce type de recommandation. Utilisez un {provider}-{name} format avec des caractères alphanumériques et des traits d’union uniquement (par exemple, "Contoso-IdleCosmosDB"). Cette valeur est utilisée dans le cadre du nom du fichier de sortie.
version Version du schéma. Utilisez "1.0".

Colonnes de sortie requises

Votre requête doit retourner les colonnes suivantes :

Column Description
ResourceId Identifiant de ressource (en minuscules).
ResourceName Nom de la ressource (en minuscules).
SubAccountId l'ID d'abonnement.
SubAccountName Nom de l’abonnement. Joignez resourcecontainers pour remplir ceci.
x_RecommendationCategory Catégorie de recommandation. Utilisez "Cost", , "HighAvailability", "OperationalExcellence", "Performance"ou "Security".
x_RecommendationDate Date de recommandation (utiliser now() pour les requêtes à un point dans le temps).
x_RecommendationDescription Brève description du problème.
x_RecommendationDetails Chaîne JSON avec des propriétés supplémentaires. Incluez x_RecommendationProvider, x_RecommendationSolution, x_RecommendationTypeIdet x_ResourceType ainsi que toutes les propriétés personnalisées spécifiques à la recommandation.
x_RecommendationId Identificateur unique pour la recommandation (par exemple, ID de ressource + suffixe).
x_ResourceGroupName Nom du groupe de ressources (minuscules).

Conseils pour l’écriture de requêtes

  • Pour renseigner le nom de l’abonnement, effectuez une jointure avec resourcecontainers à la fin de votre requête :

    | join kind=leftouter (
        resourcecontainers
        | where type == 'microsoft.resources/subscriptions'
        | project SubAccountName=name, SubAccountId=subscriptionId
    ) on SubAccountId
    | project-away SubAccountId1
    
  • Générez x_RecommendationId en combinant l’ID de ressource avec un suffixe descriptif (par exemple). strcat(tolower(id), '-idle')

  • Créez x_RecommendationDetails à l’aide de tostring(bag_pack(...)) pour produire une chaîne JSON. L’encapsulation avec tostring() est nécessaire, car le pipeline de données ne peut pas sérialiser des objets dynamiques au format Parquet ; la valeur doit être une chaîne de caractères. Vous pouvez également utiliser strcat() pour créer une chaîne JSON manuellement, mais il est recommandé d’utiliser bag_pack(), car il gère l’échappement automatiquement.

  • Incluez x_RecommendationTypeId en tant que GUID stable pour identifier de manière unique le type de recommandation entre les exécutions.

Pour obtenir des exemples, consultez les fichiers de requête intégrés dans le code source du kit de ressources FinOps.


Envoyer des commentaires

Faites-nous savoir ce que vous pensez de notre travail avec un petit avis. Nous utilisons ces révisions pour améliorer et développer les outils et ressources FinOps.

Si vous recherchez quelque chose de spécifique, votez pour une idée existante ou créez une nouvelle idée. Partagez des idées avec d’autres personnes pour obtenir plus de votes. Nous nous concentrons sur les idées avec le plus de votes.