Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
- Produktseite virtueller Computer
- Preise für virtuelle Computer
- Dokumentation zu virtuellen Computern
- Azure-Dienste für on-demand, skalierbare Compute
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.
Zugehöriger Inhalt
Verwandte Ressourcen:
Verwandte Produkte:
Verwandte Lösungen: