Mintakód, amely adatokat küld az Azure Monitornak a Logs ingestion API használatával

Ez a cikk a Logs ingestion API használatával tartalmaz mintakódot. Minden minta esetében a kód futtatása előtt létre kell hozni a következő összetevőket. Tekintse meg az oktatóanyagot: Adatok küldése az Azure Monitorba a Logs ingestion API(Resource Manager-sablonok) használatával, amely részletesen ismerteti az egyes minták támogatásához konfigurált összetevők létrehozását.

  • Egyéni tábla egy Log Analytics-munkaterületen
  • Adatgyűjtési végpont (DCE) az adatok fogadásához
  • Adatgyűjtési szabály (DCR) az adatok céltáblához való irányításához
  • Microsoft Entra-alkalmazás a DCR-hez való hozzáféréssel

Mintakód

Az alábbi szkript az Azure Monitor Betöltési ügyfélkódtárat használja a .NET-hez.

  1. Telepítse az Azure Monitor Betöltési ügyfélkódtárat és az Azure Identity-kódtárat. A mintában használt hitelesítéshez az Azure Identity-kódtár szükséges.

    dotnet add package Azure.Identity
    dotnet add package Azure.Monitor.Ingestion
    
  2. Hozza létre a következő környezeti változókat a Microsoft Entra-alkalmazás értékeivel. Ezeket az értékeket az Azure Identity-kódtár használja DefaultAzureCredential .

    • AZURE_TENANT_ID
    • AZURE_CLIENT_ID
    • AZURE_CLIENT_SECRET
  3. Cserélje le a következő mintakód változóit a DCE és a DCR értékeire. A mintaadatokat a saját adataira is lecserélheti.

    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. Hajtsa végre a kódot, és az adatoknak néhány percen belül meg kell érkeznie a Log Analytics-munkaterületre.

Hibaelhárítás

Ez a szakasz a különböző hibaüzeneteket ismerteti, és ismerteti, hogyan javíthatja ki őket.

A szkript a 403-os hibakódot adja vissza

Győződjön meg arról, hogy rendelkezik a megfelelő engedélyekkel az alkalmazáshoz a DCR-hez. Előfordulhat, hogy akár 30 percet is várnia kell az engedélyek propagálására.

A szkript a TimeoutExpired 413-ás hibakódot adja vissza a válaszban ReadyBody_Client Csatlakozás ionAbort üzenettel

Az üzenet túl nagy. Az üzenet maximális mérete hívásonként jelenleg 1 MB.

A szkript a 429-ik hibakódot adja vissza

Túllépték az API-korlátokat. A korlátok jelenleg percenként 500 MB adatra vannak beállítva tömörített és tömörítetlen adatok, valamint 300 000 kérés percenként. Próbálkozzon újra a válasz fejlécében Retry-After szereplő időtartam után.

A szkript az 503-os hibakódot adja vissza

Győződjön meg arról, hogy rendelkezik a megfelelő engedélyekkel az alkalmazáshoz a DCR-hez. Előfordulhat, hogy akár 30 percet is várnia kell az engedélyek propagálására.

Nem kap hibát, de az adatok nem jelennek meg a munkaterületen

Az adatok betöltése eltarthat egy ideig, különösen az első alkalommal, amikor az adatok egy adott táblába kerülnek. Nem tart tovább 15 percnél.

Az IntelliSense a Log Analyticsben nem ismeri fel az új táblát

Az IntelliSense-t meghajtó gyorsítótár frissítése akár 24 órát is igénybe vehet.

Következő lépések