مشاركة عبر


تحليل بيانات النص في سجلات Azure Monitor

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

توضح هذه المقالة خيارات مختلفة لتحليل بيانات السجل في Azure Monitor عند تناول البيانات وعند استردادها في استعلام، مقارنة المزايا النسبية لكل منها.

الأذونات المطلوبة

  • لتحليل البيانات في وقت التجميع، تحتاج إلى Microsoft.Insights/dataCollectionRuleAssociations/* أذونات، كما هو منصوص عليه في دور مساهم Log Analytics المضمن، على سبيل المثال.
  • لتحليل البيانات في وقت الاستعلام، تحتاج إلى Microsoft.OperationalInsights/workspaces/query/*/read أذونات، كما هو منصوص عليه في الدور المضمن لقارئ Log Analytics، على سبيل المثال.

تحليل الأساليب

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

تحليل البيانات في وقت التجميع

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

الميزات:

  • من الأسهل الاستعلام عن البيانات التي تم جمعها لأنك لا تحتاج إلى تضمين أوامر التحليل في الاستعلام.
  • أداء استعلام أفضل لأن الاستعلام لا يحتاج إلى إجراء تحليل.

العيوب:

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

تحليل البيانات في وقت الاستعلام

عند تحليل البيانات في وقت الاستعلام، يمكنك تضمين منطق في الاستعلام الخاص بك لتحليل البيانات في حقول متعددة. لم يتم تعديل الجدول الفعلي نفسه.

الميزات:

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

العيوب:

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

تحليل البيانات في أثناء جمعها

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

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

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

أنماط نص بسيطة

استخدم عامل تشغيلالتحليل في الاستعلام الخاص بك لإنشاء خاصية مخصصة واحدة أو أكثر يمكن استخراجها من تعبير سلسلة. يمكنك تحديد النقش الذي سيتم تعريفه وأسماء الخصائص التي سيتم إنشاؤها. هذا الأسلوب مفيد للبيانات ذات سلاسل قيمة المفتاح مع نموذج مشابه ل key=value.

ضع في اعتبارك سجلا مخصصا يحتوي على بيانات بالتنسيق التالي:

Time=2018-03-10 01:34:36 Event Code=207 Status=Success Message=Client 05a26a97-272a-4bc9-8f64-269d154b0e39 connected
Time=2018-03-10 01:33:33 Event Code=208 Status=Warning Message=Client ec53d95c-1c88-41ae-8174-92104212de5d disconnected
Time=2018-03-10 01:35:44 Event Code=209 Status=Success Message=Transaction 10d65890-b003-48f8-9cfc-9c74b51189c8 succeeded
Time=2018-03-10 01:38:22 Event Code=302 Status=Error Message=Application could not connect to database
Time=2018-03-10 01:31:34 Event Code=303 Status=Error Message=Application lost connection to database

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

MyCustomLog_CL
| parse RawData with * "Time=" EventTime " Event Code=" Code " Status=" Status " Message=" Message
| project EventTime, Code, Status, Message

يقسم هذا المثال اسم المستخدم ل UPN في AzureActivity الجدول.

AzureActivity
| parse  Caller with UPNUserPart "@" * 
| where UPNUserPart != "" //Remove non UPN callers (apps, SPNs, etc)
| distinct UPNUserPart, Caller

التعبيرات العادية

إذا كان يمكن تعريف البيانات الخاصة بك بتعبير عادي، يمكنك استخدام الوظائف التي تستخدم التعبيرات العادية لاستخراج القيم الفردية. يستخدم المثال التالي استخراج لفصل UPN الحقل من AzureActivity السجلات ثم إرجاع مستخدمين متميزين.

AzureActivity
| extend UPNUserPart = extract("([a-z.]*)@", 1, Caller) 
| distinct UPNUserPart, Caller

لتمكين التحليل الفعال على نطاق واسع، يستخدم Azure Monitor الإصدار re2 من التعبيرات العادية، وهو مشابه ولكنه غير متطابق مع بعض متغيرات التعبير العادي الأخرى. لمزيد من المعلومات، راجع بناء جملة التعبير re2.

تحليل البيانات المحددة في استعلام

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

إشعار

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

ضع في اعتبارك سجلا مخصصا يحتوي على بيانات بتنسيق CSV التالي:

2018-03-10 01:34:36, 207,Success,Client 05a26a97-272a-4bc9-8f64-269d154b0e39 connected
2018-03-10 01:33:33, 208,Warning,Client ec53d95c-1c88-41ae-8174-92104212de5d disconnected
2018-03-10 01:35:44, 209,Success,Transaction 10d65890-b003-48f8-9cfc-9c74b51189c8 succeeded
2018-03-10 01:38:22, 302,Error,Application could not connect to database
2018-03-10 01:31:34, 303,Error,Application lost connection to database

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

MyCustomCSVLog_CL
| extend CSVFields  = split(RawData, ',')
| extend EventTime  = todatetime(CSVFields[0])
| extend Code       = toint(CSVFields[1]) 
| extend Status     = tostring(CSVFields[2]) 
| extend Message    = tostring(CSVFields[3]) 
| where getyear(EventTime) == 2018
| summarize count() by Status,Code

تحليل الهياكل المعرفة مسبقًا في استعلام

إذا تم تنسيق بياناتك في بنية معروفة، فقد تتمكن من استخدام إحدى الدالات في لغة استعلام Kusto لتحليل البنيات المعرفة مسبقا:

يوزع Properties الاستعلام المثال التالي حقل AzureActivity الجدول، الذي تم تنظيمه في JSON. يحفظ النتائج إلى خاصية ديناميكية تسمى parsedProp، والتي تتضمن القيمة الفردية المسماة في JSON. يتم استخدام هذه القيم لتصفية وتلخيص نتائج الاستعلام.

AzureActivity
| extend parsedProp = parse_json(Properties) 
| where parsedProp.isComplianceCheck == "True" 
| summarize count() by ResourceGroup, tostring(parsedProp.tags.businessowner)

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

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

SecurityEvent
| where EventID == 4768
| parse EventData with * 'PreAuthType">' PreAuthType '</Data>' * 
| summarize count() by PreAuthType

استخدام دالة لمحاكاة جدول

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

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

MyCustomCSVLog_CL
| extend CSVFields = split(RawData, ',')
| extend DateTime  = tostring(CSVFields[0])
| extend Code      = toint(CSVFields[1]) 
| extend Status    = tostring(CSVFields[2]) 
| extend Message   = tostring(CSVFields[3]) 

يمكنك الآن استخدام الاسم المستعار MyCustomCSVLog بدلا من اسم الجدول الفعلي في استعلامات مثل المثال التالي:

MyCustomCSVLog
| summarize count() by Status,Code

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

تعرف على استعلامات السجل لتحليل البيانات التي تم تجميعها من مصادر البيانات والحلول.