Share via


Voorbeeldcode voor het verzenden van gegevens naar Azure Monitor met behulp van logboekopname-API

Dit artikel bevat voorbeeldcode met behulp van de API voor logboekopname. Voor elk voorbeeld moeten de volgende onderdelen worden gemaakt voordat de code wordt uitgevoerd. Zie de zelfstudie: Gegevens verzenden naar Azure Monitor met behulp van logboekopname-API (Resource Manager-sjablonen) voor een volledig overzicht van het maken van deze onderdelen die zijn geconfigureerd ter ondersteuning van elk van deze voorbeelden.

  • Aangepaste tabel in een Log Analytics-werkruimte
  • Regel voor gegevensverzameling (DCR) om de gegevens naar de doeltabel te leiden
  • Microsoft Entra-toepassing met toegang tot de DCR
  • Eindpunt voor gegevensverzameling (DCE) als u een privékoppeling gebruikt. Gebruik anders het eindpunt van de DCR-logboeken.

Voorbeeldcode

Het volgende script maakt gebruik van de Azure Monitor Ingestion-clientbibliotheek voor .NET.

  1. Installeer de Azure Monitor Ingestion-clientbibliotheek en de Azure Identity-bibliotheek. De Azure Identity-bibliotheek is vereist voor de verificatie die in dit voorbeeld wordt gebruikt.

    dotnet add package Azure.Identity
    dotnet add package Azure.Monitor.Ingestion
    
  2. Maak de volgende omgevingsvariabelen met waarden voor uw Microsoft Entra-toepassing. Deze waarden worden gebruikt DefaultAzureCredential in de Azure Identity-bibliotheek.

    • AZURE_TENANT_ID
    • AZURE_CLIENT_ID
    • AZURE_CLIENT_SECRET
  3. Vervang de variabelen in de volgende voorbeeldcode door waarden uit uw DCR. U kunt ook de voorbeeldgegevens vervangen door uw eigen voorbeeldgegevens.

    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. Voer de code uit en de gegevens moeten binnen enkele minuten in uw Log Analytics-werkruimte binnenkomen.

Probleemoplossing

In deze sectie worden verschillende foutvoorwaarden beschreven die u mogelijk ontvangt en hoe u deze kunt corrigeren.

Script retourneert foutcode 403

Zorg ervoor dat u de juiste machtigingen voor uw toepassing hebt voor de DCR. Mogelijk moet u maximaal 30 minuten wachten totdat machtigingen zijn doorgegeven.

Script retourneert foutcode 413 of waarschuwing over TimeoutExpired met het bericht ReadyBody_Client Verbinding maken ionAbort in het antwoord

Het bericht is te groot. De maximale berichtgrootte is momenteel 1 MB per aanroep.

Script retourneert foutcode 429

API-limieten zijn overschreden. De limieten zijn momenteel ingesteld op 500 MB aan gegevens per minuut voor zowel gecomprimeerde als niet-gecomprimeerde gegevens en 300.000 aanvragen per minuut. Probeer het opnieuw na de duur die wordt vermeld in de Retry-After koptekst in het antwoord.

Script retourneert foutcode 503

Zorg ervoor dat u de juiste machtigingen voor uw toepassing hebt voor de DCR. Mogelijk moet u maximaal 30 minuten wachten totdat machtigingen zijn doorgegeven.

Er wordt geen fout weergegeven, maar er worden geen gegevens weergegeven in de werkruimte

Het kan even duren voordat de gegevens worden opgenomen, met name de eerste keer dat gegevens naar een bepaalde tabel worden verzonden. Het duurt niet langer dan 15 minuten.

IntelliSense in Log Analytics herkent de nieuwe tabel niet

Het kan tot 24 uur duren voordat de cache die IntelliSense aanstuurt, is bijgewerkt.

Volgende stappen