الحصول على تغييرات الموارد
تتغير الموارد من خلال مسار الاستخدام اليومي وإعادة التكوين وحتى إعادة التوزيع. تُجرى معظم التغييرات وفقاً للتصميم باستثناء بعض الأحيان. يمكنك:
- ابحث عن وقت اكتشاف التغييرات على خاصية Azure Resource Manager.
- عرض تفاصيل تغيير الخاصية.
- الاستعلام عن التغييرات على نطاق واسع عبر الاشتراكات أو مجموعة الإدارة أو المستأجر.
ستتعرف في هذه المقالة على ما يلي:
- كيف تبدو الحمولة JSON.
- كيفية الاستعلام عن تغييرات الموارد من خلال Resource Graph باستخدام إما CLI أو PowerShell أو مدخل Microsoft Azure.
- أمثلة الاستعلام وأفضل الممارسات للاستعلام عن تغييرات الموارد.
المتطلبات الأساسية
- لتمكين Azure PowerShell من الاستعلام عن Azure Resource Graph، أضف الوحدة النمطية.
- لتمكين Azure CLI من الاستعلام عن Azure Resource Graph، أضف الملحق.
فهم خصائص حدث التغيير
عند إنشاء مورد أو تحديثه أو حذفه، يُنشأ مورد تغيير جديد (Microsoft.Resources/changes) لتوسيع المورد المعدل وتمثيل الخصائص المُجرى تغييرها. يجب أن تتوفر سجلات التغيير في أقل من خمس دقائق. يوضح المثال التالي حمولة JSON خصائص مورد التغيير:
{
"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"
}
}
}
راجع الدليل المرجعي الكامل لتغيير خصائص المورد.
تشغيل استعلام
جرب استعلام Resource Graph المستند إلى المستأجر للجدول resourcechanges
. يقوم الاستعلام بإرجاع أول أحدث خمسة تغييرات لمورد Azure بوقت التغيير ونوعه، ومعرف مورد الهدف ونوعه، وتفاصيل التغيير لكل سجل تغيير على حدة.
# 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'
يمكنك تحديث هذا الاستعلام لتحديد اسم عمود أكثر سهولة في الاستخدام لخاصية الطابع الزمني .
# 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'
للحد من نتائج الاستعلام إلى أحدث التغييرات، قم بتحديث الاستعلام إلى order by
خاصية changeTime المعرفة من قبل المستخدم.
# 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'
يمكنك أيضا الاستعلام حسب مجموعة الإدارة أو الاشتراك باستخدام -ManagementGroup
المعلمات أو -Subscription
على التوالي.
إشعار
إذا لم يرجع الاستعلام نتائج من اشتراك لديك حق الوصول إليه بالفعل، فسيتم Search-AzGraph
تعيين PowerShell cmdlet افتراضيا على الاشتراكات في السياق الافتراضي.
كما يوفر مستكشف Resource Graph واجهة نظيفة لتحويل نتائج بعض الاستعلامات إلى مخطط بياني يمكن تثبيته بلوحة معلومات Azure.
تغييرات موارد الاستعلام
باستخدام Resource Graph، يمكنك الاستعلام إما عن resourcechanges
resourcecontainerchanges
الجداول أو أو healthresourcechanges
للتصفية أو الفرز حسب أي من خصائص مورد التغيير. تقوم الأمثلة التالية بالاستعلام عن resourcechanges
الجدول، ولكن يمكن أيضا تطبيقها على resourcecontainerchanges
الجدول أو healthresourcechanges
.
إشعار
تعرف على المزيد حول البيانات في healthresourcechanges
وثائق Project Flash.
الأمثلة
قبل الاستعلام عن التغييرات وتحليلها في مواردك، راجع أفضل الممارسات التالية.
- الاستعلام عن أحداث التغيير خلال نافذة زمنية معينة وتقييم تفاصيل التغيير.
- يعمل هذا الاستعلام بشكل أفضل أثناء إدارة الحوادث لفهم التغييرات المحتملة ذات الصلة.
- احتفظ بقاعدة بيانات إدارة تكوين محدثة (CMDB).
- بدلا من تحديث جميع الموارد ومجموعات الخصائص الكاملة الخاصة بها على تردد مجدول، ستتلقى تغييراتها فقط.
- فهم الخصائص الأخرى التي ربما تم تغييرها عندما يغير المورد "حالة التوافق".
- يمكن أن يوفر تقييم هذه الخصائص الإضافية نتيجة معرفية عن الخصائص الأخرى التي قد تحتاج إلى إدارتها عبر تعريف نهج Azure.
- ترتيب أوامر الاستعلام مهم. في الأمثلة التالية،
order by
يجب أن يأتي قبلlimit
الأمر .- يقوم
order by
الأمر بطلب نتائج الاستعلام حسب وقت التغيير. - ثم يحد
limit
الأمر من النتائج مرتبة للتأكد من حصولك على أحدث خمس نتائج.
- يقوم
جميع التغييرات في فترة ال 24 ساعة الماضية
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
الموارد المحذوفة في مجموعة موارد معينة
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
التغييرات المُجراة على قيمة خاصية معينة
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
أحدث تغييرات الموارد للموارد التي تم إنشاؤها في الأيام السبعة الأخيرة
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
التغييرات في حجم الجهاز الظاهري
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
عدد التغييرات حسب نوع التغيير واسم الاشتراك
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
أحدث تغييرات الموارد للموارد التي تم إنشاؤها باستخدام علامة معينة
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