Codice di esempio per inviare dati a Monitoraggio di Azure usando l'API di inserimento dei log

Questo articolo fornisce codice di esempio usando l'API di inserimento dei log. Per ogni esempio è necessario creare i componenti seguenti prima dell'esecuzione del codice. Vedere Esercitazione: Inviare dati a Monitoraggio di Azure usando l'API di inserimento dei log (modelli di Resource Manager) per una procedura dettagliata completa sulla creazione di questi componenti configurati per supportare ognuno di questi esempi.

  • Tabella personalizzata in un'area di lavoro di Log Analytics
  • Regola di raccolta dati (DCR) per indirizzare i dati alla tabella di destinazione
  • Applicazione Microsoft Entra con accesso alla DCR
  • Endpoint di raccolta dati (DCE) se si usa un collegamento privato. In caso contrario, usare l'endpoint dei log DCR.

Codice di esempio

Lo script seguente usa la libreria client di inserimento di Monitoraggio di Azure per .NET.

  1. Installare la libreria client di inserimento di Monitoraggio di Azure e la libreria di identità di Azure. La libreria di identità di Azure è necessaria per l'autenticazione usata in questo esempio.

    dotnet add package Azure.Identity
    dotnet add package Azure.Monitor.Ingestion
    
  2. Creare le variabili di ambiente seguenti con i valori per l'applicazione Microsoft Entra. Questi valori vengono usati da DefaultAzureCredential nella libreria di identità di Azure.

    • AZURE_TENANT_ID
    • AZURE_CLIENT_ID
    • AZURE_CLIENT_SECRET
  3. Sostituire le variabili nel codice di esempio seguente con i valori di DCR. È anche possibile sostituire i dati di esempio con i propri.

    using Azure;
    using Azure.Core;
    using Azure.Identity;
    using Azure.Monitor.Ingestion;
    
    // Initialize variables
    var endpoint = new Uri("https://my-url.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
    {
        var response = await client.UploadAsync(ruleId, streamName, RequestContent.Create(data)).ConfigureAwait(false);
        if (response.IsError)
        {
            throw new Exception(response.ToString());
        }
    
        Console.WriteLine("Log upload completed using content upload");
    }
    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 = currentTime,
                Computer = "Computer" + i.ToString(),
                AdditionalContext = new
                {
                    InstanceName = "user" + i.ToString(),
                    TimeZone = "Central Time",
                    Level = 3,
                    CounterName = "AppMetric1" + i.ToString(),
                    CounterValue = i
                }
            }
        );
    }
    
    // Make the request
    try
    {
        var response = await client.UploadAsync(ruleId, streamName, entries).ConfigureAwait(false);
        if (response.IsError)
        {
            throw new Exception(response.ToString());
        }
    
        Console.WriteLine("Log upload completed using list of entries");
    }
    catch (Exception ex)
    {
        Console.WriteLine("Upload failed with Exception: " + ex.Message);
    }
    
  4. Eseguire il codice; i dati dovrebbero arrivare nell'area di lavoro di Log Analytics entro pochi minuti.

Risoluzione dei problemi

In questa sezione vengono descritte le diverse condizioni di errore che è possibile ricevere e come correggerle.

Lo script restituisce il codice di errore 403

Assicurarsi di disporre delle autorizzazioni corrette per l'applicazione nella DCR. Potrebbe anche essere necessario attendere fino a 30 minuti per la propagazione delle autorizzazioni.

Lo script restituisce il codice di errore 413 o l'avviso TimeoutExpired con il messaggio ReadyBody_ClientConnectionAbort nella risposta

Il messaggio è troppo grande. La dimensione massima del messaggio è attualmente di 1 MB per ogni chiamata.

Lo script restituisce il codice di errore 429

Sono stati superati i limiti delle API. I limiti sono attualmente impostati su 500 MB di dati al minuto per dati compressi e non compressi e 300.000 richieste al minuto. Riprovare dopo la durata elencata nell'intestazione Retry-After nella risposta.

Lo script restituisce il codice di errore 503

Assicurarsi di disporre delle autorizzazioni corrette per l'applicazione nella DCR. Potrebbe anche essere necessario attendere fino a 30 minuti per la propagazione delle autorizzazioni.

Non viene visualizzato un errore, ma i dati non vengono visualizzati nell'area di lavoro

L'inserimento dei dati potrebbe richiedere del tempo, in particolare la prima volta che i dati vengono inviati a una determinata tabella. Non dovrebbero essere necessari più di 15 minuti.

IntelliSense in Log Analytics non riconosce la nuova tabella

L'aggiornamento della cache che gestisce IntelliSense potrebbe richiedere fino a 24 ore.

Passaggi successivi