Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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:
- Azure Kubernetes Service produktsida
- Azure Kubernetes Service prissättning
- Dokumentation om Azure Kubernetes Service
- AKS-baslinjearkitektur
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:
- produktsidan för virtuella datorer
- Prissättning för virtuella datorer
- Dokumentation om virtuella datorer
- Azure-tjänster för skalbar beräkning på begäran
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.
Relaterat innehåll
Relaterade resurser:
Relaterade produkter:
Relaterade lösningar: