يوضّح فهم لغة الاستعلام الخاصة بـ Azure Resource Graph

تدعم لغة الاستعلام ل Azure Resource Graph العديد من عوامل التشغيل والوظائف. يعتمد كل عامل تشغيل وكل وظيفة على Kusto Query Language (KQL). للتعرّف على لغة الاستعلام المستخدمة من قبل Resource Graph، ابدأ بالبرنامج التعليمي الخاص بـ KQL.

توضّح هذه المقالة مكونات اللغة التي يدعمها Resource Graph:

جداول Resource Graph

يوفّر Resource Graph عدة جداول للبيانات التي يخزنها عن أنواع موارد Azure Resource Manager وخصائصها. يمكن استخدام جداول Resource Graph مع join عامل التشغيل للحصول على خصائص من أنواع الموارد ذات الصلة.

تدعم جداول Resource Graph النكهات join :

جداول Resource Graph هل يمكن join الجداول الأخرى؟ ‏‏الوصف
AdvisorResources ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.Advisor.
AlertsManagementResources ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.AlertsManagement.
موارد AppService ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.Web.
مصادر التخويل ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.Authorization.
موارد AWS ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.AwsConnector.
موارد AzureBusinessContinuity ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.AzureBusinessContinuity.
موارد الفوضى ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.Chaos.
CommunityGalleryResources ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.Compute.
ComputeResources ‏‏نعم‬ يتضمن الموارد المتعلقة بمجموعات Microsoft.Compute مقياس الجهاز الظاهري.
DesktopVirtualizationResources ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.DesktopVirtualization.
مصادر Dns ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.Network.
موارد EdgeOrder ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.EdgeOrder.
ElasticsanResources ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.ElasticSan.
ExtendedLocationResources ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.ExtendedLocation.
موارد الميزات ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.Features.
GuestConfigurationResources ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.GuestConfiguration.
تغيير الموارد الصحية ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.Resources.
HealthResources ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.ResourceHealth.
InsightsResources ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.Insights.
IoTSecurityResources ‏‏نعم‬ يشمل الموارد المتعلقة بـMicrosoft.IoTSecurity وMicrosoft.IoTFirmwareDefense.
KubernetesConfigurationResources ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.KubernetesConfiguration.
موارد Kusto ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.Kusto.
MaintenanceResources ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.Maintenance.
موارد الخدمات المدارة ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.ManagedServices.
ترحيل الموارد ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.OffAzure.
موارد الشبكة ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.Network.
مصادر مدارية ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.Orbital.
PatchAssessmentResources ‏‏نعم‬ يتضمن الموارد المتعلقة بتقييم Microsoft.Compute تصحيح أجهزة Azure الظاهرية و Microsoft.HybridCompute.
PatchInstallationResources ‏‏نعم‬ يتضمن الموارد المتعلقة بتثبيتMicrosoft.Compute تصحيح أجهزة Azure الظاهرية و Microsoft.HybridCompute.
PolicyResources ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.PolicyInsights.
RecoveryServicesResources ‏‏نعم‬ يشمل الموارد المتعلقة بـMicrosoft.DataProtection وMicrosoft.RecoveryServices.
عمليات تغيير الموارد ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.Resources.
تغييرات ResourceContainer ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.Resources.
ResourceContainers ‏‏نعم‬ يشمل مجموعة الإدارة (Microsoft.Management/managementGroups)، والاشتراك (Microsoft.Resources/subscriptions) ومجموعة الموارد (Microsoft.Resources/subscriptions/resourcegroups) أنواع وبيانات الموارد.
الموارد ‏‏نعم‬ الجدول الافتراضي إذا لم يتم تعريف جدول في الاستعلام. تتوفر هنا معظم أنواع موارد Resource Manager وخصائصها.
SecurityResources ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.Security.
موارد ServiceFabric ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.ServiceFabric.
ServiceHealthResources ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.ResourceHealth/events.
مصادر Spot ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.Compute.
مصادر الدعم ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.Support.
موارد العلامات ‏‏نعم‬ تشمل الموارد المتعلقة بـMicrosoft.Resources/tagnamespaces.

للحصول على قائمة بالجداول التي تتضمن أنواع الموارد، انتقل إلى جدول Azure Resource Graph ومرجع نوع المورد.

إشعار

Resources هو الجدول الافتراضي. أثناء الاستعلام عن Resources الجدول، لا يلزم توفير اسم الجدول ما لم يتم join استخدام أو union . ولكن الممارسة الموصى بها هي تضمين الجدول الأولي دائما في الاستعلام.

لاكتشاف أنواع الموارد المتوفرة في كل جدول، استخدم Resource Graph Explorer في المدخل. استخدم استعلامًا بديلًا مثل <tableName> | distinct type للحصول على قائمة بأنواع الموارد التي يدعمها جدول Resource Graph المحدد والموجود في بيئتك.

يوضح الاستعلام التالي ملف join. تمزج نتيجة الاستعلام الأعمدة معًا ويتم إلحاق أي أسماء أعمدة مكررة من الجدول المتصلResourceContainers في هذا المثال، بـ1. نظرا لأن جدول ResourceContainers يحتوي على أنواع لكل من الاشتراكات ومجموعات الموارد، فقد يتم استخدام أي نوع للانضمام إلى المورد من Resources الجدول.

Resources
| join ResourceContainers on subscriptionId
| limit 1

يوضح الاستعلام التالي استخدامًا أكثر تعقيدًا لـjoin. أولا، يستخدم project الاستعلام للحصول على الحقول من Resources لنوع مورد Azure Key Vault vaults. تستخدم الخطوة التالية join لدمج النتائج مع ResourceContainers حيث يكون النوع عبارة عن اشتراكفي خاصية موجودة في كل من الجدول الأول projectوالجدول المتصل project. تتجنب join إعادة تسمية الحقل إضافتها كاسم1 نظرا لأن الخاصية معروضة بالفعل من Resources. نتيجة الاستعلام هي نوع مخزن مفاتيح واحد يعرض الاسم والموقع ومجموعة الموارد لمخزن المفاتيح، بالإضافة إلى اسم الاشتراك الموجود فيه.

Resources
| where type == 'microsoft.keyvault/vaults'
| project name, type, location, subscriptionId, resourceGroup
| join (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId
| project type, name, location, resourceGroup, SubName
| limit 1

إشعار

عند تقييد join النتائج مع project، لا بد من تضمين الخاصية المستخدمة من قبل join لربط الجدولين، subscriptionId في المثال أعلاه، في project.

الخصائص الموسعة

كميزة معاينة ، تحتوي بعض أنواع الموارد في Resource Graph على المزيد من الخصائص المتعلقة بالنوع المتاحة للاستعلام خارج الخصائص التي يوفرها Azure Resource Manager. توجد مجموعة القيم هذه، المعروفة باسم الخصائص الموسعة، في نوع مورد مدعوم في properties.extended. لإظهار أنواع الموارد ذات الخصائص الموسعة، استخدم الاستعلام التالي:

Resources
| where isnotnull(properties.extended)
| distinct type
| order by type asc

مثال: احصل على عدد الأجهزة الظاهرية من خلال instanceView.powerState.code:

Resources
| where type == 'microsoft.compute/virtualmachines'
| summarize count() by tostring(properties.extended.instanceView.powerState.code)

عناصر اللغة المخصصة الخاصة بـ Resource Graph

هي بناء جملة الاستعلام المشترك (معاينة)

من ميزات المعاينة أيضًا، يمكنك الوصول إلى استعلام مشترك مباشرةً في استعلام Resource Graph. يتيح لك هذا السيناريو إمكانية إنشاء استعلامات قياسية على أنها استعلامات مشتركة وإعادة استخدامها. لاستدعاء استعلام مشترك داخل استعلام Resource Graph، استخدم بناء الجملة {{shared-query-uri}}. URI للاستعلام المشترك هو معرّف المورد للاستعلام المشترك في صفحة الإعدادات لهذا الاستعلام. في هذا المثال، يكون عنوان URI للاستعلام المشترك هو /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS. يشير URI هذا إلى الاشتراك ومجموعة الموارد والاسم الكامل للاستعلام المشترك الذي نريد الإشارة إليه في استعلام آخر. هذا الاستعلام هو نفسه الاستعلام الذي أُنشئ في البرنامج التعليمي: إنشاء استعلام ومشاركته.

إشعار

لا يمكنك حفظ استعلام يشير إلى استعلام مشترك باعتباره استعلامًا مشتركًا.

مثال 1: استخدم الاستعلام المشترك فقط:

تكون نتائج استعلام Resource Graph هذه هي نفس نتائج الاستعلام المخزن في الاستعلام المشترك.

{{/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS}}

مثال 2: تضمين الاستعلام المشترك كجزء من استعلام أكبر:

يستخدم الاستعلام هذا الاستعلام المشترك أولًا، ثم يستخدم limit لتقييد النتائج بشكل أكبر.

{{/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS}}
| where properties_storageProfile_osDisk_osType =~ 'Windows'

هي عناصر لغة KQL المدعومة

يدعم Resource Graph مجموعة فرعية من أنواع بيانات KQL وSVFوعوامل التشغيل العدديةووظائف التجميع. تُدعم عوامل التشغيل الجدولية المحددة بواسطة Resource Graph، كما أن بعض هذه العوامل له سلوكيات مختلفة.

عوامل التشغيل الجدولية ذات المستوى العالي المدعومة

فيما يلي قائمة عوامل التشغيل الجدولية KQL المدعومة من Resource Graph مع عينات محددة:

KQL استعلام عينة Resource Graph ملاحظات
count حساب مخازن المفاتيح
متميزه إظهار الموارد التي تحتوي على مساحة تخزين
extend جرد الأجهزة الظاهرية حسب نوع نظام التشغيل
join مخزن المفاتيح باسم الاشتراك انضم إلى النكهات المدعومة: innerunique، و inner، و leftouter، و fullouter. حد ثلاثة join في استعلام واحد، قد يكون أحدها جدولا متقاطعا join. إذا كان كل استخدام الجدول join التبادلي بين Resource و ResourceContainers، فسيتم السماح بثلاثة جداول متقاطعةjoin. لا يُسمح بإستراتيجيات الانضمام المخصصة، مثل الانضمام إلى البث. للجداول التي يمكنها استخدام join، انتقل إلى جداول Resource Graph.
حد أقصى قائمة بجميع عناوين IP العامة مرادف لـ take. لا يعمل بواسطة Skip.
mvexpand بالنسبة لعامل التشغيل القديم، استخدم mv-expand بدلًا من ذلك. RowLimit بحد أقصى 2000. الحد الافتراضي هو 128.
mv-expand سرد Azure Cosmos DB مع مواقع كتابة محددة RowLimit بحد أقصى 2000. الحد الافتراضي هو 128. حد أقصى 2 mv-expand في استعلام واحد.
الترتيب سرد الموارد مرتبة حسب الاسم مرادف لـ sort
parse الحصول على شبكات ظاهرية وشبكات فرعية لواجهات الشبكة من الأمثل الوصول إلى الخصائص مباشرةً في حال وجودها بدلًا من استخدام parse.
project سرد الموارد مرتبة حسب الاسم
خارج المشروع إزالة الأعمدة من النتائج
sort سرد الموارد مرتبة حسب الاسم مرادف لـ order
summarize حساب موارد Azure إظهار الصفحة الأولى المبسطة فقط
الوقت المستغرق قائمة بجميع عناوين IP العامة مرادف لـ limit. لا يعمل بواسطة Skip.
top عرض أول خمسة أجهزة افتراضية حسب الاسم ونوع نظام التشغيل
union دمج النتائج من استعلامين في نتيجة واحدة يسمح بجدول واحد: | union [kind= inner|outer] [withsource=ColumnName] Table. حد من ثلاثة union أرجل في استعلام واحد. لا يُسمح بالدقة غير الواضحة union لجداول الشُعب. قد يتم استخدامها داخل جدول واحد أو بين جداول الموارد وجداول ResourceContainers .
حيث إظهار الموارد التي تحتوي على مساحة تخزين

هناك حد افتراضي لثلاثة join وثلاثة mv-expand عوامل تشغيل في استعلام Resource Graph SDK واحد. يمكنك طلب زيادة هذه الحدود للمستأجر الخاص بك من خلال Help + support.

لدعم تجربة مدخل Open Query ، يحتوي Azure Resource Graph Explorer على حد عمومي أعلى من Resource Graph SDK.

إشعار

لا يمكنك الرجوع إلى جدول كجدول صحيح عدة مرات، والذي يتجاوز الحد الأقصى وهو 1. إذا قمت بذلك، فستتلقى خطأ مع التعليمات البرمجية DisallowedMaxNumberOfRemoteTables.

نطاق الاستعلام

إرجاع الموارد من نطاق الاشتراكات أو مجموعات الإدارة بواسطة الاستعلام الافتراضي إلى قائمة الاشتراكات استنادًا إلى سياق المستخدم المعتمد. إذا لم يتم تعريف مجموعة إدارة أو قائمة اشتراك، فإن نطاق الاستعلام هو جميع الموارد، ويتضمن موارد Azure Lighthouse المفوضة.

يمكن تحديد قائمة الاشتراكات أو مجموعات الإدارة للاستعلام يدويًا لتغيير نطاق النتائج. على سبيل المثال، تتخذ خاصية واجهة برمجة تطبيقات RESTmanagementGroups معرّف مجموعة الإدارة، مع اختلاف اسم مجموعة الإدارة. عند managementGroups تحديدها، يتم تضمين الموارد من أول 10000 اشتراك في التسلسل الهرمي لمجموعة الإدارة المحددة أو ضمنها. لا يمكن استخدامmanagementGroups في نفس الوقت مثل subscriptions.

مثال: الاستعلام عن كافة الموارد ضمن التسلسل الهرمي لمجموعة الإدارة المسماة My Management Group بالمعرف myMG.

  • REST API URI

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01
    
  • نص الطلب

    {
      "query": "Resources | summarize count()",
      "managementGroups": ["myMG"]
    }
    

AuthorizationScopeFilter تمكنك المعلمة من سرد تعيينات نهج Azure وتعيينات دور التحكم في الوصول استنادا إلى الدور (Azure RBAC) في AuthorizationResources الجدول الموروث من النطاقات العليا. AuthorizationScopeFilter تقبل المعلمة القيم التالية للجداول PolicyResources وAuthorizationResources:

  • AtScopeAndBelow (الافتراضي إذا لم يتم تحديده): إرجاع التعيينات للنطاق المحدد وجميع النطاقات التابعة.
  • AtScopeAndAbove: إرجاع التعيينات للنطاق المحدد وجميع النطاقات الأصلية، ولكن ليس النطاقات التابعة.
  • AtScopeAboveAndBelow: إرجاع التعيينات للنطاق المحدد، وجميع النطاقات الأصلية، وجميع النطاقات التابعة.
  • AtScopeExact: إرجاع التعيينات للنطاق المحدد فقط؛ لا يتم تضمين أي نطاقات أصل أو نطاقات تابعة.

إشعار

لاستخدام المعلمة AuthorizationScopeFilter ، تأكد من استخدام إصدار واجهة برمجة التطبيقات 2021-06-01 أو أحدث في طلباتك.

مثال: احصل على جميع تعيينات النهج الموجودة في مجموعة إدارة myMG ونطاقات Tenant Root (الأصلية).

  • REST API URI

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
    
  • Request Body Sample

    {
      "options": {
        "authorizationScopeFilter": "AtScopeAndAbove"
      },
      "query": "PolicyResources | where type =~ 'Microsoft.Authorization/PolicyAssignments'",
      "managementGroups": ["myMG"]
    }
    

مثال: احصل على كافة تعيينات النهج في اشتراك mySubscriptionId ومجموعة الإدارة ونطاقات Root scopes.

  • REST API URI

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
    
  • Request Body Sample

    {
      "options": {
        "authorizationScopeFilter": "AtScopeAndAbove"
      },
      "query": "PolicyResources | where type =~ 'Microsoft.Authorization/PolicyAssignments'",
      "subscriptions": ["mySubscriptionId"]
    }
    

شخصيات الهروب

يجب تضمين بعض أسماء الخصائص، مثل تلك التي تشمل . أو $، أو إلغاءها في الاستعلام وإلا سيُفسر اسم الخاصية بشكل غير صحيح وبالتالي لا تقدم النتائج المتوقعة.

  • Dot (.): التفاف اسم ['propertyname.withaperiod'] الخاصية باستخدام أقواس.

    استعلام مثال يضمن الخاصية odata.type:

    where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.['odata.type']
    
  • علامة الدولار ($): قم بإلغاء الحرف في اسم الخاصية. يعتمد حرف الإلغاء المستخدم على shell الذي يقوم بتشغيل Resource Graph.

    • Bash: استخدم مائلة عكسية (\) كحرف إلغاء.

      مثال الاستعلام الذي يلغي الخاصية $type في Bash:

      where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.\$type
      
    • cmd: لا تهرب من حرف علامة الدولار ($).

    • PowerShell: استخدم backtick (`) كحرف إلغاء.

      مثال الاستعلام الذي يلغي الخاصية $type في PowerShell:

      where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.`$type
      

الخطوات التالية