جمع السجلات من نص أو ملف JSON باستخدام عامل Azure Monitor

تقوم العديد من التطبيقات بتسجيل المعلومات إلى ملفات نصية أو JSON بدلا من خدمات التسجيل القياسية مثل سجل أحداث Windows أو Syslog. تشرح هذه المقالة كيفية جمع بيانات السجل من النصوص وملفات JSON على الأجهزة المراقبة باستخدام Azure Monitor Agent عن طريق إنشاء قاعدة تجميع بيانات (DCR).

إشعار

يتم عرض JSON في المعاينة في الوقت الحالي.

المتطلبات الأساسية

لإكمال هذا الإجراء، تحتاج إلى:

  • سجل مساحة عمل Log Analytics حيث يكون لديك على الأقل حقوق المساهمين.

  • نقطة نهاية واحدة أو نقطتي نهاية لجمع البيانات، اعتمادا على ما إذا كان الجهاز الظاهري ومساحة عمل Log Analytics في نفس المنطقة.

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

  • أذونات لإنشاء كائنات قاعدة تجميع البيانات في مساحة العمل.

  • يجب تضمين نص JSON في صف واحد لاستيعابه بشكل صحيح. تنسيق نص JSON (ملف) غير معتمد.

  • جهاز ظاهري أو مجموعة مقياس جهاز ظاهري أو خادم محلي ممكن بواسطة Arc أو عامل مراقبة Azure على عميل محلي يعمل على Windows يكتب السجلات إلى نص أو ملف JSON.

    متطلبات الملفات النصية وJSON وأفضل الممارسات:

    • قم بتخزين الملفات على محرك الأقراص المحلي للجهاز الذي يعمل عليه عامل Azure Monitor وفي الدليل الذي تتم مراقبته.
    • قم بتوضيح نهاية السجل بنهاية السطر.
    • استخدم ترميز ASCII أو UTF-8. لا يتم دعم التنسيقات الأخرى مثل UTF-16.
    • قم بإنشاء ملف سجل جديد كل يوم بحيث يمكنك إزالة الملفات القديمة بسهولة.
    • قم بتنظيف كافة ملفات السجل في الدليل المراقب. يمكن أن يؤدي تعقب العديد من ملفات السجل إلى رفع استخدام وحدة المعالجة المركزية والذاكرة للعامل. انتظر يومين على الأقل للسماح بوقت وافر لمعالجة جميع السجلات.
    • لا تقم بالكتابة فوق ملف موجود بسجلات جديدة. يجب إلحاق سجلات جديدة بنهاية الملف فقط. ستؤدي الكتابة فوق إلى فقدان البيانات.
    • لا تقم بإعادة تسمية ملف باسم جديد ثم افتح ملفا جديدا بنفس الاسم. قد يتسبب هذا في فقدان البيانات.
    • لا تقم بإعادة تسمية أو نسخ ملفات السجل الكبيرة التي تطابق نمط فحص الملفات في إلى الدليل المراقب. إذا كان عليك ذلك، فلا تتجاوز 50 ميغابايت في الدقيقة.
    • لا تقم بإعادة تسمية ملف يطابق نمط فحص الملف باسم جديد يتطابق أيضا مع نمط فحص الملف. سيؤدي هذا إلى استيعاب البيانات المكررة.

إنشاء جدول مخصص

يحتوي الجدول الذي تم إنشاؤه في البرنامج النصي على عمودين:

  • TimeGenerated (التاريخ والوقت) [مطلوب]
  • RawData (سلسلة) [اختياري إذا تم توفير مخطط الجدول]
  • 'FilePath' (سلسلة) [اختياري]
  • YourOptionalColumn (سلسلة) [اختياري]

مخطط الجدول الافتراضي لبيانات السجل التي تم جمعها من الملفات النصية هو "TimeGenerated" و"RawData". إضافة 'FilePath' إلى أي من الفريقين اختياري. إذا كنت تعرف أن المخطط النهائي أو المصدر الخاص بك هو سجل JSON، يمكنك إضافة الأعمدة النهائية في البرنامج النصي قبل إنشاء الجدول. يمكنك دائما إضافة أعمدة باستخدام واجهة مستخدم جدول Log Analytics لاحقا.

يجب أن تتطابق أسماء الأعمدة وسمات JSON تماما لتحليلها تلقائيا في الجدول. كلا العمودين وسمات JSON حساسة لحالة الأحرف. على سبيل المثال Rawdata لن تجمع بيانات الحدث. يجب أن يكون RawData. سيؤدي الاستيعاب إلى إسقاط سمات JSON التي لا تحتوي على عمود مطابق.

أسهل طريقة لإجراء استدعاء REST هي من سطر أوامر Azure Cloud PowerShell (CLI). لفتح shell، انتقل إلى مدخل Microsoft Azure، واضغط على زر Cloud Shell، وحدد PowerShell. إذا كانت هذه هي المرة الأولى التي تستخدم فيها Azure Cloud PowerShell، فستحتاج إلى التنقل عبر معالج التكوين لمرة واحدة.

انسخ هذا البرنامج النصي والصقه في PowerShell لإنشاء الجدول في مساحة العمل الخاصة بك:

$tableParams = @'
{
    "properties": {
        "schema": {
               "name": "{TableName}_CL",
               "columns": [
        {
                                "name": "TimeGenerated",
                                "type": "DateTime"
                        }, 
                       {
                                "name": "RawData",
                                "type": "String"
                       },
                       {
                                "name": "FilePath",
                                "type": "String"
                       },
                      {
                                "name": `"YourOptionalColumn",
                                "type": "String"
                     }
              ]
        }
    }
}
'@

Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{WorkspaceName}/tables/{TableName}_CL?api-version=2021-12-01-preview" -Method PUT -payload $tableParams

يجب أن تتلقى استجابة 200 وتفاصيل حول الجدول الذي أنشأته للتو.

إنشاء قاعدة تجميع بيانات لنص أو ملف JSON

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

  • ملفات سجل المصدر التي يقوم عامل Azure Monitor بفحصها بحثا عن أحداث جديدة.
  • كيف يحول Azure Monitor الأحداث أثناء الاستيعاب.
  • مساحة عمل Log Analytics الوجهة والجدول الذي يرسل إليه Azure Monitor البيانات.

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

إشعار

لإرسال البيانات عبر المستأجرين، يجب أولا تمكين Azure Lighthouse.

لتحليل ملف سجل JSON تلقائيا في جدول مخصص، اتبع خطوات قالب Resource Manager. يمكن تحويل البيانات النصية إلى أعمدة باستخدام تحويل وقت الاستيعاب.

لإنشاء قاعدة جمع البيانات في مدخل Microsoft Azure:

  1. في قائمة Monitor ، حدد Data Collection Rules.

  2. حدد Create لإنشاء قاعدة واقترانات جديدة لجمع البيانات.

    لقطة شاشة تعرض الزر إنشاء على شاشة قواعد تجميع البيانات.

  3. أدخل اسم القاعدة وحدد الاشتراك ومجموعة الموارد والمنطقة ونوع النظام الأساسي ونقطة نهاية تجميع البيانات:

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

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

  4. في علامة التبويب الموارد :

    1. حدد + Add resources وربط الموارد بقاعدة جمع البيانات. يمكن أن تكون الموارد الأجهزة الظاهرية ومجموعات مقياس الجهاز الظاهري وAzure Arc للخوادم. يقوم مدخل Microsoft Azure بتثبيت Azure Monitor Agent على الموارد التي لم يتم تثبيتها بالفعل.

      هام

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

    2. حدد Enable Data Collection Endpoints.

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

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

    لقطة شاشة تعرض علامة تبويب الموارد في شاشة قاعدة تجميع البيانات.

  5. في علامة التبويب جمع وتسليم، حدد إضافة مصدر بيانات لإضافة مصدر بيانات ومجموعة الوجهة.

  6. من القائمة المنسدلة Data source type، حدد Custom Text Logs أو JSON Logs.

  7. حدد المعلومات التالية:

    • نمط الملف - يحدد مكان وجود ملفات السجل على القرص المحلي. يمكنك إدخال أنماط ملفات متعددة مفصولة بفواصل (على Linux، مطلوب إصدار AMA 1.26 أو أعلى للتجميع من قائمة مفصولة بفواصل لأنماط الملفات).

      أمثلة على المدخلات الصالحة:

      • 20220122-MyLog.txt
      • ProcessA_MyLog.txt
      • ErrorsOnly_MyLog.txt، WarningOnly_MyLog.txt

      إشعار

      توجد ملفات سجل متعددة من نفس النوع عادة في نفس الدليل. على سبيل المثال، قد يقوم جهاز بإنشاء ملف جديد كل يوم لمنع ملف السجل من النمو بشكل كبير جدا. لتجميع بيانات السجل في هذا السيناريو، يمكنك استخدام حرف بدل ملف. استخدم تنسيق C:\directoryA\directoryB\*MyLog.txt Windows وLinux /var/*.log . لا يوجد دعم لأحرف البدل للدليل.

    • اسم الجدول - اسم الجدول الوجهة الذي أنشأته في مساحة عمل Log Analytics. لمزيد من المعلومات، راجع إنشاء جدول مخصص.

    • محدد السجل - سيتم استخدامه في المستقبل للسماح للمحددات بخلاف نهاية السطر المدعومة حاليا (/r/n).

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

  8. في علامة التبويب "الوجهة"، أضف وجهة واحدة أو أكثر لمصدر البيانات. يمكنك تحديد وجهات متعددة من نفس الأنواع أو أنواع مختلفة. على سبيل المثال، يمكنك تحديد مساحات عمل Log Analytics متعددة، والتي تعرف أيضا باسم تعدد الاستضافة.

    لقطة شاشة تعرض علامة تبويب الوجهة لشاشة إضافة مصدر بيانات لقاعدة تجميع البيانات في مدخل Microsoft Azure.

  9. حدد Review + create لمراجعة تفاصيل قاعدة جمع البيانات والاقتران بمجموعة الأجهزة الظاهرية.

  10. حدد إنشاء لإنشاء قاعدة جمع البيانات.

إشعار

قد يستغرق إرسال البيانات إلى الوجهات ما يصل إلى 10 دقائق بعد إنشاء قاعدة جمع البيانات.

نموذج سجل العينة

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

  • حساب عدد الأحداث حسب التعليمات البرمجية.

    MyApp_CL
    | summarize count() by code
    

قاعدة تنبيه العينة

  • إنشاء قاعدة تنبيه على أي حدث خطأ.

    MyApp_CL
    | where status == "Error"
    | summarize AggregatedValue = count() by Computer, bin(TimeGenerated, 15m)
    

استكشاف الأخطاء وإصلاحها

استخدم الخطوات التالية لاستكشاف مجموعة السجلات من النصوص وملفات JSON وإصلاحها.

تحقق مما إذا كنت قد أدخلت البيانات إلى الجدول المخصص

ابدأ بالتحقق مما إذا كان قد تم إدخال أي سجلات في جدول السجل المخصص عن طريق تشغيل الاستعلام التالي في Log Analytics:

<YourCustomTable>_CL
| where TimeGenerated > ago(48h)
| order by TimeGenerated desc

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

تحقق من إنشاء جدول مخصص

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

تحقق من أن العامل يرسل رسالة كشف أخطاء الاتصال بنجاح

تحقق من أن عامل Azure Monitor يتصل بشكل صحيح عن طريق تشغيل الاستعلام التالي في Log Analytics للتحقق مما إذا كانت هناك أي سجلات في جدول Heartbeat.

Heartbeat
| where TimeGenerated > ago(24h)
| where Computer has "<computer name>"
| project TimeGenerated, Category, Version
| order by TimeGenerated desc

تحقق من تحديد موقع السجل الصحيح في قاعدة جمع البيانات

سيكون لقاعدة جمع البيانات قسم مشابه للقسم التالي. يحدد العنصر filePatterns المسار إلى ملف السجل لتجميعه من كمبيوتر العامل. تحقق من كمبيوتر العامل للتحقق من صحة ذلك.

"dataSources": [{
            "configuration": {
                "filePatterns": ["C:\\JavaLogs\\*.log"],
                "format": "text",
                "settings": {
                    "text": {
                        "recordStartTimestampFormat": "yyyy-MM-ddTHH:mm:ssK"
                    }
                }
            },
            "id": "myTabularLogDataSource",
            "kind": "logFile",
            "streams": [{
                    "stream": "Custom-TabularData-ABC"
                }
            ],
            "sendToChannels": ["gigl-dce-00000000000000000000000000000000"]
        }
    ]

يجب أن يتوافق نمط الملف هذا مع السجلات الموجودة على جهاز العامل.

Screenshot of text log files on agent machine.

استخدام مستكشف أخطاء عامل Azure Monitor ومصلحها

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

تحقق من ملء السجلات

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

# This script writes a new log entry at the specified interval indefinitely.
# Usage:
# .\GenerateCustomLogs.ps1 [interval to sleep]
#
# Press Ctrl+C to terminate script.
#
# Example:
# .\ GenerateCustomLogs.ps1 5

param (
    [Parameter(Mandatory=$true)][int]$sleepSeconds
)

$logFolder = "c:\\JavaLogs"
if (!(Test-Path -Path $logFolder))
{
    mkdir $logFolder
}

$logFileName = "TestLog-$(Get-Date -format yyyyMMddhhmm).log"
do
{
    $count++
    $randomContent = New-Guid
    $logRecord = "$(Get-Date -format s)Z Record number $count with random content $randomContent"
    $logRecord | Out-File "$logFolder\\$logFileName" -Encoding utf8 -Append
    Start-Sleep $sleepSeconds
}
while ($true)

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

تعلم المزيد عن: