Installeer de Azure Monitor Ingestion-clientbibliotheek en de Azure Identity-bibliotheek. De Azure Identity-bibliotheek is vereist voor de verificatie die in dit voorbeeld wordt gebruikt.
Maak de volgende omgevingsvariabelen met waarden voor uw Microsoft Entra-toepassing. Deze waarden worden gebruikt DefaultAzureCredential in de Azure Identity-bibliotheek.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Vervang de variabelen in de volgende voorbeeldcode door waarden uit uw DCR. U kunt ook de voorbeeldgegevens vervangen door uw eigen voorbeeldgegevens.
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);
}
Voer de code uit en de gegevens moeten binnen enkele minuten in uw Log Analytics-werkruimte binnenkomen.
Gebruik go get dit om de Azure Monitor-opnamelogboeken en Azure Identity-clientmodules voor Go te installeren. De Azure Identity-module is vereist voor de verificatie die in dit voorbeeld wordt gebruikt.
go get github.com/Azure/azure-sdk-for-go/sdk/monitor/ingestion/azlogs
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Maak de volgende omgevingsvariabelen met waarden voor uw Microsoft Entra-toepassing. Deze waarden worden gebruikt DefaultAzureCredential in de Azure Identity-module.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Vervang de variabelen in de volgende voorbeeldcode door waarden uit uw DCR. Mogelijk wilt u de voorbeeldgegevens ook vervangen door uw eigen voorbeeldgegevens.
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
}
}
Voer de code uit en de gegevens moeten binnen enkele minuten in uw Log Analytics-werkruimte binnenkomen.
Neem het logboekopnamepakket en het azure-identity pakket op uit de Azure Identity-bibliotheek. De Azure Identity-bibliotheek is vereist voor de verificatie die in dit voorbeeld wordt gebruikt.
Maak de volgende omgevingsvariabelen met waarden voor uw Microsoft Entra-toepassing. Deze waarden worden gebruikt DefaultAzureCredential in de Azure Identity-bibliotheek.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Vervang de variabelen in de volgende voorbeeldcode door waarden uit uw DCR. U kunt ook de voorbeeldgegevens vervangen door uw eigen voorbeeldgegevens.
Gebruik npm om de Azure Monitor-opname- en Azure Identity-clientbibliotheken voor JavaScript te installeren. De Azure Identity-bibliotheek is vereist voor de verificatie die in dit voorbeeld wordt gebruikt.
Maak de volgende omgevingsvariabelen met waarden voor uw Microsoft Entra-toepassing. Deze waarden worden gebruikt DefaultAzureCredential in de Azure Identity-bibliotheek.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Vervang de variabelen in de volgende voorbeeldcode door waarden uit uw DCR. Mogelijk wilt u de voorbeeldgegevens ook vervangen door uw eigen voorbeeldgegevens.
Voer de code uit en de gegevens moeten binnen enkele minuten in uw Log Analytics-werkruimte binnenkomen.
Met de volgende PowerShell-code worden gegevens naar het eindpunt verzonden met behulp van de basisprincipes van HTTP REST.
Notitie
Voor dit voorbeeld is PowerShell v7.0 of hoger vereist.
Voer de volgende PowerShell-voorbeeldopdracht uit, waarmee een vereiste assembly voor het script wordt toegevoegd.
Add-Type -AssemblyName System.Web
Vervang de parameters in de sectie Stap 0 door waarden uit uw toepassing en DCR. U kunt ook de voorbeeldgegevens in de sectie Stap 2 vervangen door uw eigen voorbeeldgegevens.
### 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
Notitie
Als u een Unable to find type [System.Web.HttpUtility]. fout ontvangt, voert u de laatste regel uit in sectie 1 van het script voor een oplossing en voert u deze uit. Als u de opmerking ongedaan maakt als onderdeel van het script, wordt het probleem niet opgelost. De opdracht moet afzonderlijk worden uitgevoerd.
Voer het script uit en u ziet een HTTP - 204 antwoord. De gegevens moeten binnen enkele minuten binnenkomen in uw Log Analytics-werkruimte.
Gebruik pip om de Azure Monitor-opname- en Azure Identity-clientbibliotheken voor Python te installeren. De Azure Identity-bibliotheek is vereist voor de verificatie die in dit voorbeeld wordt gebruikt.
Maak de volgende omgevingsvariabelen met waarden voor uw Microsoft Entra-toepassing. Deze waarden worden gebruikt DefaultAzureCredential in de Azure Identity-bibliotheek.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Vervang de variabelen in de volgende voorbeeldcode door waarden uit uw DCR. U kunt ook de voorbeeldgegevens in de sectie Stap 2 vervangen door uw eigen voorbeeldgegevens.
# 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}")
Voer de code uit en de gegevens moeten binnen enkele minuten in uw Log Analytics-werkruimte binnenkomen.
Probleemoplossing
In deze sectie worden verschillende foutvoorwaarden beschreven die u mogelijk ontvangt en hoe u deze kunt corrigeren.
Script retourneert foutcode 403
Zorg ervoor dat u de juiste machtigingen voor uw toepassing hebt voor de DCR. Mogelijk moet u maximaal 30 minuten wachten totdat machtigingen zijn doorgegeven.
Script retourneert foutcode 413 of waarschuwing over TimeoutExpired met het bericht ReadyBody_ClientConnectionAbort in het antwoord
Het bericht is te groot. De maximale berichtgrootte is momenteel 1 MB per aanroep.
Script retourneert foutcode 429
API-limieten zijn overschreden. De limieten zijn momenteel ingesteld op 500 MB aan gegevens per minuut voor zowel gecomprimeerde als niet-gecomprimeerde gegevens en 300.000 aanvragen per minuut. Probeer het opnieuw na de duur die wordt vermeld in de Retry-After koptekst in het antwoord.
Script retourneert foutcode 503
Zorg ervoor dat u de juiste machtigingen voor uw toepassing hebt voor de DCR. Mogelijk moet u maximaal 30 minuten wachten totdat machtigingen zijn doorgegeven.
Er wordt geen fout weergegeven, maar er worden geen gegevens weergegeven in de werkruimte
Het kan even duren voordat de gegevens worden opgenomen, met name de eerste keer dat gegevens naar een bepaalde tabel worden verzonden. Het duurt niet langer dan 15 minuten.
IntelliSense in Log Analytics herkent de nieuwe tabel niet
Het kan tot 24 uur duren voordat de cache die IntelliSense aanstuurt, is bijgewerkt.