البدء باستعلامات السجل في 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
يبدو الإخراج مثل هذا المثال.
عامل التشغيل where: تصفية حسب شرط
عوامل التصفية، كما هو مبين بأسمائها، تقوم بتصفية البيانات حسب شرط معين. التصفية هي الطريقة الأكثر شيوعا لقصر نتائج الاستعلام على المعلومات ذات الصلة.
لإضافة عامل تصفية إلى استعلام، استخدم where
عامل التشغيل متبوعا بشرط واحد أو أكثر. على سبيل المثال، يقوم الاستعلام التالي بإرجاع السجلات فقط SecurityEvent
حيث Level equals _8
:
SecurityEvent
| where Level == 8
عندما تكتب شروط التصفية، يمكنك استخدام التعبيرات التالية:
Expression | الوصف | مثال |
---|---|---|
== | يتحقق من المساواة (حساسية الأحرف) |
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 ساعة فقط. يتم تطبيق هذا النطاق الزمني الافتراضي على جميع الاستعلامات. للحصول على سجلات من الساعة الأخيرة فقط، حدد آخر ساعة ثم قم بتشغيل الاستعلام مرة أخرى.
أضف عامل تصفية الوقت إلى الاستعلام
يمكنك أيضًا تحديد النطاق الزمني الخاص بك عن طريق إضافة عامل تصفية الوقت إلى الاستعلام. تتجاوز إضافة عامل تصفية الوقت النطاق الزمني المحدد في منتقي الوقت.
من الأفضل وضع عامل تصفية الوقت مباشرة بعد اسم الجدول:
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
يولد المثال السابق المخرجات التالية:
يمكنك أيضا استخدام 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
لتحديد مجموعات السجلات وفقا لعمود واحد أو أكثر وتطبيق التجميعات عليها. الاستخدام الأكثر شيوعا هو summarize
count
، الذي يرجع عدد النتائج في كل مجموعة.
يراجع الاستعلام التالي جميع 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)
لجعل الإخراج أكثر وضوحا، يمكنك تحديد لعرضه كمخطط زمني، والذي يعرض الذاكرة المتوفرة بمرور الوقت.
الأسئلة الشائعة
يقدم هذا القسم إجابات للأسئلة الشائعة.
لماذا أرى سجلات مكررة في Azure Monitor Logs ؟
في بعض الأحيان، قد تلاحظ سجلات مكررة في سجلات Azure Monitor. عادة ما يكون هذا التكرار من أحد الشرطين التاليين:
- تحاول المكونات الموجودة في البنية الأساسية ضمان التسليم الموثوق به في الوجهة. في بعض الأحيان، قد تؤدي هذه الإمكانية إلى تكرارات لنسبة صغيرة من عناصر بيانات تتبع الاستخدام.
- إذا كانت السجلات المكررة تأتي من جهاز ظاهري، فقد يكون لديك كل من عامل Log Analytics وعامل Azure Monitor مثبتين. إذا كنت لا تزال بحاجة إلى تثبيت عامل Log Analytics، فكون مساحة عمل Log Analytics بحيث لا تجمع البيانات التي يتم جمعها أيضا بواسطة قاعدة جمع البيانات المستخدمة من قبل عامل Azure Monitor.
الخطوات التالية
- لمعرفة المزيد حول استخدام بيانات السلسلة في استعلام السجل، راجع التعامل مع السلاسل في استعلامات سجل Azure Monitor.
- لمعرفة المزيد حول تجميع البيانات في استعلام السجل، راجع التجميعات المتقدمة في استعلامات سجل Azure Monitor.
- لمعرفة كيفية ضم البيانات من جداول متعددة، راجع عمليات الانضمام في استعلامات سجل Azure Monitor.
- احصل على وثائق حول لغة استعلام Kusto بأكملها في مرجع لغة KQL.