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:
- Informazioni sulle macchine virtuali
- prezzi delle macchine virtuali
- documentazione della macchina virtuale
- I servizi di Azure per il calcolo scalabile su richiesta
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.
Contenuto correlato
Risorse correlate:
Prodotti correlati:
Soluzioni correlate:
- Report di Power BI per FinOps Toolkit
- Hub FinOps
- Cartelle di lavoro di FinOps
- Motore di ottimizzazione