Freigeben über


Beispielcode zum Senden von Daten an Azure Monitor mithilfe der Protokollerfassungs-API

Dieser Artikel enthält Beispielcode für die Verwendung der Protokollerfassungs-API. Für jedes Beispiel müssen die folgenden Komponenten erstellt werden, bevor der Code ausgeführt wird. Eine vollständige Vorgehensweise zum Erstellen dieser Komponenten, die zur Unterstützung jedes dieser Beispiele konfiguriert sind, finden Sie unter Tutorial: Senden von Daten an Azure Monitor mithilfe der Protokollerfassungs-API (Resource Manager-Vorlagen).

  • Benutzerdefinierte Tabelle in einem Log Analytics-Arbeitsbereich
  • Datensammlungsregel (Data Collection Rule, DCR), um die Daten an die Zieltabelle zu leiten
  • Microsoft Entra-Anwendung mit Zugriff auf den DCR
  • Datensammlungsendpunkt (DATA Collection Endpoint, DCE), wenn Sie einen privaten Link verwenden. Verwenden Sie andernfalls den DCR-Protokollendpunkt.

Beispielcode

Der folgende Beispielcode verwendet die Azure Monitor-Erfassungsclientbibliothek für .Net.

  1. Installieren Sie die Azure Monitor-Erfassungsclientbibliothek und die Azure Identity-Bibliothek. Die Azure Identity-Bibliothek ist für die in diesem Beispiel verwendete Authentifizierung erforderlich.

    dotnet add package Azure.Identity
    dotnet add package Azure.Monitor.Ingestion
    
  2. Erstellen Sie die folgenden Umgebungsvariablen mit Werten für Ihre Microsoft Entra-Anwendung. Diese Werte werden von DefaultAzureCredential in der Azure Identity-Bibliothek verwendet.

    • AZURE_TENANT_ID
    • AZURE_CLIENT_ID
    • AZURE_CLIENT_SECRET
  3. Ersetzen Sie die Variablen im folgenden Beispielcode mit Werten aus Ihrem DCR. Vielleicht wollen Sie auch die Beispieldaten mit Ihren eigenen Daten ersetzen.

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 LogsIngestionClient(endpoint, credential);

DateTime currentTime = DateTime.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
{
   // ===== START: Use this block of code to upload compressed data
   byte[] dataBytes = data.ToArray();
   
   string contentEncoding = "gzip"; // Specify gzip if the content is already compressed

   using (MemoryStream memoryStream = new MemoryStream())
   {
    using (GZipStream gzipStream = new GZipStream(memoryStream, CompressionMode.Compress))
    {
       gzipStream.Write(dataBytes, 0, dataBytes.Length);
    }
    byte[] gzipBytes = memoryStream.ToArray();

    var response = await client.UploadAsync(ruleId, streamName, RequestContent.Create(gzipBytes), contentEncoding).ConfigureAwait(false);
    if (response.IsError)
    {
       throw new Exception(response.ToString());
    }
   }
   // ===== End: code block to upload compressed data
 
   //** ===== START: Use this block of code to upload uncompressed data.
   var response = await client.UploadAsync(ruleId, streamName, RequestContent.Create(data)).ConfigureAwait(false);
   if (response.IsError)
   {
    throw new Exception(response.ToString());
   }
   //** ===== End: code block to upload uncompressed data.

}
catch (Exception ex)
{
    Console.WriteLine("Upload failed with Exception: " + ex.Message);
}
  1. Führen Sie den Code aus, und die Daten sollten innerhalb weniger Minuten in Ihrem Log Analytics-Arbeitsbereich eintreffen.

Problembehandlung

In diesem Abschnitt werden verschiedene Fehlerbedingungen, die auftreten können, und deren Behebung beschrieben.

Fehler Description
Fehlercode 403 Vergewissern Sie sich, dass Sie über die richtigen Berechtigungen für Ihre Anwendung für die DCR verfügen. Sie müssen u. U. auch bis zu 30 Minuten warten, bis Berechtigungen weitergegeben werden.
Fehlercode 413 oder Warnung TimeoutExpired mit der Nachricht ReadyBody_ClientConnectionAbort in der Antwort Die Nachricht ist zu lang. Die maximale Nachrichtengröße beträgt derzeit 1 MB pro Aufruf.
Fehlercode RecordsTimeRangeIsMoreThan30Minutes Dies ist eine bekannte Einschränkung , die entfernt wird. Diese Einschränkung gilt nicht für Hilfsprotokolle, die Transformationen verwenden.
Fehlercode 429 Die API-Grenzwerte wurden überschritten. Die Grenzwerte sind derzeit auf 500 MB Daten pro Minute für komprimierte und nicht komprimierte Daten sowie auf 300.000 Anforderungen pro Minute festgelegt. Wiederholen Sie den Vorgang nach der Zeitspanne, die im Retry-After-Header in der Antwort aufgeführt wird.
Keine Daten Die Erfassung der Daten kann einige Zeit dauern, insbesondere wenn sie erstmalig an eine bestimmte Tabelle gesendet werden. Dieser Vorgang sollte jedoch nicht länger als 15 Minuten dauern.
IntelliSense in Log Analytics erkennt die neue Tabelle nicht. Die Aktualisierung des Caches, auf dem IntelliSense basiert, kann bis zu 24 Stunden dauern.

Nächste Schritte