Condividi tramite


Procedure consigliate di FinOps per il calcolo

Questo articolo descrive una raccolta di procedure FinOps comprovate per i servizi di calcolo. Fornisce indicazioni sull'ottimizzazione dei costi, sul miglioramento dell'efficienza e sull'acquisizione di informazioni dettagliate sulle risorse di calcolo in Azure. Le procedure vengono classificate in base al tipo di servizio di calcolo, ad esempio macchine virtuali (VM), servizio Azure Kubernetes (servizio Azure Kubernetes) e Funzioni di Azure.


Servizio Azure Kubernetes

La sezione seguente fornisce una query di Azure Resource Graph (ARG) per i cluster del servizio Azure Kubernetes. La query consente di ottenere informazioni dettagliate sulle macchine virtuali.

Query - Cluster del servizio Azure Kubernetes

Questa query ARG recupera informazioni dettagliate sui cluster del servizio Azure Kubernetes nell'ambiente Azure.

Categoria

Gestione delle risorse

Query

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

Macchine virtuali

Le macchine virtuali di Azure sono uno dei diversi tipi di risorse di calcolo su richiesta e scalabili offerte da Azure. In genere, si sceglie una macchina virtuale quando è necessario un maggiore controllo sull'ambiente di elaborazione rispetto alle altre opzioni offerte.

Una macchina virtuale di Azure offre la flessibilità della virtualizzazione senza dover acquistare e gestire l'hardware fisico che lo esegue. Tuttavia, è comunque necessario mantenere la macchina virtuale eseguendo attività, ad esempio la configurazione, l'applicazione di patch e l'installazione del software in esecuzione.

Risorse correlate:

Deallocare macchine virtuali

Raccomandazione: deallocare le macchine virtuali per evitare addebiti di calcolo inutilizzati. Evitare di arrestare le macchine virtuali senza deallocarle.

Informazioni sulle macchine virtuali non in esecuzione

Le macchine virtuali hanno 2 stati in cui non sono in esecuzione: Arrestato e Deallocato.

Le macchine virtuali spente sono state chiuse tramite il sistema operativo, ad esempio utilizzando il comando shutdown. Le macchine virtuali arrestate sono spente, ma Azure riserva comunque risorse di calcolo, ad esempio CPU e memoria. Poiché le risorse di calcolo sono riservate e non possono essere usate da altre macchine virtuali, queste macchine virtuali continuano a incorrere in costi di calcolo.

Le macchine virtuali deallocate vengono arrestate tramite le API di gestione cloud nel portale di Azure, nell'interfaccia della riga di comando, in PowerShell o in altri strumenti client. Quando una macchina virtuale viene deallocata, Azure rilascia le risorse di calcolo corrispondenti. Poiché le risorse di calcolo vengono rilasciate, queste macchine virtuali non comportano costi di calcolo; Tuttavia, è importante notare che le macchine virtuali arrestate e deallocate comportano costi non di calcolo, ad esempio i costi di archiviazione dai dischi.

Identificare le macchine virtuali arrestate

Usare la seguente query di Azure Resource Graph (ARG) per identificare le VM arrestate che non sono state deallocate. Recupera i dettagli sullo stato di alimentazione, la posizione, il gruppo di risorse e l'ID sottoscrizione.

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

Sfruttare gli sconti per abbonamenti

Raccomandazione: sfruttare gli sconti relativi all'impegno per risparmiare fino a 72% rispetto ai prezzi di listino.

Informazioni sugli sconti relativi all'impegno

Gli sconti per l'impegno sono incentivi finanziari offerti alle organizzazioni che si impegnano a usare i servizi di Azure per un periodo o un periodo specifico, in genere uno o tre anni. Accettando un importo fisso di utilizzo o spesa (costo) per il termine, le organizzazioni possono beneficiare di sconti significativi (fino a 72%) rispetto ai prezzi di listino. Gli sconti vengono applicati alle risorse idonee, aiutando le organizzazioni a risparmiare sui costi del cloud offrendo flessibilità e prevedibilità nel budget.

Per ulteriori informazioni sugli sconti di impegno, fare riferimento alla capacità di ottimizzazione della tariffa .

Misurare la copertura dello sconto sull'impegno per macchine virtuali

Usare la query dell'hub FinOps seguente per misurare la copertura complessiva del sconto d'impegno per le macchine virtuali.

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

Usare la query seguente per misurare la copertura per ogni macchina virtuale.

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

Per altre informazioni sugli hub FinOps, vedere hub FinOps.

Query - Dettagli del set di scalabilità di macchine virtuali

Questa query analizza set di scalabilità di macchine virtuali nell'ambiente Di Azure in base allo SKU, alla priorità della macchina virtuale spot e ai criteri di combinazione di priorità. Fornisce informazioni dettagliate per l'ottimizzazione dei costi e le strategie di gestione delle risorse.

Categoria

Gestione delle risorse

Query

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

Query - Analisi dei tipi di processore di macchine virtuali

Questa query identifica il tipo di processore (ARM, AMD o Intel) usato dalle macchine virtuali nell'ambiente Azure. Consente di comprendere la distribuzione delle macchine virtuali in diverse architetture del processore, utile per ottimizzare le prestazioni del carico di lavoro e l'efficienza dei costi.

Categoria

Gestione delle risorse

Query

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

Stai cercando di più?

Ci mancava qualcosa? Vuoi vedere qualcosa aggiunto? Ci piacerebbe ascoltare eventuali domande, problemi o soluzioni che vorresti vedere qui. Creare un nuovo problema con i dettagli che si desidera visualizzare qui.


Risorse correlate:

Prodotti correlati:

Soluzioni correlate: