كيفية تدقيق عمليات وحدة التحكم لقاعدة بيانات Azure Cosmos

ينطبق على: NoSQL MongoDB كاساندرا العفريت جدول

وحدة التحكم في Azure Cosmos DB هي خدمة RESTful تمكنك من تنفيذ مجموعة متنوعة من العمليات على حساب Azure Cosmos DB. يعرض نموذج الموارد العامة (على سبيل المثال: قاعدة البيانات والحساب) والعمليات المختلفة للمستخدمين النهائيين لتنفيذ إجراءات على نموذج المورد. تتضمن عمليات وحدة التحكم تغييرات على حساب أو حاوية Azure Cosmos DB. على سبيل المثال، عمليات مثل إنشاء حساب Azure Cosmos DB، وإضافة منطقة، وتحديث معدل النقل، وتجاوز فشل المنطقة، وإضافة شبكة ظاهرية وما إلى ذلك هي بعض عمليات وحدة التحكم. توضح هذه المقالة كيفية تدقيق عمليات وحدة التحكم في قاعدة بيانات Azure Cosmos. يمكنك تشغيل عمليات وحدة التحكم على حسابات Azure Cosmos DB باستخدام Azure CLI أو PowerShell أو مدخل Azure، بينما بالنسبة للحاويات، استخدم Azure CLI أو PowerShell.

فيما يلي أمثلة بعض السيناريوهات حيث يكون تدقيق عمليات وحدة التحكم مفيد:

  • تريد الحصول على تنبيه عند تعديل قواعد جدار الحماية لحساب Azure Cosmos DB الخاص بك. التنبيه مطلوب للعثور على تعديلات غير مصرح بها على القواعد التي تحكم أمان الشبكة لحساب Azure Cosmos DB الخاص بك واتخاذ إجراء سريع.

  • تريد الحصول على تنبيه إذا تمت إضافة منطقة جديدة أو إزالتها من حساب Azure Cosmos DB الخاص بك. إضافة أو إزالة المناطق له آثار على متطلبات الفوترة وسيادة البيانات. سيساعدك هذا التنبيه على اكتشاف إضافة أو إزالة غير مقصودة لمنطقة على حسابك.

  • تريد الحصول على مزيد من التفاصيل من السجلات التشخيصية على ما تم تغييره. على سبيل المثال، تم تغيير شبكة ظاهرية.

تعطيل الوصول إلى كتابة بيانات التعريف المستندة إلى المفتاح

قبل تدقيق عمليات وحدة التحكم في قاعدة بيانات Azure Cosmos، عطل الوصول إلى كتابة بيانات التعريف المستندة إلى المفتاح على حسابك. عند تعطيل الوصول إلى كتابة بيانات التعريف المستندة إلى المفتاح، يتم منع العملاء المتصلين بحساب Azure Cosmos DB من خلال مفاتيح الحساب من الوصول إلى الحساب. يمكنك تعطيل الوصول للكتابة عن طريق تعيين disableKeyBasedMetadataWriteAccess الخاصية إلى صحيح. بعد تعيينك هذه الخاصية، يمكن أن تحدث تغييرات على أي مورد من مستخدم له دور Azure وبيانات الاعتماد المناسبة. لمعرفة المزيد حول كيفية تعيين هذه الخاصية راجع مقالة «منع التغييرات من عدة تطوير البرامج».

بعد تشغيل disableKeyBasedMetadataWriteAccess، إذا كان العملاء المستندين إلى عدة تطوير البرامج يقومون بتشغيل عمليات الإنشاء أو التحديث، يتم إرجاع خطأ "عملية 'POST' على المورد 'ContainerNameorDatabaseName' غير المسموح به من خلال نقطة نهاية قاعدة بيانات Cosmos Azure. يجب تشغيل الوصول إلى مثل هذه العمليات لحسابك، أو تنفيذ عمليات الإنشاء/التحديث من خلال إدارة موارد Azure، أو واجهة سطر أوامر Azure أو Azure PowerShell. للتبديل مرة أخرى، قم بتعيين disableKeyBasedMetadataWriteAccess إلى false باستخدام Azure CLI كما هو موضح في مقالة منع التغييرات من Azure Cosmos DB SDK . تأكد من تغيير قيمة disableKeyBasedMetadataWriteAccess إلى خطأ بدلا من صحيح.

خذ بعين الاعتبار النقاط التالية عند إيقاف تشغيل الوصول إلى كتابة بيانات التعريف:

  • قم بالتقييم والتأكد من أن تطبيقاتك لا تجري استدعاءات بيانات التعريف التي تغير الموارد المذكورة أعلاه (على سبيل المثال، إنشاء مجموعة، وتحديث معدل النقل،...) بإستخدام عدة تطوير البرامج أو مفاتيح الحساب.

  • عند تعيين disableKeyBasedMetadataWriteAccess على true، تُحظر عمليات بيانات التعريف الصادرة عن SDK. بدلاً من ذلك، يمكنك استخدام مدخل Microsoft Azure أو Azure CLI أو Azure PowerShell أو عمليات توزيع قالب Azure Resource Manager لتنفيذ هذه العمليات.

تمكين السجلات التشخيصية لعمليات وحدة التحكم

يمكنك تمكين السجلات التشخيصية لعمليات وحدة التحكم باستخدام مدخل Azure. بعد التمكين، ستقوم السجلات التشخيصية بتسجيل العملية كزوج من أحداث بداية وإكمال مع التفاصيل ذات الصلة. على سبيل المثال، سيكملان RegionFailoverStart و RegionFailoverCompleteحدث منطقة الرجوع الإحتياطي.

استخدم الخطوات التالية لتمكين تسجيل الدخول إلى عمليات وحدة التحكم:

  1. سجل الدخول إلى مدخل Microsoft Azure وانتقل إلى حساب Azure Cosmos DB الخاص بك.

  2. افتح جزء إعدادات التشخيص، ووفر اسم للسجلات لإنشاء.

  3. حدد ControlPlaneRequests لنوع السجل وحدد الخيار إرسال إلى سجل التحليلات.

  4. اختياريا، أرسل سجلات التشخيص إلى Azure Storage أو Azure Event Hubs أو Azure Monitor أو جهة خارجية.

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

تمكين تسجيل طلبات وحدة التحكم

عرض عمليات وحدة التحكم

بعد تشغيل تسجيل الدخول، استخدم الخطوات التالية لتعقب العمليات لحساب معين:

  1. قم بتسجيل الدخول إلى بوابة Azure.

  2. افتح علامة التبويب مراقبة من التنقل الأيسر ثم حدد جزء السجلات. يفتح واجهة مستخدم حيث يمكنك بسهولة تشغيل الاستعلامات باستخدام هذا الحساب المحدد في النطاق. شغل الاستعلام التالي لعرض سجلات وحدة التحكم:

    AzureDiagnostics
    | where ResourceProvider=="MICROSOFT.DOCUMENTDB" and Category=="ControlPlaneRequests"
    | where TimeGenerated >= ago(1h)
    

    تلتقط لقطات الشاشة التالية السجلات عند تغيير مستوى التناسق لحساب Azure Cosmos DB. activityId_gتختلف القيمة من النتائج عن معرف النشاط لعملية ما:

    سجلات وحدة التحكم عند إضافة شبكة ظاهرية

    تلتقط لقطات الشاشة التالية سجلات عند إنشاء مساحة المفتاح أو جدول من حساب Cassandra وعندما يتم تحديث معدل النقل. سجلات وحدة التحكم لإنشاء وتحديث العمليات على قاعدة البيانات ويتم تسجيل الحاوية بشكل منفصل كما هو موضح في لقطة الشاشة التالية:

    سجلات وحدة التحكم عند تحديث معدل النقل

تحديد الهوية المقترنة بعملية معينة

إذا كنت تريد تصحيح أكثر من ذلك، يمكنك تحديد عملية معينة في سجل النشاط باستخدام activityId_g أو بواسطة الطابع الزمني للعملية. يتم استخدام الطابع الزمني لبعض عملاء إدارة الموارد حيث لم يتم تمرير معرف النشاط بشكل صريح. يقدم سجل النشاط تفاصيل حول الهوية التي تم بدء العملية بها. توضح لقطة الشاشة التالية كيفية استخدام activityId_g للبحث عن العمليات المقترنة به في سجل النشاط:

استخدم معرف النشاط وابحث عن العمليات

عمليات وحدة التحكم لحساب Azure Cosmos DB

فيما يلي عمليات وحدة التحكم المتوفرة على مستوى الحساب. يتم تعقب معظم العمليات على مستوى الحساب. تتوفر هذه العمليات كمقاييس في مراقبة Azure:

  • تمت إضافة المنطقة
  • تمت إزالة المنطقة
  • تم حذف الحساب
  • فشلت المنطقة أكثر
  • تم إنشاء حساب
  • تم حذف الشبكة الظاهرية
  • تم تحديث إعدادات تحديث شبكة الحساب
  • تم تحديث إعدادات النسخ المتماثل للحساب
  • تم تحديث مفاتيح الحساب
  • تم تحديث إعدادات النسخ الاحتياطي للحساب
  • تم تحديث الإعدادات التشخيصية للحساب

عمليات وحدة التحكم لقاعدة البيانات أو الحاويات

فيما يلي عمليات وحدة التحكم المتوفرة على مستوى قاعدة البيانات أو الحاوية. تتوفر هذه العمليات كمقاييس في مراقبة Azure:

  • تم إنشاء قاعدة بيانات لغة الاستعلامات المركبة
  • تم تحديث قاعدة بيانات لغة الاستعلامات المركبة
  • تم تحديث معدل نقل قاعدة بيانات لغة الاستعلامات المركبة
  • تم حذف قاعدة بيانات لغة الاستعلامات المركبة
  • تم إنشاء حاوية لغة الاستعلامات المركبة
  • تم تحديث حاوية لغة الاستعلامات المركبة
  • تم تحديث معدل النقل حاوية لغة الاستعلامات المركبة
  • تم حذف حاوية لغة الاستعلامات المركبة
  • مساحة مفتاح Cassandra التي تم إنشاؤها
  • مساحة مفتاح Cassandra المحدثة
  • معدل نقل مساحة مفتاح Cassandra المحدثة
  • مساحة مفتاح Cassandra المحذوفة
  • جدول Cassandra الذي تم إنشاؤه
  • جدول Cassandra المحدث
  • معدل نقل جدول Cassandra المحدث
  • جدول Cassandra المحذوف
  • تم إنشاء قاعدة بيانات Gremlin
  • تم تحديث قاعدة بيانات Gremlin
  • تم تحديث معدل نقل قاعدة بيانات Gremlin
  • تم حذف قاعدة بيانات Gremlin
  • تم إنشاء رسم Gremlin البياني
  • تم تحديث رسم Gremlin البياني
  • تم تحديث معدل نقل رسم Gremlin البياني
  • تم حذف رسم Gremlin البياني
  • تم إنشاء قاعدة بيانات Mongo
  • تم تحديث قاعدة بيانات Mongo
  • تم تحديث معدل نقل قاعدة بيانات Mongo
  • تم حذف قاعدة بيانات Mongo
  • تم إنشاء مجموعة Mongo
  • تم تحديث مجموعة Mongo
  • تم تحديث معدل نقل مجموعة Mongo
  • تم حذف مجموعة Mongo
  • تم إنشاء جدول AzureTable
  • تم تحديث جدول AzureTable
  • تم تحديث معدل نقل جدول AzureTable
  • تم حذف جدول AzureTable

عمليات السجل التشخيصي

فيما يلي أسماء العمليات في السجلات التشخيصية لعمليات مختلفة:

  • RegionAddStart, RegionAddComplete
  • RegionRemoveStart, RegionRemoveComplete
  • AccountDeleteStart, AccountDeleteComplete
  • RegionFailoverStart, RegionFailoverComplete
  • AccountCreateStart, AccountCreateComplete
  • AccountUpdateStart, AccountUpdateComplete
  • VirtualNetworkDeleteStart, VirtualNetworkDeleteComplete
  • DiagnosticLogUpdateStart, DiagnosticLogUpdateComplete

بالنسبة للعمليات الخاصة بواجهة برمجة التطبيقات، يتم تسمية العملية بالتنسيق التالي:

  • ApiKind + ApiKindResourceType + نوع العملية
  • ApiKind + ApiKindResourceType + "معدل النقل" + نوع العملية

مثال

  • CassandraKeyspacesCreate
  • CassandraKeyspacesUpdate
  • CassandraKeyspacesThroughputUpdate
  • SqlContainersUpdate

تحتوي الخاصية ResourceDetails على كامل نص المورد كحمولة طلب ويحتوي على كل الخصائص المطلوب تحديثها

استعلامات السجل التشخيصية لعمليات وحدة التحكم

فيما يلي بعض الأمثلة للحصول على سجلات تشخيصية لعمليات وحدة التحكم:

AzureDiagnostics 
| where Category startswith "ControlPlane"
| where OperationName contains "Update"
| project httpstatusCode_s, statusCode_s, OperationName, resourceDetails_s, activityId_g
AzureDiagnostics 
| where Category =="ControlPlaneRequests"
| where TimeGenerated >= todatetime('2020-05-14T17:37:09.563Z')
| project TimeGenerated, OperationName, apiKind_s, apiKindResourceType_s, operationType_s, resourceDetails_s
AzureDiagnostics
| where Category == "ControlPlaneRequests"
| where OperationName startswith "SqlContainersUpdate"
AzureDiagnostics
| where Category == "ControlPlaneRequests"
| where OperationName startswith "SqlContainersThroughputUpdate"

الاستعلام للحصول على activityId والمتصل الذي بدأ عملية حذف الحاوية:

(AzureDiagnostics
| where Category == "ControlPlaneRequests"
| where OperationName == "SqlContainersDelete"
| where TimeGenerated >= todatetime('9/3/2020, 5:30:29.300 PM')
| summarize by activityId_g )
| join (
AzureActivity
| parse HTTPRequest with * "clientRequestId\": \"" activityId_g "\"" * 
| summarize by Caller, HTTPRequest, activityId_g)
on activityId_g
| project Caller, activityId_g

الاستعلام للحصول على تحديثات الفهرس أو ttl. يمكنك بعد ذلك مقارنة إخراج هذا الاستعلام مع تحديث سابق لمشاهدة التغيير في الفهرس أو ttl.

AzureDiagnostics
| where Category =="ControlPlaneRequests"
| where  OperationName == "SqlContainersUpdate"
| project resourceDetails_s

المخرجات:

{id:skewed,indexingPolicy:{automatic:true,indexingMode:consistent,includedPaths:[{path:/*,indexes:[]}],excludedPaths:[{path:/_etag/?}],compositeIndexes:[],spatialIndexes:[]},partitionKey:{paths:[/pk],kind:Hash},defaultTtl:1000000,uniqueKeyPolicy:{uniqueKeys:[]},conflictResolutionPolicy:{mode:LastWriterWins,conflictResolutionPath:/_ts,conflictResolutionProcedure:}

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