Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, işlem hizmetleri için kanıtlanmış FinOps uygulamalarının bir koleksiyonu özetlenmektedir. Azure'da maliyetleri iyileştirme, verimliliği artırma ve işlem kaynaklarınızla ilgili içgörüler elde etme konusunda rehberlik sağlar. Uygulamalar sanal makineler (VM), Azure Kubernetes Service (AKS) ve Azure İşlevleri gibi işlem hizmeti türüne göre kategorilere ayrılmıştır.
Azure Kubernetes Service
Azure Kubernetes Service (AKS) kapsayıcılı uygulamaları dağıtmayı ve yönetmeyi kolaylaştırır. Sunucusuz Kubernetes, tümleşik bir CI/CD deneyimi ve kurumsal düzeyde güvenlik ve idare sunar.
İlgili kaynaklar:
- Azure Kubernetes Service ürün sayfası
- Azure Kubernetes Service pricing
- Azure Kubernetes Service belgeleri
- AKS temel mimarisi
Sorgu: AKS kümesi ayrıntıları
Bu ARG sorgusu, Azure ortamınızdaki AKS kümeleri hakkında ayrıntılı bilgileri alır.
Kategori
Kaynak yönetimi
Sorgu
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
AKS kümeleri için Spot VM'leri kullanma
Öneri: Aks aracı havuzları için Spot VM'leri kullanarak hataya dayanıklı, kesintiye neden olan iş yüklerinin işlem maliyetlerini azaltın.
AKS'deki Spot VM'ler hakkında
Spot VM'ler kullanılmayan Azure kapasitesinden önemli ölçüde daha düşük bir maliyetle yararlanır. Azure kapasiteye ihtiyacı olduğunda Azure altyapısı Spot VM'leri çıkartır. Spot VM'ler toplu işleme işleri, geliştirme/test ortamları ve büyük işlem iş yükleri gibi kesintileri işleyebilen iş yükleri için kullanışlıdır.
Otomatik ölçeklendirme kullanan ancak Spot VM'lerden yararlanmayen AKS kümeleri gerekenden fazla ödeme yapıyor olabilir. Kesintiye uğrayabilen iş yükleri için Spot VM'leri etkinleştirerek işlem maliyetlerini önemli ölçüde azaltabilirsiniz. Bu öneri yalnızca kesintileri tolere edebilen iş yüklerini çalıştıran kümeler için geçerlidir. Tüm iş yükleri Spot VM'ler için uygun değildir.
Note
FinOps hub'ları , bir kabul önerisi olarak Spot VM'leri olmayan AKS kümelerini otomatik olarak tanımlayabilir. Daha fazla bilgi edinin.
Sorgu: Spot VM'leri olmayan AKS kümeleri
Spot VM'leri kullanmayan otomatik ölçeklendirme etkinleştirilmiş AKS kümelerini tanımlamak için aşağıdaki ARG sorgusunu kullanın.
Kategori
Optimization
Sorgu
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
Sanal makineler
Azure sanal makineleri (VM'ler), Azure'ın sunduğu çeşitli isteğe bağlı, ölçeklenebilir bilgi işlem kaynaklarından biridir. Genellikle, bilgi işlem ortamı üzerinde diğer seçeneklerden daha fazla denetime ihtiyacınız olduğunda bir VM seçersiniz.
Bir Azure VM, onu çalıştıran fiziksel donanımı satın almanıza ve muhafaza etmenize gerek kalmadan size sanallaştırma esnekliği sunar. Ancak, yapılandırma, düzeltme eki uygulama ve üzerinde çalışan yazılımları yükleme gibi görevleri gerçekleştirerek VM'yi korumanız gerekir.
İlgili kaynaklar:
- Sanal makineler ürün sayfası
- Sanal makine fiyatlandırması
- Sanal makine belgeleri
- İsteğe bağlı, ölçeklenebilir işlem için Azure hizmetleri
Sanal makineleri serbest bırakın
Öneri: Kullanılmayan işlem ücretlerinden kaçınmak için VM'leri serbest bırakma. VM'leri deallocate etmeden durdurmaktan kaçının.
Etkin olmayan VM'ler hakkında
VM'lerin iki etkin olmayan durumu vardır: Durduruldu ve Serbest Bırakıldı.
Durdurulan VM'ler işletim sisteminin içinden kapatıldı (örneğin, Kapat komutu kullanılarak). Durdurulan VM'ler kapatılır, ancak Azure cpu ve bellek gibi işlem kaynaklarını ayırmaya devam eder. İşlem kaynakları ayrılmış olduğundan ve diğer VM'lerle birlikte kullanılamadığından, bu VM'ler işlem ücretleri almaya devam eder.
Serbest bırakılmış VM'ler Azure portalında, CLI'da, PowerShell'de veya diğer istemci aracında bulut yönetimi API'leri aracılığıyla durdurulur. Bir VM serbest bırakıldığında Azure ilgili işlem kaynaklarını serbest bırakır. İşlem kaynakları yayınlandığından bu VM'ler işlem ücreti ödemez; ancak hem durdurulan hem de serbest bırakılan VM'lerin disklerden depolama ücretleri gibi işlemle ilgili olmayan ücretlendirmeler yapmaya devam ettiğini unutmayın.
Note
FinOps merkezleri, durdurulmuş ancak kaynakları serbest bırakılmamış VM'leri otomatik olarak tespit edebilir. Daha fazla bilgi edinin.
Durdurulan VM'leri tanımlama
Deallocate edilmemiş olan durdurulmuş VM'leri tanımlamak için aşağıdaki Azure Kaynak Grafı (ARG) sorgusunu kullanın. Güç durumu, konum, kaynak grubu ve abonelik kimliği hakkındaki ayrıntıları alır.
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
Taahhüt indirimlerini kullanma
Öneri: Liste maliyetlerine kıyasla en fazla 72% tasarruf etmek için taahhüt indirimlerini kullanın.
Taahhüt indirimleri hakkında
Taahhüt indirimleri, Azure hizmetlerini belirli bir süre veya dönem boyunca (genellikle bir veya üç yıl) kullanmayı taahhüt eden kuruluşlara sunulan finansal teşviklerdir. Kuruluşlar, dönem için sabit miktarda kullanımı veya harcamayı (maliyet) kabul ederek, liste fiyatlarına kıyasla önemli indirimlerden (en fazla 72%) yararlanabilir. Uygun kaynaklara indirimler uygulanarak kuruluşların bulut maliyetlerinden tasarruf etmelerine yardımcı olurken, bütçelerinde esneklik ve öngörülebilirlik sağlar.
Taahhüt indirimleri hakkında daha fazla bilgi edinmek için Oran iyileştirme özelliğine bakın.
Sanal makine taahhüdü indirim kapsamını ölçün
Genel VM taahhüt indirim kapsamını ölçmek için aşağıdaki FinOps hub sorgusunu kullanın.
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
Taahhüt indirimlerinin kapsamı dahil olmak üzere VM başına maliyet dökümünü ölçmek için aşağıdaki sorguyu kullanın.
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 hub'ları hakkında daha fazla bilgi edinmek için bkz. FinOps hub'ları.
Sorgu: Sanal makine ölçek kümesi ayrıntıları
Bu sorgu, Azure ortamınızdaki Sanal Makine Ölçek Kümelerini SKU'suna, spot VM önceliğine ve öncelik karışımı ilkesine göre analiz eder. Maliyet iyileştirme ve kaynak yönetimi stratejilerine yönelik içgörüler sağlar.
Kategori
Kaynak yönetimi
Sorgu
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
Yönetilen disklere geçme
Öneri: Güvenilirliği artırmak, yönetimi kolaylaştırmak ve yönetilmeyen disklerin kullanımdan kaldırılmasına hazırlanmak için yönetilmeyen diskleri kullanarak VM'leri yönetilen disklere geçirin.
Yönetilmeyen diskler hakkında
Yönetilmeyen diskler, VHD dosyalarını Azure Depolama hesaplarında sayfa blobları olarak depolar ve depolama hesabı kapasitesini, performansını ve güvenliğini kendiniz yönetmenizi gerektirir. Yönetilen diskler, depolama hesabı yönetimini sizin için işleyerek disk yönetimini basitleştirir; kullanılabilirlik kümeleriyle daha iyi güvenilirlik, daha ayrıntılı erişim denetimi ve disk şifreleme ve seri dağıtım gibi daha yeni özellikler için destek sağlar. Microsoft yönetilmeyen disklerin kullanımdan kaldırıldığını duyurdu, bu nedenle yönetilen disklere geçiş hem maliyet iyileştirme hem de uyumluluk adımıdır.
Note
FinOps hub'ları yönetilmeyen diskleri kullanarak VM'leri otomatik olarak tanımlayabilir. Daha fazla bilgi edinin.
Yönetilmeyen disklere sahip VM'leri tanımlama
Yönetilmeyen diskleri kullanmaya devam eden VM'leri tanımlamak için aşağıdaki ARG sorgusunu kullanın.
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
Sorgu: Sanal makine işlemci türü analizi
Bu sorgu, Azure ortamınızdaki VM'ler tarafından kullanılan işlemci türünü (ARM, AMD veya Intel) tanımlar. VM'lerin farklı işlemci mimarileri arasındaki dağılımını anlamanıza yardımcı olur ve bu da iş yükü performansını ve maliyet verimliliğini iyileştirmek için kullanışlıdır.
Kategori
Kaynak yönetimi
Sorgu
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
Windows VM'ler için Azure Hibrit Avantajı kullanma
Öneri: Mevcut şirket içi Windows Server lisanslarını kullanarak lisans maliyetlerini azaltmak için Windows VM'ler için Azure Hibrit Avantajı etkinleştirin.
Windows için Azure Hibrit Avantajı hakkında
Azure Hibrit Avantajı şirket içi Windows Server lisanslarınızı Yazılım Güvencesi veya Windows Server aboneliğiyle kullanarak Azure'da Windows VM'leri daha düşük bir maliyetle çalıştırmanızı sağlar. Her vm ile tam bir Windows Server lisansı ödemek yerine mevcut lisanslarınızı getirebilir ve yalnızca temel işlem maliyeti için ödeme yapabilirsiniz. Bu öneri yalnızca kuruluşunuzun uygun şirket içi Windows Server lisansları varsa geçerlidir.
Note
FinOps merkezleri, isteğe bağlı bir öneri olarak Azure Hibrit Avantajı’e sahip olmayan Windows VM’lerini otomatik olarak tespit edebilir. Daha fazla bilgi edinin.
Sorgu: Azure Hibrit Avantajı olmayan Windows sanal makineleri
Azure Hibrit Avantajı kullanmayan Windows VM'leri ve ölçek kümelerini tanımlamak için aşağıdaki ARG sorgusunu kullanın. Sorgu, zaten indirimli lisanslama içeren geliştirme/test aboneliklerini dışlar.
Kategori
Optimization
Sorgu
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
SQL VM'leri için Azure Hibrit Avantajı kullanma
Öneri: Mevcut şirket içi SQL Server lisanslarını kullanarak lisans maliyetlerini azaltmak için SQL Server VM'ler için Azure Hibrit Avantajı etkinleştirin.
SQL VM'leri için Azure Hibrit Avantajı hakkında
SQL ServerAzure Hibrit Avantajı> Azure'da SQL Server VM'leri daha düşük bir maliyetle çalıştırmak için Yazılım Güvencesi ile şirket içi SQL Server lisanslarınızı kullanmanıza olanak tanır. Bu avantaj Standard ve Enterprise sürümleri için geçerlidir (Geliştirici ve Express sürümleri zaten ücretsizdir ve Azure Hibrit Avantajı gerekmez). Bu öneri yalnızca kuruluşunuzun Yazılım Güvencesi ile uygun şirket içi SQL Server lisansları varsa geçerlidir.
Note
FinOps merkezleri, Azure Hibrit Avantajı olmayan SQL VM'lerini isteğe bağlı bir öneri olarak otomatik şekilde belirleyebilir. Daha fazla bilgi edinin.
Sorgu: Azure Hibrit Avantajı olmayan SQL VM'leri
Azure Hibrit Avantajı kullanmayan SQL Server VM'leri tanımlamak için aşağıdaki ARG sorgusunu kullanın. Sorgu geliştirme/test aboneliklerini ve Developer/Express sürümlerini dışlar.
Kategori
Optimization
Sorgu
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
Görüş bildirin
Hızlı bir incelemeyle nasıl olduğumuzu bize bildirin. Bu incelemeleri FinOps araçlarını ve kaynaklarını geliştirmek ve genişletmek için kullanırız.
Belirli bir şey arıyorsanız mevcut bir fikir için oy verin veya yeni bir fikir oluşturun. Daha fazla oy almak için başkalarıyla fikir paylaşın. En çok oyu alan fikirlere odaklanıyoruz.
İlgili içerik
İlgili kaynaklar:
İlgili ürünler:
İlgili çözümler: