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.
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(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);
}
Kör koden och data ska komma till Log Analytics-arbetsytan inom några minuter.
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.
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.
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.
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.
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.
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.
Kommentar
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 = "00000000-0000-0000-00000000000000000" #Tenant ID the data collection endpoint resides in
$appId = " 000000000-0000-0000-00000000000000000" #Application ID created and granted permissions
$appSecret = "0000000000000000000000000000000000000000" #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
Kommentar
Om du får ett Unable to find type [System.Web.HttpUtility]. fel kör du den sista raden i avsnitt 1 i skriptet för en korrigering och kör 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.
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.
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.
Skript returnerar felkod 403
Kontrollera att du har rätt behörigheter för ditt program till DCR. Du kan också behöva vänta upp till 30 minuter innan behörigheter sprids.
Skriptet returnerar felkod 413 eller varning om TimeoutExpired med meddelandet ReadyBody_ClientConnectionAbort i svaret
Meddelandet är för stort. Den maximala meddelandestorleken är för närvarande 1 MB per anrop.
Skriptet returnerar 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 Retry-After som anges i rubriken i svaret.
Skriptet returnerar felkoden 503
Kontrollera att du har rätt behörigheter för ditt program till DCR. Du kan också behöva vänta upp till 30 minuter innan behörigheter sprids.
Du får inget fel, men data visas inte på arbetsytan
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.