Aanbevolen procedures voor FinOps voor berekening
In dit artikel vindt u een overzicht van een verzameling bewezen FinOps-procedures voor rekenservices. Het biedt richtlijnen voor het optimaliseren van kosten, het verbeteren van de efficiëntie en het verkrijgen van inzicht in uw rekenresources in Azure. De procedures worden gecategoriseerd op basis van het type rekenservice, zoals virtuele machines (VM), Azure Kubernetes Service (AKS) en Azure Functions.
Azure Kubernetes Service
De volgende sectie bevat een Arg-query (Azure Resource Graph) voor AKS-clusters. Met de query krijgt u inzicht in uw VM's.
Query - AKS-cluster
Met deze ARG-query wordt gedetailleerde informatie opgehaald over AKS-clusters in uw Azure-omgeving.
Categorie
Resourcebeheer
Query
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
Virtuele machines
Virtuele Azure-machines (VM's) zijn een van de verschillende typen on-demand, schaalbare computingresources die Azure biedt. Normaal gesproken kiest u een VIRTUELE machine wanneer u meer controle nodig hebt over de computeromgeving dan de andere opties.
Een Virtuele Azure-machine biedt u de flexibiliteit van virtualisatie zonder dat u de fysieke hardware hoeft te kopen en te onderhouden waarop deze wordt uitgevoerd. U moet de virtuele machine echter nog steeds onderhouden door taken uit te voeren, zoals het configureren, patchen en installeren van de software die erop wordt uitgevoerd.
Gerelateerde resources:
- Over virtuele machines
- kosten voor virtuele machines
- Documentatie van virtuele machine
- Azure-services voor op aanvraag, schaalbare rekencapaciteit
Toewijzing van virtuele machines ongedaan maken
Aanbeveling: VM's dealloceren om kosten voor ongebruikte rekenkracht te voorkomen. Vermijd het stoppen van VM's zonder ze te dealloceren.
Over niet-actieve VM's
VM's hebben twee niet-actieve statussen: Gestopt en Gedealloceerd.
Gestopte VM's zijn afgesloten vanuit het besturingssysteem (bijvoorbeeld met behulp van de opdracht afsluiten). Gestopte VM's worden uitgeschakeld, maar Azure reserveert nog steeds rekenresources, zoals CPU en geheugen. Omdat rekenresources zijn gereserveerd en niet kunnen worden gebruikt door andere VM's, blijven deze VM's rekenkosten in rekening brengen.
Niet-toegewezen virtuele machines worden gestopt via cloudbeheer-API's in de Azure-portal, CLI, PowerShell of een ander clienthulpmiddel. Wanneer een virtuele machine wordt gedealloceerd, worden de bijbehorende rekenmiddelen in Azure vrijgegeven. Omdat rekenresources worden vrijgegeven, worden voor deze VM's geen rekenkosten in rekening gebracht. Het is echter belangrijk om te weten dat zowel gestopte als gedealloceerde VM's niet-rekenkosten worden berekend, zoals opslagkosten van schijven.
Gestopte VM's identificeren
Gebruik de volgende Arg-query (Azure Resource Graph) om gestopte VM's te identificeren die niet zijn toegewezen. Er worden details opgehaald over hun energiestatus, locatie, resourcegroep en abonnements-id.
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
Toezeggingskortingen gebruiken
Aanbeveling: Maak gebruik van toezeggingskortingen om maximaal 72% te besparen in vergelijking met lijstkosten.
In verband met toezeggingskortingen
Toezeggingskortingen zijn financiële incentives die worden aangeboden aan organisaties die azure-services gedurende een bepaalde periode of termijn gebruiken, meestal één of drie jaar. Door akkoord te gaan met een vast bedrag aan gebruik of uitgaven (kosten) voor de looptijd, kunnen organisaties profiteren van aanzienlijke kortingen (tot 72%) vergeleken met de lijstprijzen. Kortingen worden toegepast op in aanmerking komende resources, waardoor organisaties kunnen besparen op hun cloudkosten en tegelijkertijd flexibiliteit en voorspelbaarheid bieden in hun budgettering.
Voor meer informatie over toezeggingskortingen raadpleegt u de mogelijkheid voor tariefoptimalisatie.
De dekking van de toezeggingskorting voor virtuele machines meten
Gebruik de volgende FinOps Hub-query om de totale kortingsdekking voor VM-toezeggingen te meten.
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
Gebruik de volgende query om de dekking per VM te meten.
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
Raadpleeg FinOps-hubsvoor meer informatie over FinOps-hubs.
Query - Details van virtuele-machineschaalset
Deze query analyseert virtuele-machineschaalsets in uw Azure-omgeving op basis van hun SKU, spot VM-prioriteit en prioriteitsmixbeleid. Het biedt inzichten voor strategieën voor kostenoptimalisatie en resourcebeheer.
Categorie
Resourcebeheer
Query
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
Query - Analyse van processortype van virtuele machine
Deze query identificeert het processortype (ARM, AMD of Intel) dat wordt gebruikt door VM's in uw Azure-omgeving. Het helpt bij het begrijpen van de distributie van VM's in verschillende processorarchitecturen, wat handig is voor het optimaliseren van workloadprestaties en kostenefficiëntie.
Categorie
Resourcebeheer
Query
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
Op zoek naar meer?
Hebben we iets gemist? Wilt u iets toevoegen? We horen graag over vragen, problemen of oplossingen die u hier wilt bekijken. Maak een nieuw probleem met de details die u hier wilt zien.
Gerelateerde inhoud
Gerelateerde resources:
Gerelateerde producten:
Verwante oplossingen: