Aracılığıyla paylaş


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.
  • Mülk 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.
  • Değişiklik analiziNde Değişiklik Aktörü işlevselliği kullanılır:
    • changedBy: Uygulama kimliği veya yetkili kişinin e-posta adresi gibi kaynağınızdaki bir değişikliği başlatan kişi.
    • clientType: Değişikliği hangi istemci yaptı, örneğin Azure portalı.
    • operation: Hangi işlem çağrıldı, böyle Microsoft.Compute/virtualmachines/write? operation Kaynak değişiklikleri verilerindeki alan, değişikliği başlatmak için kullanılan Azure rol tabanlı erişim denetimi izinlerini temsil eder.

Önkoşullar

Değişiklik olayı özelliklerini anlama

Bir 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. Bazı değişiklik ayrıntıları diğerlerinden önce görünebilir. Aşağıdaki örnek JSON yükü, kaynak özelliklerini değiştirme işlemini gösterir:

{
  "targetResourceId": "/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myResourceGroup/providers/microsoft.compute/virtualmachines/myVM",
  "targetResourceType": "microsoft.compute/virtualmachines",
  "changeType": "Update",
  "changeAttributes": {
    "previousResourceSnapshotId": "11111111111111111111_22222222-3333-aaaa-bbbb-444444444444_5555555555_6666666666",
    "newResourceSnapshotId": "33333333333333333333_44444444-5555-ffff-gggg-666666666666_7777777777_8888888888",
    "correlationId": "11111111-1111-1111-1111-111111111111",
    "changedByType": "User",
    "changesCount": 2,
    "clientType": "Azure Portal",
    "changedBy": "john@contoso.com",
    "operation": "microsoft.compute/virtualmachines/write",
    "timestamp": "2024-06-12T13:26:17.347+00:00"
  },
  "changes": {
    "properties.provisioningState": {
      "newValue": "Succeeded",
      "previousValue": "Updating",
      "isTruncated": "true"
    },
    "tags.key1": {
      "newValue": "NewTagValue",
      "previousValue": "null",
    }
  }
}

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

operation Kaynak değişiklikleri verilerindeki alan, değişikliği başlatmak için kullanılan Azure rol tabanlı erişim denetimi izinlerini temsil eder. Bu alan her zaman gerçekleştirilen gerçek işlemi değil, kullanılan izni (yetkilendirme eylemini) açıklar. Örneğin, Microsoft.Compute/virtualmachines/write işleminin PUT/providers/Microsoft.Compute/virtualmachinesiznine karşılık gelir.

Kaynakta yakalanan değişikliğin türünü anlamak için (örn. Oluştur, Sil, Güncelleştir), alanı yerine changeType alanı kullanmanızı operation öneririz. Bu alan, bunun yerine değişikliği başlatmak için kullanılan Azure rol tabanlı erişim denetimi izinlerini temsil eder.

İstemci türü biliniyorsa, clientType alanda "Azure Portal" gibi istemci adı gösterilir. İstemci sağlanıyor ancak bilinmiyorsa, alanda istemci uygulama kimliği gösterilir.

Not

Anlık görüntüler şu anda silinmiş kaynaklar için desteklenmemektedir. şunu içeren changeTypekayıtlar için: Delete, changesCount 0 olarak gösterilir çünkü kaynağın kendisi silinir ve hiçbir özellik kalmaz. Kayıtlar changeType ile oluşturulduğunda, changesCount de 0 olarak gösterilir. Bunun nedeni, kaynak oluşturma sırasında her kaynak özelliği değiştirilir ve her özellik değişikliğinin günlüğe kaydedilmesi gereksiz karmaşaya neden olur.

Yeni özellikler kullanıma sunulduğunda, bunlar değişiklik olarak gösterilmez. Örneğin, yeni bir API sürümü yeni özellikler tanıttığında bu durum oluşabilir. Benzer şekilde, etiketlere herhangi bir değer olmadan yeni anahtarlar eklenirse, bu değişiklikler gösterilmez.

Sorgu çalıştırma

Kiracı tabanlı Kaynak Grafiği sorgusunu resourcechanges tablosunda 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 sorguyu order by kullanıcı tanımlı changeTime özelliğe 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'

Aboneliğe veya yönetim grubuna sırasıyla veya -ManagementGroup parametrelerini kullanarak sorgulayabilirsiniz.

Not

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

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 sıralamak için resourcechanges, resourcecontainerchanges veya healthresourcechanges tablolarını sorgulayabilirsiniz. Aşağıdaki örnekler resourcechanges tablosunu sorgular, ancak resourcecontainerchanges ya da healthresourcechanges tablosuna da uygulanabilir.

Örnekler

Kaynaklarınızdaki değişiklikleri sorgulamadan ve analiz etmeden önce aşağıdaki en iyi yöntemleri ve tanımları 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ış sıklıkta yenilemek yerine, yalnızca onların değişikliklerini alırsınız.
  • Bir kaynak uyumluluk durumunu değiştirdiğinde hangi diğer ö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 order by'nin, limit komutundan önce gelmesi gerekiyor.
    • komutu, order by sorgu sonuçlarını değişiklik zamanına göre sıralar.
    • limit komutu ardından, yalnızca en son beş sonucu aldığınızdan emin olmak için sıralı sonuçlar sınırlandırılır.
  • Bilinmiyor ne anlama gelir? 
    • Değişiklik tanınmayan bir istemcide gerçekleştiğinde "Bilinmiyor" ifadesi görüntülenir. İstemciler, özgün değişiklik isteğiyle ilişkili kullanıcı aracısı ve istemci uygulama kimliğine göre tanınır. Bu durumda, kimlik/istemci bilgileri mevcuttu ancak bilinen hiçbir istemciyle eşleşmedi.
    • "clientType değeri için 'Bilinmiyor' gösterilebilir."
  • Belirtilmemiş ne anlama gelir? 
    • Değişiklik için kullanılabilir kimlik veya istemci bilgisi olmadığında "Belirtilmemiş" görüntülenir. Bildirim olayı hiçbir changedBy, istemci uygulama kimliği veya kullanıcı aracısı bilgisi taşımadı ve kaynağın sistem meta verileri de bir lastModifiedBy veya createdBy değeri içermiyor.
    • "Belirtilmemiş", changedBy, changedByType, clientType ve operation değerleri için gösterilebilir.
  • Sistem ne anlama geliyor?
    • Herhangi bir doğrudan kullanıcı eylemiyle ilişkili olmayan bir arka plan platformu değişikliği oluştuğunda "Sistem" görüntülenir.
    • "Sistem" changedBy ve changedByType değerleri için gösterilebilir.

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 özelliğin değerine 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 kim tarafından ve hangi istemci tarafından yapılan değişiklikler, sayıya göre sıralanır.

resourcechanges 
| extend changeTime = todatetime(properties.changeAttributes.timestamp), 
  targetResourceId = tostring(properties.targetResourceId), 
  changeType = tostring(properties.changeType), changedBy = tostring(properties.changeAttributes.changedBy), 
  changedByType = properties.changeAttributes.changedByType, 
  clientType = tostring(properties.changeAttributes.clientType) 
| where changeTime > ago(7d) 
| project changeType, changedBy, changedByType, clientType 
| summarize count() by changedBy, changeType, clientType 
| order by count_ desc 

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