Delen via


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

Vraag

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:

Virtuele machines vrijgeven

Aanbeveling: VM's dealloceren om kosten voor ongebruikte rekenkracht te voorkomen. Vermijd het stoppen van VM's zonder ze te dealloceren.

Over inactieve virtuele machines

VM's hebben twee inactieve statussen: Gestopt en Vrijgemaakt.

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 beschikbaar zijn voor gebruik met 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 te weten dat zowel gestopte als niet-toegewezen VM's kosten in rekening blijven brengen die niet zijn gerelateerd aan berekeningen, 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: Gebruik 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 kostenanalyse per VM te meten, inclusief dekking van toezeggingskortingen.

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

Vraag

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

Vraag

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

Feedback geven

Laat ons weten hoe we het doen met een korte recensie. We gebruiken deze beoordelingen om FinOps-hulpprogramma's en -resources te verbeteren en uit te breiden.

Als u op zoek bent naar iets specifieks, stem dan op een bestaande of maak een nieuw idee. Deel ideeën met anderen om meer stemmen te krijgen. We richten ons op ideeën met de meeste stemmen.


Gerelateerde resources:

Gerelateerde producten:

Verwante oplossingen: