Compartir a través de


Procedimientos recomendados de FinOps para el proceso

En este artículo se describe una colección de prácticas probadas de FinOps para los servicios de proceso. Proporciona instrucciones sobre cómo optimizar los costos, mejorar la eficiencia y obtener información sobre los recursos de proceso en Azure. Los procedimientos se clasifican en función del tipo de servicio de proceso, como máquinas virtuales (VM), Azure Kubernetes Service (AKS) y Azure Functions.


Azure Kubernetes Service

En la sección siguiente se proporciona una consulta de Azure Resource Graph (ARG) para clústeres de AKS. La consulta le ayuda a obtener información sobre las máquinas virtuales.

Consulta: clúster de AKS

Esta consulta de ARG recupera información detallada sobre los clústeres de AKS en el entorno de Azure.

Categoría

Administración de recursos

Consultar

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 virtuales

Las máquinas virtuales (VM) de Azure son uno de los distintos tipos de recursos informáticos a petición y escalables que Azure ofrece. Normalmente, se elige una máquina virtual cuando se necesita más control sobre el entorno informático que las otras opciones que ofrecen.

Una máquina virtual de Azure proporciona la flexibilidad de virtualización sin tener que comprar y mantener el hardware físico que lo ejecuta. Sin embargo, debe mantener la máquina virtual realizando tareas, como configurar, aplicar revisiones e instalar el software que se ejecuta en ella.

Recursos relacionados

Desasignar máquinas virtuales

Recomendación: libere las máquinas virtuales para evitar cargos por computación no utilizada. Evite detener las máquinas virtuales sin desasignarlas.

Acerca de las máquinas virtuales inactivas

Las máquinas virtuales tienen 2 estados no en ejecución: detenidos y desasignados.

Las máquinas virtuales detenidas se han apagado desde el sistema operativo (por ejemplo, mediante el comando shutdown). Las máquinas virtuales detenidas están apagadas, pero Azure todavía reserva recursos de proceso, como CPU y memoria. Dado que los recursos de proceso están reservados y no se pueden usar en otras máquinas virtuales, estas máquinas virtuales siguen incurriendo en cargos de proceso.

Las máquinas virtuales que han sido desasignadas se detienen a través de las API de administración de la nube en el portal de Azure, la CLI, PowerShell u otra herramienta de cliente. Cuando se desasigna una máquina virtual, Azure libera los recursos de proceso correspondientes. Puesto que se liberan recursos de proceso, estas máquinas virtuales no incurrirán en cargos de proceso; Sin embargo, es importante tener en cuenta que las máquinas virtuales detenidas y desasignadas incurren en cargos de no proceso, como los cargos de almacenamiento de los discos.

Identificación de máquinas virtuales detenidas

Use la siguiente consulta de Azure Resource Graph (ARG) para identificar las máquinas virtuales detenidas que no se han desasignado. Recupera detalles sobre su estado de energía, ubicación, grupo de recursos e identificador de suscripción.

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

Aprovechar los descuentos de compromiso

Recomendación: Aproveche los descuentos de compromiso para ahorrar hasta 72% respecto a los precios de lista.

Acerca de los descuentos de compromiso

Los descuentos de compromiso son incentivos financieros ofrecidos a las organizaciones que se comprometen a usar servicios de Azure durante un período o período especificados, normalmente uno o tres años. Al aceptar una cantidad fija de uso o gasto (costo) para el término, las organizaciones pueden beneficiarse de descuentos significativos (hasta 72%) en comparación con los precios de lista. Los descuentos se aplican a los recursos aptos, lo que ayuda a las organizaciones a ahorrar en sus costos en la nube, a la vez que proporcionan flexibilidad y previsibilidad en su presupuesto.

Para obtener más información sobre los descuentos de compromiso, consulte la capacidad de optimización de tarifas de .

Medir la cobertura de descuentos por compromiso de máquinas virtuales

Use la siguiente consulta de FinOps Hub para medir la cobertura general del descuento por compromiso de máquina virtual.

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 la consulta siguiente para medir la cobertura por máquina virtual.

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 obtener más información sobre los centros de FinOps, consulte centros de FinOps.

Consulta: detalles del conjunto de escalado de máquinas virtuales

Esta consulta analiza los conjuntos de escalado de máquinas virtuales en el entorno de Azure en función de su SKU, la prioridad de máquina virtual puntual y la directiva de combinación de prioridades. Proporciona información sobre la optimización de costos y las estrategias de administración de recursos.

Categoría

Administración de recursos

Consultar

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álisis de tipos de procesador de máquinas virtuales

Esta consulta identifica el tipo de procesador (ARM, AMD o Intel) que usan las máquinas virtuales en el entorno de Azure. Ayuda a comprender la distribución de máquinas virtuales en distintas arquitecturas de procesador, lo que resulta útil para optimizar el rendimiento de la carga de trabajo y la eficiencia de los costos.

Categoría

Administración de recursos

Consultar

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

¿Buscas más?

¿Perdimos algo? ¿Desea ver algo agregado? Nos encantaría conocer las preguntas, problemas o soluciones que le gustaría ver aquí. Cree un nuevo problema con los detalles que le gustaría ver aquí.


Recursos relacionados

Productos relacionados:

Soluciones relacionadas: