Installez la bibliothèque de client d’ingestion Azure Monitor et la bibliothèque d’identité Azure. La bibliothèque Azure Identity est requise pour l’authentification utilisée dans cet exemple.
Créez les variables d’environnement suivantes avec des valeurs pour votre application Microsoft Entra. Ces valeurs sont utilisées par DefaultAzureCredential dans la bibliothèque Azure Identity.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Remplacez les variables de l’exemple de code suivant par les valeurs de votre DCR. Vous voudrez sûrement remplacer l’échantillon de donnée avec le votre.
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);
}
Exécuter le code et les données doivent arriver dans votre espace de travail Log Analytics en quelques minutes.
Utilisez go get pour installer les modules Journaux d’ingestion Azure Monitor et Client Azure Identity pour Go. Le module Azure Identity est requise pour l’authentification utilisée dans cet exemple.
go get github.com/Azure/azure-sdk-for-go/sdk/monitor/ingestion/azlogs
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Créez les variables d’environnement suivantes avec des valeurs pour votre application Microsoft Entra. Ces valeurs sont utilisées par DefaultAzureCredential dans le module Azure Identity.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Remplacez les variables de l’exemple de code suivant par les valeurs de votre DCR. Vous pouvez également envisager de remplacer l’échantillon de donnée avec le votre.
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
}
}
Exécuter le code et les données doivent arriver dans votre espace de travail Log Analytics en quelques minutes.
Incluez le package d’ingestion des journaux et le azure-identity package de la bibliothèque Azure Identity. La bibliothèque Azure Identity est requise pour l’authentification utilisée dans cet exemple.
Créez les variables d’environnement suivantes avec des valeurs pour votre application Microsoft Entra. Ces valeurs sont utilisées par DefaultAzureCredential dans la bibliothèque Azure Identity.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Remplacez les variables de l’exemple de code suivant par les valeurs de votre DCR. Vous voudrez sûrement remplacer l’échantillon de donnée avec le votre.
Utilisez npm pour installer les bibliothèques clientes Azure Monitor Ingestion et Azure Identity pour JavaScript. La bibliothèque Azure Identity est requise pour l’authentification utilisée dans cet exemple.
Créez les variables d’environnement suivantes avec des valeurs pour votre application Microsoft Entra. Ces valeurs sont utilisées par DefaultAzureCredential dans la bibliothèque Azure Identity.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Remplacez les variables de l’exemple de code suivant par les valeurs de votre DCR. Vous pouvez également envisager de remplacer l’échantillon de donnée avec le votre.
Exécuter le code et les données doivent arriver dans votre espace de travail Log Analytics en quelques minutes.
Le code PowerShell suivant envoie des données au point de terminaison en utilisant les principes de base HTTP REST.
Notes
Cet exemple nécessite PowerShell v7.0 ou version ultérieure.
Exécutez l’échantillon de commande PowerShell suivante qui ajoute un assembly nécessaire pour le script.
Add-Type -AssemblyName System.Web
Remplacez les paramètres de la section Étape 0 par les valeurs de votre application et de votre DCR. Vous pouvez également remplacer les exemples de données de la section Étape 2 par vos propres données.
### 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
Notes
Si une erreur Unable to find type [System.Web.HttpUtility]. s’affiche, exécutez la dernière ligne de la section 1 du script pour la corriger, puis exécutez-le. Son exécution sans commentaires dans le cadre du script ne résout pas le problème. La commande doit être exécutée séparément.
Exécutez le script et vous devriez voir une HTTP - 204 réponse. Les données doivent arriver dans votre espace de travail Log Analytics en quelques minutes.
Utilisez pip pour installer les bibliothèques clientes Azure Monitor Ingestion et Azure Identity pour Python. La bibliothèque Azure Identity est requise pour l’authentification utilisée dans cet exemple.
Créez les variables d’environnement suivantes avec des valeurs pour votre application Microsoft Entra. Ces valeurs sont utilisées par DefaultAzureCredential dans la bibliothèque Azure Identity.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Remplacez les variables de l’exemple de code suivant par les valeurs de votre DCR. Vous pouvez également remplacer les exemples de données de la section Étape 2 par vos propres données.
# 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}")
Exécuter le code et les données doivent arriver dans votre espace de travail Log Analytics en quelques minutes.
Dépannage
Cette section décrit différentes conditions d’erreur que vous pouvez recevoir et explique comment les résoudre.
Le script renvoie le code d’erreur 403
Assurez-vous que vous disposez des autorisations appropriées pour votre application pour la règle DCR. Vous devrez peut-être également attendre jusqu’à 30 minutes pour que les autorisations se propagent.
Le script retourne le code d’erreur 413 ou l’avertissement TimeoutExpired avec le message ReadyBody_ClientConnectionAbort dans la réponse
Le message est trop volumineux. La taille de message maximale est actuellement de 1 Mo par appel.
Le script renvoie le code d’erreur 429
Les limites de débit de l’API ont été dépassées. Les limites sont actuellement définies sur 500 Mo de données par minute, pour les données compressées et non compressées, et sur 300 000 demandes par minute. Réessayez après la durée indiquée dans l’en-tête Retry-After de la réponse.
Le script renvoie le code d’erreur 503
Assurez-vous que vous disposez des autorisations appropriées pour votre application pour la règle DCR. Vous devrez peut-être également attendre jusqu’à 30 minutes pour que les autorisations se propagent.
Vous ne recevez pas d’erreur, mais les données ne s’affichent pas dans l’espace de travail
L’ingestion des données peut prendre un certain temps, surtout en cas d’envoi de données à une table particulière pour la première fois. Cette opération ne doit pas durer plus de 15 minutes.
Dans Log Analytics, IntelliSense ne reconnaît pas la nouvelle table
La mise à jour du cache qui pilote IntelliSense peut prendre jusqu’à 24 heures.