Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo fornisce codice di esempio usando l'API di inserimento dei log. Per ogni esempio è necessario creare i componenti seguenti prima dell'esecuzione del codice. Vedere Esercitazione: Inviare dati a Monitoraggio di Azure usando l'API di inserimento dei log (modelli di Resource Manager) per una procedura dettagliata completa sulla creazione di questi componenti configurati per supportare ognuno di questi esempi.
- Tabella personalizzata in un'area di lavoro di Log Analytics
- Regola di raccolta dati (DCR) per indirizzare i dati alla tabella di destinazione
- Applicazione Microsoft Entra con accesso alla DCR
- Endpoint di raccolta dati (DCE) se si usa un collegamento privato. In caso contrario, usare l'endpoint dei log DCR.
Codice di esempio
Lo script seguente usa la libreria client per l'inserimento di Azure Monitor per .NET.
Installare la libreria client di Azure Monitor Ingestion e la libreria client di Azure Identity. La libreria di identità di Azure è necessaria per l'autenticazione usata in questo esempio.
dotnet add package Azure.Identity dotnet add package Azure.Monitor.Ingestion
Creare le variabili di ambiente seguenti con i valori per l'applicazione Microsoft Entra. Questi valori vengono usati da
DefaultAzureCredential
nella libreria di identità di Azure.AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
Sostituire le variabili nel codice di esempio seguente con i valori del tuo DCR. È anche possibile sostituire i dati di esempio con i propri.
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 LogsIngestionClient(endpoint, credential);
DateTime currentTime = DateTime.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
{
// ===== START: Use this block of code to upload compressed data
byte[] dataBytes = data.ToArray();
string contentEncoding = "gzip"; // Specify gzip if the content is already compressed
using (MemoryStream memoryStream = new MemoryStream())
{
using (GZipStream gzipStream = new GZipStream(memoryStream, CompressionMode.Compress))
{
gzipStream.Write(dataBytes, 0, dataBytes.Length);
}
byte[] gzipBytes = memoryStream.ToArray();
var response = await client.UploadAsync(ruleId, streamName, RequestContent.Create(gzipBytes), contentEncoding).ConfigureAwait(false);
if (response.IsError)
{
throw new Exception(response.ToString());
}
}
// ===== End: code block to upload compressed data
//** ===== START: Use this block of code to upload uncompressed data.
var response = await client.UploadAsync(ruleId, streamName, RequestContent.Create(data)).ConfigureAwait(false);
if (response.IsError)
{
throw new Exception(response.ToString());
}
//** ===== End: code block to upload uncompressed data.
}
catch (Exception ex)
{
Console.WriteLine("Upload failed with Exception: " + ex.Message);
}
- Eseguire il codice; i dati dovrebbero arrivare nell'area di lavoro di Log Analytics entro pochi minuti.
Risoluzione dei problemi
In questa sezione vengono descritte le diverse condizioni di errore che è possibile ricevere e come correggerle.
Errore | Descrizione |
---|---|
Codice errore 403 | Assicurati di avere le autorizzazioni corrette per la tua applicazione al DCR. Potrebbe anche essere necessario attendere fino a 30 minuti per la propagazione delle autorizzazioni. |
Codice di errore 413 o avviso di TimeoutExpired con il messaggio ReadyBody_ClientConnectionAbort nella risposta |
Il messaggio è troppo grande. La dimensione massima del messaggio è attualmente di 1 MB per ogni chiamata. |
Codice errore 429 | Sono stati superati i limiti delle API. I limiti sono attualmente impostati su 500 MB di dati al minuto per dati compressi e non compressi e 300.000 richieste al minuto. Riprovare dopo la durata elencata nell'intestazione Retry-After nella risposta. |
Nessun dato | L'inserimento dei dati potrebbe richiedere del tempo, in particolare la prima volta che i dati vengono inviati a una determinata tabella. Non dovrebbero essere necessari più di 15 minuti. |
IntelliSense in Log Analytics non riconosce la nuova tabella. | L'aggiornamento della cache che gestisce IntelliSense potrebbe richiedere fino a 24 ore. |