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.
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
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(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);
}
Führen Sie den Code aus, und die Daten sollten innerhalb weniger Minuten in Ihrem Log Analytics-Arbeitsbereich eintreffen.
Verwenden Sie go get, um die Clientmodule für die Azure Monitor-Erfassungsprotokolle und Azure-Identität für Go zu installieren. Das Azure-Identitätsmodul ist für die in diesem Beispiel verwendete Authentifizierung erforderlich.
go get github.com/Azure/azure-sdk-for-go/sdk/monitor/ingestion/azlogs
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Erstellen Sie die folgenden Umgebungsvariablen mit Werten für Ihre Microsoft Entra-Anwendung. Diese Werte werden von DefaultAzureCredential im Azure-Identitätsmodul verwendet.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Ersetzen Sie die Variablen im folgenden Beispielcode mit Werten aus Ihrem DCR. Vielleicht möchten Sie auch die Beispieldaten mit Ihren eigenen Daten ersetzen.
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
}
}
Führen Sie den Code aus, und die Daten sollten innerhalb weniger Minuten in Ihrem Log Analytics-Arbeitsbereich eintreffen.
Schließen Sie das Protokollerfassungspaket und das azure-identity-Paket aus der Azure Identity-Bibliothek ein. Die Azure Identity-Bibliothek ist für die in diesem Beispiel verwendete Authentifizierung erforderlich.
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
Ersetzen Sie die Variablen im folgenden Beispielcode mit Werten aus Ihrem DCR. Vielleicht wollen Sie auch die Beispieldaten mit Ihren eigenen Daten ersetzen.
Verwenden Sie npm, um die Azure Monitor-Erfassungs- und Azure Identity-Clientbibliotheken für JavaScript zu installieren. Die Azure Identity-Bibliothek ist für die in diesem Beispiel verwendete Authentifizierung erforderlich.
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
Ersetzen Sie die Variablen im folgenden Beispielcode mit Werten aus Ihrem DCR. Vielleicht möchten Sie auch die Beispieldaten mit Ihren eigenen Daten ersetzen.
Führen Sie den Code aus, und die Daten sollten innerhalb weniger Minuten in Ihrem Log Analytics-Arbeitsbereich eintreffen.
Durch den folgenden PowerShell-Code werden Daten mithilfe von HTTP-REST-Methoden an den Endpunkt gesendet.
Hinweis
Dieses Beispiel erfordert PowerShell v7.0 oder höher.
Führen Sie den folgenden PowerShell-Beispielbefehl aus, durch den eine erforderliche Assembly für das Skript hinzugefügt wird.
Add-Type -AssemblyName System.Web
Ersetzen Sie die Parameter im Abschnitt Schritt 0 mit Werten aus Ihrer Anwendung, Ihrem DCR. Vielleicht möchten Sie auch die Beispieldaten im Abschnitt Schritt 2 durch Ihre eigenen Daten ersetzen.
### 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
Hinweis
Wenn Sie einen Fehler vom Typ Unable to find type [System.Web.HttpUtility]. erhalten, führen Sie die letzte Zeile in Abschnitt 1 des Skripts aus, um den Fehler zu korrigieren. Wenn sie im Rahmen des Skripts ohne Auskommentierung ausgeführt wird, wird das Problem nicht behoben. Der Befehl muss separat ausgeführt werden.
Führen Sie das Skript aus, und Sie sollten eine HTTP - 204-Antwort sehen. Die Daten sollten innerhalb weniger Minuten in Ihrem Log Analytics-Arbeitsbereich eintreffen.
Verwenden Sie pip, um die Azure Monitor-Erfassungs- und Azure Identity-Clientbibliotheken für Python zu installieren. Die Azure Identity-Bibliothek ist für die in diesem Beispiel verwendete Authentifizierung erforderlich.
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
Ersetzen Sie die Variablen im folgenden Beispielcode mit Werten aus Ihrem DCR. Vielleicht möchten Sie auch die Beispieldaten im Abschnitt Schritt 2 durch Ihre eigenen Daten ersetzen.
# 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}")
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.
Rückgabe des Fehlercodes 403 durch das Skript
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.
Rückgabe des Fehlercodes 413 oder einer Warnung TimeoutExpired mit der Meldung „ReadyBody_ClientConnectionAbort“ in der Antwort durch das Skript
Die Nachricht ist zu lang. Die maximale Nachrichtengröße beträgt derzeit 1 MB pro Aufruf.
Rückgabe des Fehlercodes 429 durch das Skript
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.
Rückgabe des Fehlercodes 503 durch das Skript
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.
Sie erhalten keinen Fehler, aber Daten werden nicht im Arbeitsbereich angezeigt
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.
Die neue Tabelle wird von IntelliSense in Log Analytics nicht erkannt
Die Aktualisierung des Caches, auf dem IntelliSense basiert, kann bis zu 24 Stunden dauern.