Metodtips för FinOps för beräkning

Den här artikeln beskriver en samling beprövade FinOps-metoder för beräkningstjänster. Den ger vägledning om hur du optimerar kostnader, förbättrar effektiviteten och får insikter om dina beräkningsresurser i Azure. Metoderna kategoriseras baserat på typen av beräkningstjänst, till exempel virtuella datorer (VM), Azure Kubernetes Service (AKS) och Azure Functions.


Azure Kubernetes Service

Azure Kubernetes Service (AKS) förenklar distribution och hantering av containerbaserade program. Det erbjuder serverlösa Kubernetes, en integrerad CI/CD-upplevelse och säkerhet och styrning i företagsklass.

Relaterade resurser:

Fråga: information om AKS-kluster

Den här ARG-frågan hämtar detaljerad information om AKS-kluster i din Azure-miljö.

Kategori

Resurshantering

Fråga

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

Använd Spot-VM:ar för AKS-kluster

Rekommendation: Använd Spot-VM:ar för AKS-agentpooler för att minska beräkningskostnader för feltoleranta arbetsbelastningar som kan avbrytas.

Om Spot-datorer i AKS

Spot-virtuella datorer drar nytta av outnyttjad kapacitet i Azure till en betydligt lägre kostnad. När Azure behöver återfå kapaciteten vräker Azure-infrastrukturen Spot-virtuella datorer. Spot-VM:ar är användbara för arbetsbelastningar som kan hantera avbrott, till exempel batchjobb, utvecklings-/testmiljöer och stora beräkningsintensiva arbetsbelastningar.

AKS-kluster som använder automatisk skalning men inte utnyttjar Spot-VM:ar kan medföra högre kostnader än nödvändigt. Genom att aktivera spot-VM-instanser för avbrytbara arbetsbelastningar kan du avsevärt minska beräkningskostnader. Den här rekommendationen gäller endast för kluster som kör arbetsbelastningar som kan tolerera avbrott. Alla arbetsbelastningar passar inte för Spot-VM.

Note

FinOps-hubbar kan automatiskt identifiera AKS-kluster utan Spot-VM:er som en valbar rekommendation. Läs mer.

Fråga: AKS-kluster utan Spot-VM:er

Använd följande ARG-fråga för att identifiera AKS-kluster med automatisk skalning aktiverad som inte använder Spot-VM:er.

Kategori

Optimization

Fråga

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

Virtuella datorer

Virtuella Azure-datorer är en av flera typer av skalbara beräkningsresurser på begäran som Azure erbjuder. Vanligtvis väljer du en virtuell dator när du behöver mer kontroll över datormiljön än de andra alternativen erbjuder.

En virtuell Azure-dator ger dig flexibiliteten i virtualisering utan att behöva köpa och underhålla den fysiska maskinvara som kör den. Du behöver dock fortfarande underhålla den virtuella datorn genom att utföra uppgifter, till exempel att konfigurera, korrigera och installera programvaran som körs på den.

Relaterade resurser:

Deallokera virtuella datorer

Rekommendation: Frigöra virtuella datorer för att undvika oanvända beräkningskostnader. Undvik att stoppa virtuella datorer utan att deallokera dem.

Om inaktiva virtuella datorer

Virtuella datorer har två inaktiva tillstånd: Stoppad och Deallokerad.

Stoppade virtuella datorer stängdes av från operativsystemet (till exempel med kommandot Stäng av). Stoppade virtuella datorer är avstängda, men Azure reserverar fortfarande beräkningsresurser, till exempel CPU och minne. Eftersom beräkningsresurser är reserverade och inte är tillgängliga för användning med andra virtuella datorer fortsätter dessa virtuella datorer att debiteras beräkningsavgifter.

Frigjorda virtuella datorer stoppas via molnhanterings-API:er i Azure-portalen, CLI, PowerShell eller andra klientverktyg. När en virtuell dator frigörs släpper Azure motsvarande beräkningsresurser. Eftersom beräkningsresurser släpps medför dessa virtuella datorer inte beräkningsavgifter. Det är dock viktigt att observera att både stoppade och frigjorda virtuella datorer fortsätter att medföra avgifter som inte är relaterade till beräkning, till exempel lagringsavgifter från diskar.

Note

FinOps-hubbar kan automatiskt identifiera stoppade virtuella datorer som inte har frigjorts. Läs mer.

Identifiera stoppade virtuella datorer

Använd följande ARG-fråga (Azure Resource Graph) för att identifiera stoppade virtuella datorer som inte är avallokerade. Den hämtar information om deras energitillstånd, plats, resursgrupp och prenumerations-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

Använda åtaganderabatter

Rekommendation: Använd förpliktelserabatter för att spara upp till 72% jämfört med listpriser.

Om åtaganderabatter

Åtaganderabatter är ekonomiska incitament som erbjuds organisationer som förbinder sig att använda Azure-tjänster under en angiven period eller period, vanligtvis ett eller tre år. Genom att godkänna en fast mängd användning eller utgifter (kostnad) för termen kan organisationer dra nytta av betydande rabatter (upp till 72%) jämfört med listpriser. Rabatter tillämpas på berättigade resurser, vilket hjälper organisationer att spara på sina molnkostnader samtidigt som de ger flexibilitet och förutsägbarhet i sin budgetering.

Mer information om åtaganderabatter finns i Rate optimization capability.

Mäta täckning för åtaganderabatt för virtuell maskin

Använd följande FinOps-hubbfråga för att mäta övergripande rabatttäckning för VM-åtagande.

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

Använd följande fråga för att mäta kostnadsuppdelningen per virtuell dator, inklusive täckning av åtaganderabatter.

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

Mer information om FinOps-hubbar finns i FinOps-hubbar.

Fråga: Detaljer om VM-skalningsuppsättning

Den här frågan analyserar virtuella maskin skalningsuppsättningar i din Azure-miljö baserat på deras SKU, spot VM-prioritet och prioritetsmixpolicy. Det ger insikter om strategier för kostnadsoptimering och resurshantering.

Kategori

Resurshantering

Fråga

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

Migrera till hanterade diskar

Rekommendation: Migrera virtuella datorer med ohanterade diskar till hanterade diskar för att förbättra tillförlitligheten, förenkla hanteringen och förbereda för tillbakadragning av ohanterade diskar.

Om ohanterade diskar

Oövervakade diskar lagrar VHD-filer som sidblobbar i Azure Storage-konton, vilket innebär att du själv måste hantera lagringskontonas kapacitet, prestanda och säkerhet. Hanterade diskar förenklar diskhanteringen genom att hantera hantering av lagringskonton åt dig, ger bättre tillförlitlighet med tillgänglighetsuppsättningar, mer detaljerad åtkomstkontroll och stöd för nyare funktioner som diskkryptering och bursting. Microsoft har meddelat att ohanterade diskar dras tillbaka, så att migrera till hanterade diskar är både en kostnadsoptimering och ett efterlevnadssteg.

Note

FinOps-hubbar kan automatiskt identifiera virtuella datorer med ohanterade diskar. Läs mer.

Identifiera virtuella datorer med ohanterade diskar

Använd följande ARG-fråga för att identifiera virtuella datorer som fortfarande använder ohanterade diskar.

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

Fråga: Analys av processortyp för virtuell dator

Den här frågan identifierar processortypen (ARM, AMD eller Intel) som används av virtuella datorer i din Azure-miljö. Det hjälper dig att förstå distributionen av virtuella datorer mellan olika processorarkitekturer, vilket är användbart för att optimera arbetsbelastningsprestanda och kostnadseffektivitet.

Kategori

Resurshantering

Fråga

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

Använda Azure Hybrid Benefit för Windows virtuella datorer

Rekommendation: Aktivera Azure Hybrid Benefit för Windows virtuella datorer för att minska licenskostnaderna med hjälp av befintliga lokala Windows Server licenser.

Om Azure Hybrid Benefit för Windows

Azure Hybrid Benefit kan du använda dina lokala Windows Server licenser med Software Assurance eller Windows Server prenumeration för att köra Windows virtuella datorer i Azure till en reducerad kostnad. I stället för att betala för en fullständig Windows Server licens för varje virtuell dator kan du ta med dina befintliga licenser och bara betala för baskostnaden för beräkning. Den här rekommendationen gäller endast om din organisation har kvalificerande lokala Windows Server licenser.

Note

FinOps-hubbar kan automatiskt identifiera Windows-virtuella datorer utan Azure Hybrid Benefit som en valbar rekommendation. Läs mer.

Fråga: Windows virtuella datorer utan Azure Hybrid Benefit

Använd följande ARG-fråga för att identifiera Windows virtuella datorer och skalningsuppsättningar som inte utnyttjar Azure Hybrid Benefit. Frågan exkluderar dev/test-prenumerationer, som redan har rabatterad licensiering.

Kategori

Optimization

Fråga

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

Använda Azure Hybrid Benefit för virtuella SQL-datorer

Rekommendation: Aktivera Azure Hybrid Benefit för SQL Server virtuella datorer för att minska licenskostnaderna med hjälp av befintliga lokala SQL Server licenser.

Om Azure Hybrid Benefit för virtuella SQL-datorer

Azure Hybrid Benefit för SQL Server gör att du kan använda dina lokala SQL Server-licenser med Software Assurance för att köra virtuella SQL Server-datorer i Azure till en lägre kostnad. Den här förmånen gäller för Standard- och Enterprise-utgåvor (Developer- och Express-utgåvor är redan kostnadsfria och behöver inte Azure Hybrid Benefit). Den här rekommendationen gäller endast om din organisation har kvalificerande lokala SQL Server licenser med Software Assurance.

Note

FinOps hubs kan automatiskt identifiera SQL-virtuella datorer utan Azure Hybrid Benefit som en valbar rekommendation. Läs mer.

Fråga: Virtuella SQL-datorer utan Azure Hybrid Benefit

Använd följande ARG-fråga för att identifiera SQL Server virtuella datorer som inte utnyttjar Azure Hybrid Benefit. Frågan exkluderar dev/test-prenumerationer och Developer/Express-utgåvor.

Kategori

Optimization

Fråga

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

Lämna feedback

Låt oss veta hur det går med en snabb granskning. Vi använder dessa granskningar för att förbättra och utöka FinOps-verktyg och -resurser.

Om du letar efter något specifikt kan du rösta på en befintlig eller skapa en ny idé. Dela idéer med andra för att få fler röster. Vi fokuserar på idéer med flest röster.


Relaterade resurser:

Relaterade produkter:

Relaterade lösningar: