إرسال بيانات السجل إلى Azure Monitor باستخدام واجهة برمجة تطبيقات HTTP Data Collector (مهملة)

توضح هذه المقالة كيفية استخدام HTTP Data Collector API لإرسال بيانات السجل إلى Azure Monitor من عميل REST API. وتصف كيفية تنسيق البيانات التي يتم جمعها بواسطة البرنامج النصي أو التطبيق الخاص بك، وتضمينها في طلب، ويكون هذا الطلب مصرحًا به من قبل Azure Monitor. نقدم أمثلة لـAzure PowerShell وC# وPython.

إشعار

تم إهمال واجهة برمجة تطبيقات Azure Monitor HTTP Data Collector ولن تعمل اعتبارا من 9/14/2026. تم استبداله بواجهة برمجة تطبيقات استيعاب السجلات.

المفاهيم

يمكنك استخدام HTTP Data Collector API لإرسال بيانات السجل إلى مساحة عمل Log Analytics في Azure Monitor من أي عميل يمكنه استدعاء REST API. قد يكون العميل runbook في Azure Automation يقوم بتجميع بيانات الإدارة من Azure أو مجموعة سحابية أخرى، أو قد يكون نظام إدارة بديلًا يستخدم Azure Monitor لدمج بيانات السجل وتحليلها.

يتم تخزين كافة البيانات في مساحة عمل Log Analytics كسجل مع نوع سجل معين. تنسيق البيانات لإرسالها إلى HTTP Data Collector API كسجلات متعددة في JavaScript Object Notation (JSON). عند إرسال البيانات، يتم إنشاء سجل فردي في المستودع لكل سجل في حمولة الطلب.

Screenshot illustrating the HTTP Data Collector overview.

إنشاء طلب

لاستخدام HTTP Data Collector API، قم بإنشاء طلب POST يتضمن البيانات لإرسالها في JSON. تسرد الجداول الثلاثة التالية السمات المطلوبة لكل طلب. سنصف كل سمة بمزيد من التفصيل لاحقًا في المقالة.

طلب URI

السمة الخاصية
الطريقة POST
URI https://<CustomerId>.ods.opinsights.azure.com/api/logs?api-version=2016-04-01
نوع المحتوى تطبيق/json

معلمات طلب URI

المعلمة ‏‏الوصف‬
معرّف العميل المعرف الفريد لمساحة عمل Log Analytics.
مورد اسم مورد API: /api/logs.
إصدار API إصدار API لاستخدامه مع هذا الطلب. حاليا، الإصدار هو 2016-04-01.

عناوين الطلبات

الرأس ‏‏الوصف
التصريح توقيع التفويض. في وقت لاحق في المقالة، يمكنك قراءة كيفية إنشاء عنوان HMAC-SHA256.
Log-Type حدد نوع سجل البيانات التي يتم إرسالها. يمكن أن يحتوي على أحرف وأرقام ورمز (_) فقط، ولا يمكن أن يتجاوز 100 حرف.
x-ms-date تاريخ معالجة الطلب، بتنسيق RFC 1123 .
x-ms-AzureResourceId معرف المورد لمورد Azure الذي يجب أن تكون البيانات مقترنة به. فإنه يملأ الخاصية _ResourceId ويسمح للبيانات بتضمينها في استعلامات سياق المورد. إذا لم يتم تحديد هذا الحقل، فلن يتم تضمين البيانات في استعلامات سياق المورد.
time-generated-field اسم حقل في البيانات التي تحتوي على الطابع الزمني لعنصر البيانات. إذا قمت بتحديد حقل، يتم استخدام محتوياته لـTimeGenerated. إذا لم تحدد هذا الحقل، فإن الإعداد الافتراضي لـTimeGenerated هو الوقت الذي يتم فيه استيعاب الرسالة. يجب أن تتبع محتويات حقل الرسالة صيغة ISO 8601 YYYY-MM-DDThh:mm:ssZ. لا يمكن أن تكون قيمة Time Generated أقدم من يومين قبل تلقي الوقت أو أكثر من يوم في المستقبل. في مثل هذه الحالة، سيتم استخدام الوقت الذي يتم فيه استيعاب الرسالة.

التصريح

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

فيما يلي تنسيق عنوان التفويض:

Authorization: SharedKey <WorkspaceID>:<Signature>

WorkspaceID هو معرّف فريد لمساحة عمل Log Analytics. التوقيع هو رمز مصادقة الرسائل المستند إلى التجزئة (HMAC) الذي تم إنشاؤه من الطلب ثم تم حسابه باستخدام خوارزمية SHA256. ثم قم بترميزه باستخدام ترميز Base64.

استخدم هذا التنسيق لترميز سلسلة التوقيع SharedKey:

StringToSign = VERB + "\n" +
                  Content-Length + "\n" +
                  Content-Type + "\n" +
                  "x-ms-date:" + x-ms-date + "\n" +
                  "/api/logs";

وفيما يلي مثال لسلسلة توقيع:

POST\n1024\napplication/json\nx-ms-date:Mon, 04 Apr 2016 08:00:00 GMT\n/api/logs

عندما يكون لديك سلسلة التوقيع، قم بالترميز باستخدام خوارزمية HMAC-SHA256 على سلسلة UTF-8-encoded ثم ترميز النتيجة كـBase64. استخدم هذا التنسيق:

Signature=Base64(HMAC-SHA256(UTF8(StringToSign)))

تحتوي العينات في المقاطع التالية على نموذج تعليمات برمجية لمساعدتك في إنشاء عنوان التفويض.

نص الطلب

يجب أن يكون نص الرسالة بـJSON. يجب أن يتضمن سجلًا واحدًا أو أكثر مع اسم الخاصية وأزواج القيم بالتنسيق التالي. يمكن أن يحتوي اسم الخاصية على أحرف وأرقام وأحرف تسطير أسفل السطر (_) فقط.

[
    {
        "property 1": "value1",
        "property 2": "value2",
        "property 3": "value3",
        "property 4": "value4"
    }
]

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

[
    {
        "property 1": "value1",
        "property 2": "value2",
        "property 3": "value3",
        "property 4": "value4"
    },
    {
        "property 1": "value1",
        "property 2": "value2",
        "property 3": "value3",
        "property 4": "value4"
    }
]

نوع السجل وخصائصه

تعريف نوع سجل مخصص عند إرسال البيانات من خلال Azure Monitor HTTP Data Collector API. حاليًّا، لا يمكنك كتابة البيانات إلى أنواع السجلات الموجودة التي تم إنشاؤها بواسطة أنواع البيانات والحلول الأخرى. Azure Monitor يقرأ البيانات الواردة ثم ينشئ خصائص تطابق أنواع البيانات من القيم التي تقوم بإدخالها.

يجب أن يتضمن كل طلب إلى Data Collector API عنوان Log-Type مع اسم لنوع السجل. يتم إلحاق اللاحقة _CL تلقائيًّا بالاسم الذي أدخلته لتمييزه عن أنواع السجل الأخرى كسجل مخصص. على سبيل المثال، إذا قمت بإدخال اسم MyNewRecordType، يقوم Azure Monitor بإنشاء سجل بنوع MyNewRecordType_CL. يساعد هذا على التأكد من عدم وجود تعارضات بين أسماء الأنواع التي أنشأها المستخدم وتلك التي يتم شحنها في حلول Microsoft الحالية أو المستقبلية.

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

نوع بيانات الخاصية اللاحقة
السلسلة _s
قيمة منطقية _b
مزدوج _d
التاريخ/الوقت _t
GUID (مخزنة كسلسلة) _g

إشعار

يتم إعطاء قيم السلسلة التي تظهر لتكون GUIDs الللاحقة _g وتنسيقها كـGUID، حتى إذا كانت القيمة الواردة لا تتضمن شرطات. على سبيل المثال، على حد سواء "8145d822-13a7-44ad-859c-36f31a84f6dd"و 36f31a84f6dd" و"8145d82213a744ad859c36f31a84f6dd" يتم تخزينها كـ"8145d822-13a7-44ad-859c-36f31a84f6dd". الاختلافات الوحيدة بين هذه السلسلة وسلسلة أخرى هي _g في الاسم وإدراج شرطات إذا لم يتم توفيرها في الإدخال.

يعتمد نوع البيانات الذي يستخدمه Azure Monitor لكل خاصية على ما إذا كان نوع السجل للسجل الجديد موجودًا بالفعل.

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

على سبيل المثال، إدخال الإرسال التالي قد ينشئ سجلًّا بثلاث خصائص number_d وboolean_bوstring_s:

Screenshot of sample record 1.

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

Screenshot of sample record 2.

ولكن، إذا قمت بإجراء هذا الإرسال التالي، سينشئ Azure Monitor خصائص جديدة boolean_d وstring_d. لا يمكنك تحويل هذه القيم.

Screenshot of sample record 3.

إذا قمت بإرسال الإدخال التالي، قبل إنشاء نوع السجل، يقوم Azure Monitor بإنشاء سجل بثلاث خصائص number_s وboolean_s وstring_s. في هذا الإدخال، يتم تنسيق كل من القيم الأولية كسلسلة:

Screenshot of sample record 4.

الخصائص المحجوزة

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

  • tenant
  • TimeGenerated
  • مسودة بيانات

حدود البيانات

البيانات التي تم نشرها إلى Azure Monitor Data collection API تخضع لقيود معينة:

  • الحد الأقصى 30 ميغابايت لكل مشاركة إلى Azure Monitor Data Collector API. هذا هو حد حجم وظيفة واحدة. إذا تجاوزت البيانات من منشور واحد 30 ميغابايت، فيجب تقسيم البيانات إلى قطع أصغر في الحجم وإرسالها بشكل متزامن.
  • الحد الأقصى لقيم الحقل هو 32 كيلوبايت. إذا كانت قيمة الحقل أكبر من 32 كيلو بايت، سيتم اقتطاع البيانات.
  • يوصى بحد أقصى 50 حقلًا لكل نوع. هذا هو الحد العملي من منظور قابلية الاستخدام وتجربة البحث.
  • تدعم الجداول في مساحات عمل Log Analytics ما يصل إلى 500 عمود فقط (يشار إليها بالحقول في هذه المقالة).
  • الحد الأقصى لأسماء الأعمدة 45 حرفًا.

إرجاع أكواد

رمز حالة HTTP 200 يعني أنه تم تلقي الطلب للمعالجة. يشير هذا إلى أن العملية انتهت بنجاح.

يتم سرد المجموعة الكاملة من رموز الحالة التي قد ترجع الخدمة في الجدول التالي:

الرمز الحالة رمز الخطأ ‏‏الوصف
200 موافق تم قبول الطلب بنجاح.
400 طلب غير صالح InactiveCustomer تم إغلاق مساحة العمل.
400 طلب غير صالح InvalidApiVersion لم يتم التعرف على إصدار API الذي تم تحديده من قبل الخدمة.
400 طلب غير صالح InvalidCustomerId معرف مساحة العمل المحدد غير صالح.
400 طلب غير صالح InvalidDataFormat تم إرسال JSON غير صالح. قد يحتوي نص الاستجابة على مزيد من المعلومات حول كيفية حل الخطأ.
400 طلب غير صالح InvalidLogType يحتوي نوع السجل المحدد على أحرف خاصة أو أرقام.
400 طلب غير صالح MissingApiVersion لم يتم تحديد إصدار API.
400 طلب غير صالح MissingContentType لم يتم تحديد نوع المحتوى.
400 طلب غير صالح MissingLogType لم يتم تحديد نوع سجل القيمة المطلوب.
400 طلب غير صالح UnsupportedContentType لم يتم تعيين نوع المحتوى على application/json.
403 محظور InvalidAuthorization فشلت الخدمة في مصادقة الطلب. تحقق من صحة معرف مساحة العمل ومفتاح الاتصال.
404 غير موجود إما أن عنوان URL المتوفر غير صحيح أو أن الطلب كبير جدًّا.
429 عدد كبير جدًا من الطلبات تشهد الخدمة كمية كبيرة من البيانات من حسابك. الرجاء إعادة محاولة الطلب لاحقًا.
500 خطأ خادم داخلي UnspecifiedError واجهت الخدمة خطأ داخليًّا. الرجاء إعادة محاولة الطلب.
503 الخدمة غير متوفرة ServiceUnavailable الخدمة غير متوفرة حاليًّا لتلقي الطلبات. الرجاء إعادة محاولة الطلب.

بيانات الاستعلام

للاستعلام عن البيانات المرسلة من قبل Azure Monitor HTTP Data Collector API، ابحث عن سجلات يساوي نوعها قيمة LogType التي قمت بتحديدها وإلحاقها بـ_CL. على سبيل المثال، إذا كنت تستخدم MyCustomLog، فسوف ترجع كافة السجلات بـMyCustomLog_CL.

طلبات نموذج

في هذا القسم هي نماذج توضح كيفية إرسال البيانات إلى Azure Monitor HTTP Data Collector API باستخدام لغات برمجة مختلفة.

لكل عينة، تعيين المتغيرات لعنوان التفويض عن طريق القيام بما يلي:

  1. في مدخل Microsoft Azure، حدد موقع مساحة عمل Log Analytics.
  2. حدد Agents.
  3. إلى يمين معرّف مساحة العمل، حدد أيقونة نسخ ثم قم بلصق معرّف كقيمة متغير معرف العميل.
  4. إلى يمين المفتاح الأساسي، حدد أيقونة نسخ ثم قم بلصق معرّف كقيمة متغير المفتاح المشترك.

بدلًا من ذلك، يمكنك تغيير المتغيرات لنوع السجل وبيانات JSON.

# Replace with your Workspace ID
$CustomerId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"  

# Replace with your Primary Key
$SharedKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# Specify the name of the record type that you'll be creating
$LogType = "MyRecordType"

# Optional name of a field that includes the timestamp for the data. If the time field is not specified, Azure Monitor assumes the time is the message ingestion time
$TimeStampField = ""


# Create two records with the same set of properties to create
$json = @"
[{  "StringValue": "MyString1",
    "NumberValue": 42,
    "BooleanValue": true,
    "DateValue": "2019-09-12T20:00:00.625Z",
    "GUIDValue": "9909ED01-A74C-4874-8ABF-D2678E3AE23D"
},
{   "StringValue": "MyString2",
    "NumberValue": 43,
    "BooleanValue": false,
    "DateValue": "2019-09-12T20:00:00.625Z",
    "GUIDValue": "8809ED01-A74C-4874-8ABF-D2678E3AE23D"
}]
"@

# Create the function to create the authorization signature
Function Build-Signature ($customerId, $sharedKey, $date, $contentLength, $method, $contentType, $resource)
{
    $xHeaders = "x-ms-date:" + $date
    $stringToHash = $method + "`n" + $contentLength + "`n" + $contentType + "`n" + $xHeaders + "`n" + $resource

    $bytesToHash = [Text.Encoding]::UTF8.GetBytes($stringToHash)
    $keyBytes = [Convert]::FromBase64String($sharedKey)

    $sha256 = New-Object System.Security.Cryptography.HMACSHA256
    $sha256.Key = $keyBytes
    $calculatedHash = $sha256.ComputeHash($bytesToHash)
    $encodedHash = [Convert]::ToBase64String($calculatedHash)
    $authorization = 'SharedKey {0}:{1}' -f $customerId,$encodedHash
    return $authorization
}

# Create the function to create and post the request
Function Post-LogAnalyticsData($customerId, $sharedKey, $body, $logType)
{
    $method = "POST"
    $contentType = "application/json"
    $resource = "/api/logs"
    $rfc1123date = [DateTime]::UtcNow.ToString("r")
    $contentLength = $body.Length
    $signature = Build-Signature `
        -customerId $customerId `
        -sharedKey $sharedKey `
        -date $rfc1123date `
        -contentLength $contentLength `
        -method $method `
        -contentType $contentType `
        -resource $resource
    $uri = "https://" + $customerId + ".ods.opinsights.azure.com" + $resource + "?api-version=2016-04-01"

    $headers = @{
        "Authorization" = $signature;
        "Log-Type" = $logType;
        "x-ms-date" = $rfc1123date;
        "time-generated-field" = $TimeStampField;
    }

    $response = Invoke-WebRequest -Uri $uri -Method $method -ContentType $contentType -Headers $headers -Body $body -UseBasicParsing
    return $response.StatusCode

}

# Submit the data to the API endpoint
Post-LogAnalyticsData -customerId $customerId -sharedKey $sharedKey -body ([System.Text.Encoding]::UTF8.GetBytes($json)) -logType $logType  

البدائل والاعتبارات

على الرغم من أن Data Collector API يجب أن تغطي معظم احتياجاتك كما يمكنك جمع بيانات النموذج الحر في Azure Logs، قد تحتاج إلى طريقة بديلة للتغلب على بعض قيود API. يتم سرد الخيارات الخاصة بك، بما في ذلك الاعتبارات الرئيسية، في الجدول التالي:

البديل ‏‏الوصف الأنسب لـ
الأحداث المخصصة: الاستيعاب الأصلي المستند إلى SDK في Application Insights Application Insights، عادة ما يكون أداة من خلال SDK داخل التطبيق الخاص بك، يمنحك القدرة على إرسال بيانات مخصصة من خلال الأحداث المخصصة.
  • البيانات التي يتم إنشاؤها داخل التطبيق الخاص بك، ولكن لا يتم التقاطها بواسطة SDK من خلال أحد أنواع البيانات الافتراضية (الطلبات، التبعيات، الاستثناءات، وما إلى ذلك).
  • البيانات التي غالبًا ما ترتبط ببيانات التطبيقات الأخرى في Application Insights.
Data Collector API في سجلات Azure Monitor Data Collector API في سجلات Azure Monitor طريقة مفتوحة تمامًا لاستيعاب البيانات. يمكن إرسال أي بيانات منسقة في كائن JSON إلى هنا. بعد إرسالها، تتم معالجتها وإتاحتها في Monitor Logs ليتم ربطها ببيانات أخرى في Monitor Logs أو مقابل بيانات Application Insights الأخرى.

من السهل إلى حد ما تحميل البيانات كملفات إلى النقطة تخزين Azure Blob، حيث ستتم معالجة الملفات ثم تحميلها إلى Log Analytics. للحصول على نموذج تطبيق، راجع إنشاء بنية أساسية لربط البيانات مع Data Collector API.
  • البيانات التي لا يتم إنشاؤها بالضرورة داخل تطبيق يتم استخدامها في Application Insights.
    وتشمل الأمثلة على ذلك البحث وجداول الحقائق والبيانات المرجعية والإحصاءات المجمعة مسبقًا وما إلى ذلك.
  • البيانات التي سيتم الرجوع إليها مقابل بيانات Azure Monitor الأخرى (Application Insights، وأنواع بيانات سجلات المراقبة الأخرى، و Defender for Cloud، وContainer insights والأجهزة الظاهرية، وما إلى ذلك).
Azure Data Explorer Azure Data Explorer، المتوفر الآن بشكل عام للجمهور، هو نظام البيانات الأساسي الذي يعمل على تشغيل Application Insights Analytics وAzure Monitor Logs. باستخدام النظام الأساسي للبيانات في شكله الخام، لديك مرونة كاملة (ولكن تتطلب الحمل من الإدارة) عبر نظام مجموعة (Kubernetes التحكم في الوصول القائم على الدور (RBAC)، معدل الاحتفاظ، المخطط، وما إلى ذلك). يوفر Azure Data Explorer العديد من خيارات الاستيعاب، بما في ذلك ملفات CSV وTSV وJSON.
  • البيانات التي لن يتم ربطها بأي بيانات أخرى ضمن Application Insights أو Monitor Logs.
  • البيانات التي تتطلب إمكانيات متقدمة للاستيعاب أو المعالجة غير المتوفرة اليوم في Azure Monitor Logs.

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