Instale a biblioteca de cliente do Azure Monitor Ingestion e a biblioteca do Azure Identity. A biblioteca de Identidade do Azure é necessária para a autenticação usada neste exemplo.
Crie as seguintes variáveis de ambiente com valores para seu aplicativo Microsoft Entra. Esses valores são usados por DefaultAzureCredential na biblioteca de Identidade do Azure.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Substitua as variáveis no código de exemplo a seguir por valores do seu DCR. Você também pode querer substituir os dados de exemplo pelos seus.
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);
}
Execute o código e os dados devem chegar ao seu espaço de trabalho do Log Analytics em poucos minutos.
Use go get para instalar os Logs de Ingestão do Azure Monitor e os módulos de cliente do Azure Identity para Go. O módulo Identidade do Azure é necessário para a autenticação usada neste exemplo.
go get github.com/Azure/azure-sdk-for-go/sdk/monitor/ingestion/azlogs
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Crie as seguintes variáveis de ambiente com valores para seu aplicativo Microsoft Entra. Esses valores são usados por DefaultAzureCredential no módulo Identidade do Azure.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Substitua as variáveis no código de exemplo a seguir por valores do seu DCR. Você também pode querer substituir os dados de exemplo pelos seus próprios.
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
}
}
Execute o código e os dados devem chegar ao seu espaço de trabalho do Log Analytics em poucos minutos.
Inclua o pacote de ingestão de logs e o azure-identity pacote da biblioteca de identidades do Azure. A biblioteca de Identidade do Azure é necessária para a autenticação usada neste exemplo.
Crie as seguintes variáveis de ambiente com valores para seu aplicativo Microsoft Entra. Esses valores são usados por DefaultAzureCredential na biblioteca de Identidade do Azure.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Substitua as variáveis no código de exemplo a seguir por valores do seu DCR. Você também pode querer substituir os dados de exemplo pelos seus.
Use npm para instalar as bibliotecas de cliente Azure Monitor Ingestion e Azure Identity para JavaScript. A biblioteca de Identidade do Azure é necessária para a autenticação usada neste exemplo.
Crie as seguintes variáveis de ambiente com valores para seu aplicativo Microsoft Entra. Esses valores são usados por DefaultAzureCredential na biblioteca de Identidade do Azure.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Substitua as variáveis no código de exemplo a seguir por valores do seu DCR. Você também pode querer substituir os dados de exemplo pelos seus próprios.
Execute o código e os dados devem chegar ao seu espaço de trabalho do Log Analytics em poucos minutos.
O código PowerShell a seguir envia dados para o ponto de extremidade usando fundamentos HTTP REST.
Nota
Este exemplo requer o PowerShell v7.0 ou posterior.
Execute o seguinte comando PowerShell de exemplo, que adiciona um assembly necessário para o script.
Add-Type -AssemblyName System.Web
Substitua os parâmetros na seção Etapa 0 por valores do seu aplicativo e DCR. Você também pode querer substituir os dados de exemplo na seção Etapa 2 pelos seus próprios.
### 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
Se você receber um Unable to find type [System.Web.HttpUtility]. erro, execute a última linha na seção 1 do script para uma correção e execute-a. Executá-lo sem comentários como parte do script não resolverá o problema. O comando deve ser executado separadamente.
Execute o script e você verá uma HTTP - 204 resposta. Os dados devem chegar ao seu espaço de trabalho do Log Analytics em poucos minutos.
Use pip para instalar as bibliotecas de cliente do Azure Monitor Ingestion e do Azure Identity para Python. A biblioteca de Identidade do Azure é necessária para a autenticação usada neste exemplo.
Crie as seguintes variáveis de ambiente com valores para seu aplicativo Microsoft Entra. Esses valores são usados por DefaultAzureCredential na biblioteca de Identidade do Azure.
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Substitua as variáveis no código de exemplo a seguir por valores do seu DCR. Você também pode querer substituir os dados de exemplo na seção Etapa 2 pelos seus próprios.
# 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}")
Execute o código e os dados devem chegar ao seu espaço de trabalho do Log Analytics em poucos minutos.
Resolução de Problemas
Esta seção descreve as diferentes condições de erro que você pode receber e como corrigi-las.
O script retorna o código de erro 403
Verifique se você tem as permissões corretas para seu aplicativo para o DCR. Também pode ser necessário aguardar até 30 minutos para que as permissões se propaguem.
O script retorna o código de erro 413 ou aviso de TimeoutExpired com a mensagem ReadyBody_ClientConnectionAbort na resposta
A mensagem é demasiado grande. Atualmente, o tamanho máximo da mensagem é de 1 MB por chamada.
O script retorna o código de erro 429
Os limites da API foram excedidos. Atualmente, os limites estão definidos para 500 MB de dados por minuto para dados compactados e não compactados e 300.000 solicitações por minuto. Tente novamente após a duração listada Retry-After no cabeçalho da resposta.
O script retorna o código de erro 503
Verifique se você tem as permissões corretas para seu aplicativo para o DCR. Também pode ser necessário aguardar até 30 minutos para que as permissões se propaguem.
Você não recebe um erro, mas os dados não aparecem no espaço de trabalho
Os dados podem levar algum tempo para serem ingeridos, especialmente na primeira vez que os dados estão sendo enviados para uma tabela específica. Não deve demorar mais do que 15 minutos.
O IntelliSense no Log Analytics não reconhece a nova tabela
O cache que conduz o IntelliSense pode levar até 24 horas para ser atualizado.