Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article décrit une collection de pratiques FinOps éprouvées pour les services de calcul. Il fournit des conseils sur l’optimisation des coûts, l’amélioration de l’efficacité et l’obtention d’insights sur vos ressources de calcul dans Azure. Les pratiques sont classées en fonction du type de service de calcul, comme les machines virtuelles (VM), Azure Kubernetes Service (AKS) et Azure Functions.
Azure Kubernetes Service
La section suivante fournit une requête Azure Resource Graph (ARG) pour les clusters AKS. La requête vous aide à obtenir des insights sur vos machines virtuelles.
Requête - Cluster AKS
Cette requête ARG récupère des informations détaillées sur les clusters AKS dans votre environnement Azure.
Catégorie
Gestion des ressources
Requête
resources
| where type == "microsoft.containerservice/managedclusters"
| extend AgentPoolProfiles = properties.agentPoolProfiles
| mvexpand AgentPoolProfiles
| project
id,
ProfileName = tostring(AgentPoolProfiles.name),
Sku = tostring(sku.name),
Tier = tostring(sku.tier),
mode = AgentPoolProfiles.mode,
AutoScaleEnabled = AgentPoolProfiles.enableAutoScaling,
SpotVM = AgentPoolProfiles.scaleSetPriority,
VMSize = tostring(AgentPoolProfiles.vmSize),
nodeCount = tostring(AgentPoolProfiles.['count']),
minCount = tostring(AgentPoolProfiles.minCount),
maxCount = tostring(AgentPoolProfiles.maxCount),
location,
resourceGroup,
subscriptionId,
AKSname = name
Machines virtuelles
Les machines virtuelles Azure sont l’un des types de ressources informatiques évolutives à la demande proposées par Azure. En règle générale, vous choisissez une machine virtuelle quand vous avez besoin d’un contrôle plus important sur l’environnement informatique que les autres options proposées.
Une machine virtuelle Azure vous donne la flexibilité de la virtualisation sans que vous ayez à acheter le matériel physique qui exécute la machine virtuelle ni à en assurer la maintenance. Toutefois, vous devez toujours gérer la machine virtuelle en effectuant des tâches, telles que la configuration, la mise à jour corrective et l’installation du logiciel qui s’exécute dessus.
Ressources connexes :
- Page des produits des machines virtuelles
- Tarifs des machines virtuelles
- Documentation sur les machines virtuelles
- Services Azure pour le calcul à la demande et scalable
Libérer des machines virtuelles
Recommandation : libérer des machines virtuelles pour éviter les frais de calcul inutilisés. Évitez d’arrêter les machines virtuelles sans les désallouer.
À propos des machines virtuelles inactives
Les machines virtuelles ont deux états inactifs : arrêtés et libérés.
Les machines virtuelles à l'arrêt ont été éteintes à partir du système d’exploitation (par exemple, à l’aide de la commande Arrêter ). Les machines virtuelles arrêtées sont désactivées, mais Azure réserve toujours des ressources de calcul, telles que le processeur et la mémoire. Étant donné que les ressources de calcul sont réservées et ne sont pas disponibles pour une utilisation avec d’autres machines virtuelles, ces machines virtuelles continuent d’entraîner des frais de calcul.
Les machines virtuelles désallouées sont arrêtées via des API de gestion cloud dans le portail Azure, l’interface en ligne de commande, PowerShell ou un autre outil client. Lorsqu’une machine virtuelle est libérée, Azure libère les ressources de calcul correspondantes. Étant donné que les ressources de calcul sont publiées, ces machines virtuelles n’entraînent pas de frais de calcul ; Toutefois, il est important de noter que les machines virtuelles arrêtées et libérées continuent d’entraîner des frais non liés au calcul, comme les frais de stockage des disques.
Identifier les machines virtuelles arrêtées
Utilisez la requête Azure Resource Graph (ARG) suivante pour identifier les machines virtuelles arrêtées qui ne sont pas déallocuées. Il récupère des détails sur leur état d’alimentation, leur emplacement, leur groupe de ressources et leur ID d’abonnement.
resources
| where type =~ 'microsoft.compute/virtualmachines'
| extend PowerState = tostring(properties.extended.instanceView.powerState.displayStatus)
| where PowerState !in =('VM deallocated', 'VM running')
| project
ResourceId = id,
PowerState,
Region = location,
ResourceGroupName = resourceGroup,
SubscriptionId = subscriptionId
Utiliser des remises d’engagement
Recommandation : Utilisez des remises d’engagement pour économiser jusqu’à 72% par rapport aux coûts de liste.
À propos des remises d’engagement
Les remises d’engagement sont des incitations financières offertes aux organisations qui s’engagent à utiliser des services Azure pour une période ou une période donnée, généralement une ou trois ans. En acceptant une quantité fixe d’utilisation ou de dépense (coût) pour le terme, les organisations peuvent bénéficier de remises significatives (jusqu’à 72%) par rapport aux prix de liste. Les remises sont appliquées aux ressources éligibles, ce qui permet aux organisations d’économiser sur leurs coûts cloud tout en offrant une flexibilité et une prévisibilité dans leur budget.
Pour en savoir plus sur les remises d’engagement, reportez-vous à la fonctionnalité d’optimisation du taux.
Mesurer la couverture de remise de l’engagement de machine virtuelle
Utilisez la requête du hub FinOps suivante pour mesurer la couverture globale de la remise d'engagement pour les VM.
Costs
| where ResourceType =~ 'Virtual machine'
| where x_SkuMeterCategory startswith 'Virtual Machines'
//
// Join with prices to filter out ineligible SKUs
| extend tmp_MeterKey = strcat(substring(ChargePeriodStart, 0, 7), x_SkuMeterId)
| project tmp_MeterKey, EffectiveCost, PricingCategory, CommitmentDiscountCategory, ResourceName, x_ResourceGroupName, SubAccountName, BillingCurrency
| join kind=leftouter (
Prices
| where x_SkuMeterCategory startswith 'Virtual Machines'
| summarize sp = countif(x_SkuPriceType == 'SavingsPlan'), ri = countif(x_SkuPriceType == 'ReservedInstance')
by tmp_MeterKey = strcat(substring(x_EffectivePeriodStart, 0, 7), x_SkuMeterId)
| project tmp_MeterKey, x_CommitmentDiscountSpendEligibility = iff(sp == 0, 'Not Eligible', 'Eligible'), x_CommitmentDiscountUsageEligibility = iff(ri == 0, 'Not Eligible', 'Eligible')
) on tmp_MeterKey
| extend x_CommitmentDiscountUsageEligibility = iff(isempty(x_CommitmentDiscountUsageEligibility), '(missing prices)', x_CommitmentDiscountUsageEligibility)
| extend x_CommitmentDiscountSpendEligibility = iff(isempty(x_CommitmentDiscountSpendEligibility), '(missing prices)', x_CommitmentDiscountSpendEligibility)
//
// Sum costs
| summarize
TotalCost = sum(EffectiveCost),
OnDemandCost = sumif(EffectiveCost, PricingCategory == 'Standard'),
SpotCost = sumif(EffectiveCost, PricingCategory == 'Dynamic'),
CommittedCost = sumif(EffectiveCost, PricingCategory == 'Committed'),
CommittedSpendCost = sumif(EffectiveCost, CommitmentDiscountCategory == 'Spend'),
CommittedUsageCost = sumif(EffectiveCost, CommitmentDiscountCategory == 'Usage')
by x_CommitmentDiscountUsageEligibility, x_CommitmentDiscountSpendEligibility, BillingCurrency
| extend OnDemandPercent = round(OnDemandCost / TotalCost * 100, 2)
| extend CoveragePercent = round(CommittedCost / TotalCost * 100, 2)
| extend CoverageUsagePercent = round(CommittedUsageCost / TotalCost * 100, 2)
| extend CoverageSpendPercent = round(CommittedSpendCost / TotalCost * 100, 2)
| order by CoveragePercent desc
Utilisez la requête suivante pour mesurer la répartition des coûts par machine virtuelle, y compris la couverture des remises d’engagement.
Costs
| where ResourceType =~ 'Virtual machine'
| where x_SkuMeterCategory startswith 'Virtual Machines'
//
// Join with prices to filter out ineligible SKUs
| extend tmp_MeterKey = strcat(substring(ChargePeriodStart, 0, 7), x_SkuMeterId)
| project tmp_MeterKey, EffectiveCost, PricingCategory, CommitmentDiscountCategory, ResourceName, x_ResourceGroupName, SubAccountName, BillingCurrency
| join kind=leftouter (
Prices
| where x_SkuMeterCategory startswith 'Virtual Machines'
| summarize sp = countif(x_SkuPriceType == 'SavingsPlan'), ri = countif(x_SkuPriceType == 'ReservedInstance')
by tmp_MeterKey = strcat(substring(x_EffectivePeriodStart, 0, 7), x_SkuMeterId)
| project tmp_MeterKey, x_CommitmentDiscountSpendEligibility = iff(sp == 0, 'Not Eligible', 'Eligible'), x_CommitmentDiscountUsageEligibility = iff(ri == 0, 'Not Eligible', 'Eligible')
) on tmp_MeterKey
| extend x_CommitmentDiscountUsageEligibility = iff(isempty(x_CommitmentDiscountUsageEligibility), '(missing prices)', x_CommitmentDiscountUsageEligibility)
| extend x_CommitmentDiscountSpendEligibility = iff(isempty(x_CommitmentDiscountSpendEligibility), '(missing prices)', x_CommitmentDiscountSpendEligibility)
//
// Sum costs by resource
| summarize
TotalCost = sum(EffectiveCost),
OnDemandCost = sumif(EffectiveCost, PricingCategory == 'Standard'),
SpotCost = sumif(EffectiveCost, PricingCategory == 'Dynamic'),
CommittedCost = sumif(EffectiveCost, PricingCategory == 'Committed'),
CommittedSpendCost = sumif(EffectiveCost, CommitmentDiscountCategory == 'Spend'),
CommittedUsageCost = sumif(EffectiveCost, CommitmentDiscountCategory == 'Usage')
by ResourceName, x_ResourceGroupName, SubAccountName, x_CommitmentDiscountUsageEligibility, x_CommitmentDiscountSpendEligibility, BillingCurrency
| extend OnDemandPercent = round(OnDemandCost / TotalCost * 100, 2)
| extend CoveragePercent = round(CommittedCost / TotalCost * 100, 2)
| extend CoverageUsagePercent = round(CommittedUsageCost / TotalCost * 100, 2)
| extend CoverageSpendPercent = round(CommittedSpendCost / TotalCost * 100, 2)
| order by CoveragePercent desc
Pour en savoir plus sur les hubs FinOps, reportez-vous aux hubs FinOps.
Requête - Détails du groupe de machines virtuelles identiques
Cette requête analyse les groupes de machines virtuelles identiques dans votre environnement Azure en fonction de leur référence SKU, de leur priorité de machine virtuelle spot et de leur stratégie de combinaison de priorités. Il fournit des insights sur l’optimisation des coûts et les stratégies de gestion des ressources.
Catégorie
Gestion des ressources
Requête
resources
| where type =~ 'microsoft.compute/virtualmachinescalesets'
| extend SpotVMs = tostring(properties.virtualMachineProfile.priority)
| extend SpotPriorityMix = tostring(properties.priorityMixPolicy)
| extend SKU = tostring(sku.name)
| extend resourceGroup = strcat('/subscriptions/', subscriptionId, '/resourceGroups/', resourceGroup)
| project id, SKU, SpotVMs, SpotPriorityMix, subscriptionId, resourceGroup, location
Requête - Analyse du type de processeur de machine virtuelle
Cette requête identifie le type de processeur (ARM, AMD ou Intel) utilisé par les machines virtuelles dans votre environnement Azure. Il permet de comprendre la distribution des machines virtuelles entre différentes architectures de processeur, ce qui est utile pour optimiser les performances de la charge de travail et l’efficacité des coûts.
Catégorie
Gestion des ressources
Requête
resources
| where type == 'microsoft.compute/virtualmachines'
| extend vmSize = properties.hardwareProfile.vmSize
| extend processorType = case(
// ARM Processors
vmSize has "Epsv5"
or vmSize has "Epdsv5"
or vmSize has "Dpsv5"
or vmSize has "Dpdsv", "ARM",
// AMD Processors
vmSize has "Standard_D2a"
or vmSize has "Standard_D4a"
or vmSize has "Standard_D8a"
or vmSize has "Standard_D16a"
or vmSize has "Standard_D32a"
or vmSize has "Standard_D48a"
or vmSize has "Standard_D64a"
or vmSize has "Standard_D96a"
or vmSize has "Standard_D2as"
or vmSize has "Standard_D4as"
or vmSize has "Standard_D8as"
or vmSize has "Standard_D16as"
or vmSize has "Standard_D32as"
or vmSize has "Standard_D48as"
or vmSize has "Standard_D64as"
or vmSize has "Standard_D96as", "AMD",
"Intel"
)
| project vmName = name, processorType, vmSize, resourceGroup
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.
Contenu connexe
Ressources connexes :
Produits connexes :
Solutions connexes :