Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menguraikan kumpulan praktik FinOps yang terbukti untuk layanan komputasi. Ini memberikan panduan tentang mengoptimalkan biaya, meningkatkan efisiensi, dan mendapatkan wawasan tentang sumber daya komputasi Anda di Azure. Praktik ini dikategorikan berdasarkan jenis layanan komputasi, seperti komputer virtual (VM), Azure Kubernetes Service (AKS), dan Azure Functions.
Azure Kubernetes Service
Azure Kubernetes Service (AKS) menyederhanakan penyebaran dan pengelolaan aplikasi dalam kontainer. Ini menawarkan Kubernetes tanpa server, pengalaman CI/CD terintegrasi, dan keamanan dan tata kelola tingkat perusahaan.
Sumber daya terkait:
- halaman produk Azure Kubernetes Service
- Harga Azure Kubernetes Service
- Dokumentasi Azure Kubernetes Service
- Arsitektur garis besar AKS
Kueri: Detail kluster AKS
Kueri ARG ini mengambil informasi terperinci tentang kluster AKS di lingkungan Azure Anda.
Kategori
Manajemen sumber daya
Kueri
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
Menggunakan Spot VM untuk kluster AKS
Rekomendasi: Gunakan VM Spot untuk kumpulan agen AKS untuk mengurangi biaya komputasi untuk beban kerja yang toleran terhadap kesalahan dan dapat diinterupsi.
Tentang VM Spot di AKS
Spot VM memanfaatkan kapasitas Azure yang tidak digunakan dengan biaya yang berkurang secara signifikan. Saat Azure memerlukan kembali kapasitas tersebut, infrastruktur Azure menggusur VM Spot. Spot VM berguna untuk beban kerja yang dapat menangani gangguan, seperti pekerjaan pemrosesan batch, lingkungan dev/test, dan beban kerja komputasi besar.
Kluster AKS yang menggunakan autoscaling tetapi tidak memanfaatkan Spot VM mungkin membayar lebih dari yang diperlukan. Dengan mengaktifkan Spot VM untuk beban kerja yang dapat diinterupsi, Anda dapat secara signifikan mengurangi biaya komputasi. Rekomendasi ini hanya berlaku untuk kluster yang menjalankan beban kerja yang dapat mentolerir gangguan. Tidak semua beban kerja cocok untuk Spot VM.
Note
Hub FinOps dapat secara otomatis mengidentifikasi kluster AKS tanpa Spot VM sebagai rekomendasi keikutsertaan. Pelajari lebih lanjut.
Kueri: Kluster AKS tanpa Spot VM
Gunakan kueri ARG berikut untuk mengidentifikasi kluster AKS dengan autoscaling diaktifkan yang tidak menggunakan Spot VM.
Kategori
Optimization
Kueri
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
Mesin virtual
Komputer virtual (VM) Azure adalah salah satu dari beberapa jenis sumber daya komputasi sesuai permintaan dan dapat diskalakan yang ditawarkan Azure. Biasanya, Anda memilih VM ketika Anda membutuhkan lebih banyak kontrol atas lingkungan komputasi daripada yang ditawarkan pilihan lainnya.
Azure VM memberi Anda fleksibilitas virtualisasi tanpa harus membeli dan memelihara perangkat keras fisik yang menjalankannya. Namun, Anda masih perlu mempertahankan VM dengan melakukan tugas, seperti mengonfigurasi, menambal, dan menginstal perangkat lunak yang berjalan di atasnya.
Sumber daya terkait:
- Halaman produk komputer virtual
- harga mesin virtual
- dokumentasi mesin virtual
- layanan Azure untuk komputasi yang dapat diskalakan dan sesuai permintaan
Membatalkan alokasi mesin virtual
Rekomendasi: Dealokasikan VM untuk menghindari biaya komputasi yang tidak terpakai. Hindari menghentikan VM tanpa membatalkan alokasinya.
Tentang VM yang tidak aktif
VM memiliki dua status tidak aktif: Dihentikan dan Dialokasikan Ulang.
VM yang dihentikan dimatikan dari dalam sistem operasi (misalnya, menggunakan perintah Matikan ). VM yang dihentikan dimatikan, tetapi Azure masih mencadangkan sumber daya komputasi, seperti CPU dan memori. Karena sumber daya komputasi dicadangkan dan tidak tersedia untuk digunakan dengan VM lain, VM ini terus dikenakan biaya komputasi.
VM yang dibatalkan alokasinya dihentikan melalui API manajemen cloud di portal Microsoft Azure, CLI, PowerShell, atau alat klien lainnya. Saat VM dinonaktifkan, Azure membebaskan sumber daya komputasi yang sesuai. Karena sumber daya komputasi dirilis, VM ini tidak dikenakan biaya komputasi; namun, penting untuk dicatat bahwa VM yang dihentikan dan dibatalkan alokasinya terus dikenakan biaya yang tidak terkait dengan komputasi, seperti biaya penyimpanan dari disk.
Note
Hub FinOps dapat secara otomatis mengidentifikasi VM yang dihentikan yang tidak dibatalkan alokasinya. Pelajari lebih lanjut.
Mengidentifikasi VM yang dihentikan
Gunakan kueri Azure Resource Graph (ARG) berikut untuk mengidentifikasi VM yang dihentikan yang tidak dibatalkan alokasinya. Ini mengumpulkan detail tentang status daya, lokasi, grup sumber daya, dan ID langganan mereka.
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
Gunakan diskon komitmen
Rekomendasi: Gunakan diskon komitmen untuk menghemat hingga 72% daripada harga daftar.
Tentang diskon komitmen
Diskon komitmen adalah insentif keuangan yang ditawarkan kepada organisasi yang berkomitmen untuk menggunakan layanan Azure untuk periode atau jangka waktu tertentu, biasanya satu atau tiga tahun. Dengan menyetujui jumlah penggunaan atau pengeluaran tetap (biaya) untuk jangka waktu tersebut, organisasi dapat memperoleh manfaat dari diskon signifikan (hingga 72%) dibandingkan dengan harga daftar. Diskon diterapkan ke sumber daya yang memenuhi syarat, membantu organisasi menghemat biaya cloud mereka sambil memberikan fleksibilitas dan prediksi dalam anggaran mereka.
Untuk mempelajari selengkapnya tentang diskon komitmen, lihat kemampuan pengoptimalan tarif .
Mengukur cakupan diskon komitmen mesin virtual
Gunakan kueri hub FinOps berikut untuk mengukur cakupan diskon komitmen VM secara keseluruhan.
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
Gunakan kueri berikut untuk mengukur perincian biaya per VM, termasuk cakupan diskon komitmen.
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
Untuk mempelajari lebih lanjut tentang hub FinOps, lihat hub FinOps.
Kueri: Detail kumpulan skala mesin virtual
Kueri ini menganalisis Virtual Machine Scale Sets di lingkungan Azure Anda berdasarkan SKU-nya, prioritas VM spot, dan kebijakan kombinasi prioritas mereka. Ini memberikan wawasan untuk pengoptimalan biaya dan strategi manajemen sumber daya.
Kategori
Manajemen sumber daya
Kueri
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
Bermigrasi ke disk terkelola
Rekomendasi: Migrasikan VM menggunakan disk yang tidak dikelola ke disk terkelola untuk meningkatkan keandalan, menyederhanakan manajemen, dan mempersiapkan penghentian disk yang tidak dikelola.
Tentang disk yang tidak dikelola
Disk tidak terkelola menyimpan file VHD sebagai blob halaman di akun Azure Storage, yang mengharuskan Anda mengelola sendiri kapasitas, kinerja, dan keamanan akun penyimpanan. Disk terkelola menyederhanakan pengelolaan disk dengan menangani pengelolaan akun penyimpanan untuk Anda, memberikan keandalan yang lebih baik melalui availability set, kontrol akses yang lebih terperinci, serta dukungan untuk fitur terbaru seperti enkripsi disk dan bursting disk. Microsoft telah mengumumkan penghentian disk yang tidak dikelola, jadi bermigrasi ke disk terkelola adalah pengoptimalan biaya dan langkah kepatuhan.
Note
Hub FinOps dapat secara otomatis mengidentifikasi VM menggunakan disk yang tidak dikelola. Pelajari lebih lanjut.
Identifikasi VM dengan disk yang tidak dikelola
Gunakan kueri ARG berikut untuk mengidentifikasi VM yang masih menggunakan disk yang tidak dikelola.
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
Kueri: Analisis jenis prosesor komputer virtual
Kueri ini mengidentifikasi jenis prosesor (ARM, AMD, atau Intel) yang digunakan oleh VM di lingkungan Azure Anda. Ini membantu dalam memahami distribusi VM di berbagai arsitektur prosesor, yang berguna untuk mengoptimalkan performa beban kerja dan efisiensi biaya.
Kategori
Manajemen sumber daya
Kueri
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
Menggunakan Azure Hybrid Benefit untuk VM Windows
Rekomendasi: Aktifkan Azure Hybrid Benefit untuk VM Windows untuk mengurangi biaya lisensi dengan menggunakan lisensi Windows Server lokal yang ada.
Tentang Azure Hybrid Benefit untuk Windows
Azure Hybrid Benefit memungkinkan Anda menggunakan lisensi Windows Server lokal dengan Jaminan Perangkat Lunak atau langganan Windows Server untuk menjalankan VM Windows di Azure dengan biaya yang berkurang. Alih-alih membayar lisensi Windows Server penuh dengan setiap VM, Anda dapat membawa lisensi yang ada dan hanya membayar biaya komputasi dasar. Rekomendasi ini hanya berlaku jika organisasi Anda memiliki lisensi Windows Server lokal yang memenuhi syarat.
Note
FinOps hubs dapat secara otomatis mengidentifikasi VM Windows tanpa Azure Hybrid Benefit sebagai rekomendasi opsional. Pelajari lebih lanjut.
Kueri: Windows VM tanpa Azure Hybrid Benefit
Gunakan kueri ARG berikut untuk mengidentifikasi Windows VM dan set skala yang tidak memanfaatkan Azure Hybrid Benefit. Kueri mengecualikan subskripsi dev/test, yang sudah memiliki lisensi dengan harga diskon.
Kategori
Optimization
Kueri
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
Menggunakan Azure Hybrid Benefit untuk komputer virtual SQL
Rekomendasi: Aktifkan Azure Hybrid Benefit untuk VM SQL Server untuk mengurangi biaya lisensi dengan menggunakan lisensi SQL Server lokal yang ada.
Mengenai Azure Hybrid Benefit untuk VM SQL
Azure Hybrid Benefit untuk SQL Server memungkinkan Anda menggunakan lisensi SQL Server lokal Anda dengan Jaminan Perangkat Lunak untuk menjalankan VM SQL Server dalam Azure dengan biaya yang berkurang. Manfaat ini berlaku untuk edisi Standar dan Perusahaan (Edisi Pengembang dan Ekspres sudah gratis dan tidak perlu Azure Hybrid Benefit). Rekomendasi ini hanya berlaku jika organisasi Anda memiliki lisensi SQL Server lokal yang memenuhi syarat dengan Jaminan Perangkat Lunak.
Note
Hub FinOps dapat secara otomatis mengidentifikasi VM SQL tanpa Azure Hybrid Benefit sebagai rekomendasi opsional. Pelajari lebih lanjut.
Kueri: VM SQL tanpa Azure Hybrid Benefit
Gunakan kueri ARG berikut untuk mengidentifikasi SQL Server VM yang tidak memanfaatkan Azure Hybrid Benefit. Kueri mengecualikan langganan dev/test dan edisi Pengembang/Ekspres.
Kategori
Optimization
Kueri
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
Berikan umpan balik
Beri tahu kami bagaimana kinerja kami melalui ulasan singkat. Kami menggunakan ulasan ini untuk meningkatkan dan memperluas alat dan sumber daya FinOps.
Jika Anda mencari sesuatu yang spesifik, pilih yang sudah ada atau buat ide baru. Bagikan ide dengan orang lain untuk mendapatkan lebih banyak suara. Kami fokus pada ide-ide dengan suara terbanyak.
Konten terkait
Sumber daya terkait:
Produk terkait:
Solusi terkait: