Dela via


Exempelkod för att skicka data till Azure Monitor med hjälp av API för logginmatning

Den här artikeln innehåller exempelkod med hjälp av API:et för logginmatning. Varje exempel kräver att följande komponenter skapas innan koden körs. Se Självstudie: Skicka data till Azure Monitor med hjälp av API för logginmatning (Resource Manager-mallar) för en fullständig genomgång av hur du skapar dessa komponenter som konfigurerats för att stödja vart och ett av dessa exempel.

  • Anpassad tabell på en Log Analytics-arbetsyta
  • Datainsamlingsregel (DCR) för att dirigera data till måltabellen
  • Microsoft Entra-program med åtkomst till DCR
  • Datainsamlingsslutpunkt (DCE) om du använder en privat länk. Annars använder du DCR-loggarnas slutpunkt.

Exempelkod

Följande skript använder Azure Monitor Ingestion-klientbiblioteket för .NET.

  1. Installera Azure Monitor Ingestion-klientbiblioteket och Azure Identity-biblioteket. Azure Identity-biblioteket krävs för den autentisering som används i det här exemplet.

    dotnet add package Azure.Identity
    dotnet add package Azure.Monitor.Ingestion
    
  2. Skapa följande miljövariabler med värden för ditt Microsoft Entra-program. Dessa värden används av DefaultAzureCredential i Azure Identity-biblioteket.

    • AZURE_TENANT_ID
    • AZURE_CLIENT_ID
    • AZURE_CLIENT_SECRET
  3. Ersätt variablerna i följande exempelkod med värden från din DCR. Du kanske också vill ersätta exempeldata med dina egna.

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. Kör koden och data ska komma till Log Analytics-arbetsytan inom några minuter.

Felsökning

I det här avsnittet beskrivs olika feltillstånd som du kan få och hur du korrigerar dem.

Fel Beskrivning
Felkod 403 Kontrollera att du har rätt behörigheter för ditt program för DCR. Du kan också behöva vänta upp till 30 minuter för att behörigheter ska slås igenom.
Felkod 413 eller varning för TimeoutExpired med meddelandet ReadyBody_ClientConnectionAbort i svaret Meddelandet är för stort. Den maximala meddelandestorleken är för närvarande 1 MB per anrop.
Felkod RecordsTimeRangeIsMoreThan30Minutes Det här är en känd begränsning som tas bort. Den här begränsningen gäller inte för hjälploggar som använder transformeringar.
Felkod 429 API-gränserna har överskridits. Gränserna är för närvarande inställda på 500 MB data per minut för både komprimerade och okomprimerade data och 300 000 begäranden per minut. Försök igen efter varaktigheten som anges i rubriken i svaret Retry-After.
Inga data Det kan ta lite tid att mata in data, särskilt första gången data skickas till en viss tabell. Det bör inte ta längre tid än 15 minuter.
IntelliSense i Log Analytics känner inte igen den nya tabellen. Cacheminnet som driver IntelliSense kan ta upp till 24 timmar att uppdatera.

Nästa steg