أفضل الممارسات لمراقبة Azure Blob Storage

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

تحديد حسابات التخزين مع عدم الاستخدام أو الاستخدام المنخفض

Storage Insights عبارة عن لوحة معلومات أعلى مقاييس وسجلات Azure Storage. يمكنك استخدام Storage Insights لفحص حجم العمليات والسعة المستخدمة لجميع حساباتك. يمكن أن تساعدك هذه المعلومات في تحديد الحسابات التي قد ترغب في إيقافها. لتكوين Storage Insights، راجع مراقبة خدمة التخزين باستخدام Azure Monitor Storage insights.

تحليل حجم العمليات

من طريقة العرض "Storage Insights" في شاشة مراقبة Azure، قم بفرز حساباتك بترتيب تصاعدي باستخدام عمود العمليات. تعرض الصورة التالية حساباً ذا حجم عمليات منخفض خلال الفترة المحددة.

حجم المعاملة في Storage Insights

انقر فوق ارتباط الحساب لمعرفة المزيد عن هذه العمليات. في هذا المثال، يتم تقديم معظم الطلبات إلى خدمة Blob Storage.

المعاملة حسب نوع الخدمة

لتحديد أنواع الطلبات التي يتم تقديمها، انتقل إلى مخطط العمليات حسب اسم واجهة برمجة التطبيقات.

واجهات برمجة تطبيقات معاملة التخزين

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

تحليل السعة المستخدمة

من علامة التبويب السعة في طريقة العرض "Storage Insights" في شاشة Azure، قم بفرز حساباتك بترتيب تصاعدي باستخدام عمود سعة الحساب المستخدمة. تعرض الصورة التالية حساباً بسعة أقل من الحسابات الأخرى.

سعة التخزين المستخدمة

لفحص كائنات blob المقترنة بهذه السعة المستخدمة، يمكنك استخدام "مستكشف التخزين". بالنسبة للأعداد الكبيرة من كائنات blob، فكر في إنشاء تقرير باستخدام نهج مخزون Blob.

مراقبة استخدام حاوية

إذا قمت بتقسيم بيانات عميلك حسب الحاوية، يمكنك مراقبة مقدار السعة التي يستخدمها كل عميل. يمكنك استخدام مخزون Azure Storage blob لجرد كائنات blob مع معلومات الحجم. بعد ذلك، يمكنك تجميع الحجم والعد على مستوى الحاوية. على سبيل المثال، راجع حساب عدد كائنات blob والحجم الإجمالي لكل حاوية باستخدام مخزون Azure Storage.

يمكنك أيضاً تقييم نسبة استخدام الشبكة على مستوى الحاوية عن طريق الاستعلام عن السجلات. لمعرفة المزيد حول كتابة استعلامات "Log Analytic"، راجع Log Analytics. لمعرفة المزيد حول مخطط سجلات التخزين، راجع مرجع بيانات مراقبة Azure Blob Storage.

فيما يلي إليك استعلام للحصول على عدد عمليات القراءة وعدد وحدات البايت المقروءة في كل حاوية.

StorageBlobLogs
| where OperationName  == "GetBlob"
| extend ContainerName = split(parse_url(Uri).Path, "/")[1]
| summarize ReadSize = sum(ResponseBodySize), ReadCount = count() by tostring(ContainerName)

يستخدم الاستعلام التالي استعلاماً مشابهاً للحصول على معلومات حول عمليات الكتابة.

StorageBlobLogs
| where OperationName == "PutBlob" or
  OperationName == "PutBlock" or
  OperationName == "PutBlockList" or
  OperationName == "AppendBlock" or
  OperationName == "SnapshotBlob" or
  OperationName == "CopyBlob" or
  OperationName == "SetBlobTier"
| extend ContainerName = split(parse_url(Uri).Path, "/")[1]
| summarize WriteSize = sum(RequestBodySize), WriteCount = count() by tostring(ContainerName)

يشير الاستعلام أعلاه إلى أسماء عمليات متعددة لأنه يمكن اعتبار أكثر من نوع واحد من العمليات عملية كتابة. لمعرفة المزيد حول العمليات التي تعتبر عمليات قراءة وكتابة، راجع إما أسعار Azure Blob Storage أو أسعار Azure Data Lake Storage.

نشاط حساب التدقيق

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

عملية وحدة التحكم هي أي طلب من Azure Resource Manager لإنشاء حساب تخزين أو تحديث ملكية حساب تخزين موجود. للحصول على مزيدٍ من المعلومات، راجع Azure Resource Manager.

عملية وحدة البيانات هي عملية على البيانات الموجودة في حساب تخزين ينتج عن طلب إلى نقطة نهاية خدمة التخزين. على سبيل المثال، يتم تنفيذ عملية مستوى البيانات عند تحميل blob إلى حساب تخزين، أو تنزيل blob من حساب تخزين. للحصول على مزيدٍ من المعلومات، راجع واجهة برمجة التطبيقات لـ Azure Storage.

يوضح لك القسم كيفية تحديد معلومات «متى» و«من» و«ماذا» و«كيف» الخاصة بعمليات وحدة التحكم والبيانات.

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

يتم تسجيل عمليات Resource Manager في سجل نشاط Azure. لعرض سجل الأنشطة، افتح حساب التخزين الخاص بك في مدخل Azure، ثم حدد سجل النشاط.

Activity Log

افتح أي إدخال سجل لعرض JSON الذي يصف النشاط. يوضح JSON التالي معلومات «متى» و«ماذا» و«كيف» لعملية وحدة التحكم:

سجل النشاط JSON

يعتمد توفر معلومات «من» على طريقة المصادقة التي تم استخدامها لتنفيذ عملية وحدة التحكم. إذا تم تنفيذ التخويل بواسطة أساس أمان Microsoft Entra، فسيظهر معرف الكائن الخاص بكيان الأمان هذا أيضا في إخراج JSON هذا (على سبيل المثال: "http://schemas.microsoft.com/identity/claims/objectidentifier": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"). نظراً لأنك قد لا ترى دائمًا معلومات أخرى متعلقة بالهوية، مثل عنوان بريد إلكتروني أو اسم، فإن معرف العنصر هو دائمًا أفضل طريقة لتحديد أساس الأمان بشكل فريد.

يمكنك العثور على الاسم المألوف لمدير الأمان هذا عن طريق أخذ قيمة معرف الكائن، والبحث عن أساس الأمان في صفحة معرف Microsoft Entra في مدخل Microsoft Azure. تظهر لقطة الشاشة التالية نتيجة بحث في معرف Microsoft Entra.

البحث في معرف Microsoft Entra

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

يتم تسجيل عمليات وحدة البيانات في سجلات مورد Azure للتخزين. يمكنك تكوين إعداد التشخيص لتصدير السجلات إلى مساحة عمل Log Analytics للحصول على تجربة استعلام أصلية.

فيما يلي استعلام Log Analytics الذي يسترد معلومات «متى» و«من» و«ماذا» و«كيف» في قائمة إدخالات السجل.

StorageBlobLogs
| where TimeGenerated > ago(3d)
| project TimeGenerated, AuthenticationType, RequesterObjectId, OperationName, Uri

بالنسبة إلى الجزء «متى» من التدقيق، يعرض الحقل TimeGenerated وقت تسجيل إدخال السجل.

بالنسبة إلى الجزء «ماذا» من التدقيق، يعرض الحقل Uri العنصر الذي تم تعديله أو قراءته.

بالنسبة إلى الجزء «كيف» من التدقيق، يعرض الحقل OperationName العملية التي تم تنفيذها.

تلميح

على سبيل المثال، إذا كنت تشك في حذف كائن ثنائي كبير الحجم أو حاوية عن طريق الخطأ، فقم بإضافة where عبارة تقوم بإرجاع إدخالات السجل فقط حيث OperationName يتم تعيين على إما Delete blob أو Delete Container. بالنسبة إلى الجزء «من» من التدقيق، يعرض AuthenticationType نوع المصادقة التي تم استخدامها لتقديم طلب. يمكن أن يعرض هذا الحقل أيا من أنواع المصادقة التي يدعمها Azure Storage بما في ذلك استخدام مفتاح حساب أو رمز SAS المميز أو مصادقة Microsoft Entra.

إذا تم تخويل الطلب باستخدام معرف Microsoft Entra، يمكنك استخدام RequestObjectId الحقل لتحديد "من". لا توفر مصادقة المفتاح المشترك وSAS أي وسيلة لتدقيق الهويات الفردية. في هذه الحالات، callerIPAddress قد يساعدك الحقلان و userAgentHeader في تحديد مصدر العملية. إذا تم استخدام رمز SAS المميز لتخويل عملية، يمكنك تحديد هذا الرمز المميز، وإذا قمت بتعيين رموز مميزة لمستلمي الرمز المميز من جانبك، يمكنك تحديد المستخدم أو المؤسسة أو التطبيق الذي نفذ العملية. راجع تحديد رمز SAS المميز المستخدم لتخويل طلب.

تحديد أساس الأمان المستخدم لتخويل طلب

إذا تمت مصادقة طلب باستخدام معرف Microsoft Entra، RequesterObjectId يوفر الحقل الطريقة الأكثر موثوقية لتحديد أساس الأمان. يمكنك العثور على الاسم المألوف لمدير الأمان هذا عن طريق أخذ قيمة RequesterObjectId الحقل والبحث عن أساس الأمان في صفحة معرف Microsoft Entra في مدخل Microsoft Azure. تظهر لقطة الشاشة التالية نتيجة بحث في معرف Microsoft Entra.

البحث في معرف Microsoft Entra

في بعض الحالات، قد يظهر اسم المستخدم الأساسي أو UPN في السجلات. على سبيل المثال، إذا كان أساس الأمان هو مستخدم Microsoft Entra، فمن المحتمل أن يظهر UPN. بالنسبة لأنواع أخرى من أساسيات الأمان مثل الهويات المدارة المعينة من قبل المستخدم، أو في سيناريوهات معينة مثل مصادقة المستأجر عبر Microsoft Entra، لن يظهر UPN في السجلات.

يعرض هذا الاستعلام كافة عمليات القراءة التي يتم تنفيذها بواسطة أساسيات أمان OAuth.

StorageBlobLogs
| where TimeGenerated > ago(3d)
  and OperationName == "GetBlob"
  and AuthenticationType == "OAuth"
| project TimeGenerated, AuthenticationType, RequesterObjectId, OperationName, Uri

لا توفر مصادقة المفتاح المشترك وSAS أي وسيلة لتدقيق الهويات الفردية. لذلك، إذا كنت ترغب في تحسين قدرتك على التدقيق استنادا إلى الهوية، نوصي بالانتقال إلى معرف Microsoft Entra، ومنع المفتاح المشترك ومصادقة SAS. لمعرفة كيفية منع مصادقة المفتاح المشترك وSAS، راجع منع تخويل المفتاح المشترك لحساب Azure Storage. لبدء استخدام معرف Microsoft Entra، راجع تخويل الوصول إلى الكائنات الثنائية كبيرة الحجم باستخدام معرف Microsoft Entra.

تحديد رمز SAS المميز المستخدم لتخويل طلب

يمكنك الاستعلام عن العمليات التي تم تخويلها باستخدام رمز SAS المميز. على سبيل المثال، يقوم هذا الاستعلام بإرجاع كافة عمليات الكتابة التي تم تخويلها باستخدام رمز SAS مميز.

StorageBlobLogs
| where TimeGenerated > ago(3d)
  and OperationName == "PutBlob"
  and AuthenticationType == "SAS"
| project TimeGenerated, AuthenticationType, AuthenticationHash, OperationName, Uri

لأسباب أمنية، لا تظهر رموز SAS المميزة في السجلات. ومع ذلك، ستظهر تجزئة SHA-256 لتوقيع رمز SAS المميز في AuthenticationHash الحقل الذي يتم إرجاعه بواسطة هذا الاستعلام.

إذا قمت بتوزيع العديد من رموز SAS المميزة، وتريد معرفة رموز SAS المميزة التي يتم استخدامها، يتعين عليك تحويل جزء التوقيع لكل من رموز SAS المميزة إلى تجزئة SHA-256، ثم مقارنة هذه التجزئة بقيمة التجزئة التي تظهر في السجلات.

قم أولاً بفك تشفير كل سلسلة لرموز SAS المميزة. يقوم المثال التالي بفك تشفير جزء التوقيع من سلسلة رمز SAS المميز باستخدام PowerShell.

[uri]::UnescapeDataString("<SAS signature here>")

يمكنك استخدام أي أداة أو SDK لتحويل التوقيع الذي تم فك ترميزه إلى SHA-256 يحتوي على هذا التوقيع. على سبيل المثال، على نظام Linux، يمكنك استخدام الأمر التالي:

echo -n "<Decoded SAS signature>" | python3 -c "import sys; from urllib.parse import unquote; print(unquote(sys.stdin.read()), end='');"  | sha256sum

هناك طريقة أخرى لتحويل التوقيع الذي تم فك ترميزه وهي تمرير السلسلة التي تم فك ترميزها إلى الدالة hash_sha256() كجزء من استعلام عند استخدام Azure Data Explorer.

لا تحتوي رموز SAS المميزة على معلومات الهوية. تتمثل إحدى طرق تعقب أنشطة المستخدمين أو المؤسسات في الاحتفاظ بتعيين للمستخدمين أو المؤسسات إلى تجزئات رموز SAS مميزة مختلفة.

تحسين التكلفة للاستعلامات غير المتكررة

يمكنك تصدير السجلات إلى Log Analytics للحصول على إمكانات استعلام أصلية غنية. عندما يكون لديك معاملات ضخمة على حساب التخزين الخاص بك، قد تكون تكلفة استخدام السجلات مع Log Analytics مرتفعة. لمزيد من المعلومات، راجع أسعار Azure Log Analytics. إذا كنت تخطط فقط للاستعلام عن السجلات من حين لآخر (على سبيل المثال، سجلات الاستعلام لتدقيق التوافق)، يمكنك التفكير في تقليل التكلفة الإجمالية عن طريق تصدير السجلات إلى حساب التخزين، ثم استخدام حل استعلام بلا خادم أعلى بيانات السجل، على سبيل المثال، Azure Synapse.

باستخدام Azure Synapse، يمكنك إنشاء تجمع SQL بلا خادم للاستعلام عن بيانات السجل عند الحاجة. هذا يمكن أن يوفر التكاليف بشكل كبير.

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

  2. أنشئ مساحة عمل Synapse وقم بتكوينها. لمزيد من المعلومات، راجع التشغيل السريع: إنشاء مساحة عمل Synapse.

  3. سجلات الاستعلام. لمزيد من المعلومات، راجع الاستعلام عن ملفات JSON باستخدام تجمع SQL بلا خادم في Azure Synapse Analytics.

    إليك مثال:

     select
         JSON_VALUE(doc, '$.time') AS time,
         JSON_VALUE(doc, '$.properties.accountName') AS accountName,
         JSON_VALUE(doc, '$.identity.type') AS identityType,
         JSON_VALUE(doc, '$.identity.requester.objectId') AS requesterObjectId,
         JSON_VALUE(doc, '$.operationName') AS operationName,
         JSON_VALUE(doc, '$.callerIpAddress') AS callerIpAddress,
         JSON_VALUE(doc, '$.uri') AS uri
         doc
     from openrowset(
             bulk 'https://demo2uswest4log.blob.core.windows.net/insights-logs-storageread/resourceId=/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/mytestrp/providers/Microsoft.Storage/storageAccounts/demo2uswest/blobServices/default/y=2021/m=03/d=19/h=*/m=*/PT1H.json',
             format = 'csv', fieldterminator ='0x0b', fieldquote = '0x0b'
         ) with (doc nvarchar(max)) as rows
     order by JSON_VALUE(doc, '$.time') desc
    
    

(راجع أيضًا )