Freigeben über


Bewährte Methoden für die Berechnung von FinOps

In diesem Artikel wird eine Sammlung bewährter FinOps-Methoden für Computedienste beschrieben. Es bietet Anleitungen zum Optimieren von Kosten, zur Verbesserung der Effizienz und zum Gewinnen von Einblicken in Ihre Computeressourcen in Azure. Die Methoden werden basierend auf dem Typ des Computediensts kategorisiert, z. B. virtuelle Computer (VM), Azure Kubernetes Service (AKS) und Azure Functions.


Azure Kubernetes-Dienst

Der folgende Abschnitt enthält eine Azure Resource Graph (ARG)-Abfrage für AKS-Cluster. Die Abfrage hilft Ihnen, Einblicke in Ihre virtuellen Computer zu gewinnen.

Abfrage – AKS-Cluster

Diese ARG-Abfrage ruft detaillierte Informationen zu AKS-Clustern in Ihrer Azure-Umgebung ab.

Kategorie

Ressourcenverwaltung

Abfrage

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

Virtuelle Computer

Virtuelle Azure-Computer (VMs) sind eine von mehreren Arten von On-Demand-, skalierbaren Computerressourcen, die Azure bietet. In der Regel wählen Sie einen virtuellen Computer aus, wenn Sie mehr Kontrolle über die Computerumgebung benötigen als die anderen Auswahlmöglichkeiten.

Ein virtueller Azure-Computer bietet Ihnen die Flexibilität der Virtualisierung, ohne Zeit und Geld für den Kauf und die Verwaltung der Hardware aufwenden zu müssen, mit der der virtuelle Computer betrieben wird. Sie müssen den virtuellen Computer jedoch weiterhin verwalten, indem Sie Aufgaben ausführen, z. B. das Konfigurieren, Patchen und Installieren der darauf ausgeführten Software.

Verwandte Ressourcen:

Freigeben von virtuellen Computern

Empfehlung: Freigeben von virtuellen Computern, um Kosten für nicht verwendeten Compute zu vermeiden. Vermeiden Sie das Beenden von virtuellen Computern, ohne sie zu verlagern.

Informationen zu inaktiven VMs

VMs weisen zwei inaktive Zustände auf: „Beendet“ und „Freigegeben“.

Gestoppte VMs wurden vom Betriebssystem heruntergefahren (z. B. mithilfe des Befehls "Herunterfahren"). Beendete VMs werden ausgeschaltet, aber Azure reserviert weiterhin Computeressourcen wie CPU und Arbeitsspeicher. Da Rechenressourcen reserviert sind und daher nicht für die Nutzung durch andere virtuelle Maschinen zur Verfügung stehen, entstehen für diese virtuellen Computer weiterhin Rechenkosten.

Deallocated VMs werden über Cloudverwaltungs-APIs im Azure-Portal, CLI, PowerShell oder einem anderen Clienttool beendet. Wenn ein virtueller Computer zugeordnet wird, gibt Azure die entsprechenden Computeressourcen frei. Da Computeressourcen freigegeben werden, verursachen diese virtuellen Computer keine Berechnungsgebühren; Es ist jedoch wichtig zu beachten, dass sowohl angehaltene als auch deallocierte VMs weiterhin Gebühren verursachen, die nicht mit der Berechnung verbunden sind, z. B. Speichergebühren von Datenträgern.

Identifizieren gestoppter VMs

Verwenden Sie die folgende Azure Resource Graph (ARG)-Abfrage, um beendete VMs zu identifizieren, die nicht freigegeben sind. Es ruft Details zu ihrem Energiezustand, Standort, Ressourcengruppe und Abonnement-ID ab.

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

Nutzung von Verpflichtungsrabatten

Empfehlung: Verwenden Sie Verpflichtungsrabatte, um bis zu 72% im Vergleich zu Listenkosten zu sparen.

Informationen zu Verpflichtungsrabatten

Verpflichtungsrabatte sind finanzielle Anreize für Organisationen, die sich für einen bestimmten Zeitraum oder eine bestimmte Laufzeit für azure-Dienste verpflichten, in der Regel ein oder drei Jahre. Durch die Zustimmung zu einem festen Nutzungs- oder Ausgabenbetrag (Kosten) für die Laufzeit können Organisationen von erheblichen Rabatten (bis zu 72%) im Vergleich zu Listenpreisen profitieren. Rabatte werden auf berechtigte Ressourcen angewendet und helfen Organisationen dabei, ihre Cloudkosten zu sparen und gleichzeitig Flexibilität und Vorhersehbarkeit in der Budgetierung zu bieten.

Weitere Informationen zu Verpflichtungsrabatten finden Sie in der Rate-Optimierungsfunktion.

Messen der Prepaidtarifrabatte für virtuelle Computer

Verwenden Sie die folgende FinOps-Hubabfrage, um die Gesamtabdeckung des VM-Verpflichtungsrabatts zu messen.

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

Verwenden Sie die folgende Abfrage, um die Kostenaufschlüsselung pro VM zu messen, einschließlich der Abdeckung von Verpflichtungsrabatten.

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

Weitere Informationen zu FinOps-Hubs finden Sie in den FinOps-Hubs.

Abfrage – Details zum Skalierungssatz für virtuelle Computer

Diese Abfrage analysiert in Ihrer Azure-Umgebung die Virtual Machine Scale Sets anhand deren SKU, der Priorität als Spot-VM und der Prioritätsmixrichtlinie. Sie bietet Einblicke in Kostenoptimierungs- und Ressourcenmanagementstrategien.

Kategorie

Ressourcenverwaltung

Abfrage

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

Abfrage – Analyse des Prozessortyps virtueller Computer

Diese Abfrage identifiziert den Prozessortyp (ARM, AMD oder Intel), der von VMs in Ihrer Azure-Umgebung verwendet wird. Sie hilft dabei, die Verteilung von VMs über verschiedene Prozessorarchitekturen zu verstehen, was nützlich ist, um die Leistung der Arbeitslast und die Kosteneffizienz zu optimieren.

Kategorie

Ressourcenverwaltung

Abfrage

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

Feedback senden

Lassen Sie uns mit einer kurzen Bewertung wissen, wie wir abschneiden. Wir verwenden diese Rezensionen, um FinOps-Tools und -Ressourcen zu verbessern und zu erweitern.

Wenn Sie nach etwas Spezifischem suchen, wählen Sie eine vorhandene Idee aus, oder erstellen Sie eine neue Idee. Teilen Sie Ideen mit anderen, um mehr Stimmen zu erhalten. Wir konzentrieren uns auf Ideen mit den meisten Stimmen.


Verwandte Ressourcen:

Verwandte Produkte:

Verwandte Lösungen: