Zainstaluj bibliotekę klienta pozyskiwania usługi Azure Monitor i bibliotekę tożsamości platformy Azure. Biblioteka tożsamości platformy Azure jest wymagana do uwierzytelniania używanego w tym przykładzie.
Utwórz następujące zmienne środowiskowe z wartościami dla aplikacji Firmy Microsoft Entra. Te wartości są używane w DefaultAzureCredential bibliotece tożsamości platformy Azure.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Zastąp zmienne w poniższym przykładowym kodzie wartościami z kontrolera DOMENY. Możesz również zastąpić przykładowe dane własnymi.
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);
}
Wykonaj kod, a dane powinny zostać dostarczone do obszaru roboczego usługi Log Analytics w ciągu kilku minut.
Użyj go get polecenia , aby zainstalować dzienniki pozyskiwania usługi Azure Monitor i moduły klienta tożsamości platformy Azure dla języka Go. Moduł Azure Identity jest wymagany do uwierzytelniania używanego w tym przykładzie.
go get github.com/Azure/azure-sdk-for-go/sdk/monitor/ingestion/azlogs
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Utwórz następujące zmienne środowiskowe z wartościami dla aplikacji Firmy Microsoft Entra. Te wartości są używane w DefaultAzureCredential module Azure Identity.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Zastąp zmienne w poniższym przykładowym kodzie wartościami z kontrolera DOMENY. Możesz również zastąpić przykładowe dane własnymi.
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
}
}
Wykonaj kod, a dane powinny zostać dostarczone do obszaru roboczego usługi Log Analytics w ciągu kilku minut.
Dołącz pakiet pozyskiwania dzienników i azure-identity pakiet z biblioteki tożsamości platformy Azure. Biblioteka tożsamości platformy Azure jest wymagana do uwierzytelniania używanego w tym przykładzie.
Utwórz następujące zmienne środowiskowe z wartościami dla aplikacji Firmy Microsoft Entra. Te wartości są używane w DefaultAzureCredential bibliotece tożsamości platformy Azure.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Zastąp zmienne w poniższym przykładowym kodzie wartościami z kontrolera DOMENY. Możesz również zastąpić przykładowe dane własnymi.
Użyj narzędzia npm , aby zainstalować biblioteki klienta usługi Azure Monitor i tożsamości platformy Azure dla języka JavaScript. Biblioteka tożsamości platformy Azure jest wymagana do uwierzytelniania używanego w tym przykładzie.
Utwórz następujące zmienne środowiskowe z wartościami dla aplikacji Firmy Microsoft Entra. Te wartości są używane w DefaultAzureCredential bibliotece tożsamości platformy Azure.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Zastąp zmienne w poniższym przykładowym kodzie wartościami z kontrolera DOMENY. Możesz również zastąpić przykładowe dane własnymi.
Wykonaj kod, a dane powinny zostać dostarczone do obszaru roboczego usługi Log Analytics w ciągu kilku minut.
Poniższy kod programu PowerShell wysyła dane do punktu końcowego przy użyciu podstaw rest protokołu HTTP.
Uwaga
Ten przykład wymaga programu PowerShell w wersji 7.0 lub nowszej.
Uruchom następujące przykładowe polecenie programu PowerShell, które dodaje wymagany zestaw dla skryptu.
Add-Type -AssemblyName System.Web
Zastąp parametry w sekcji Krok 0 wartościami z aplikacji i dcR. Możesz również zastąpić przykładowe dane w sekcji Krok 2 własnymi.
### 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
Uwaga
Jeśli wystąpi Unable to find type [System.Web.HttpUtility]. błąd, uruchom ostatni wiersz w sekcji 1 skryptu w celu naprawienia i wykonaj go. Wykonanie go bez komentarza w ramach skryptu nie rozwiąże problemu. Polecenie musi być wykonywane oddzielnie.
Wykonaj skrypt i powinna zostać wyświetlona HTTP - 204 odpowiedź. Dane powinny zostać dostarczone do obszaru roboczego usługi Log Analytics w ciągu kilku minut.
Użyj narzędzia , aby zainstalować biblioteki klienta usługi Azure Monitor i tożsamości platformy Azure dla języka Python. Biblioteka tożsamości platformy Azure jest wymagana do uwierzytelniania używanego w tym przykładzie.
Utwórz następujące zmienne środowiskowe z wartościami dla aplikacji Firmy Microsoft Entra. Te wartości są używane w DefaultAzureCredential bibliotece tożsamości platformy Azure.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Zastąp zmienne w poniższym przykładowym kodzie wartościami z kontrolera DOMENY. Możesz również zastąpić przykładowe dane w sekcji Krok 2 własnymi.
# 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}")
Wykonaj kod, a dane powinny zostać dostarczone do obszaru roboczego usługi Log Analytics w ciągu kilku minut.
Rozwiązywanie problemów
W tej sekcji opisano różne warunki błędu, które mogą zostać odebrane i jak je poprawić.
Skrypt zwraca kod błędu 403
Upewnij się, że masz odpowiednie uprawnienia dla aplikacji do kontrolera domeny. Może być również konieczne odczekanie do 30 minut, zanim uprawnienia będą propagowane.
Skrypt zwraca kod błędu 413 lub ostrzeżenie timeoutExpired z komunikatem ReadyBody_ClientConnectionAbort w odpowiedzi
Komunikat jest za duży. Maksymalny rozmiar komunikatu wynosi obecnie 1 MB na wywołanie.
Skrypt zwraca kod błędu 429
Przekroczono limity interfejsu API. Limity są obecnie ustawione na 500 MB danych na minutę dla skompresowanych i nieskompresowanych danych oraz 300 000 żądań na minutę. Ponów próbę po upływie czasu trwania wymienionego w nagłówku Retry-After w odpowiedzi.
Skrypt zwraca kod błędu 503
Upewnij się, że masz odpowiednie uprawnienia dla aplikacji do kontrolera domeny. Może być również konieczne odczekanie do 30 minut, zanim uprawnienia będą propagowane.
Nie otrzymujesz błędu, ale dane nie są wyświetlane w obszarze roboczym
Pozyskiwanie danych może zająć trochę czasu, zwłaszcza gdy dane są wysyłane po raz pierwszy do określonej tabeli. Nie powinno to trwać dłużej niż 15 minut.
Funkcja IntelliSense w usłudze Log Analytics nie rozpoznaje nowej tabeli
Aktualizacja pamięci podręcznej obsługującej funkcję IntelliSense może potrwać do 24 godzin.