Aracılığıyla paylaş


Günlük alımı API'sini kullanarak Azure İzleyici'ye veri göndermek için örnek kod

Bu makalede Günlük alımı API'sini kullanarak örnek kod sağlanır. Her örnek, kod çalıştırılmadan önce aşağıdaki bileşenlerin oluşturulmasını gerektirir. Bu örneklerin her birini destekleyecek şekilde yapılandırılmış bu bileşenleri oluşturmanın tam kılavuzu için bkz . Öğretici: Günlük alımı API'sini (Resource Manager şablonları) kullanarak Azure İzleyici'ye veri gönderme.

  • Log Analytics çalışma alanında özel tablo
  • Verileri hedef tabloya yönlendirmek için veri toplama kuralı (DCR)
  • DCR'ye erişimi olan Microsoft Entra uygulaması
  • Özel bağlantı kullanıyorsanız veri toplama uç noktası (DCE). Aksi takdirde DCR günlükleri uç noktasını kullanın.

Örnek kod

Aşağıdaki betik, .NET için Azure İzleyici Alımı istemci kitaplığını kullanır.

  1. Azure İzleyici Alma istemci kitaplığını ve Azure Kimlik kitaplığını yükleyin. Bu örnekte kullanılan kimlik doğrulaması için Azure Kimlik kitaplığı gereklidir.

    dotnet add package Azure.Identity
    dotnet add package Azure.Monitor.Ingestion
    
  2. Microsoft Entra uygulamanızın değerleriyle aşağıdaki ortam değişkenlerini oluşturun. Bu değerler Tarafından DefaultAzureCredential Azure Kimlik kitaplığında kullanılır.

    • AZURE_TENANT_ID
    • AZURE_CLIENT_ID
    • AZURE_CLIENT_SECRET
  3. Aşağıdaki örnek koddaki değişkenleri DCR'nizdeki değerlerle değiştirin. Örnek verileri kendi verilerinizle de değiştirmek isteyebilirsiniz.

    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. Kodu yürütür ve veriler birkaç dakika içinde Log Analytics çalışma alanınıza ulaşır.

Sorun giderme

Bu bölümde, alabileceğiniz farklı hata koşulları ve bunların nasıl düzeltebileceği açıklanmaktadır.

Betik 403 hata kodunu döndürür

Uygulamanız için DCR'ye doğru izinlere sahip olduğunuzdan emin olun. İzinlerin yayılması için 30 dakikaya kadar beklemeniz de gerekebilir.

Betik, yanıtta ReadyBody_ClientConnectionAbort iletiyle birlikte 413 hata kodunu veya TimeoutExpired uyarısını döndürür

İleti çok büyük. Maksimum ileti boyutu şu anda çağrı başına 1 MB'tır.

Betik 429 hata kodunu döndürür

API sınırları aşıldı. Sınırlar şu anda hem sıkıştırılmış hem de sıkıştırılmamış veriler ve dakikada 300.000 istek için dakikada 500 MB veriye ayarlanmıştır. Yanıttaki üst bilgide listelenen sürenin Retry-After sonunda yeniden deneyin.

Betik 503 hata kodunu döndürür

Uygulamanız için DCR'ye doğru izinlere sahip olduğunuzdan emin olun. İzinlerin yayılması için 30 dakikaya kadar beklemeniz de gerekebilir.

Hata almazsınız, ancak veriler çalışma alanında görünmez

Verilerin alınması biraz zaman alabilir, özellikle de veriler belirli bir tabloya ilk kez gönderiliyordur. 15 dakikadan uzun sürmemelidir.

Log Analytics'teki IntelliSense yeni tabloyu tanımıyor

IntelliSense'i yönlendiren önbelleğin güncelleştirilmiş olması 24 saate kadar sürebilir.

Sonraki adımlar