Aracılığıyla paylaş


Azure İzleyici OpenTelemetry'yi yapılandırma

Bu kılavuz, Azure Monitor OpenTelemetry dağıtımını kullanarak Azure Monitor Application Insights'ta OpenTelemetry (OTel) yapılandırmanın nasıl yapılacağını açıklamaktadır. Uygun yapılandırma. .NET, Java, Node.jsve Python uygulamalarında tutarlı telemetri verilerinin toplanmasını sağlayarak daha güvenilir izleme ve tanılama sağlar.

Not veya Dikkat

Azure İşlev Uygulamaları için bkz. Azure İşlevleri ile OpenTelemetry kullanma.

Bağlantı dizesi

Application Insights'taki bir bağlantı dizesi, telemetri verilerini göndermek için hedef konumu tanımlar.

bağlantı dizesi yapılandırmak için aşağıdaki üç yoldan birini kullanın:

  • Dosyanıza UseAzureMonitor() ekleyinprogram.cs.

        var builder = WebApplication.CreateBuilder(args);
    
        // Add the OpenTelemetry telemetry service to the application.
        // This service will collect and send telemetry data to Azure Monitor.
        builder.Services.AddOpenTelemetry().UseAzureMonitor(options => {
            options.ConnectionString = "<YOUR-CONNECTION-STRING>";
        });
    
        var app = builder.Build();
    
        app.Run();
    
  • Ortam değişkeni ayarlayın.

    APPLICATIONINSIGHTS_CONNECTION_STRING=<YOUR-CONNECTION-STRING>
    
  • Yapılandırma dosyanıza appsettings.json aşağıdaki bölümü ekleyin.

      {
        "AzureMonitor": {
            "ConnectionString": "<YOUR-CONNECTION-STRING>"
        }
      }
    

Not veya Dikkat

bağlantı dizesi birden fazla yerde ayarlarsanız, aşağıdaki önceliğe bağlıyız:

  1. Kod
  2. Ortam değişkeni
  3. Yapılandırma Dosyası

Bulut Rolü Adını ve Bulut Rolü Örneğini Ayarlama

Desteklenen diller için Azure İzleyici OpenTelemetry Distro kaynak bağlamını otomatik olarak algılar ve bileşeninizin Bulut Rolü Adı ve Bulut Rolü Örneği özellikleri için varsayılan değerler sağlar. Ancak, varsayılan değerleri ekibiniz için anlamlı bir değerle geçersiz kılmak isteyebilirsiniz. Bulut rolü adı değeri, Uygulama Haritası'nda düğümün altındaki ad olarak görünür.

Kaynak öznitelikleri aracılığıyla Bulut Rolü Adını ve Bulut Rolü Örneğini ayarlayın. Bulut Rolü Adı, service.namespace ve service.name özniteliklerini kullanır, ancak service.name ayarlanmadıysa, service.namespace özniteliğine geri döner. Bulut Rolü Örneği öznitelik değerini kullanır service.instance.id . Kaynakların standart öznitelikleri hakkında bilgi için bkz . OpenTelemetry Semantic Conventions.

// Setting role name and role instance

// Create a dictionary of resource attributes.
var resourceAttributes = new Dictionary<string, object> {
    { "service.name", "my-service" },
    { "service.namespace", "my-namespace" },
    { "service.instance.id", "my-instance" }};

// Create a new ASP.NET Core web application builder.
var builder = WebApplication.CreateBuilder(args);

// Add the OpenTelemetry telemetry service to the application.
// This service will collect and send telemetry data to Azure Monitor.
builder.Services.AddOpenTelemetry()
    .UseAzureMonitor()
    // Configure the ResourceBuilder to add the custom resource attributes to all signals.
    // Custom resource attributes should be added AFTER AzureMonitor to override the default ResourceDetectors.
    .ConfigureResource(resourceBuilder => resourceBuilder.AddAttributes(resourceAttributes));

// Build the ASP.NET Core web application.
var app = builder.Build();

// Start the ASP.NET Core web application.
app.Run();

Örneklemeyi Etkinleştir

Örnekleme telemetri alımı hacmini ve maliyetini azaltır. Azure İzleyici'nin OpenTelemetry dağıtımı, izlemeler için iki örnekleme stratejisini destekler ve (isteğe bağlı olarak) uygulama günlüklerini izleme örnekleme kararlarınızla hizalamanıza olanak tanır. Örnekleyici, Application Insights'ın deneyim sayılarını doğru şekilde ayarlayabilmesi için seçilen örnekleme oranını veya oranını dışarı aktarılan aralıklara ekler. Kavramsal genel bakış için bkz. Örnekleme hakkında daha fazla bilgi edinin.

Önemli

  • Örnekleme kararları izlemeler (yayılma alanları) için geçerlidir.
  • Örneklenmemiş izlemelere ait günlükler varsayılan olarak bırakılır, ancak günlükler için izleme tabanlı örneklemeyi geri çevirebilirsiniz.
  • Ölçümler hiçbir zaman örneklendirilemez.

Not veya Dikkat

Application Insights'ta beklenmeyen ücretler veya yüksek maliyetler görüyorsanız yaygın nedenler arasında yüksek telemetri hacmi, veri alımı ani artışları ve yanlış yapılandırılmış örnekleme sayılabilir. Sorun gidermeye başlamak için bkz. Application Insights'ta yüksek veri alımı sorunlarını giderme.

Ortam değişkenlerini kullanarak örneklemeyi yapılandırma

Standart OpenTelemetry ortam değişkenlerini kullanarak örnekleyici bileşenini seçin ve bağımsız değişkenini sağlayın. OpenTelemetry örnekleyici türleri hakkında daha fazla bilgi için bkz. OTEL_TRACES_SAMPLER.

  • OTEL_TRACES_SAMPLER — örnekleyici türü

    • microsoft.fixed_percentage — izlerin bir kısmını örnekle.
    • microsoft.rate_limited — saniye başına izleme üst sınırı.
  • OTEL_TRACES_SAMPLER_ARG — sampler bağımsız değişkeni

    • için microsoft.fixed_percentage: 0.0–1.0 içindeki değer (örneğin, 0.1 = yaklaşık 10%).
    • için microsoft.rate_limited: saniye başına en fazla izleme sayısı (örneğin, 1.5).

Aşağıdaki örneklerde, ortam değişkenlerini kullanarak örneklemeyi yapılandırma gösterilmektedir.

Sabit yüzde örnekleme (yaklaşık 10%)

export OTEL_TRACES_SAMPLER="microsoft.fixed_percentage"
export OTEL_TRACES_SAMPLER_ARG=0.1

Hız sınırlı örnekleme (~1,5 izleme/sn)

export OTEL_TRACES_SAMPLER="microsoft.rate_limited"
export OTEL_TRACES_SAMPLER_ARG=1.5

Kodda örneklemeyi yapılandırma

Not veya Dikkat

Hem kod düzeyi seçenekleri hem de ortam değişkenleri yapılandırıldığında ortam değişkenleri önceliklidir. Varsayılan örnekleyici davranışı dile göre farklılık gösterebilir.

Örnekleme yüzdesi sabit

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenTelemetry().UseAzureMonitor(o =>
{
    o.SamplingRatio = 0.1F; // ~10%
});
var app = builder.Build();
app.Run();

Hız sınırlı örnekleme

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenTelemetry().UseAzureMonitor(o =>
{
    o.TracesPerSecond = 1.5; // ~1.5 traces/sec
});
var app = builder.Build();
app.Run();

Not veya Dikkat

Kodda veya ortam değişkenlerinde örnekleyici ayarlamazsanız Azure İzleyici varsayılan olarak ApplicationInsightsSampler kullanır.

İpucu

Sabit yüzdeli örnekleme kullanırken ve örnekleme hızının ne olarak ayarlanacağından emin değilseniz , 5% (0.05) ile başlayın. Hatalar ve performans bölmelerinde gösterilen işlemlerin doğruluğuna göre hızı ayarlayın. Tüm örneklemeler doğruluğu azaltır, bu nedenle örneklemeden etkilenmeyen OpenTelemetry ölçümlerinde uyarı göndermenizi öneririz.

Günlükler için iz tabanlı örneklemeyi yapılandırma

Etkinleştirildiğinde, örneklenmemiş izlemelere ait günlük kayıtları bırakılır, böylece günlükleriniz izleme örneklemesiyle uyumlu kalır.

  • Günlük kaydı, geçerli SpanId bir kayıt olduğunda izlemenin bir parçası olarak kabul edilir.
  • İlişkili izleme TraceFlagsörneklenmediğini gösteriyorsa günlük kaydı atılır.
  • İz bağlamı içermeyen günlük kayıtları etkilenmez.
  • Özellik varsayılan olarak etkindir.

İzleme tabanlı günlük örneklemeyi yapılandırmak için aşağıdaki ayarları kullanın:

builder.Services.AddOpenTelemetry().UseAzureMonitor(o =>
{
    o.EnableTraceBasedLogsSampler = true;
});

Canlı ölçümler

Canlı ölçümler , uygulama etkinliği ve performansıyla ilgili içgörüler için gerçek zamanlı bir analiz panosu sağlar.

Önemli

Beta veya önizleme aşamasında olan ya da başka bir şekilde henüz genel kullanıma sunulmamış olan Azure özelliklerinde geçerli olan yasal koşullar için bkz. Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları.

Varsayılan olarak bu özellik etkindir.

Kullanıcılar, Distro'yu yapılandırırken Canlı Ölçümleri devre dışı bırakabilir.

builder.Services.AddOpenTelemetry().UseAzureMonitor(options => {
	// Disable the Live Metrics feature.
    options.EnableLiveMetrics = false;
});

Microsoft Entra Id (eski adıyla Azure AD) kimlik doğrulamasını etkinleştirme

Azure'a daha güvenli bir bağlantı için Microsoft Entra kimlik doğrulamasını etkinleştirmek isteyebilirsiniz ve bu da yetkisiz telemetrinin aboneliğinize alınmasını önler.

Daha fazla bilgi için desteklenen her dil için bağlantılı ayrılmış Microsoft Entra kimlik doğrulama sayfamıza bakın.

Entra Id kimlik doğrulamasını yapılandırma hakkında bilgi için bkz . Application Insights için Microsoft Entra kimlik doğrulaması

Çevrimdışı Depolama ve Otomatik Yeniden Denemeler

Azure Monitor OpenTelemetry tabanlı teklifler, bir uygulama Application Insights bağlantısı kesildiğinde telemetriyi önbelleğe alır ve göndermeyi 48 saate kadar yeniden dener. Veri işleme önerileri için bkz. Özel verileri dışarı aktarma ve silme. Yüksek yüke sahip uygulamalar bazen telemetri verilerini iki nedenden dolayı bırakır: izin verilen süreyi aşma veya dosya boyutu üst sınırını aşma. Gerektiğinde, ürün son olaylara eski olaylara göre öncelik verir.

Distro paketi, çevrimdışı depolama için varsayılan olarak aşağıdaki konumlardan birini kullanan AzureMonitorExporter'ı içerir (öncelik sırasına göre listelenir):

  • Windows

    • %LOCALAPPDATA%\Microsoft\AzureMonitor
    • %TEMP%\Microsoft\AzureMonitor
  • Windows Olmayan

    • %TMPDIR%/Microsoft/AzureMonitor
    • /var/tmp/Microsoft/AzureMonitor
    • /tmp/Microsoft/AzureMonitor

Varsayılan dizini geçersiz kılmak için değerini ayarlamanız AzureMonitorOptions.StorageDirectorygerekir.

// Create a new ASP.NET Core web application builder.
var builder = WebApplication.CreateBuilder(args);

// Add the OpenTelemetry telemetry service to the application.
// This service will collect and send telemetry data to Azure Monitor.
builder.Services.AddOpenTelemetry().UseAzureMonitor(options =>
{
    // Set the Azure Monitor storage directory to "C:\\SomeDirectory".
    // This is the directory where the OpenTelemetry SDK will store any telemetry data that can't be sent to Azure Monitor immediately.
    options.StorageDirectory = "C:\\SomeDirectory";
});

// Build the ASP.NET Core web application.
var app = builder.Build();

// Start the ASP.NET Core web application.
app.Run();

Bu özelliği devre dışı bırakmak için ayarını yapmalısınız AzureMonitorOptions.DisableOfflineStorage = true.

OTLP İhracatçısını Etkinleştirme

Telemetrinizi iki konuma göndermek için Azure İzleyici İhracatı ile birlikte OpenTelemetry Protokolü (OTLP) Vericisi'ni aynı anda etkinleştirmek isteyebilirsiniz.

Not veya Dikkat

OTLP İhracatçısı yalnızca kolaylık sağlamak için gösterilir. OTLP Exporter'ını veya onun ardındaki herhangi bir bileşeni ya da üçüncü taraf deneyimlerini resmi olarak desteklemiyoruz.

  1. Projenize OpenTelemetry.Exporter.OpenTelemetryProtocol paketini yükleyin.

    dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
    
  2. Aşağıdaki kod parçacığını ekleyin. Bu örnekte, OTLP alıcısı çalışan bir OpenTelemetry Toplayıcınız olduğu varsayılır. Ayrıntılar için GitHub örneğine bakın.

    // Create a new ASP.NET Core web application builder.
    var builder = WebApplication.CreateBuilder(args);
    
    // Add the OpenTelemetry telemetry service to the application.
    // This service will collect and send telemetry data to Azure Monitor.
    builder.Services.AddOpenTelemetry().UseAzureMonitor();
    
    // Add the OpenTelemetry OTLP exporter to the application.
    // This exporter will send telemetry data to an OTLP receiver, such as Prometheus
    builder.Services.AddOpenTelemetry().WithTracing(builder => builder.AddOtlpExporter());
    builder.Services.AddOpenTelemetry().WithMetrics(builder => builder.AddOtlpExporter());
    
    // Build the ASP.NET Core web application.
    var app = builder.Build();
    
    // Start the ASP.NET Core web application.
    app.Run();
    

OpenTelemetry yapılandırmaları

Aşağıdaki OpenTelemetry yapılandırmalarına, Azure Monitor OpenTelemetry Dağıtımı kullanılırken ortam değişkenleri aracılığıyla erişilebilir.

Ortam değişkeni Açıklama
APPLICATIONINSIGHTS_CONNECTION_STRING Bunu Application Insights kaynağınız için bağlantı dizesi olarak ayarlayın.
APPLICATIONINSIGHTS_STATSBEAT_DISABLED Dahili ölçüm toplamayı devre dışı bırakmak için true olarak ayarlayın.
OTEL_RESOURCE_ATTRIBUTES Kaynak öznitelikleri olarak kullanılacak anahtar-değer çiftleri. Kaynak öznitelikleri hakkında daha fazla bilgi için bkz . Kaynak SDK belirtimi.
OTEL_SERVICE_NAME Kaynak özniteliğinin service.name değerini ayarlar. Eğer service.nameOTEL_RESOURCE_ATTRIBUTES içinde sağlanmışsa, o zaman OTEL_SERVICE_NAME öncelik kazanır.

URL Sorgu Dizelerini Düzenle

URL sorgu dizelerini gizlemek için sorgu dizesi toplamasını kapatın. Sas belirteci kullanarak Azure depolamayı çağırırsanız bu ayarı öneririz.

Azure.Monitor.OpenTelemetry.AspNetCore dağıtım paketini kullanırken hem ASP.NET Core hem de HttpClient Enstrümentasyon kitaplıkları dahildir. Dağıtım paketimiz Sorgu Dizesi Redaction'ını varsayılan olarak devre dışı bırakır.

Bu davranışı değiştirmek için ortam değişkenini true veya false olarak ayarlamanız gerekir.

  • ASP.NET Core Enstrümantasyon: OTEL_DOTNET_EXPERIMENTAL_ASPNETCORE_DISABLE_URL_QUERY_REDACTION Sorgu Dizesi Düzenleme varsayılan olarak devre dışı bırakılmıştır. Etkinleştirmek için bu ortam değişkenini olarak falseayarlayın.

  • HTTP İstemci Enstrümantasyonu: OTEL_DOTNET_EXPERIMENTAL_HTTPCLIENT_DISABLE_URL_QUERY_REDACTION Sorgu Dizesi Sansürleme varsayılan olarak devre dışıdır. Etkinleştirmek için bu ortam değişkenini olarak falseayarlayın.

Metrik dışa aktarma aralığı

Ortam değişkenini kullanarak OTEL_METRIC_EXPORT_INTERVAL ölçüm dışarı aktarma aralığını yapılandırabilirsiniz.

OTEL_METRIC_EXPORT_INTERVAL=60000

Varsayılan değer milisaniyedir 60000 (60 saniye). Bu ayar, OpenTelemetry SDK'sının ölçümleri dışarı aktarma sıklıklarını denetler.

İpucu

Azure İzleyici Ölçümleri ve Azure İzleyici Çalışma Alanı özel ölçümleri sabit 60 saniyelik aralıklarla alır. Daha sık gönderilen ölçümler her 60 saniyede bir arabelleğe alınıp işlenir. Log Analytics, ölçümleri gönderildikleri aralıkta kaydeder ve bu da maliyetleri daha kısa aralıklarla artırabilir ve daha uzun aralıklarla görünürlüğü geciktirebilir.

Referans için, aşağıdaki OpenTelemetry belirtimlerine bakın: