Kode sampel untuk mengirim data ke Azure Monitor menggunakan API penyerapan Log

Artikel ini menyediakan kode sampel menggunakan API penyerapan Log. Setiap sampel mengharuskan komponen berikut dibuat sebelum kode dijalankan. Lihat Tutorial: Mengirim data ke Azure Monitor menggunakan API penyerapan Log (templat Resource Manager) untuk panduan lengkap membuat komponen ini yang dikonfigurasi untuk mendukung masing-masing sampel ini.

  • Tabel kustom di ruang kerja Analitik Log
  • Titik akhir pengumpulan data (DCE) untuk menerima data
  • Aturan pengumpulan data (DCR) untuk mengarahkan data ke tabel target
  • Aplikasi Microsoft Entra dengan akses ke DCR

Kode Sampel

Skrip berikut menggunakan pustaka klien Penyerapan Azure Monitor untuk .NET.

  1. Instal pustaka klien Penyerapan Azure Monitor dan pustaka Azure Identity. Pustaka Azure Identity diperlukan untuk autentikasi yang digunakan dalam sampel ini.

    dotnet add package Azure.Identity
    dotnet add package Azure.Monitor.Ingestion
    
  2. Buat variabel lingkungan berikut dengan nilai untuk aplikasi Microsoft Entra Anda. Nilai-nilai ini digunakan oleh DefaultAzureCredential di pustaka Azure Identity.

    • AZURE_TENANT_ID
    • AZURE_CLIENT_ID
    • AZURE_CLIENT_SECRET
  3. Ganti variabel dalam kode sampel berikut dengan nilai dari DCE dan DCR Anda. Anda mungkin juga ingin mengganti data sampel dengan data Anda sendiri.

    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. Jalankan kode, dan data akan tiba di ruang kerja Analitik Log Anda dalam beberapa menit.

Pemecahan Masalah

Bagian ini menjelaskan berbagai kondisi kesalahan yang mungkin Anda terima dan cara memperbaikinya.

Skrip mengembalikan kode kesalahan 403

Pastikan Anda memiliki izin yang benar untuk aplikasi Anda ke DCR. Anda mungkin juga perlu menunggu hingga 30 menit agar izin disebarluaskan.

Skrip mengembalikan kode kesalahan 413 atau peringatan TimeoutExpired dengan pesan ReadyBody_Client Koneksi ionAbort dalam respons

Pesannya terlalu besar. Ukuran pesan maksimum saat ini adalah 1 MB per panggilan.

Skrip mengembalikan kode kesalahan 429

Batas API telah terlampaui. Batas saat ini diatur ke 500 MB data per menit untuk data terkompresi dan tidak dikompresi dan 300.000 permintaan per menit. Coba lagi setelah durasi yang tercantum di header Retry-After dalam respons.

Skrip mengembalikan kode kesalahan 503

Pastikan Anda memiliki izin yang benar untuk aplikasi Anda ke DCR. Anda mungkin juga perlu menunggu hingga 30 menit agar izin disebarluaskan.

Anda tidak menerima kesalahan, tetapi data tidak muncul di ruang kerja

Data mungkin membutuhkan waktu untuk diserap, terutama data pertama kali dikirim ke tabel tertentu. Seharusnya tidak lebih dari 15 menit.

IntelliSense di Analitik Log tidak mengenali tabel baru

Cache yang mendorong IntelliSense mungkin membutuhkan waktu hingga 24 jam untuk diperbarui.

Langkah berikutnya