Поделиться через


Рекомендации по вычислению FinOps

В этой статье описывается коллекция проверенных методик FinOps для вычислительных служб. Он предоставляет рекомендации по оптимизации затрат, повышению эффективности и получению аналитических сведений о вычислительных ресурсах в Azure. Эти методики классифицируются на основе типа вычислительной службы, например виртуальных машин (vm), Служба Azure Kubernetes (AKS) и Функции Azure.


Служба Azure Kubernetes

В следующем разделе представлен запрос Azure Resource Graph (ARG) для кластеров AKS. Запрос помогает получить аналитические сведения о виртуальных машинах.

Запрос — кластер AKS

Этот запрос ARG получает подробные сведения о кластерах AKS в среде Azure.

Категория

Управление ресурсами

Запрос

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

Виртуальные машины

Виртуальные машины Azure — это один из нескольких типов по запросу масштабируемых вычислительных ресурсов, которые Azure предлагает. Как правило, вы выбираете виртуальную машину, если требуется больше контроля над вычислительной средой, чем другое предложение.

Виртуальная машина Azure обеспечивает гибкость виртуализации без необходимости покупать и поддерживать физическое оборудование, которое выполняет его. Однако вам по-прежнему необходимо поддерживать виртуальную машину, выполняя такие задачи, как настройка, исправление и установка программного обеспечения, работающего на нем.

Связанные ресурсы:

Деактивация виртуальных машин

Рекомендация. Разблокировать виртуальные машины, чтобы избежать неиспользуемых затрат на вычислительные ресурсы. Не останавливайте виртуальные машины без освобождения ресурсов.

Сведения о не запущенных виртуальных машинах

Виртуальные машины имеют 2 неработающих состояния: остановлено и освобождено.

Остановленные виртуальные машины были отключены из операционной системы (например, с помощью команды завершения работы). Остановленные виртуальные машины отключены, но Azure по-прежнему резервирует вычислительные ресурсы, такие как ЦП и память. Так как вычислительные ресурсы зарезервированы и не могут использоваться другими виртуальными машинами, эти виртуальные машины продолжают взимать расходы на вычисления.

Разделенные виртуальные машины остановлены с помощью API управления облаком на портале Azure, через CLI, PowerShell или другие клиентские инструменты. При выключении виртуальной машины Azure освобождает соответствующие вычислительные ресурсы. Так как вычислительные ресурсы выпускаются, эти виртуальные машины не будут взимать плату за вычисления; Однако важно отметить, что как остановленные, так и освобожденные виртуальные машины несут неисчислимую плату, например расходы на хранение с дисков.

Определение остановленных виртуальных машин

Используйте следующий запрос Azure Resource Graph (ARG), чтобы определить остановленные виртуальные машины, которые не были деаллоцированы. Он получает сведения о состоянии питания, расположении, группе ресурсов и идентификаторе подписки.

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

Использование скидки на обязательства

Рекомендация: воспользуйтесь скидками за обязательства, чтобы сэкономить до 72% по сравнению с прайс-листом.

О скидках на обязательства

Скидки на обязательства — это финансовые стимулы, предоставляемые организациям, которые фиксируют использование служб Azure в течение указанного периода или срока, как правило, один или три года. Согласившись на фиксированные объемы использования или расходов на определенный срок, организации могут получить значительные скидки (до 72%) по сравнению с прейскурантными ценами. Скидки применяются к соответствующим ресурсам, помогая организациям сэкономить на их облачных затратах, обеспечивая гибкость и прогнозируемость в их бюджете.

Дополнительные сведения о скидках на долгосрочные контракты см. в возможности оптимизации тарифов.

Измерение покрытия скидок на обязательства виртуальной машины

Используйте следующий запрос хаба FinOps, чтобы оценить общее покрытие скидки по обязательствам для виртуальных машин.

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

Используйте следующий запрос, чтобы оценить уровень охвата для каждой виртуальной машины.

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

Дополнительные сведения о центрах FinOps см. в .

Запрос — сведения о масштабируемом наборе виртуальных машин

Этот запрос анализирует Масштабируемые наборы виртуальных машин в среде Azure на основе SKU, определения приоритета виртуальной машины и политики сочетания приоритетов. Она предоставляет аналитические сведения о стратегиях оптимизации затрат и управления ресурсами.

Категория

Управление ресурсами

Запрос

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

Запрос — анализ типа процессора виртуальной машины

Этот запрос определяет тип процессора (ARM, AMD или Intel), используемый виртуальными машинами в вашей среде Azure. Это помогает понять распределение виртуальных машин в разных архитектурах процессора, что полезно для оптимизации производительности рабочей нагрузки и эффективности затрат.

Категория

Управление ресурсами

Запрос

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

Ищете больше?

Упустили ли мы что-нибудь? Хотите ли вы увидеть что-то добавленное? Мы хотели бы услышать о любых проблемах, проблемах или решениях, которые вы хотели бы увидеть здесь. Создайте новую проблему с подробными сведениями, которые вы хотите просмотреть здесь.


Связанные ресурсы:

Связанные продукты:

Связанные решения: