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

Azure Kubernetes Service (AKS) vereenvoudigt het implementeren en beheren van toepassingen in containers. Het biedt serverloze Kubernetes, een geïntegreerde CI/CD-ervaring en beveiliging en governance op bedrijfsniveau.

Gerelateerde resources:

Zoekopdracht: details van het 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

Spot-VM's gebruiken voor AKS-clusters

Aanbeveling: Gebruik spot-VM's voor AKS-agentgroepen om de rekenkosten voor fouttolerante, onderbreekbare werkbelastingen te verlagen.

Informatie over Spot-VM's in AKS

Spot-VM's profiteren van ongebruikte Azure capaciteit tegen een aanzienlijk lagere kosten. Wanneer Azure de capaciteit weer nodig heeft, verwijdert de Azure infrastructuur spot-VM's. Spot-VM's zijn handig voor workloads die onderbrekingen kunnen verwerken, zoals batchverwerkingstaken, ontwikkel-/testomgevingen en grote rekenworkloads.

AKS-clusters die gebruikmaken van automatisch schalen, maar die geen gebruik maken van spot-VM's, betalen mogelijk meer dan nodig is. Door spot-VM's in te schakelen voor onderbreekbare workloads, kunt u de rekenkosten aanzienlijk verlagen. Deze aanbeveling is alleen van toepassing op clusters met workloads die onderbrekingen kunnen verdragen. Niet alle workloads zijn geschikt voor spot-VM's.

Note

FinOps hubs kunnen AKS-clusters zonder Spot-VM's automatisch identificeren als opt-in-aanbeveling. Meer informatie.

Query: AKS-clusters zonder spot-VM's

Gebruik de volgende ARG-query om AKS-clusters te identificeren waarvoor automatisch schalen is ingeschakeld die geen spot-VM's gebruiken.

Categorie

Optimization

Vraag

resources
| where type == 'microsoft.containerservice/managedclusters'
| mvexpand AgentPoolProfiles = properties.agentPoolProfiles
| where AgentPoolProfiles.enableAutoScaling == true
    and isnull(AgentPoolProfiles.scaleSetPriority)
| project
    ResourceId = id,
    AKSName = name,
    ProfileName = tostring(AgentPoolProfiles.name),
    VMSize = tostring(AgentPoolProfiles.vmSize),
    NodeCount = tostring(AgentPoolProfiles.['count']),
    MinCount = tostring(AgentPoolProfiles.minCount),
    MaxCount = tostring(AgentPoolProfiles.maxCount),
    Region = location,
    ResourceGroupName = resourceGroup,
    SubscriptionId = subscriptionId

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.

Note

FinOps-hubs kunnen automatisch gestopte VM's identificeren die niet zijn toegewezen. Meer informatie.

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 de schaalset voor virtuele machines

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

Migreren naar beheerde schijven

Aanbeveling: Migreer VM's met onbeheerde schijven naar beheerde schijven om de betrouwbaarheid te verbeteren, het beheer te vereenvoudigen en de buitengebruikstelling van niet-beheerde schijven voor te bereiden.

Over niet-beheerde schijven

Onbeheerde schijven VHD-bestanden opslaan als pagina-blobs in Azure Storage-accounts, waarbij u de capaciteit, prestaties en beveiliging van het opslagaccount zelf moet beheren. Beheerde schijven vereenvoudigen schijfbeheer door opslagaccountbeheer voor u te verwerken, waardoor u betere betrouwbaarheid krijgt met beschikbaarheidssets, gedetailleerdere toegangsbeheer en ondersteuning voor nieuwere functies, zoals schijfversleuteling en bursting. Microsoft de buitengebruikstelling van niet-beheerde schijven heeft aangekondigd, dus migreren naar beheerde schijven is zowel een kostenoptimalisatie als een nalevingsstap.

Note

Met FinOps-hubs kunnen vm's automatisch worden geïdentificeerd met behulp van niet-beheerde schijven. Meer informatie.

VM's met niet-beheerde schijven identificeren

Gebruik de volgende ARG-query om VM's te identificeren die nog steeds onbeheerde schijven gebruiken.

resources
| where type =~ 'microsoft.compute/virtualmachines'
| where isnull(properties.storageProfile.osDisk.managedDisk)
| project
    ResourceId = tolower(id),
    ResourceName = name,
    OsDiskVhd = tostring(properties.storageProfile.osDisk.vhd.uri),
    Region = location,
    ResourceGroupName = resourceGroup,
    SubscriptionId = subscriptionId

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

Azure Hybrid Benefit gebruiken voor Windows VM's

Aanbeveling: schakel Azure Hybrid Benefit in voor Windows VM's om de licentiekosten te verlagen met behulp van bestaande on-premises Windows Server licenties.

Info over Azure Hybrid Benefit voor Windows

Azure Hybrid Benefit kunt u uw on-premises Windows Server licenties gebruiken met Software Assurance of Windows Server-abonnement om Windows VM's tegen lagere kosten uit te voeren in Azure. In plaats van te betalen voor een volledige Windows Server licentie met elke VIRTUELE machine, kunt u uw bestaande licenties meenemen en alleen betalen voor de basiskosten voor rekenkracht. Deze aanbeveling is alleen van toepassing als uw organisatie on-premises Windows Server licenties heeft.

Note

FinOps-hubs kunnen automatisch Windows VM's identificeren zonder Azure Hybrid Benefit als aanbeveling voor aanmelden. Meer informatie.

Query: Windows-VM's zonder Azure Hybrid Benefit

Gebruik de volgende ARG-query om Windows VM's en schaalsets te identificeren die niet gebruikmaken van Azure Hybrid Benefit. De query sluit dev/test-abonnementen uit, waarvoor al kortingslicenties zijn toegewezen.

Categorie

Optimization

Vraag

resourcecontainers
| where type =~ 'Microsoft.Resources/subscriptions'
| where tostring(properties.subscriptionPolicies.quotaId) !has 'MSDNDevTest_2014-09-01'
| project SubscriptionName = name, subscriptionId
| join (
    resources
    | where type =~ 'microsoft.compute/virtualmachines'
        or type =~ 'microsoft.compute/virtualMachineScaleSets'
    | where tostring(properties.storageProfile.osDisk.osType) == 'Windows'
        or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows'
    | where tostring(properties.['licenseType']) !has 'Windows'
        and tostring(properties.virtualMachineProfile.['licenseType']) != 'Windows_Server'
    | project
        ResourceId = id,
        ResourceName = name,
        VMSize = tostring(properties.hardwareProfile.vmSize),
        LicenseType = tostring(properties.['licenseType']),
        Region = location,
        ResourceGroupName = resourceGroup,
        subscriptionId
) on subscriptionId
| project
    ResourceId,
    ResourceName,
    VMSize,
    LicenseType,
    Region,
    ResourceGroupName,
    SubscriptionName,
    SubscriptionId = subscriptionId

Azure Hybrid Benefit gebruiken voor SQL-VM's

Aanbeveling: schakel Azure Hybrid Benefit in voor SQL Server VM's om licentiekosten te verlagen met behulp van bestaande on-premises SQL Server licenties.

Info over Azure Hybrid Benefit voor SQL-VM's

Azure Hybrid Benefit voor SQL Server kunt u uw on-premises SQL Server licenties gebruiken met Software Assurance om SQL Server VM's in Azure tegen lagere kosten uit te voeren. Dit voordeel is van toepassing op Standard- en Enterprise-edities (Developer- en Express-edities zijn al gratis en hebben geen Azure Hybrid Benefit nodig). Deze aanbeveling is alleen van toepassing als uw organisatie on-premises SQL Server-licenties heeft die in aanmerking komen voor Software Assurance.

Note

FinOps-hubs kunnen automatisch SQL-VM's identificeren zonder Azure Hybrid Benefit als aanbeveling voor aanmelden. Meer informatie.

Query: SQL-VM's zonder Azure Hybrid Benefit

Gebruik de volgende ARG-query om SQL Server VM's te identificeren die niet gebruikmaken van Azure Hybrid Benefit. De query sluit dev/test-abonnementen en Developer/Express-edities uit.

Categorie

Optimization

Vraag

resourcecontainers
| where type =~ 'Microsoft.Resources/subscriptions'
| where tostring(properties.subscriptionPolicies.quotaId) !has 'MSDNDevTest_2014-09-01'
| project SubscriptionName = name, subscriptionId
| join (
    resources
    | where type =~ 'Microsoft.SqlVirtualMachine/SqlVirtualMachines'
        and tostring(properties.['sqlServerLicenseType']) != 'AHUB'
    | project
        ResourceId = id,
        ResourceName = name,
        LicenseType = tostring(properties.['sqlServerLicenseType']),
        SQLVersion = tostring(properties.['sqlImageOffer']),
        SQLSKU = tostring(properties.['sqlImageSku']),
        Region = location,
        ResourceGroupName = resourceGroup,
        subscriptionId
) on subscriptionId
| join (
    resources
    | where type =~ 'Microsoft.Compute/virtualMachines'
    | project
        ResourceName = tolower(name),
        VMSize = tostring(properties.hardwareProfile.vmSize),
        subscriptionId
) on ResourceName
| where SQLSKU != 'Developer' and SQLSKU != 'Express'
| project
    ResourceId,
    ResourceName,
    VMSize,
    LicenseType,
    SQLVersion,
    SQLSKU,
    Region,
    ResourceGroupName,
    SubscriptionName,
    SubscriptionId = subscriptionId

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: