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

Azure Kubernetes Service (AKS) vereinfacht die Bereitstellung und Verwaltung von containerisierten Anwendungen. Es bietet serverlose Kubernetes, eine integrierte CI/CD-Erfahrung und Sicherheits- und Governance auf Unternehmensniveau.

Verwandte Ressourcen:

Abfrage: Details zum 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

Verwenden von Spot-VMs für AKS-Cluster

Empfehlung: Verwenden Sie Spot-VMs für AKS-Agentpools, um die Berechnungskosten für fehlertolerante, unterbrechungsfähige Workloads zu reduzieren.

Informationen zu Spot-VMs in AKS

Spot VMs nutzen nicht verwendete Azure Kapazität zu erheblich reduzierten Kosten. Wenn Azure die Kapazität wieder benötigt, entfernt die Azure-Infrastruktur Spot-VMs. Spot-VMs sind nützlich für Workloads, die Unterbrechungen verarbeiten können, z. B. Batchverarbeitungsaufträge, Entwicklungs-/Testumgebungen und große Computeworkloads.

AKS-Cluster, die die automatische Skalierung verwenden, spot-VMs jedoch nicht nutzen, zahlen möglicherweise mehr als erforderlich. Indem Sie Spot-VMs für unterbrechungsfähige Workloads aktivieren, können Sie die Berechnungskosten erheblich reduzieren. Diese Empfehlung gilt nur für Cluster, die Workloads ausführen, die Unterbrechungen tolerieren können. Nicht alle Workloads eignen sich für Spot-VMs.

Note

FinOps-Hubs können AKS-Cluster automatisch ohne Spot-VMs als Opt-In-Empfehlung identifizieren. Erfahren Sie mehr.

Abfrage: AKS-Cluster ohne Spot-VMs

Verwenden Sie die folgende ARG-Abfrage, um AKS-Cluster mit aktivierter automatischer Skalierung zu identifizieren, die keine Spot-VMs verwenden.

Kategorie

Optimization

Abfrage

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

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.

Note

FinOps-Hubs können automatisch gestoppte VMs identifizieren, die nicht freigegeben sind. Erfahren Sie mehr.

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

Zu verwalteten Datenträgern migrieren

Empfehlung: Migrieren von VMs mit nicht verwalteten Datenträgern zu verwalteten Datenträgern, um die Zuverlässigkeit zu verbessern, die Verwaltung zu vereinfachen und sich auf die Einstellung von nicht verwalteten Datenträgern vorzubereiten.

Informationen zu nicht verwalteten Datenträgern

Unmanaged disks speichern VHD-Dateien als Seitenblobs in Azure Storage Konten, sodass Sie die Speicherkapazität, Leistung und Sicherheit selbst verwalten müssen. Verwaltete Datenträger vereinfachen die Datenträgerverwaltung, indem sie die Verwaltung des Speicherkontos für Sie übernehmen und eine höhere Zuverlässigkeit mit Verfügbarkeitssätzen, eine präzisere Zugriffssteuerung sowie Unterstützung für neuere Funktionen wie Datenträgerverschlüsselung und Bursting bieten. Microsoft hat die Einstellung von nicht verwalteten Datenträgern angekündigt, sodass die Migration zu verwalteten Datenträgern sowohl eine Kostenoptimierung als auch ein Complianceschritt ist.

Note

FinOps-Hubs können virtuelle Computer automatisch mithilfe von nicht verwalteten Datenträgern identifizieren. Erfahren Sie mehr.

Identifizieren von virtuellen Computern mit nicht verwalteten Datenträgern

Verwenden Sie die folgende ARG-Abfrage, um VMs zu identifizieren, die noch nicht verwaltete Datenträger verwenden.

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

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

Verwenden von Azure-Hybridvorteil für Windows VMs

Empfehlung: Aktivieren Sie Azure-Hybridvorteil für Windows VMs, um die Lizenzierungskosten durch Die Verwendung vorhandener lokaler Windows Server-Lizenzen zu reduzieren.

Informationen zu Azure-Hybridvorteil für Windows

Mit Azure-Hybridvorteil können Sie Ihre lokalen Windows-Server-Lizenzen mit Software Assurance oder einem Windows Server-Abonnement verwenden, um Windows-VMs in Azure zu geringeren Kosten auszuführen. Anstatt für eine vollständige Windows Server Lizenz mit jedem virtuellen Computer zu bezahlen, können Sie Ihre vorhandenen Lizenzen mitbringen und nur die Basisberechnungskosten bezahlen. Diese Empfehlung gilt nur, wenn Ihre Organisation über lokale Windows Server Lizenzen verfügt.

Note

FinOps Hubs können automatisch Windows VMs identifizieren, ohne Azure-Hybridvorteil als Opt-In-Empfehlung zu verwenden. Erfahren Sie mehr.

Abfrage: Windows VMs ohne Azure-Hybridvorteil

Verwenden Sie die folgende ARG-Abfrage, um Windows VMs und Skalierungssätze zu identifizieren, die keine Azure-Hybridvorteil nutzen. Die Abfrage schließt Dev-/Testabonnements aus, die bereits eine ermäßigte Lizenzierung haben.

Kategorie

Optimization

Abfrage

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

Verwenden von Azure-Hybridvorteil für SQL-VMs

Empfehlung: Aktivieren Sie Azure-Hybridvorteil für SQL Server virtuellen Computer, um die Lizenzierungskosten durch Die Verwendung vorhandener lokaler SQL Server-Lizenzen zu reduzieren.

Informationen zu Azure-Hybridvorteil für SQL-VMs

Azure-Hybridvorteil für SQL Server ermöglicht es Ihnen, Ihre lokalen SQL Server-Lizenzen mit Software Assurance zu verwenden, um SQL Server-VMs in Azure zu geringeren Kosten auszuführen. Dieser Vorteil gilt für Standard- und Enterprise-Editionen (Entwickler- und Express-Editionen sind bereits kostenlos und benötigen keine Azure-Hybridvorteil). Diese Empfehlung gilt nur, wenn Ihre Organisation über lokale SQL Server Lizenzen mit Software Assurance verfügt.

Note

FinOps Hubs können SQL-VMs automatisch identifizieren, ohne Azure-Hybridvorteil als Opt-In-Empfehlung zu verwenden. Erfahren Sie mehr.

Abfrage: SQL-VMs ohne Azure-Hybridvorteil

Verwenden Sie die folgende ARG-Abfrage, um SQL Server VMs zu identifizieren, die keine Azure-Hybridvorteil nutzen. Die Abfrage schließt Dev-/Testabonnements und Developer/Express-Editionen aus.

Kategorie

Optimization

Abfrage

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

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: