Kaynak değişikliklerini alma

Kaynaklar günlük kullanım, yeniden yapılandırma ve hatta yeniden dağıtma yoluyla değişir. Çoğu değişiklik tasarım gereğidir, ancak bazen değildir. Şunları yapabilirsiniz:

  • Bir Azure Resource Manager özelliğinde ne zaman değişiklik algılandığını öğrenme.
  • Özellik değişikliği ayrıntılarını görüntüleyin.
  • Abonelikleriniz, yönetim grubunuz veya kiracınız genelinde değişiklikleri büyük ölçekte sorgula.

Bu makalede şunları öğreneceksiniz:

  • Yük JSON'un nasıl göründüğü.
  • CLI, PowerShell veya Azure portalını kullanarak Kaynak Grafı aracılığıyla kaynak değişikliklerini sorgulama.
  • Kaynak değişikliklerini sorgulamaya yönelik sorgu örnekleri ve en iyi yöntemler.

Önkoşullar

Değişiklik olayı özelliklerini anlama

Kaynak oluşturulduğunda, güncelleştirildiğinde veya silindiğinde, değiştirilen kaynağı genişletmek ve değiştirilen özellikleri göstermek için yeni bir değişiklik kaynağı (Microsoft.Resources/changes) oluşturulur. Değişiklik kayıtlarının beş dakikadan kısa sürede kullanılabilir olması gerekir. Aşağıdaki örnek JSON yükü, kaynak özelliklerini değiştirme işlemini gösterir:

{
  "targetResourceId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/microsoft.compute/virtualmachines/myVM",
  "targetResourceType": "microsoft.compute/virtualmachines",
  "changeType": "Update",
  "changeAttributes": {
    "previousResourceSnapshotId": "08584889383111245807_37592049-3996-ece7-c583-3008aef9e0e1_4043682982_1712668574",
    "newResourceSnapshotId": "08584889377081305807_38788020-eeee-ffff-028f-6121bdac9cfe_4213468768_1712669177",
    "correlationId": "04ff69b3-e162-4583-9cd7-1a14a1ec2c61",
    "changedByType": "User",
    "changesCount": 2,
    "clientType": "ARM Template",
    "changedBy": "john@contoso.com",
    "operation": "microsoft.compute/virtualmachines/write",
    "timestamp": "2024-04-09T13:26:17.347+00:00"
  },
  "changes": {
    "properties.provisioningState": {
      "newValue": "Succeeded",
      "previousValue": "Updating",
      "changeCategory": "System",
      "propertyChangeType": "Update",
      "isTruncated": "true"
    },
    "tags.key1": {
      "newValue": "NewTagValue",
      "previousValue": "null",
      "changeCategory": "User",
      "propertyChangeType": "Insert"
    }
  }
}

Kaynak özelliklerini değiştirme için tam başvuru kılavuzuna bakın.

Sorgu çalıştırma

Tablonun kiracı tabanlı Kaynak Grafı sorgusunu resourcechanges deneyin. Sorgu, değişiklik süresi, değişiklik türü, hedef kaynak kimliği, hedef kaynak türü ve her değişiklik kaydının değişiklik ayrıntılarıyla en son beş Azure kaynak değişikliğini döndürür.

# Login first with az login if not using Cloud Shell
 
# Run Azure Resource Graph query
az graph query -q 'resourcechanges | project properties.changeAttributes.timestamp, properties.changeType, properties.targetResourceId, properties.targetResourceType, properties.changes | limit 5'

Zaman damgası özelliği için daha kolay bir sütun adı belirtmek üzere bu sorguyu güncelleştirebilirsiniz.

# Run Azure Resource Graph query with 'extend'
az graph query -q 'resourcechanges | extend changeTime=todatetime(properties.changeAttributes.timestamp) | project changeTime, properties.changeType, properties.targetResourceId, properties.targetResourceType, properties.changes | limit 5'

Sorgu sonuçlarını en son değişikliklerle sınırlamak için order by sorguyu kullanıcı tanımlı changeTime özelliğine güncelleştirin.

# Run Azure Resource Graph query with 'order by'
az graph query -q 'resourcechanges | extend changeTime=todatetime(properties.changeAttributes.timestamp) | project changeTime, properties.changeType, properties.targetResourceId, properties.targetResourceType, properties.changes | order by changeTime desc | limit 5'

Ayrıca sırasıyla veya parametreleriyle yönetim grubuna-ManagementGroup-Subscription veya aboneliğe göre sorgulayabilirsiniz.

Not

Sorgu zaten erişiminiz olan bir abonelikten sonuç döndürmezse PowerShell Search-AzGraph cmdlet'i varsayılan bağlamdaki abonelikler olarak varsayılan olarak kullanılır.

Kaynak Grafı Gezgini ayrıca bazı sorguların sonuçlarını bir Azure panosuna sabitlenebilen bir grafiğe dönüştürmek için temiz bir arabirim sağlar.

Kaynak değişikliklerini sorgulama

Kaynak Grafı ile, değişiklik kaynağı özelliklerinden herhangi birine göre filtrelemek veya healthresourcechanges sıralamak için , resourcecontainerchangesveya tablolarını sorgulayabilirsinizresourcechanges. Aşağıdaki örnekler tabloyu sorgularresourcechanges, ancak veya healthresourcechanges tablosuna resourcecontainerchanges da uygulanabilir.

Örnekler

Kaynaklarınızdaki değişiklikleri sorgulamadan ve analiz etmeden önce aşağıdaki en iyi yöntemleri gözden geçirin.

  • Belirli bir zaman penceresinde değişiklik olaylarını sorgulayın ve değişiklik ayrıntılarını değerlendirin.
    • Bu sorgu, olası ilgili değişiklikleri anlamak için olay yönetimi sırasında en iyi şekilde çalışır.
  • Güncel bir Yapılandırma Yönetimi Veritabanı (CMDB) tutun.
    • Tüm kaynakları ve bunların tam özellik kümelerini zamanlanmış bir sıklıkta yenilemek yerine yalnızca onların değişikliklerini alırsınız.
  • Bir kaynak "uyumluluk durumu" değiştiğinde başka hangi özelliklerin değiştirildiğini anlayın.
    • Bu ek özelliklerin değerlendirilmesi, Azure İlkesi tanımı aracılığıyla yönetilmesi gerekebilecek diğer özellikler hakkında içgörüler sağlayabilir.
  • Sorgu komutlarının sırası önemlidir. Aşağıdaki örneklerde komutundan order bylimit önce gelmelidir.
    • komutu, order by sorgu sonuçlarını değişiklik zamanına göre sıralar.
    • Komut daha limit sonra en son beş sonucu aldığınızdan emin olmak için sıralı sonuçları sınırlar.

Son 24 saatlik dönemdeki tüm değişiklikler

resourcechanges 
| extend changeTime = todatetime(properties.changeAttributes.timestamp), targetResourceId = tostring(properties.targetResourceId),
changeType = tostring(properties.changeType), correlationId = properties.changeAttributes.correlationId, 
changedProperties = properties.changes, changeCount = properties.changeAttributes.changesCount
| where changeTime > ago(1d)
| order by changeTime desc
| project changeTime, targetResourceId, changeType, correlationId, changeCount, changedProperties

Belirli bir kaynak grubunda silinen kaynaklar

resourcechanges
| where resourceGroup == "myResourceGroup"
| extend changeTime = todatetime(properties.changeAttributes.timestamp), targetResourceId = tostring(properties.targetResourceId),
changeType = tostring(properties.changeType), correlationId = properties.changeAttributes.correlationId
| where changeType == "Delete"
| order by changeTime desc
| project changeTime, resourceGroup, targetResourceId, changeType, correlationId

Belirli bir özellik değerinde yapılan değişiklikler

resourcechanges
| extend provisioningStateChange = properties.changes["properties.provisioningState"], changeTime = todatetime(properties.changeAttributes.timestamp), targetResourceId = tostring(properties.targetResourceId), changeType = tostring(properties.changeType)
| where isnotempty(provisioningStateChange)and provisioningStateChange.newValue == "Succeeded"
| order by changeTime desc
| project changeTime, targetResourceId, changeType, provisioningStateChange.previousValue, provisioningStateChange.newValue

Son yedi gün içinde oluşturulan kaynaklar için en son kaynak değişiklikleri

resourcechanges
| extend targetResourceId = tostring(properties.targetResourceId), changeType = tostring(properties.changeType), changeTime = todatetime(properties.changeAttributes.timestamp)
| where changeTime > ago(7d) and changeType == "Create"
| project  targetResourceId, changeType, changeTime
| join ( Resources | extend targetResourceId=id) on targetResourceId
| order by changeTime desc
| project changeTime, changeType, id, resourceGroup, type, properties

Sanal makine boyutundaki değişiklikler

resourcechanges
|extend vmSize = properties.changes["properties.hardwareProfile.vmSize"], changeTime = todatetime(properties.changeAttributes.timestamp), targetResourceId = tostring(properties.targetResourceId), changeType = tostring(properties.changeType) 
| where isnotempty(vmSize) 
| order by changeTime desc 
| project changeTime, targetResourceId, changeType, properties.changes, previousSize = vmSize.previousValue, newSize = vmSize.newValue

Değişiklik türüne ve abonelik adına göre değişiklik sayısı

resourcechanges  
|extend changeType = tostring(properties.changeType), changeTime = todatetime(properties.changeAttributes.timestamp), targetResourceType=tostring(properties.targetResourceType)  
| summarize count() by changeType, subscriptionId 
| join (resourcecontainers | where type=='microsoft.resources/subscriptions' | project SubscriptionName=name, subscriptionId) on subscriptionId 
| project-away subscriptionId, subscriptionId1
| order by count_ desc  

Belirli bir etiketle oluşturulan kaynaklar için en son kaynak değişiklikleri

resourcechanges 
|extend targetResourceId = tostring(properties.targetResourceId), changeType = tostring(properties.changeType), createTime = todatetime(properties.changeAttributes.timestamp) 
| where createTime > ago(7d) and changeType == "Create" or changeType == "Update" or changeType == "Delete"
| project  targetResourceId, changeType, createTime 
| join ( resources | extend targetResourceId=id) on targetResourceId
| where tags ['Environment'] =~ 'prod' 
| order by createTime desc 
| project createTime, id, resourceGroup, type

Sonraki adımlar