Instale la biblioteca cliente de ingesta de Azure Monitor y la biblioteca de Azure Identity. La biblioteca de Azure Identity es necesaria para la autenticación que se usa en este ejemplo.
Cree las siguientes variables de entorno con valores para la aplicación Microsoft Entra. DefaultAzureCredential usa estos valores en la biblioteca de Azure Identity.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Reemplace las variables en el código de ejemplo siguiente por los valores de DCR. También puede sustituir los datos de muestra por los suyos propios.
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);
}
Ejecute el código y los datos deben llegar al área de trabajo de Log Analytics en unos minutos.
Use go get para instalar los módulos cliente de registros de ingesta de Azure Monitor y Azure Identity para Go. El módulo de Azure Identity es necesario para la autenticación que se usa en este ejemplo.
go get github.com/Azure/azure-sdk-for-go/sdk/monitor/ingestion/azlogs
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Cree las siguientes variables de entorno con valores para la aplicación Microsoft Entra. DefaultAzureCredential usa estos valores en el módulo de Azure Identity.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Reemplace las variables en el código de ejemplo siguiente por los valores de DCR. También puede sustituir los datos de muestra por los suyos propios.
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
}
}
Ejecute el código y los datos deben llegar al área de trabajo de Log Analytics en unos minutos.
Incluya el paquete de ingesta de registros y el paquete azure-identity de la biblioteca de Azure Identity. La biblioteca de Azure Identity es necesaria para la autenticación que se usa en este ejemplo.
Cree las siguientes variables de entorno con valores para la aplicación Microsoft Entra. DefaultAzureCredential usa estos valores en la biblioteca de Azure Identity.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Reemplace las variables en el código de ejemplo siguiente por los valores de DCR. También puede sustituir los datos de muestra por los suyos propios.
Use npm para instalar las bibliotecas cliente de ingesta de Azure Monitor y Azure Identity para JavaScript. La biblioteca de Azure Identity es necesaria para la autenticación que se usa en este ejemplo.
Cree las siguientes variables de entorno con valores para la aplicación Microsoft Entra. DefaultAzureCredential usa estos valores en la biblioteca de Azure Identity.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Reemplace las variables en el código de ejemplo siguiente por los valores de DCR. También puede sustituir los datos de muestra por los suyos propios.
Ejecute el código y los datos deben llegar al área de trabajo de Log Analytics en unos minutos.
El siguiente código de PowerShell envía datos al punto de conexión con los fundamentos de REST de HTTP.
Nota:
Este ejemplo requiere PowerShell v7.0 o posterior.
Ejecute el siguiente comando de PowerShell de ejemplo, que agrega un ensamblado necesario para el script.
Add-Type -AssemblyName System.Web
Reemplace los parámetros de la sección Paso 0 por valores de la aplicación, y DCR. También puede reemplazar los datos de ejemplo de la sección Paso 2 por los suyos propios.
### 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
Nota
Si recibe un error Unable to find type [System.Web.HttpUtility]., ejecute la última línea de la sección 1 del script para corregirlo. Si se ejecuta sin comentario como parte del script, no se resolverá el problema. El comando debe ejecutarse por separado.
Ejecute el script y debería ver una respuesta HTTP - 204. Los datos deben llegar al área de trabajo de Log Analytics en unos minutos.
Use pip para instalar las bibliotecas cliente de ingesta de Azure Monitor y Azure Identity para Python. La biblioteca de Azure Identity es necesaria para la autenticación que se usa en este ejemplo.
Cree las siguientes variables de entorno con valores para la aplicación Microsoft Entra. DefaultAzureCredential usa estos valores en la biblioteca de Azure Identity.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Reemplace las variables en el código de ejemplo siguiente por los valores de DCR. También puede reemplazar los datos de ejemplo de la sección Paso 2 por los suyos propios.
# 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}")
Ejecute el código y los datos deben llegar al área de trabajo de Log Analytics en unos minutos.
Solución de problemas
En esta sección se describen las distintas condiciones de error que podría recibir y cómo corregirlas.
El script devuelve el código de error 403
Asegúrese de que tiene los permisos correctos para la aplicación en la regla de recopilación de datos. Es posible que tenga que esperar hasta 30 minutos para que los permisos se propaguen.
El script devuelve el código de error 413 o la advertencia TimeoutExpired con el mensaje ReadyBody_ClientConnectionAbort en la respuesta
El mensaje es demasiado grande. El tamaño máximo del mensaje es actualmente de 1 MB por llamada.
El script devuelve el código de error 429
Se han superado los límites de la API. Los límites están establecidos actualmente en 500 MB de datos por minuto para los datos comprimidos y sin comprimir, y 300 000 solicitudes por minuto. Vuelva a intentarlo después de la duración indicada en el encabezado Retry-After de la respuesta.
El script devuelve el código de error 503
Asegúrese de que tiene los permisos correctos para la aplicación en la regla de recopilación de datos. Es posible que tenga que esperar hasta 30 minutos para que los permisos se propaguen.
No recibe un error, pero los datos no aparecen en el área de trabajo
Los datos podrían tardar algún tiempo en ingerirse, especialmente si es la primera vez que se envían datos a una tabla determinada. No debería tardar más de 15 minutos.
IntelliSense de Log Analytics no reconoce la nueva tabla
La caché que dirige IntelliSense puede tardar hasta 24 horas en actualizarse.