Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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
AKS (Serviço de Kubernetes do Azure) simplifica a implantação e o gerenciamento de aplicativos em contêineres. Ele oferece Kubernetes sem servidor, uma experiência de CI/CD integrada e segurança e governança de nível empresarial.
Recursos relacionados:
- Serviço de Kubernetes do Azure página do produto
- Preços do Serviço de Kubernetes do Azure
- Documentação do Serviço de Kubernetes do Azure
- Arquitetura de linha de base do AKS
Consulta: detalhes do cluster 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
Use VMs Spot para clusters do AKS
Recomendação: use VMs Spot nos pools de agentes do AKS para reduzir os custos de computação de cargas de trabalho tolerantes a falhas e interruptíveis.
Sobre VMs spot no AKS
Spot VMs aproveitam a capacidade de Azure não utilizada a um custo significativamente reduzido. Quando o Azure precisa da capacidade de volta, a infraestrutura do Azure expulsa as VMs Spot. As VMs spot são úteis para cargas de trabalho que podem lidar com interrupções, como trabalhos de processamento em lote, ambientes de desenvolvimento/teste e cargas de trabalho de computação grandes.
Os clusters do AKS que usam o dimensionamento automático, mas não aproveitam as VMs spot, podem estar pagando mais do que o necessário. Ao habilitar VMs spot para cargas de trabalho interruptíveis, você pode reduzir significativamente os custos de computação. Essa recomendação só se aplica a clusters que executam cargas de trabalho que podem tolerar interrupções. Nem todas as cargas de trabalho são apropriadas para VMs Spot.
Note
Os hubs de FinOps podem identificar automaticamente clusters do AKS sem VMs Spot como uma recomendação opcional. Saiba mais.
Consulta: clusters do AKS sem VMs Spot
Use a consulta ARG a seguir para identificar clusters do AKS com dimensionamento automático habilitado que não estão usando VMs spot.
Categoria
Optimization
Consulta
resources
| where type == 'microsoft.containerservice/managedclusters'
| mvexpand AgentPoolProfiles = properties.agentPoolProfiles
| where AgentPoolProfiles.enableAutoScaling == true
and isnull(AgentPoolProfiles.scaleSetPriority)
| project
ResourceId = id,
AKSName = name,
ProfileName = tostring(AgentPoolProfiles.name),
VMSize = tostring(AgentPoolProfiles.vmSize),
NodeCount = tostring(AgentPoolProfiles.['count']),
MinCount = tostring(AgentPoolProfiles.minCount),
MaxCount = tostring(AgentPoolProfiles.maxCount),
Region = location,
ResourceGroupName = resourceGroup,
SubscriptionId = subscriptionId
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:
- Página de produto de máquinas virtuais
- Preço da máquina virtual
- Documentação da máquina virtual
- Serviços do Azure para computação sob demanda e escalonável
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.
Note
Os hubs FinOps podem identificar automaticamente VMs paradas que não estão desalocadas. Saiba mais.
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
Migrar para discos gerenciados
Recomendação: migre VMs usando discos não gerenciados para discos gerenciados para melhorar a confiabilidade, simplificar o gerenciamento e preparar-se para a desativação de discos não gerenciados.
Sobre discos não gerenciados
Discos não gerenciados armazenam arquivos VHD como blobs de páginas em contas de Armazenamento do Azure, o que exige que você mesmo gerencie a capacidade, o desempenho e a segurança da conta de armazenamento. Os discos gerenciados simplificam o gerenciamento de discos ao cuidar do gerenciamento da conta de armazenamento para você, oferecendo maior confiabilidade com os conjuntos de disponibilidade, controle de acesso mais granular e suporte a recursos mais recentes, como criptografia de disco e rajadas. Microsoft anunciou a desativação de discos não gerenciados, portanto, a migração para discos gerenciados é uma otimização de custo e uma etapa de conformidade.
Note
Os hubs FinOps podem identificar automaticamente VMs usando discos não gerenciados. Saiba mais.
Identificar VMs com discos não gerenciados
Use a consulta ARG a seguir para identificar VMs que ainda estão usando discos não gerenciados.
resources
| where type =~ 'microsoft.compute/virtualmachines'
| where isnull(properties.storageProfile.osDisk.managedDisk)
| project
ResourceId = tolower(id),
ResourceName = name,
OsDiskVhd = tostring(properties.storageProfile.osDisk.vhd.uri),
Region = location,
ResourceGroupName = resourceGroup,
SubscriptionId = subscriptionId
Consulta: Análise de tipo de processador de 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
Usar o Benefício Híbrido do Azure para VMs do Windows
Recomendação: habilite o Benefício Híbrido do Azure para VMs do Windows para reduzir os custos de licenciamento usando licenças locais existentes do Windows Server.
Sobre Benefício Híbrido do Azure para Windows
Benefício Híbrido do Azure permite que você use suas licenças de Windows Server locais com Software Assurance ou assinatura Windows Server para executar Windows VMs em Azure a um custo reduzido. Em vez de pagar uma licença de Windows Server completa com cada VM, você pode trazer suas licenças existentes e pagar apenas pelo custo de computação base. Essa recomendação só se aplica se sua organização tiver licenças de Windows Server locais qualificadas.
Note
Os hubs de FinOps podem identificar automaticamente VMs do Windows que não usam o Benefício Híbrido do Azure como uma recomendação opcional. Saiba mais.
Consulta: VMs do Windows sem Benefício Híbrido do Azure
Use a consulta ARG a seguir para identificar máquinas virtuais do Windows e conjuntos de dimensionamento que não estão utilizando o Benefício Híbrido do Azure. A consulta exclui assinaturas de desenvolvimento/teste, que já têm licenciamento com desconto.
Categoria
Optimization
Consulta
resourcecontainers
| where type =~ 'Microsoft.Resources/subscriptions'
| where tostring(properties.subscriptionPolicies.quotaId) !has 'MSDNDevTest_2014-09-01'
| project SubscriptionName = name, subscriptionId
| join (
resources
| where type =~ 'microsoft.compute/virtualmachines'
or type =~ 'microsoft.compute/virtualMachineScaleSets'
| where tostring(properties.storageProfile.osDisk.osType) == 'Windows'
or tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType) == 'Windows'
| where tostring(properties.['licenseType']) !has 'Windows'
and tostring(properties.virtualMachineProfile.['licenseType']) != 'Windows_Server'
| project
ResourceId = id,
ResourceName = name,
VMSize = tostring(properties.hardwareProfile.vmSize),
LicenseType = tostring(properties.['licenseType']),
Region = location,
ResourceGroupName = resourceGroup,
subscriptionId
) on subscriptionId
| project
ResourceId,
ResourceName,
VMSize,
LicenseType,
Region,
ResourceGroupName,
SubscriptionName,
SubscriptionId = subscriptionId
Use o Benefício Híbrido do Azure para máquinas virtuais SQL
Recomendação: habilite o Benefício Híbrido do Azure para VMs do SQL Server para reduzir os custos de licenciamento usando licenças locais existentes do SQL Server.
Sobre o Benefício Híbrido do Azure para VMs do SQL
Benefício Híbrido do Azure for SQL Server permite que você use suas licenças locais do SQL Server com Software Assurance para executar VMs do SQL Server no Azure a um custo reduzido. Esse benefício se aplica às edições Standard e Enterprise (as edições Developer e Express já são gratuitas e não precisam de Benefício Híbrido do Azure). Essa recomendação só se aplica se sua organização tiver licenças de SQL Server locais qualificadas com o Software Assurance.
Note
FinOps hubs podem identificar automaticamente VMs SQL sem Benefício Híbrido do Azure como uma recomendação opcional. Saiba mais.
Consulta: VMs de SQL sem Benefício Híbrido do Azure
Use a consulta ARG a seguir para identificar SQL Server VMs que não estão aproveitando Benefício Híbrido do Azure. A consulta exclui assinaturas de desenvolvimento/teste e edições developer/express.
Categoria
Optimization
Consulta
resourcecontainers
| where type =~ 'Microsoft.Resources/subscriptions'
| where tostring(properties.subscriptionPolicies.quotaId) !has 'MSDNDevTest_2014-09-01'
| project SubscriptionName = name, subscriptionId
| join (
resources
| where type =~ 'Microsoft.SqlVirtualMachine/SqlVirtualMachines'
and tostring(properties.['sqlServerLicenseType']) != 'AHUB'
| project
ResourceId = id,
ResourceName = name,
LicenseType = tostring(properties.['sqlServerLicenseType']),
SQLVersion = tostring(properties.['sqlImageOffer']),
SQLSKU = tostring(properties.['sqlImageSku']),
Region = location,
ResourceGroupName = resourceGroup,
subscriptionId
) on subscriptionId
| join (
resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| project
ResourceName = tolower(name),
VMSize = tostring(properties.hardwareProfile.vmSize),
subscriptionId
) on ResourceName
| where SQLSKU != 'Developer' and SQLSKU != 'Express'
| project
ResourceId,
ResourceName,
VMSize,
LicenseType,
SQLVersion,
SQLSKU,
Region,
ResourceGroupName,
SubscriptionName,
SubscriptionId = subscriptionId
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.
Conteúdo relacionado
Recursos relacionados:
Produtos relacionados:
Soluções relacionadas:
- Relatórios do Power BI do kit de ferramentas FinOps
- Centros FinOps
- Cadernos FinOps
- Mecanismo de otimização