Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este artigo descreve uma coleção de práticas comprovadas de FinOps para serviços de computação. Ele fornece orientação sobre como otimizar custos, melhorar a eficiência e obter informações sobre seus recursos de computação no Azure. As práticas são categorizadas com base no tipo de serviço de computação, como máquinas virtuais (VM), Serviço Kubernetes do Azure (AKS) e Azure Functions.
Serviço Kubernetes do Azure
A seção a seguir fornece uma consulta do Azure Resource Graph (ARG) para clusters AKS. A consulta ajuda você a obter informações sobre suas VMs.
Consulta - cluster AKS
Esta consulta ARG recupera informações detalhadas sobre clusters AKS em seu ambiente do Azure.
Categoria
Gestão de recursos
Consulta
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
Máquinas virtuais
As máquinas virtuais (VMs) do Azure são um dos vários tipos de recursos de computação escalonáveis sob demanda que o Azure oferece. Normalmente, você escolhe uma VM quando precisa de mais controle sobre o ambiente de computação do que as outras opções oferecem.
Uma VM do Azure oferece a flexibilidade da virtualização sem ter que comprar e manter o hardware físico que a executa. No entanto, você ainda precisa manter a VM executando tarefas, como configurar, aplicar patches e instalar o software que é executado nela.
Recursos relacionados:
- Página do produto de Máquinas Virtuais
- Preços de máquinas virtuais
- Documentação da máquina virtual
- serviços da Azure para computação escalável a pedido
Desalocar máquinas virtuais
Recomendação: Desalocar VMs para evitar cobranças por recursos de computação não utilizados. Evite parar VMs sem deslocalizá-las.
Sobre VMs inativas
As VMs têm dois estados inativos: Interrompido e Deslocalizado.
As VMs interrompidas foram desligadas de dentro do sistema operacional (por exemplo, usando o comando Shut down). As VMs interrompidas são desligadas, mas o Azure ainda reserva recursos de computação, como CPU e memória. Como os recursos de computação são reservados e não estão disponíveis para uso com outras VMs, essas VMs continuam a incorrer em encargos de computação.
As VMs desalocadas são interrompidas por meio de APIs de gerenciamento de nuvem no portal do Azure, CLI, PowerShell ou outra ferramenta de cliente. Quando uma VM é deslocalizada, o Azure libera os recursos de computação correspondentes. Como os recursos de computação são liberados, essas VMs não incorrem em encargos de computação; no entanto, é importante observar que as VMs interrompidas e desalocadas continuam a incorrer em encargos não relacionados à computação, como cobranças de armazenamento de discos.
Identificar VMs paradas
Utilize a seguinte consulta do Azure Resource Graph (ARG) para identificar VMs interrompidas que não estão desalocadas. Recupera detalhes sobre o estado de funcionamento, localização, grupo de recursos e ID de subscrição respetivos.
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
Use descontos de compromisso
Recomendação: Use descontos de compromisso para economizar até 72% em comparação com os preços de tabela.
Sobre os descontos de compromisso
Os descontos de compromisso são incentivos financeiros oferecidos a organizações que se comprometem a usar os serviços do Azure por um período ou período especificado, geralmente um ou três anos. Ao concordar com uma quantidade fixa de uso ou gasto (custo) para o período, as organizações podem beneficiar-se de descontos significativos (até 72%) em comparação com os preços de lista. Os descontos são aplicados a recursos elegíveis, ajudando as organizações a economizar em seus custos de nuvem e, ao mesmo tempo, fornecendo flexibilidade e previsibilidade em seu orçamento.
Para saber mais sobre descontos de compromisso, consulte a capacidade de otimização de tarifa .
Meça a cobertura do desconto de compromisso para máquinas virtuais
Utilize a seguinte consulta do hub FinOps para medir a cobertura geral do desconto por compromisso de VM.
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
Use a consulta a seguir para medir o detalhamento de custos por VM, incluindo a cobertura de descontos de compromisso.
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
Para saber mais sobre hubs FinOps, consulte .
Consulta - Detalhes do conjunto de dimensionamento da máquina virtual
Esta consulta analisa os Conjuntos de Escala de Máquina Virtual em seu ambiente do Azure com base em sua SKU, prioridade de VM spot e política de combinação de prioridades. Ele fornece insights para otimização de custos e estratégias de gerenciamento de recursos.
Categoria
Gestão de recursos
Consulta
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
Consulta - Análise de tipo de processador de máquina virtual
Esta consulta identifica o tipo de processador (ARM, AMD ou Intel) usado por VMs em seu ambiente do Azure. Ele ajuda a entender a distribuição de VMs em diferentes arquiteturas de processador, o que é útil para otimizar o desempenho da carga de trabalho e a eficiência de custos.
Categoria
Gestão de recursos
Consulta
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
Enviar comentários
Dê-nos a sua opinião com uma breve avaliação. Usamos essas análises para melhorar e expandir as ferramentas e os recursos do FinOps.
Se você está procurando algo específico, vote em uma ideia existente ou crie uma nova. Partilhe ideias com outras pessoas para obter mais votos. Focamo-nos nas ideias mais votadas.
Conteúdos relacionados
Recursos relacionados:
Produtos relacionados:
Soluções relacionadas:
- Relatórios do Power BI do kit de ferramentas FinOps
- Centros de FinOps
- Cadernos de FinOps
- Motor de otimização