Sdílet prostřednictvím


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:

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í zdroje:

Související produkty:

Související řešení: