Compartilhar via


Práticas recomendadas de FinOps para computação

Este artigo descreve uma coleção de práticas comprovadas de FinOps para serviços de computação. Ele fornece diretrizes sobre como otimizar custos, melhorar a eficiência e obter insights 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 VMs (máquinas virtuais), AKS (Serviço de Kubernetes do Azure) e Azure Functions.


Serviço de Kubernetes do Azure

A seção a seguir fornece uma consulta ARG (Azure Resource Graph) para clusters do AKS. A consulta ajuda você a obter insights sobre suas VMs.

Consulta – cluster do AKS

Essa consulta ARG recupera informações detalhadas sobre clusters do AKS em seu ambiente do Azure.

Categoria

Gerenciamento 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 VMs (máquinas virtuais) do Azure são um dos vários tipos de recursos de computação sob demanda e escalonáveis 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 a necessidade de comprar e manter o hardware físico que a executa. No entanto, você ainda precisa manter a VM executando tarefas, como configurar, aplicar patch e instalar o software que é executado nela.

Recursos relacionados:

Desalocar máquinas virtuais

Recomendação: desaloque VMs para evitar encargos de computação não utilizados. Evite parar VMs sem desalocá-las.

Sobre VMs inativas

As VMs têm dois estados inativos: parado e desalocado.

As VMs paradas foram desligadas de dentro do sistema operacional (por exemplo, usando o comando Desligar ). As VMs paradas 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 é desalocada, 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 paradas e desalocadas continuam a incorrer em encargos não relacionados à computação, como encargos de armazenamento de discos.

Identificar VMs paradas

Use a seguinte consulta do ARG (Azure Resource Graph) para identificar VMs paradas que não estão desalocadas. Elas recuperam detalhes sobre seu estado de energia, localização, grupo de recursos e ID de assinatura.

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

Usar descontos de compromisso

Recomendação: use descontos de compromisso para economizar até 72% em comparação com os custos de lista.

Sobre 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, normalmente um ou três anos. Ao concordar com uma quantidade fixa de uso ou gasto (custo) para o período, as organizações podem se beneficiar de descontos significativos (até 72%) em comparação com os preços de tabela. Os descontos são aplicados a recursos qualificados, ajudando as organizações a economizar em seus custos de nuvem, proporcionando flexibilidade e previsibilidade em seu orçamento.

Para saber mais sobre descontos de compromisso, consulte a funcionalidade de otimização de taxa.

Medir a cobertura do desconto de compromisso de máquina virtual

Use a consulta do hub FinOps a seguir para medir a cobertura geral do desconto de 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 a divisão 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 os hubs FinOps.

Consulta – Detalhes do conjunto de dimensionamento de máquinas virtuais

Essa consulta analisa os Conjuntos de Dimensionamento de Máquinas Virtuais em seu ambiente do Azure com base em sua SKU, prioridade de VM spot e política de combinação de prioridade. Ele fornece insights para otimização de custos e estratégias de gerenciamento de recursos.

Categoria

Gerenciamento 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 do tipo de processador da máquina virtual

Essa consulta identifica o tipo de processador (ARM, AMD ou Intel) usado pelas 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

Gerenciamento 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

Envie comentários

Deixe-nos saber como estamos indo com uma avaliação rápida. Usamos essas revisões para melhorar e expandir ferramentas e recursos do FinOps.

Se você estiver procurando algo específico, vote em um existente ou crie uma ideia. Compartilhe ideias com outras pessoas para obter mais votos. Nos concentramos em ideias com a maioria dos votos.


Recursos relacionados:

Produtos relacionados:

Soluções relacionadas: