البدء باستعلامات السجل في Azure Monitor

إشعار

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

إذا كنت تعرف بالفعل كيفية الاستعلام بلغة استعلام Kusto (KQL) ولكنك تحتاج إلى إنشاء استعلامات مفيدة بسرعة استنادا إلى أنواع الموارد، فشاهد جزء استعلامات المثال المحفوظ في استخدام الاستعلامات في Azure Monitor Log Analytics.

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

  • فهم بنية الاستعلام.
  • فرز نتائج الاستعلام.
  • تصفية نتائج الاستعلام.
  • تحديد نطاق زمني.
  • تحديد الحقول المراد تضمينها في النتائج.
  • تحديد واستخدام الحقول المخصصة.
  • تجميع النتائج ووضعها في مجموعات.

للحصول على برنامج تعليمي حول استخدام Log Analytics في مدخل Microsoft Azure، راجع البدء في استخدام Azure Monitor Log Analytics.

لمزيد من المعلومات حول استعلامات السجل في Azure Monitor، راجع نظرة عامة على استعلامات السجل في Azure Monitor.

إليك نسخة فيديو من هذا البرنامج التعليمي:

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

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

كتابة استعلام جديد

يمكن أن تبدأ الاستعلامات إما باسم جدول أو search الأمر . من المستحسن البدء باسم جدول لأنه يحدد نطاقا واضحا للاستعلام. كما أنه يحسن أداء الاستعلام وأهمية النتائج.

إشعار

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

الاستعلامات القائمة على الجدول

ينظم Azure Monitor بيانات السجل في الجداول، يضم كلّ منها أعمدة متعددة. يتم عرض جميع الجداول والأعمدة في جزء المخطط في Log Analytics في بوابة Analytics. حدد الجدول الذي تهتم به، ثم ألق نظرة على القليل من البيانات:

SecurityEvent
| take 10

يرجع الاستعلام السابق 10 نتائج من SecurityEvent الجدول، دون ترتيب معين. تساعدك هذه الطريقة الشائعة للحصول على نظرة سريعة على جدول على فهم بنيته ومحتواه. دعنا نفحص كيف تم بناؤه:

  • يبدأ الاستعلام باسم SecurityEventالجدول ، الذي يحدد نطاق الاستعلام.

  • يفصل حرف الأنبوب (|) الأوامر، وبالتالي فإن إخراج الأمر الأول هو إدخال الأمر التالي. يمكنك إضافة أي عدد من عناصر الأنابيب.

  • يتبع توجيه هو take عامل التشغيل.

    يمكننا تشغيل الاستعلام حتى دون إضافة | take 10. سيظل الأمر صالحا، ولكن يمكن أن يرجع ما يصل إلى 30000 نتيجة.

Take

take استخدم عامل التشغيل لعرض عينة صغيرة من السجلات عن طريق إرجاع ما يصل إلى عدد السجلات المحدد. النتائج المحددة عشوائية ويتم عرضها بترتيب معين. إذا كنت بحاجة إلى إرجاع النتائج بترتيب معين، فاستخدم sort عاملي التشغيل وtop.

استعلامات البحث

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

search in (SecurityEvent) "Cryptographic"
| take 10

يبحث هذا الاستعلام في SecurityEvent الجدول عن السجلات التي تحتوي على العبارة "Cryptographic". ومن بين هذه السجلات، يتم إرجاع 10 سجلات وعرضها. إذا حذفت in (SecurityEvent) الجزء وقمت بتشغيل فقط search "Cryptographic"، فسينتقل البحث إلى جميع الجداول. ثم تستغرق العملية وقتا أطول وتكون أقل كفاءة.

هام

عادة ما تكون استعلامات البحث أبطأ من الاستعلامات المستندة إلى الجدول؛ لأنه يتعين عليها معالجة المزيد من البيانات.

فرز وأعلى

يصف sort هذا القسم عوامل التشغيل و top والوسيطات desc الخاصة asc بهم. على الرغم من أنه take مفيد للحصول على بعض السجلات، لا يمكنك تحديد النتائج أو فرزها بأي ترتيب معين. للحصول على طريقة عرض مرتبة، استخدم sort و top.

Desc وasc

تنازلي

استخدم الوسيطة desc لفرز السجلات بترتيب تنازلي. الفرز التنازلي هو ترتيب الفرز الافتراضي ل sort و top، لذلك يمكنك عادة حذف الوسيطة desc .

على سبيل المثال، يتم فرز البيانات التي تم إرجاعها بواسطة كلا الاستعلامين التاليين حسب العمود TimeGenerated بترتيب تنازلي:

  • SecurityEvent	
    | sort by TimeGenerated desc
    
  • SecurityEvent	
    | sort by TimeGenerated
    

الرابطه

للفرز بترتيب تصاعدي، حدد asc.

Sort

يمكنك استخدام sort عامل التشغيل . sort يفرز نتائج الاستعلام حسب العمود الذي تحدده. ومع ذلك، sort لا يحد من عدد السجلات التي يتم إرجاعها بواسطة الاستعلام.

على سبيل المثال، يقوم الاستعلام التالي بإرجاع كافة السجلات المتوفرة للجدول SecurityEvent ، والذي يصل إلى 30000 سجل كحد أقصى، ويفرزها حسب العمود TimeGenerated.

SecurityEvent	
| sort by TimeGenerated

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

Top

top استخدم عامل التشغيل لفرز الجدول بأكمله على جانب الخادم ثم إرجاع السجلات العليا فقط.

على سبيل المثال، يقوم الاستعلام التالي بإرجاع أحدث 10 سجلات:

SecurityEvent
| top 10 by TimeGenerated

يبدو الإخراج مثل هذا المثال.

Screenshot that shows the top 10 records sorted in descending order.

عامل التشغيل where: تصفية حسب شرط

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

لإضافة عامل تصفية إلى استعلام، استخدم where عامل التشغيل متبوعا بشرط واحد أو أكثر. على سبيل المثال، يقوم الاستعلام التالي بإرجاع السجلات فقط SecurityEvent حيث Level equals _8:

SecurityEvent
| where Level == 8

عندما تكتب شروط التصفية، يمكنك استخدام التعبيرات التالية:

تعبير ‏‏الوصف مثال
== يتحقق من المساواة
(حساسية الأحرف)
Level == 8
=~ يتحقق من المساواة
(حالة الأحرف)
EventSourceName =~ "microsoft-windows-security-auditing"
!=, <> يتحقق من عدم المساواة
(كلا التعبيرين متطابقان)
Level != 4
and, or مطلوب بين الشروط Level == 16 or CommandLine != ""

للتصفية حسب شروط متعددة، يمكنك استخدام أي من الطرق التالية:

استخدم and، كما هو موضح هنا:

SecurityEvent
| where Level == 8 and EventID == 4672

توجيه عناصر متعددة where ، واحدة تلو الأخرى، كما هو موضح هنا:

SecurityEvent
| where Level == 8 
| where EventID == 4672

إشعار

يمكن أن يكون للقيم أنواع مختلفة، لذلك قد تحتاج إلى وضعها لإجراء مقارنات على النوع الصحيح. على سبيل المثال، SecurityEvent Level العمود من النوع String، لذلك يجب تحويله إلى نوع رقمي، مثل int أو long، قبل أن تتمكن من استخدام عوامل التشغيل الرقمية عليه، كما هو موضح هنا: SecurityEvent | where toint(Level) >= 10

حدد نطاقًا زمنيًّا

يمكنك تحديد نطاق زمني باستخدام منتقي الوقت أو عامل تصفية الوقت.

استخدم منتقي الوقت

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

Screenshot that shows the time picker and its list of time-range commands.

أضف عامل تصفية الوقت إلى الاستعلام

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

من الأفضل وضع عامل تصفية الوقت مباشرة بعد اسم الجدول:

SecurityEvent
| where TimeGenerated > ago(30m) 
| where toint(Level) >= 10

في عامل تصفية الوقت السابق، ago(30m) يعني "قبل 30 دقيقة". يقوم هذا الاستعلام بإرجاع السجلات من آخر 30 دقيقة فقط، والتي يتم التعبير عنها على أنها، على سبيل المثال، 30m. تتضمن الوحدات الزمنية الأخرى الأيام (على سبيل المثال، 2d) والثواني (على سبيل المثال، 10s).

استخدام project وextend لتحديد وحساب الأعمدة

استخدم project لتحديد أعمدة معينة لتضمينها في النتائج:

SecurityEvent 
| top 10 by TimeGenerated 
| project TimeGenerated, Computer, Activity

يولد المثال السابق المخرجات التالية:

Screenshot that shows the query 'project' results list.

يمكنك أيضا استخدام project لإعادة تسمية الأعمدة وتحديد الأعمدة الجديدة. يستخدم project المثال التالي للقيام بما يلي:

  • حدد العمودين Computer الأصليين و TimeGenerated فقط.
  • Activity عرض العمود ك EventDetails.
  • إنشاء عمود جديد باسم EventCode. substring() يتم استخدام الدالة للحصول على الأحرف الأربعة الأولى فقط من Activity الحقل.
SecurityEvent
| top 10 by TimeGenerated 
| project Computer, TimeGenerated, EventDetails=Activity, EventCode=substring(Activity, 0, 4)

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

SecurityEvent
| top 10 by TimeGenerated
| extend EventCode=substring(Activity, 0, 4)

استخدم التلخيص لتجميع مجموعات الصفوف

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

يراجع الاستعلام التالي جميع Perf السجلات من الساعة الأخيرة، ويجمعها حسب ObjectName، ويحسب السجلات في كل مجموعة:

Perf
| where TimeGenerated > ago(1h)
| summarize count() by ObjectName

أحيانًا يكون من المنطقي تعريف المجموعات بأبعاد متعددة. تحدد كل مجموعة فريدة من هذه القيم مجموعة منفصلة:

Perf
| where TimeGenerated > ago(1h)
| summarize count() by ObjectName, CounterName

الاستخدام الشائع الآخر هو إجراء حسابات رياضية أو إحصائية على كل مجموعة. يحسب المثال التالي المتوسط CounterValue لكل كمبيوتر:

Perf
| where TimeGenerated > ago(1h)
| summarize avg(CounterValue) by Computer

لسوء الحظ، نتائج هذا الاستعلام لا معنى لها لأننا خلطنا عدادات أداء مختلفة معا. لجعل النتائج أكثر معنى، احسب المتوسط بشكل منفصل لكل مجموعة من CounterName و Computer:

Perf
| where TimeGenerated > ago(1h)
| summarize avg(CounterValue) by Computer, CounterName

تلخيص حسب عمود الوقت

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

لإنشاء مجموعات استنادا إلى القيم المستمرة، من الأفضل تقسيم النطاق إلى وحدات قابلة للإدارة باستخدام bin. يحلل Perf الاستعلام التالي السجلات التي تقيس الذاكرة الحرة (Available MBytes) على كمبيوتر معين. تحسب متوسط ​​قيمة كل فترة ساعة واحدة خلال آخر 7 أيام:

Perf 
| where TimeGenerated > ago(7d)
| where Computer == "ContosoAzADDS2" 
| where CounterName == "Available MBytes" 
| summarize avg(CounterValue) by bin(TimeGenerated, 1h)

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

Screenshot that shows the values of a query memory over time.

الأسئلة الشائعة

يقدم هذا القسم إجابات للأسئلة الشائعة.

لماذا أرى سجلات مكررة في Azure Monitor Logs ؟

في بعض الأحيان، قد تلاحظ سجلات مكررة في سجلات Azure Monitor. عادة ما يكون هذا التكرار من أحد الشرطين التاليين:

  • تحاول المكونات الموجودة في البنية الأساسية ضمان التسليم الموثوق به في الوجهة. في بعض الأحيان، قد تؤدي هذه الإمكانية إلى تكرارات لنسبة صغيرة من عناصر بيانات تتبع الاستخدام.
  • إذا كانت السجلات المكررة تأتي من جهاز ظاهري، فقد يكون لديك كل من عامل Log Analytics وعامل Azure Monitor مثبتين. إذا كنت لا تزال بحاجة إلى تثبيت عامل Log Analytics، فكون مساحة عمل Log Analytics بحيث لا تجمع البيانات التي يتم جمعها أيضا بواسطة قاعدة جمع البيانات المستخدمة من قبل عامل Azure Monitor.

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