مشاركة عبر


تحسين استعلامات تنبيه بحث السجل

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

بدء كتابة استعلام تنبيه بحث السجل

تبدأ استعلامات التنبيه من الاستعلام عن بيانات السجل في تحليلات السجل التي تشير إلى المشكلة. لفهم ما يمكنك اكتشافه، راجع استخدام الاستعلامات في Azure Monitor Log Analytics. يمكنك أيضًا البدء في كتابة الاستعلام الخاص بك.

تأكد من أن الاستعلام يحدد المشكلة وليس التنبيه نفسه

تم إنشاء تدفق التنبيه لتحويل النتائج التي تشير إلى المشكلة إلى تنبيه. على سبيل المثال، في حالة استعلام مثل:

SecurityEvent
| where EventID == 4624

إذا كان هدف المستخدم هو التنبيه، عند حدوث هذا النوع من الأحداث، فإن منطق التنبيه يلحق count بالاستعلام. سيكون الاستعلام الذي يتم تشغيله:

SecurityEvent
| where EventID == 4624
| count

لا حاجة لإضافة منطق التنبيه إلى الاستعلام، وقد يؤدي ذلك إلى حدوث مشكلات. في المثال السابق، إذا قمت بتضمين count في الاستعلام الخاص بك، فإنه ينتج دائمًا في القيمة 1، لأن خدمة التنبيه ستنفذ count من count.

تجنب الحد وأخذ عوامل التشغيل

يمكن لاستخدام limit وtake في الاستعلامات إلى زيادة زمن انتقال التنبيهات وتحميلها لأن النتائج غير متسقة بمرور الوقت. استخدمها فقط إذا لزم الأمر.

قيود استعلام السجل

تبدأ استعلامات السجل في مراقبة Azure إما بجدول search، أو عامل تشغيل union.

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

لا ندعم إنشاء قواعد تنبيه بحث السجل التي تستخدم search أو عوامل التشغيل أو union تعديلها، باستثناء الاستعلامات عبر الموارد.

على سبيل المثال، يتم تحديد نطاق استعلام التنبيه التالي إلى جدول SecurityEvent والبحث عن معرّف حدث معين. إنه الجدول الوحيد الذي يجب أن يعالجه الاستعلام.

SecurityEvent
| where EventID == 4624

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

union
app('00000000-0000-0000-0000-000000000001').requests,
app('00000000-0000-0000-0000-000000000002').requests,
workspace('00000000-0000-0000-0000-000000000003').Perf 

إشعار

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

الأمثلة

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

المثال 1

تريد إنشاء قاعدة تنبيه بحث السجل باستخدام الاستعلام التالي الذي يسترد معلومات الأداء باستخدام search:

search *
| where Type == 'Perf' and CounterName == '% Free Space'
| where CounterValue < 30
  1. لتعديل هذا الاستعلام، ابدأ باستخدام الاستعلام التالي لتحديد الجدول الذي تنتمي إليه الخصائص:

    search *
    | where CounterName == '% Free Space'
    | summarize by $table
    

    قد تُظهر نتيجة هذا الاستعلام أن الخاصية CounterName جاءت من جدول Perf.

  2. يمكنك استخدام هذه النتيجة لإنشاء الاستعلام التالي الذي ستستخدمه لقاعدة التنبيه:

    Perf
    | where CounterName == '% Free Space'
    | where CounterValue < 30
    

المثال 2

تريد إنشاء قاعدة تنبيه بحث السجل باستخدام الاستعلام التالي الذي يسترد معلومات الأداء باستخدام search:

search ObjectName =="Memory" and CounterName=="% Committed Bytes In Use"
| summarize Avg_Memory_Usage =avg(CounterValue) by Computer
| where Avg_Memory_Usage between(90 .. 95)  
  1. لتعديل هذا الاستعلام، ابدأ باستخدام الاستعلام التالي لتحديد الجدول الذي تنتمي إليه الخصائص:

    search ObjectName=="Memory" and CounterName=="% Committed Bytes In Use"
    | summarize by $table
    

    ستُظهر نتيجة هذا الاستعلام أن خاصية ObjectName وCounterName جاءت من جدول Perf.

  2. يمكنك استخدام هذه النتيجة لإنشاء الاستعلام التالي الذي ستستخدمه لقاعدة التنبيه:

    Perf
    | where ObjectName =="Memory" and CounterName=="% Committed Bytes In Use"
    | summarize Avg_Memory_Usage=avg(CounterValue) by Computer
    | where Avg_Memory_Usage between(90 .. 95)
    

المثال 3

تريد إنشاء قاعدة تنبيه بحث سجل باستخدام الاستعلام التالي الذي يستخدم كل من search و union لاسترداد معلومات الأداء:

search (ObjectName == "Processor" and CounterName == "% Idle Time" and InstanceName == "_Total")
| where Computer !in (
    union *
    | where CounterName == "% Processor Utility"
    | summarize by Computer)
| summarize Avg_Idle_Time = avg(CounterValue) by Computer
  1. لتعديل هذا الاستعلام، ابدأ باستخدام الاستعلام التالي لتحديد الجدول الذي تنتمي إليه الخصائص الموجودة في الجزء الأول من الاستعلام:

    search (ObjectName == "Processor" and CounterName == "% Idle Time" and InstanceName == "_Total")
    | summarize by $table
    

    قد تظهر نتيجة هذا الاستعلام أن كافة هذه الخصائص جاءت من جدول Perf.

  2. استخدم الآن union مع الأمر withsource لتحديد جدول المصدر الذي ساهم في كل سجل:

    union withsource=table *
    | where CounterName == "% Processor Utility"
    | summarize by table
    

    قد تظهر نتيجة هذا الاستعلام أن هذه الخصائص جاءت أيضًا من جدول Perf.

  3. يمكنك استخدام هذه النتائج لإنشاء الاستعلام التالي الذي ستستخدمه لقاعدة التنبيه:

    Perf
    | where ObjectName == "Processor" and CounterName == "% Idle Time" and InstanceName == "_Total"
    | where Computer !in (
        (Perf
        | where CounterName == "% Processor Utility"
        | summarize by Computer))
    | summarize Avg_Idle_Time = avg(CounterValue) by Computer
    

المثال الرابع

تريد إنشاء قاعدة تنبيه بحث في السجل باستخدام الاستعلام التالي الذي ينضم إلى نتائج استعلاماين search :

search Type == 'SecurityEvent' and EventID == '4625'
| summarize by Computer, Hour = bin(TimeGenerated, 1h)
| join kind = leftouter (
    search in (Heartbeat) OSType == 'Windows'
    | summarize arg_max(TimeGenerated, Computer) by Computer , Hour = bin(TimeGenerated, 1h)
    | project Hour , Computer
) on Hour
  1. لتعديل الاستعلام، ابدأ باستخدام الاستعلام التالي لتحديد الجدول الذي يحتوي على الخصائص في الجانب الأيسر من الربط:

    search Type == 'SecurityEvent' and EventID == '4625'
    | summarize by $table
    

    تشير النتيجة إلى أن الخصائص الموجودة في الجانب الأيسر من الربط تنتمي إلى جدول SecurityEvent.

  2. استخدام الاستعلام التالي لتحديد الجدول الذي يحتوي على الخصائص في الجانب الأيمن من الربط:

    search in (Heartbeat) OSType == 'Windows'
    | summarize by $table
    

    تشير النتيجة إلى أن الخصائص الموجودة في الجانب الأيمن من الربط تنتمي إلى جدول Heartbeat.

  3. يمكنك استخدام هذه النتائج لإنشاء الاستعلام التالي الذي ستستخدمه لقاعدة التنبيه:

    SecurityEvent
    | where EventID == '4625'
    | summarize by Computer, Hour = bin(TimeGenerated, 1h)
    | join kind = leftouter (
        Heartbeat
        | where OSType == 'Windows'
        | summarize arg_max(TimeGenerated, Computer) by Computer , Hour = bin(TimeGenerated, 1h)
        | project Hour , Computer
    ) on Hour
    

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