Osvědčené postupy FinOps pro výpočetní prostředky
Tento článek popisuje kolekci osvědčených postupů FinOps pro výpočetní služby. Poskytuje pokyny k optimalizaci nákladů, zlepšení efektivity a získání přehledů o výpočetních prostředcích v Azure. Postupy se kategorizují na základě typu výpočetní služby, jako jsou virtuální počítače, Azure Kubernetes Service (AKS) a Azure Functions.
Azure Kubernetes Service
Následující část obsahuje dotaz Azure Resource Graphu (ARG) pro clustery AKS. Dotaz vám pomůže získat přehled o virtuálních počítačích.
Dotaz – cluster AKS
Tento dotaz ARG načte podrobné informace o clusterech AKS ve vašem prostředí Azure.
Kategorie
Řízení zdrojů
Dotaz
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
Virtuální počítače
Virtuální počítače Azure jsou jedním z několika typů škálovatelných výpočetních prostředků na vyžádání, které Azure nabízí. Virtuální počítač obvykle zvolíte v případě, že potřebujete větší kontrolu nad výpočetním prostředím, než nabízí ostatní možnosti.
Virtuální počítač Azure poskytuje flexibilitu virtualizace, aniž byste museli kupovat a udržovat fyzický hardware, na kterém běží. Virtuální počítač ale stále potřebujete udržovat provedením úloh, jako je konfigurace, opravy a instalace softwaru, který na něm běží.
Související zdroje:
- O virtuálních počítačích
- ceny virtuálních počítačů
- Dokumentace k virtuálnímu počítači
- Azure služby pro škálovatelné výpočetní kapacity na vyžádání
Uvolnit virtuální počítače
Doporučení: Uvolněte virtuální počítače, abyste se vyhnuli nepoužívaným poplatkům za výpočetní prostředky. Vyhněte se zastavení virtuálních počítačů bez jejich dealokace.
Informace o neběžných virtuálních počítačích
Virtuální počítače mají 2 neběžící stavy: zastaveno a dealokováno.
Zastavené virtuální počítače se v operačním systému vypínaly (například pomocí příkazu vypnutí). Zastavené virtuální počítače jsou vypnuté, ale Azure stále rezervuje výpočetní prostředky, jako je procesor a paměť. Vzhledem k tomu, že výpočetní prostředky jsou rezervované a nemůžou je používat jiné virtuální počítače, účtují se za tyto virtuální počítače i nadále poplatky za výpočetní prostředky.
Uvolněné virtuální počítače se zastaví přes rozhraní pro správu cloudu v Azure portálu, CLI, PowerShellu nebo jiném klientském nástroji. Když je virtuální počítač uvolněný, Azure uvolní odpovídající výpočetní prostředky. Vzhledem k tomu, že se uvolní výpočetní prostředky, nebudou za tyto virtuální počítače účtovány poplatky za výpočetní prostředky; Je ale důležité si uvědomit, že za zastavené i uvolněné virtuální počítače se účtují poplatky za nevýpočtu, jako jsou poplatky za úložiště z disků.
Identifikace zastavených virtuálních počítačů
Pomocí následujícího dotazu Azure Resource Graphu (ARG) identifikujte zastavené virtuální počítače, které nebyly uvolněny. Načte podrobnosti o stavu napájení, umístění, skupině prostředků a ID předplatného.
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
Využijte slev za závazek
Doporučení: Využijte slevy za závazek, abyste ušetřili až 72% v porovnání s katalogovými cenami.
Informace o slevách na závazky
Slevy na závazky jsou finanční pobídky nabízené organizacím, které se zavázaly používat služby Azure za určité období nebo období, obvykle jeden nebo tři roky. Souhlasem se stanovenou částkou využití nebo výdajů na stanovené období mohou organizace získat výhodu v podobě významných slev (až 72%) oproti standardním ceníkovým cenám. Slevy se použijí na způsobilé prostředky, což organizacím pomáhá ušetřit náklady na cloud a zároveň zajistit flexibilitu a předvídatelnost rozpočtu.
Další informace o slevách za závazek viz Možnosti optimalizace sazeb.
Měřte pokrytí slevy za závazek na virtuálních počítačích
K měření celkového pokrytí slevy za závazek virtuálního počítače použijte následující dotaz centra FinOps.
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
Pomocí následujícího dotazu změřte, jaké je pokrytí na jeden virtuální počítač.
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
Další informace o centrech FinOps najdete v center FinOps.
Dotaz – podrobnosti o škálovací sadě virtuálních počítačů
Tento dotaz analyzuje škálovací sady virtuálních počítačů ve vašem prostředí Azure na základě jejich skladové položky, priority virtuálního počítače a zásad mixu priorit. Poskytuje přehledy pro optimalizaci nákladů a strategie správy prostředků.
Kategorie
Řízení zdrojů
Dotaz
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
Dotaz – analýza typu procesoru virtuálního počítače
Tento dotaz identifikuje typ procesoru (ARM, AMD nebo Intel) používaný virtuálními počítači ve vašem prostředí Azure. Pomáhá pochopit distribuci virtuálních počítačů napříč různými architekturami procesoru, což je užitečné pro optimalizaci výkonu úloh a nákladovou efektivitu.
Kategorie
Řízení zdrojů
Dotaz
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
Hledáte další?
Chyběli jsme něco? Chcete vidět něco přidaného? Rádi bychom se dozvěděli o jakýchkoli otázkách, problémech nebo řešeních, které byste zde rádi probrali. Vytvořte nový problém s podrobnostmi, které byste chtěli vidět v obou těchto tématech.
Související obsah
Související zdroje:
Související produkty:
Související řešení: