نموذج التعليمات البرمجية لإرسال البيانات إلى Azure Monitor باستخدام واجهة برمجة تطبيقات استيعاب السجلات

توفر هذه المقالة نموذج التعليمات البرمجية باستخدام واجهة برمجة تطبيقات استيعاب السجلات. يتطلب كل نموذج إنشاء المكونات التالية قبل تشغيل التعليمات البرمجية. راجع البرنامج التعليمي: إرسال البيانات إلى Azure Monitor باستخدام واجهة برمجة تطبيقات استيعاب السجلات (قوالب Resource Manager) للحصول على معاينة كاملة لإنشاء هذه المكونات المكونة لدعم كل عينة من هذه العينات.

  • جدول مخصص في مساحة عمل Log Analytics
  • قاعدة جمع البيانات (DCR) لتوجيه البيانات إلى الجدول الهدف
  • تطبيق Microsoft Entra مع الوصول إلى DCR
  • نقطة نهاية جمع البيانات (DCE) إذا كنت تستخدم رابطا خاصا. وإلا، استخدم نقطة نهاية سجلات DCR.

التعليمة البرمجية العينة

يستخدم البرنامج النصي التالي مكتبة عميل Azure Monitor Ingestion ل .NET.

  1. تثبيت مكتبة عميل Azure Monitor Ingestion ومكتبة Azure Identity. مكتبة هوية Azure مطلوبة للمصادقة المستخدمة في هذا النموذج.

    dotnet add package Azure.Identity
    dotnet add package Azure.Monitor.Ingestion
    
  2. إنشاء متغيرات البيئة التالية مع قيم لتطبيق Microsoft Entra الخاص بك. يتم استخدام هذه القيم من قبل DefaultAzureCredential في مكتبة Azure Identity.

    • AZURE_TENANT_ID
    • AZURE_CLIENT_ID
    • AZURE_CLIENT_SECRET
  3. استبدل المتغيرات في نموذج التعليمات البرمجية التالي بقيم من DCR الخاص بك. قد تحتاج أيضا إلى استبدال نموذج البيانات بالبيانات الخاصة بك.

    using Azure;
    using Azure.Core;
    using Azure.Identity;
    using Azure.Monitor.Ingestion;
    
    // Initialize variables
    var endpoint = new Uri("https://logs-ingestion-rzmk.eastus2-1.ingest.monitor.azure.com");
    var ruleId = "dcr-00000000000000000000000000000000";
    var streamName = "Custom-MyTableRawData";
    
    // Create credential and client
    var credential = new DefaultAzureCredential();
    LogsIngestionClient client = new(endpoint, credential);
    
    DateTimeOffset currentTime = DateTimeOffset.UtcNow;
    
    // Use BinaryData to serialize instances of an anonymous type into JSON
    BinaryData data = BinaryData.FromObjectAsJson(
        new[] {
            new
            {
                Time = currentTime,
                Computer = "Computer1",
                AdditionalContext = new
                {
                    InstanceName = "user1",
                    TimeZone = "Pacific Time",
                    Level = 4,
                    CounterName = "AppMetric1",
                    CounterValue = 15.3
                }
            },
            new
            {
                Time = currentTime,
                Computer = "Computer2",
                AdditionalContext = new
                {
                    InstanceName = "user2",
                    TimeZone = "Central Time",
                    Level = 3,
                    CounterName = "AppMetric1",
                    CounterValue = 23.5
                }
            },
        });
    
    // Upload logs
    try
    {
        Response response = client.Upload(ruleId, streamName, RequestContent.Create(data));
    }
    catch (Exception ex)
    {
        Console.WriteLine("Upload failed with Exception " + ex.Message);
    }
    
    // Logs can also be uploaded in a List
    var entries = new List<Object>();
    for (int i = 0; i < 10; i++)
    {
        entries.Add(
            new {
                Time = recordingNow,
                Computer = "Computer" + i.ToString(),
                AdditionalContext = i
            }
        );
    }
    
    // Make the request
    LogsUploadOptions options = new LogsUploadOptions();
    bool isTriggered = false;
    options.UploadFailed += Options_UploadFailed;
    await client.UploadAsync(TestEnvironment.DCRImmutableId, TestEnvironment.StreamName, entries, options).ConfigureAwait(false);
    
    Task Options_UploadFailed(LogsUploadFailedEventArgs e)
    {
        isTriggered = true;
        Console.WriteLine(e.Exception);
        foreach (var log in e.FailedLogs)
        {
            Console.WriteLine(log);
        }
        return Task.CompletedTask;
    }
    
  4. قم بتنفيذ التعليمات البرمجية، ويجب أن تصل البيانات إلى مساحة عمل Log Analytics في غضون بضع دقائق.

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

يصف هذا القسم حالات الخطأ المختلفة التي قد تتلقاها وكيفية تصحيحها.

البرنامج النصي يرجع رمز الخطأ 403

تأكد من أن لديك الأذونات الصحيحة لتطبيقك إلى DCR. قد تحتاج أيضا إلى الانتظار لمدة تصل إلى 30 دقيقة حتى يتم نشر الأذونات.

يقوم البرنامج النصي بإرجاع رمز الخطأ 413 أو تحذير من TimeoutExpired مع الرسالة ReadyBody_Client الاتصال ionAbort في الاستجابة

الرسالة كبيرة جداً. يبلغ الحد الأقصى لحجم الرسالة حاليا 1 ميغابايت لكل مكالمة.

البرنامج النصي يرجع رمز الخطأ 429

تم تجاوز حدود معدل واجهة برمجة التطبيقات. يتم تعيين الحدود حاليا إلى 500 ميغابايت من البيانات في الدقيقة لكل من البيانات المضغوطة وغير المضغوطة و300000 طلب في الدقيقة. أعِد المحاولة بعد المدة المدرجة في العنوان Retry-After في الاستجابة.

البرنامج النصي يرجع رمز الخطأ 503

تأكد من أن لديك الأذونات الصحيحة لتطبيقك إلى DCR. قد تحتاج أيضا إلى الانتظار لمدة تصل إلى 30 دقيقة حتى يتم نشر الأذونات.

لا تتلقى خطأ، ولكن البيانات لا تظهر في مساحة العمل

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

لا يتعرف IntelliSense في Log Analytics على الجدول الجديد

قد يستغرق تحديث ذاكرة التخزين المؤقت التي تقود IntelliSense ما يصل إلى 24 ساعة.

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