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.
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
 
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 
 
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);
}
- Kör koden och data ska komma till Log Analytics-arbetsytan inom några minuter.
 
Följande exempelkod använder klientmodulen Azure Monitor Ingestion Logs för Go.
Använd go get för att installera Azure Monitor-inmatningsloggar och Azure Identity-klientmoduler för Go. Azure Identity-modulen krävs för den autentisering som används i det här exemplet.
go get github.com/Azure/azure-sdk-for-go/sdk/monitor/ingestion/azlogs
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
 
Skapa följande miljövariabler med värden för ditt Microsoft Entra-program. Dessa värden används av DefaultAzureCredential i Azure Identity-modulen.
AZURE_TENANT_ID 
AZURE_CLIENT_ID 
AZURE_CLIENT_SECRET 
 
Ersätt variablerna i följande exempelkod med värden från din DCR. Du kanske också vill ersätta exempeldata med dina egna.
package main
import (
    "context"
    "encoding/json"
    "strconv"
    "time" 
    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    "github.com/Azure/azure-sdk-for-go/sdk/monitor/ingestion/azlogs"
)
// logs ingestion URI 
const endpoint = "https://my-url.monitor.azure.com"
// data collection rule (DCR) immutable ID
const ruleID = "dcr-00000000000000000000000000000000"
// stream name in the DCR that represents the destination table
const streamName = "Custom-MyTableRawData"                 
type Computer struct {
    Time              time.Time
    Computer          string
    AdditionalContext string
}
func main() {
    // creating the client using DefaultAzureCredential
    cred, err := azidentity.NewDefaultAzureCredential(nil)
    if err != nil {
        //TODO: handle error
    }
    client, err := azlogs.NewClient(endpoint, cred, nil)
    if err != nil {
        //TODO: handle error
    }
    // generating logs
    // logs should match the schema defined by the provided stream
    var data []Computer
    for i := 0; i < 10; i++ {
        data = append(data, Computer{
            Time:              time.Now().UTC(),
            Computer:          "Computer" + strconv.Itoa(i),
            AdditionalContext: "context",
        })
    }
    // marshal data into []byte
    logs, err := json.Marshal(data)
    if err != nil {
        panic(err)
    }
    // upload logs
    _, err = client.Upload(context.TODO(), ruleID, streamName, logs, nil)
    if err != nil {
        //TODO: handle error
    }
}
 
Kör koden och data ska komma till Log Analytics-arbetsytan inom några minuter.
 
Följande exempelkod använder Azure Monitor Ingestion-klientbiblioteket för Java.
Inkludera logginmatningspaketet och azure-identity paketet från Azure Identity-biblioteket. Azure Identity-biblioteket krävs för den autentisering som används i det här exemplet.
<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-monitor-ingestion</artifactId>
    <version>{get-latest-version}</version>    
<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity</artifactId>
    <version>{get-latest-version}</version>
</dependency>
 
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 
 
Ersätt variablerna i följande exempelkod med värden från din DCR. Du kanske också vill ersätta exempeldata med dina egna.
import com.azure.identity.DefaultAzureCredentialBuilder; 
import com.azure.monitor.ingestion.models.LogsUploadException;
import java.time.OffsetDateTime; 
import java.util.Arrays; 
import java.util.List; 
public class LogsUploadSample {
    public static void main(String[] args) { 
        LogsIngestionClient client = new LogsIngestionClientBuilder()
            .endpoint("https://my-url.monitor.azure.com") 
            .credential(new DefaultAzureCredentialBuilder().build()) 
            .buildClient(); 
        List<Object> dataList = Arrays.asList( 
            new Object() { 
                OffsetDateTime time = OffsetDateTime.now(); 
                String computer = "Computer1"; 
                Object additionalContext = new Object() { 
                    String instanceName = "user4"; 
                    String timeZone = "Pacific Time"; 
                    int level = 4; 
                    String counterName = "AppMetric1"; 
                    double counterValue = 15.3; 
                }; 
            }, 
            new Object() { 
                OffsetDateTime time = OffsetDateTime.now(); 
                String computer = "Computer2"; 
                Object additionalContext = new Object() { 
                    String instanceName = "user2"; 
                    String timeZone = "Central Time"; 
                    int level = 3; 
                    String counterName = "AppMetric2"; 
                    double counterValue = 43.5; 
                }; 
            }); 
        try { 
            client.upload("dcr-00000000000000000000000000000000", "Custom-MyTableRawData", dataList);  
            System.out.println("Logs uploaded successfully"); 
        } catch (LogsUploadException exception) { 
            System.out.println("Failed to upload logs "); 
            exception.getLogsUploadErrors() 
                .forEach(httpError -> System.out.println(httpError.getMessage())); 
        } 
    }
}
 
Kör koden och data ska komma till Log Analytics-arbetsytan inom några minuter.
 
Följande exempelkod använder Azure Monitor Ingestion-klientbiblioteket för JavaScript.
Använd npm för att installera Azure Monitor-inmatning och Azure Identity-klientbibliotek för JavaScript. Azure Identity-biblioteket krävs för den autentisering som används i det här exemplet.
npm install --save @azure/monitor-ingestion
npm install --save @azure/identity
 
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 
 
Ersätt variablerna i följande exempelkod med värden från din DCR. Du kanske också vill ersätta exempeldata med dina egna.
const { DefaultAzureCredential } = require("@azure/identity");
const { LogsIngestionClient, isAggregateLogsUploadError } = require("@azure/monitor-ingestion");
require("dotenv").config();
async function main() {
  const logsIngestionEndpoint = "https://my-url.monitor.azure.com";
  const ruleId = "dcr-00000000000000000000000000000000";
  const streamName = "Custom-MyTableRawData";
  const credential = new DefaultAzureCredential();
  const client = new LogsIngestionClient(logsIngestionEndpoint, credential);
  const logs = [
    {
      Time: "2021-12-08T23:51:14.1104269Z",
      Computer: "Computer1",
      AdditionalContext: {
          "InstanceName": "user1",
          "TimeZone": "Pacific Time",
          "Level": 4,
          "CounterName": "AppMetric2",
          "CounterValue": 35.3    
      }
    },
    {
      Time: "2021-12-08T23:51:14.1104269Z",
      Computer: "Computer2",
      AdditionalContext: {
          "InstanceName": "user2",
          "TimeZone": "Pacific Time",
          "Level": 4,
          "CounterName": "AppMetric2",
          "CounterValue": 43.5    
      }
    },
  ];
  try{
    await client.upload(ruleId, streamName, logs);
  }
  catch(e){
    let aggregateErrors = isAggregateLogsUploadError(e) ? e.errors : [];
    if (aggregateErrors.length > 0) {
      console.log("Some logs have failed to complete ingestion");
      for (const error of aggregateErrors) {
        console.log(`Error - ${JSON.stringify(error.cause)}`);
        console.log(`Log - ${JSON.stringify(error.failedLogs)}`);
      }
    } else {
      console.log(e);
    }
  }
}
main().catch((err) => {
  console.error("The sample encountered an error:", err);
  process.exit(1);
});
 
Kör koden och data ska komma till Log Analytics-arbetsytan inom några minuter.
 
Följande PowerShell-kod skickar data till slutpunkten med hjälp av HTTP REST-grunderna.
Anteckning
Det här exemplet kräver PowerShell v7.0 eller senare.
 
Kör följande PowerShell-exempelkommando, som lägger till en obligatorisk sammansättning för skriptet.
Add-Type -AssemblyName System.Web
 
Ersätt parametrarna i avsnittet Steg 0 med värden från ditt program och DCR. Du kanske också vill ersätta exempeldata i avsnittet Steg 2 med dina egna.
### Step 0: Set variables required for the rest of the script.
# information needed to authenticate to AAD and obtain a bearer token
$tenantId = "aaaabbbb-0000-cccc-1111-dddd2222eeee" #Tenant ID the data collection endpoint resides in
$appId = "00001111-aaaa-2222-bbbb-3333cccc4444" #Application ID created and granted permissions
$appSecret = "Aa1Bb~2Cc3.-Dd4Ee5Ff6Gg7Hh8Ii9_Jj0Kk1Ll2" #Secret created for the application
# information needed to send data to the DCR endpoint
$endpoint_uri = "https://my-url.monitor.azure.com" #Logs ingestion URI for the DCR
$dcrImmutableId = "dcr-00000000000000000000000000000000" #the immutableId property of the DCR object
$streamName = "Custom-MyTableRawData" #name of the stream in the DCR that represents the destination table
### Step 1: Obtain a bearer token used later to authenticate against the DCR.
$scope= [System.Web.HttpUtility]::UrlEncode("https://monitor.azure.com//.default")   
$body = "client_id=$appId&scope=$scope&client_secret=$appSecret&grant_type=client_credentials";
$headers = @{"Content-Type"="application/x-www-form-urlencoded"};
$uri = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token"
$bearerToken = (Invoke-RestMethod -Uri $uri -Method "Post" -Body $body -Headers $headers).access_token
### Step 2: Create some sample data. 
$currentTime = Get-Date ([datetime]::UtcNow) -Format O
$staticData = @"
[
{
    "Time": "$currentTime",
    "Computer": "Computer1",
    "AdditionalContext": {
        "InstanceName": "user1",
        "TimeZone": "Pacific Time",
        "Level": 4,
        "CounterName": "AppMetric1",
        "CounterValue": 15.3    
    }
},
{
    "Time": "$currentTime",
    "Computer": "Computer2",
    "AdditionalContext": {
        "InstanceName": "user2",
        "TimeZone": "Central Time",
        "Level": 3,
        "CounterName": "AppMetric1",
        "CounterValue": 23.5     
    }
}
]
"@;
### Step 3: Send the data to the Log Analytics workspace.
$body = $staticData;
$headers = @{"Authorization"="Bearer $bearerToken";"Content-Type"="application/json"};
$uri = "$endpoint_uri/dataCollectionRules/$dcrImmutableId/streams/$($streamName)?api-version=2023-01-01"
$uploadResponse = Invoke-RestMethod -Uri $uri -Method "Post" -Body $body -Headers $headers
Anteckning
Om du får ett Unable to find type [System.Web.HttpUtility].-fel, kör den sista raden i avsnitt 1 i skriptet för att lösa problemet och exekvera den. Om du kör den okommenterad som en del av skriptet löser det inte problemet. Kommandot måste köras separat.
 
 
Kör skriptet så bör du se ett HTTP - 204 svar. Data bör tas emot på Log Analytics-arbetsytan inom några minuter.
 
Följande exempelkod använder Azure Monitor Ingestion-klientbiblioteket för Python.
Använd pip för att installera Azure Monitor-inmatning och Azure Identity-klientbibliotek för Python. Azure Identity-biblioteket krävs för den autentisering som används i det här exemplet.
pip install azure-monitor-ingestion
pip install azure-identity
 
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 
 
Ersätt variablerna i följande exempelkod med värden från din DCR. Du kanske också vill ersätta exempeldata i avsnittet Steg 2 med dina egna.
# information needed to send data to the DCR endpoint
endpoint_uri = "https://my-url.monitor.azure.com" # logs ingestion endpoint of the DCR
dcr_immutableid = "dcr-00000000000000000000000000000000" # immutableId property of the Data Collection Rule
stream_name = "Custom-MyTableRawData" #name of the stream in the DCR that represents the destination table
# Import required modules
import os
from azure.identity import DefaultAzureCredential
from azure.monitor.ingestion import LogsIngestionClient
from azure.core.exceptions import HttpResponseError
credential = DefaultAzureCredential()
client = LogsIngestionClient(endpoint=endpoint_uri, credential=credential, logging_enable=True)
body = [
        {
        "Time": "2023-03-12T15:04:48.423211Z",
        "Computer": "Computer1",
            "AdditionalContext": {
                "InstanceName": "user1",
                "TimeZone": "Pacific Time",
                "Level": 4,
                "CounterName": "AppMetric2",
                "CounterValue": 35.3    
            }
        },
        {
            "Time": "2023-03-12T15:04:48.794972Z",
            "Computer": "Computer2",
            "AdditionalContext": {
                "InstanceName": "user2",
                "TimeZone": "Central Time",
                "Level": 3,
                "CounterName": "AppMetric2",
                "CounterValue": 43.5     
            }
        }
    ]
try:
    client.upload(rule_id=dcr_immutableid, stream_name=stream_name, logs=body)
except HttpResponseError as e:
    print(f"Upload failed: {e}")
 
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