Compartir vía


Código de ejemplo para enviar datos a Azure Monitor mediante la API de ingesta de registros

En este artículo se proporciona código de ejemplo mediante la API de ingesta de registros. Cada ejemplo requiere que se creen los siguientes componentes antes de que se ejecute el código. Consulte Tutorial: Cómo enviar datos a Azure Monitor mediante la API de ingesta de registros (plantillas de Resource Manager) para obtener un tutorial paso a paso sobre cómo crear estos componentes configurados para admitir cada uno de estos ejemplos.

  • Tabla personalizada en un área de trabajo de Log Analytics
  • Regla de recopilación de datos (DCR) para dirigir los datos a la tabla de destino
  • Aplicación Microsoft Entra con acceso a DCR
  • Punto de conexión de recopilación de datos (DCE) si usa vínculo privado. De lo contrario, use el punto de conexión de registros de DCR.

Código de ejemplo

El siguiente script usa la biblioteca cliente de ingesta de Azure Monitor para .NET.

  1. 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.

    dotnet add package Azure.Identity
    dotnet add package Azure.Monitor.Ingestion
    
  2. 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
  3. 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);
    }
    
  4. 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.

Pasos siguientes