Aracılığıyla paylaş


.NET Application Insights SDK'larından Azure İzleyici OpenTelemetry'ye geçiş

Bu kılavuz, Application Insights yazılım geliştirme setlerini (SDK' lar) kullanarak Azure İzleyici OpenTelemetry'ye çeşitli .NET uygulamalarını geçirmeye yönelik adım adım yönergeler sağlar.

Azure İzleyici OpenTelemetry izlemesi ile Application Insights SDK'larında olduğu gibi benzer bir deneyim bekleyebilirsiniz. Daha fazla bilgi ve özelliğe göre özellik karşılaştırması için bkz . Özelliklerin yayın durumu.

  • Azure İzleyici OpenTelemetry Distro'ya çekirdek geçişi ASP.NET. (Azure.Monitor.OpenTelemetry.AspNetCore NuGet paketi)
  • Azure İzleyici OpenTelemetry Exporter'a ASP.NET, konsol ve WorkerService geçişi. (Azure.Monitor.OpenTelemetry.Exporter NuGet paketi)

Application Insights'ı kullanmaya başlıyorsanız ve Klasik API'den geçiş yapmanız gerekmiyorsa bkz . Azure İzleyici OpenTelemetry'yi etkinleştirme.

Önkoşullar

  • Herhangi bir özelleştirme olmadan Application Insights ile önceden izlenmiş bir ASP.NET Core web uygulaması
  • Etkin olarak desteklenen bir .NET sürümü

İpucu

Ürün grubumuz bu belgeler hakkında aktif olarak geri bildirim almak istiyor. Destek bölümüne geri bildirim otel@microsoft.com sağlayın veya bölümüne bakın.

Application Insights SDK'sını kaldırma

Not

Bu adımlara devam etmeden önce, uygulamanızın geçerli bir yedeğine sahip olduğunuzu onaylamanız gerekir.

  1. NuGet paketlerini kaldırma

    Microsoft.ApplicationInsights.AspNetCore paketinizden csprojkaldırın.

    dotnet remove package Microsoft.ApplicationInsights.AspNetCore
    
  2. Başlatma Kodunu ve özelleştirmeleri kaldırma

    Kod tabanınızdaki Application Insights türlerine yönelik başvuruları kaldırın.

    İpucu

    Application Insights paketini kaldırdıktan sonra, kaldırılması gereken başvuruların listesini almak için uygulamanızı yeniden oluşturabilirsiniz.

    • Aşağıdaki satırı silerek Application Insights'ı cihazınızdan ServiceCollection kaldırın:

      builder.Services.AddApplicationInsightsTelemetry();
      
    • ApplicationInsights bölümünü içinden appsettings.jsonkaldırın.

      {
          "ApplicationInsights": {
              "ConnectionString": "<Your Connection String>"
          }
      }
      
  3. Temizleme ve Derleme

    Tüm başvuruların kaldırıldığını doğrulamak için Microsoft.ApplicationInsights.* bin dizininizi inceleyin.

  4. Uygulamanızı test edin

    Uygulamanızın beklenmeyen bir sonucu olmadığını doğrulayın.

İpucu

Ürün grubumuz bu belgeler hakkında aktif olarak geri bildirim almak istiyor. Destek bölümüne geri bildirim otel@microsoft.com sağlayın veya bölümüne bakın.

OpenTelemetry'yi etkinleştirme

Bu yönergeleri takip ederken bir geliştirme kaynağı oluşturmanızı ve bağlantı dizesi kullanmanızı öneririz.

Application Insights'a genel bakış ve bağlantı dizesi gösteren ekran görüntüsü.

Geçişin başarılı olduğunu onayladıktan sonra bağlantı dizesi özgün kaynağa telemetri gönderecek şekilde güncelleştirmeyi planlayın.

  1. Azure İzleyici Dağıtımı'nı yükleme

    Azure İzleyici Dağıtımımız izlemeleri, ölçümleri, günlükleri ve özel durumları toplamak için OpenTelemetry izleme kitaplıklarını ekleyerek otomatik telemetriyi etkinleştirir ve özel telemetrinin toplanmasına izin verir.

    Azure İzleyici Dağıtımı'nı yüklemek OpenTelemetry SDK'sını bağımlılık olarak getirir.

    dotnet add package Azure.Monitor.OpenTelemetry.AspNetCore
    
  2. Hem OpenTelemetry hem de Azure İzleyici ekleme ve yapılandırma

    OpenTelemery SDK'sı, genellikle içinde Program.csuygulamanızın ServiceCollectionbir parçası olarak uygulama başlangıcında yapılandırılmalıdır.

    OpenTelemetry üç sinyal kavramına sahiptir; İzlemeler, Ölçümler ve Günlükler. Azure İzleyici Dağıtımı bu sinyallerin her birini yapılandırıyor.

Program.cs

Aşağıdaki kod örneği temel bilgileri gösterir.

using Azure.Monitor.OpenTelemetry.AspNetCore;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;

public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);

        // Call AddOpenTelemetry() to add OpenTelemetry to your ServiceCollection.
        // Call UseAzureMonitor() to fully configure OpenTelemetry.
        builder.Services.AddOpenTelemetry().UseAzureMonitor();

        var app = builder.Build();
        app.MapGet("/", () => "Hello World!");
        app.Run();
    }
}

Bağlantı Dizenizi bir ortam değişkeninde ayarlamanızı öneririz:

APPLICATIONINSIGHTS_CONNECTION_STRING=<Your Connection String>

Bağlantı Dizesini yapılandırmaya yönelik diğer seçenekler burada ayrıntılı olarak anlatılır: Application Insights Bağlantı Dizesini Yapılandırma.

İpucu

Ürün grubumuz bu belgeler hakkında aktif olarak geri bildirim almak istiyor. Destek bölümüne geri bildirim otel@microsoft.com sağlayın veya bölümüne bakın.

İzleme kitaplıklarını yükleme ve yapılandırma

Belirli bileşenler veya bağımlılıklar hakkında telemetriyi otomatik olarak toplamak için izleme kitaplıkları projenize eklenebilir.

Aşağıdaki kitaplıklar Distro'ya dahildir.

İzleme kitaplıklarını özelleştirme

Azure İzleyici Dağıtımı ASP.NET Core, HttpClient ve SQLClient için .NET OpenTelemetry izlemesini içerir. Bu dahil edilen izlemeleri özelleştirebilir veya OpenTelemetry API'sini kullanarak kendiniz ek izleme ekleyebilirsiniz.

aşağıda izlemenin nasıl özelleştirileceğine ilişkin bazı örnekler verilmiştir:

AspNetCoreTraceInstrumentationOptions'ı Özelleştirme
builder.Services.AddOpenTelemetry().UseAzureMonitor();
builder.Services.Configure<AspNetCoreTraceInstrumentationOptions>(options =>
{
    options.RecordException = true;
    options.Filter = (httpContext) =>
    {
        // only collect telemetry about HTTP GET requests
        return HttpMethods.IsGet(httpContext.Request.Method);
    };
});
HttpClientTraceInstrumentationOptions'ı Özelleştirme
builder.Services.AddOpenTelemetry().UseAzureMonitor();
builder.Services.Configure<HttpClientTraceInstrumentationOptions>(options =>
{
    options.RecordException = true;
    options.FilterHttpRequestMessage = (httpRequestMessage) =>
    {
        // only collect telemetry about HTTP GET requests
        return HttpMethods.IsGet(httpRequestMessage.Method.Method);
    };
});
SqlClientInstrumentationOptions'ı Özelleştirme

Paketimiz beta sürümündeyken SQLClient izlemesini satıyoruz. Kararlı bir sürüme ulaştığında standart paket başvurusu olarak ekleriz. O zamana kadar SQLClient izlemesini özelleştirmek için projenize paket başvurusunu OpenTelemetry.Instrumentation.SqlClient ekleyin ve genel API'sini kullanın.

dotnet add package --prerelease OpenTelemetry.Instrumentation.SqlClient
builder.Services.AddOpenTelemetry().UseAzureMonitor().WithTracing(builder =>
{
    builder.AddSqlClientInstrumentation(options =>
    {
        options.SetDbStatementForStoredProcedure = false;
    });
});

Azure İzleyici'yi yapılandırma

Application Insights aracılığıyla ApplicationInsightsServiceOptionsçok daha fazla yapılandırma seçeneği sundu.

Application Insights Ayarı OpenTelemetry Alternatifi
AddAutoCollectedMetricExtractor Yok
ApplicationVersion Kaynakta "service.version" değerini ayarlama
ConnectionString Bağlantı Dizesini yapılandırma yönergelerine bakın.
DependencyCollectionOptions Yok. Bağımlılıkları özelleştirmek için, geçerli İzleme kitaplıkları için kullanılabilir yapılandırma seçeneklerini gözden geçirin.
Geliştirici Modu Yok
EnableActiveTelemetryConfigurationSetup Yok
EnableAdaptiveSampling Yok. Yalnızca sabit hızda örnekleme desteklenir.
EnableAppServicesHeartbeatTelemetryModule Yok
EnableAuthenticationTrackingJavaScript Yok
EnableAzureInstanceMetadataTelemetryModule Yok
EnableDependencyTrackingTelemetryModule İzlemeleri filtreleme yönergelerine bakın.
EnableDiagnosticsTelemetryModule Yok
EnableEventCounterCollectionModule Yok
EnableHeartbeat Yok
EnablePerformanceCounterCollectionModule Yok
EnableQuickPulseMetricStream AzureMonitorOptions.EnableLiveMetrics
EnableRequestTrackingTelemetryModule İzlemeleri filtreleme yönergelerine bakın.
EndpointAddress ConnectionString'i kullanın.
InstrumentationKey ConnectionString'i kullanın.
RequestCollectionOptions Yok. Bkz. OpenTelemetry.Instrumentation.AspNetCore seçenekleri.

Özel yapılandırmaları kaldırma

Aşağıdaki senaryolar isteğe bağlıdır ve yalnızca ileri düzey kullanıcılar için geçerlidir.

  • telemetriyi TelemetryClientel ile kaydetmek için kullanılabilecek daha fazla başvurunuz varsa, bunların kaldırılması gerekir.

  • Özel veya biçiminde herhangi bir TelemetryProcessor TelemetryInitializerözel filtreleme veya zenginleştirme eklediyseniz, bunlar kaldırılmalıdır. Bunlar sizin ServiceCollectioniçinde bulunabilir.

    builder.Services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();
    
    builder.Services.AddApplicationInsightsTelemetryProcessor<MyCustomTelemetryProcessor>();
    
  • JavaScript Parçacığını Kaldırma

    Application Insights .NET SDK'sı tarafından sağlanan Kod Parçacığını kullandıysanız, bu parçacığın da kaldırılması gerekir. Nelerin kaldırılacağına ilişkin tam kod örnekleri için, web uygulamaları için istemci tarafı telemetrisini etkinleştirme kılavuzunu gözden geçirin.

    İstemci tarafı telemetrisini toplamak için JavaScript SDK'sını eklediyseniz, .NET SDK'sı olmadan çalışmaya devam etse de kaldırılabilir. Nelerin kaldırılacağına ilişkin tam kod örnekleri için JavaScript SDK'sı için ekleme kılavuzunu gözden geçirin.

  • Visual Studio Yapıtlarını kaldırma

    Application Insights'a eklemek için Visual Studio kullandıysanız projenizde daha fazla dosya kalmış olabilir.

    • Properties/ServiceDependencies dizininin Application Insights kaynağınıza bir başvurusu olabilir.

İpucu

Ürün grubumuz bu belgeler hakkında aktif olarak geri bildirim almak istiyor. Destek bölümüne geri bildirim otel@microsoft.com sağlayın veya bölümüne bakın.

Sık sorulan sorular

Bu bölüm, telemetri başlatıcıları veya işlemcileri kullanan veya özel telemetri oluşturmak için klasik Application Insights API'sine özel kod yazan müşterilere yöneliktir.

SDK API'sinin OpenTelemetry kavramlarıyla eşlemesi nasıl yapılır?

OpenTelemetry , satıcı tarafından gözlemlenebilirlik çerçevesidir. OpenTelemetry SDK'sında veya kitaplıklarında Application Insights API'leri yoktur. Geçiş öncesinde, OpenTelemetry'nin bazı kavramlarını anlamak önemlidir.

  • Application Insights'ta tüm telemetri tek TelemetryClient TelemetryConfigurationve aracılığıyla yönetilir. OpenTelemetry'de üç telemetri sinyalinin (İzlemeler, Ölçümler ve Günlükler) her biri kendi yapılandırmasına sahiptir. Dış kitaplıklar olmadan .NET çalışma zamanı aracılığıyla el ile telemetri oluşturabilirsiniz. Daha fazla bilgi için dağıtılmış izleme, ölçümler ve günlüğe kaydetme ile ilgili .NET kılavuzlarına bakın.

  • Uygulamanız için telemetri verilerini otomatik olarak toplamak için kullanılan TelemetryModules Application Insights. Bunun yerine OpenTelemetry, belirli bileşenlerden (İstekler için AspNetCore ve Bağımlılıklar için HttpClient gibi) telemetri toplamak için İzleme kitaplıklarını kullanır.

  • Telemetriyi ek bilgilerle zenginleştirmek veya özellikleri geçersiz kılmak için kullanılan TelemetryInitializers Application Insights. OpenTelemetry ile, belirli bir sinyali özelleştirmek için bir İşlemci yazabilirsiniz. Buna ek olarak, birçok OpenTelemetry Instrumentation kitaplığı belirli bir bileşen tarafından oluşturulan telemetriyi özelleştirmek için bir Enrich yöntem sunar.

  • Telemetriyi filtrelemek için kullanılan TelemetryProcessors Application Insights. OpenTelemetry İşlemcisi , belirli bir sinyale filtreleme kuralları uygulamak için de kullanılabilir.

Application Insights telemetri türleri OpenTelemetry ile nasıl eşlenmiştir?

Bu tablo, Application Insights veri türlerini OpenTelemetry kavramlarına ve bunların .NET uygulamalarına eşler.

Azure İzleyici Tablosu Application Insights DataType OpenTelemetry DataType .NET Uygulaması
customEvents EventTelemetry Yok Yok
customMetrics MetricTelemetry Ölçümler System.Diagnostics.Metrics.Meter
bağımlılıklar DependencyTelemetry Spans (İstemci, İç, Tüketici) System.Diagnostics.Activity
özel durumlar ExceptionTelemetry Özel durumlar System.Exception
istekler RequestTelemetry Spans (Sunucu, Üretici) System.Diagnostics.Activity
izlemeler TraceTelemetry Günlükler Microsoft.Extensions.Logging.ILogger

Aşağıdaki belgeler daha fazla bilgi sağlar.

Application Insights örnekleme kavramları OpenTelemetry ile nasıl eşler?

Application Insights örneklemeyi yapılandırmak için birden çok seçenek sunarken, Azure İzleyici Verme veya Azure İzleyici Dağıtımı yalnızca sabit oranda örnekleme sunar. Yalnızca İstekler ve Bağımlılıklar (OpenTelemetry traces) örneklenebilir.

Örneklemeyi yapılandırma hakkında ayrıntılı kod örnekleri için bkz. Örneklemeyi Etkinleştirme kılavuzumuz

Telemetri İşlemcileri ve Başlatıcıları OpenTelemetry ile nasıl eşler?

Application Insights .NET SDK'sında telemetriyi filtrelemek ve değiştirmek veya atmak için telemetri işlemcilerini kullanın. Özel özellikler eklemek veya değiştirmek için telemetri başlatıcılarını kullanın. Daha fazla bilgi için Azure İzleyici belgelerine bakın. OpenTelemetry, bu kavramları, telemetriyi zenginleştiren ve filtreleyen etkinlik veya günlük işlemcileriyle değiştirir.

İzlemeleri Filtreleme

OpenTelemetry'de telemetri verilerini filtrelemek için bir etkinlik işlemcisi uygulayabilirsiniz. Bu örnek, Azure İzleyici belgelerinde açıklandığı gibi telemetri verilerini filtrelemek için Application Insights örneğine eşdeğerdir. Örnek, başarısız bağımlılık çağrılarının nerede filtrelendiğini gösterir.

using System.Diagnostics;
using OpenTelemetry;

internal sealed class SuccessfulDependencyFilterProcessor : BaseProcessor<Activity>
{
    public override void OnEnd(Activity activity)
    {
        if (!OKtoSend(activity))
        {
            activity.ActivityTraceFlags &= ~ActivityTraceFlags.Recorded;
        }
    }

    private bool OKtoSend(Activity activity)
    {
        return activity.Kind == ActivityKind.Client && activity.Status == ActivityStatusCode.Ok;
    }
}

Bu işlemciyi kullanmak için önce bir TracerProvider oluşturmanız ve işlemciyi AddAzureMonitorTraceExportereklemeniz gerekir.

using OpenTelemetry.Trace;

public static void Main()
{
    var tracerProvider = Sdk.CreateTracerProviderBuilder()
        .AddProcessor(new SuccessfulDependencyFilterProcessor())
        .AddAzureMonitorTraceExporter()
        .Build();
}

Günlükleri Filtreleme

ILogger uygulamaları, günlük filtreleme uygulamak için yerleşik bir mekanizmaya sahiptir. Bu filtreleme, dahil olmak üzere OpenTelemetryLoggerProviderher kayıtlı sağlayıcıya gönderilen günlükleri denetlemenize olanak tanır. "OpenTelemetry", filtreleme kurallarını yapılandırmada kullanılan diğer adıdır OpenTelemetryLoggerProvider.

Aşağıdaki örnek, "Hata" öğesini varsayılan LogLevel olarak tanımlar ve ayrıca kullanıcı tanımlı bir kategori için "Uyarı" değerini en düşük LogLevel değer olarak tanımlar. Tanımlanan bu kurallar yalnızca için OpenTelemetryLoggerProvidergeçerlidir.

builder.AddFilter<OpenTelemetryLoggerProvider>("*", LogLevel.Error);
builder.AddFilter<OpenTelemetryLoggerProvider>("MyProduct.MyLibrary.MyClass", LogLevel.Warning);

Daha fazla bilgi için lütfen günlüklerde OpenTelemetry .NET belgelerini okuyun.

İzlemelere Özel Özellikler Ekleme

OpenTelemetry'de, telemetri verilerini daha fazla özellik ile zenginleştirmek için etkinlik işlemcilerini kullanabilirsiniz. Telemetri özelliklerini değiştirebileceğiniz Application Insights'ta telemetri başlatıcılarını kullanmaya benzer.

Varsayılan olarak, Azure İzleyici Dışarı Aktarma işlemi tüm HTTP isteklerini 400 veya üzeri bir yanıt koduyla başarısız olarak işaretler. Ancak, 400'e başarılı olarak davranmak istiyorsanız, etkinlikte başarıyı ayarlayan ve daha fazla telemetri özelliği eklemek için bir etiket ekleyen bir zenginleştirme etkinliği işlemcisi ekleyebilirsiniz. Azure İzleyici belgelerinde açıklandığı gibi Application Insights'ta başlatıcı kullanarak özellikleri eklemeye veya değiştirmeye benzer.

Özel özellikler ekleme ve belirli yanıt kodları için varsayılan davranışı geçersiz kılma örneği aşağıda verilmiştir:

using System.Diagnostics;
using OpenTelemetry;

/// <summary>
/// Custom Processor that overrides the default behavior of treating response codes >= 400 as failed requests.
/// </summary>
internal class MyEnrichingProcessor : BaseProcessor<Activity>
{
    public override void OnEnd(Activity activity)
    {
        if (activity.Kind == ActivityKind.Server)
        {
            int responseCode = GetResponseCode(activity);

            if (responseCode >= 400 && responseCode < 500)
            {
                // If we set the Success property, the SDK won't change it
                activity.SetStatus(ActivityStatusCode.Ok);

                // Allow to filter these requests in the portal
                activity.SetTag("Overridden400s", "true");
            }

            // else leave the SDK to set the Success property
        }
    }

    private int GetResponseCode(Activity activity)
    {
        foreach (ref readonly var tag in activity.EnumerateTagObjects())
        {
            if (tag.Key == "http.response.status_code" && tag.Value is int value)
            {
                return value;
            }
        }

        return 0;
    }
}

Bu işlemciyi kullanmak için önce bir TracerProvider oluşturmanız ve işlemciyi AddAzureMonitorTraceExportereklemeniz gerekir.

using OpenTelemetry.Trace;

public static void Main()
{
    var tracerProvider = Sdk.CreateTracerProviderBuilder()
        .AddSource("Company.Product.Name")
        .AddProcessor(new MyEnrichingProcessor())
        .AddAzureMonitorTraceExporter()
        .Build();
}

OpenTelemetry kullanarak telemetriyi el ile izleme Nasıl yaparım??

İzlemeleri Gönderme - El ile

Application Insights'taki izlemeler ve DependencyTelemetryolarak RequestTelemetry depolanır. OpenTelemetry'de izlemeler sınıfı kullanılarak Activity modellenirSpan.

OpenTelemetry .NET, .NET çalışma zamanının ActivitySource bir parçası olan ve Activity sınıflarını izleme için kullanır. .NET uygulaması izleme API'sini doğrudan çalışma zamanının kendisiyle tümleştirdiğinden bu yaklaşım ayırt edicidir. Paket, System.Diagnostics.DiagnosticSource geliştiricilerin örnekleri oluşturmak ve yönetmek Activity için kullanmasına ActivitySource olanak tanır. Bu yöntem, .NET ekosisteminin yerleşik özelliklerini uygulayarak dış kitaplıklara bağlı kalmadan .NET uygulamalarına izleme eklemek için sorunsuz bir yol sağlar. Daha ayrıntılı bilgi için dağıtılmış izleme izleme yönergelerine bakın.

El ile izlemeyi şu şekilde geçirelim:

Not

Application Insights'ta rol adı ve rol örneği telemetri başına düzeyinde ayarlanabilir. Ancak Azure İzleyici Dışarı Aktarma ile telemetri düzeyinde özelleştiremeyiz. Rol adı ve rol örneği OpenTelemetry kaynağından ayıklanır ve tüm telemetriye uygulanır. Daha fazla bilgi için lütfen bu belgeyi okuyun: Bulut rolü adını ve bulut rolü örneğini ayarlayın.

DependencyTelemetry

Application Insights DependencyTelemetry giden istekleri modellemek için kullanılır. Bunu OpenTelemetry'ye şu şekilde dönüştürebilirsiniz:

Application Insights Örneği:

DependencyTelemetry dep = new DependencyTelemetry
{
   Name = "DependencyName",
   Data = "https://www.example.com/",
   Type = "Http",
   Target = "www.example.com",
   Duration = TimeSpan.FromSeconds(10),
   ResultCode = "500",
   Success = false
};

dep.Context.Cloud.RoleName = "MyRole";
dep.Context.Cloud.RoleInstance = "MyRoleInstance";
dep.Properties["customprop1"] = "custom value1";
client.TrackDependency(dep);

OpenTelemetry Örneği:

var activitySource = new ActivitySource("Company.Product.Name");
var resourceAttributes = new Dictionary<string, object>
{
   { "service.name", "MyRole" },
   { "service.instance.id", "MyRoleInstance" }
};

var resourceBuilder = ResourceBuilder.CreateDefault().AddAttributes(resourceAttributes);

using var tracerProvider = Sdk.CreateTracerProviderBuilder()
  .SetResourceBuilder(resourceBuilder)
  .AddSource(activitySource.Name)
  .AddAzureMonitorTraceExporter()
  .Build();

// Emit traces
using (var activity = activitySource.StartActivity("DependencyName", ActivityKind.Client))
{
  activity?.SetTag("url.full", "https://www.example.com/");
  activity?.SetTag("server.address", "www.example.com");
  activity?.SetTag("http.request.method", "GET");
  activity?.SetTag("http.response.status_code", "500");
  activity?.SetTag("customprop1", "custom value1");
  activity?.SetStatus(ActivityStatusCode.Error);
  activity?.SetEndTime(activity.StartTimeUtc.AddSeconds(10));
}

RequestTelemetry

Application Insights RequestTelemetry gelen istekleri modeller. OpenTelemetry'ye şu şekilde geçirilmez:

Application Insights Örneği:

RequestTelemetry req = new RequestTelemetry
{
   Name = "RequestName",
   Url = new Uri("http://example.com"),
   Duration = TimeSpan.FromSeconds(10),
   ResponseCode = "200",
   Success = true,
   Properties = { ["customprop1"] = "custom value1" }
};

req.Context.Cloud.RoleName = "MyRole";
req.Context.Cloud.RoleInstance = "MyRoleInstance";
client.TrackRequest(req);

OpenTelemetry Örneği:

var activitySource = new ActivitySource("Company.Product.Name");
var resourceAttributes = new Dictionary<string, object>
{
   { "service.name", "MyRole" },
   { "service.instance.id", "MyRoleInstance" }
};

var resourceBuilder = ResourceBuilder.CreateDefault().AddAttributes(resourceAttributes);

using var tracerProvider = Sdk.CreateTracerProviderBuilder()
  .SetResourceBuilder(resourceBuilder)
  .AddSource(activitySource.Name)
  .AddAzureMonitorTraceExporter()
  .Build();

// Emit traces
using (var activity = activitySource.StartActivity("RequestName", ActivityKind.Server))
{
  activity?.SetTag("url.scheme", "https");
  activity?.SetTag("server.address", "www.example.com");
  activity?.SetTag("url.path", "/");
  activity?.SetTag("http.response.status_code", "200");
  activity?.SetTag("customprop1", "custom value1");
  activity?.SetStatus(ActivityStatusCode.Ok);
}

Özel İşlem İzleme

Application Insights'ta ve StopOperation yöntemlerini kullanarak StartOperation özel işlemleri izleyin. OpenTelemetry .NET'te ve Activity kullanarak ActivitySource bunu gerçekleştirin. ve ActivityKind.Consumerile ActivityKind.Server yapılan işlemler için Azure İzleyici Exporter oluştururRequestTelemetry. , ActivityKind.ClientActivityKind.Producerve ActivityKind.Internaliçin oluştururDependencyTelemetry. Özel işlemleri izleme hakkında daha fazla bilgi için Bkz . Azure İzleyici belgeleri. .NET'te ve Activity kullanma ActivitySource hakkında daha fazla bilgi için bkz. .NET dağıtılmış izleme izleme izleme kılavuzları.

Özel işlemler için bir etkinliği başlatma ve durdurma örneği aşağıda verilmiştir:

using System.Diagnostics;
using OpenTelemetry;

var activitySource = new ActivitySource("Company.Product.Name");

using var tracerProvider = Sdk.CreateTracerProviderBuilder()
    .AddSource(activitySource.Name)
    .AddAzureMonitorTraceExporter()
    .Build();

// Start a new activity
using (var activity = activitySource.StartActivity("CustomOperation", ActivityKind.Server))
{
    activity?.SetTag("customTag", "customValue");

    // Perform your custom operation logic here

    // No need to explicitly call Activity.Stop() because the using block automatically disposes the Activity object, which stops it.
}

Günlükleri Gönderme

Application Insights'taki günlükler ve ExceptionTelemetryolarak TraceTelemetry depolanır.

TraceTelemetry

OpenTelemetry'de günlük arabirimi aracılığıyla ILogger tümleştirilir. Geçiş şu şekilde yapılır TraceTelemetry:

Application Insights Örneği:

TraceTelemetry traceTelemetry = new TraceTelemetry
{
   Message = "hello from tomato 2.99",
   SeverityLevel = SeverityLevel.Warning,
};

traceTelemetry.Context.Cloud.RoleName = "MyRole";
traceTelemetry.Context.Cloud.RoleInstance = "MyRoleInstance";
client.TrackTrace(traceTelemetry);

OpenTelemetry Örneği:

var resourceAttributes = new Dictionary<string, object>
{
   { "service.name", "MyRole" },
   { "service.instance.id", "MyRoleInstance" }
};

var resourceBuilder = ResourceBuilder.CreateDefault().AddAttributes(resourceAttributes);

using var loggerFactory = LoggerFactory.Create(builder => builder
   .AddOpenTelemetry(logging =>
   {
       logging.SetResourceBuilder(resourceBuilder);
       logging.AddAzureMonitorLogExporter();
   }));

// Create a new instance `ILogger` from the above LoggerFactory
var logger = loggerFactory.CreateLogger<Program>();

// Use the logger instance to write a new log
logger.FoodPrice("tomato", 2.99);

internal static partial class LoggerExtensions
{
    [LoggerMessage(LogLevel.Warning, "Hello from `{name}` `{price}`.")]
    public static partial void FoodPrice(this ILogger logger, string name, double price);
}
ExceptionTelemetry

Application Insights, özel durumları günlüğe kaydetmek için kullanır ExceptionTelemetry . OpenTelemetry'ye şu şekilde geçiş yapabilirsiniz:

Application Insights Örneği:

ExceptionTelemetry exceptionTelemetry = new ExceptionTelemetry(new Exception("Test exception"))
{
    SeverityLevel = SeverityLevel.Error
};

exceptionTelemetry.Context.Cloud.RoleName = "MyRole";
exceptionTelemetry.Context.Cloud.RoleInstance = "MyRoleInstance";
exceptionTelemetry.Properties["customprop1"] = "custom value1";
client.TrackException(exceptionTelemetry);

OpenTelemetry Örneği:

var resourceAttributes = new Dictionary<string, object>
{
   { "service.name", "MyRole" },
   { "service.instance.id", "MyRoleInstance" }
};

var resourceBuilder = ResourceBuilder.CreateDefault().AddAttributes(resourceAttributes);

using var loggerFactory = LoggerFactory.Create(builder => builder
   .AddOpenTelemetry(logging =>
   {
       logging.SetResourceBuilder(resourceBuilder);
       logging.AddAzureMonitorLogExporter();
   }));

// Create a new instance `ILogger` from the above LoggerFactory.
var logger = loggerFactory.CreateLogger<Program>();

try
{
    // Simulate exception
    throw new Exception("Test exception");
}
catch (Exception ex)
{
    logger?.LogError(ex, "An error occurred");
}

Ölçüm Gönderme

Application Insights'taki ölçümler olarak MetricTelemetrydepolanır. OpenTelemetry'de ölçümler paketten System.Diagnostics.DiagnosticSource olarak Meter modellenir.

Application Insights hem önceden toplamaTrackMetric() () hem de önceden toplama (GetMetric().TrackValue()) Ölçüm API'lerine sahiptir. OpenTelemetry'nin aksine, Application Insights'ta alet diye bir fikir yoktur. Application Insights tüm ölçüm senaryoları için aynı API'ye sahiptir.

OpenTelemetry ise kullanıcıların önce ölçümün gerçek semantiğine göre doğru ölçüm aracını seçmesini gerektirir. Örneğin, amaç bir şeyi saymaksa (alınan toplam sunucu isteği sayısı gibi), OpenTelemetry Sayacı kullanılmalıdır. Amaç çeşitli yüzdebirlik dilimleri hesaplamaksa (sunucu gecikme süresinin P99 değeri gibi), OpenTelemetry Histogram aracı kullanılmalıdır. Application Insights ile OpenTelemetry arasındaki bu temel fark nedeniyle, bunlar arasında doğrudan karşılaştırma yapılmaz.

Application Insights'ın aksine, OpenTelemetry ölçümleri zenginleştirmek veya filtrelemek için yerleşik mekanizmalar sağlamaz. Application Insights'ta, ölçümleri değiştirmek veya atmak için telemetri işlemcileri ve başlatıcılar kullanılabilir, ancak bu özellik OpenTelemetry'de kullanılamaz.

Ayrıca OpenTelemetry, Application Insights'ta bulunan işlevlere eşdeğer olmadığından ham ölçümlerin TrackMetric() doğrudan gönderilmesini desteklemez.

Application Insights'tan OpenTelemetry'ye geçiş, tüm Application Insights Ölçüm API'sinin kullanımını OpenTelemetry API'siyle değiştirmeyi içerir. Çeşitli OpenTelemetry Araçlarını ve bunların semantiğini anlamanızı gerektirir.

İpucu

Histogram, Application Insights GetMetric().TrackValue() API'sinin en çok yönlü ve en yakın eşdeğeridir. Aynı amaca ulaşmak için Application Insights Ölçüm API'lerini Histogram ile değiştirebilirsiniz.

Diğer Telemetri Türleri

CustomEvents

OpenTelemetry'de desteklenmez.

Application Insights Örneği:

TelemetryClient.TrackEvent()
AvailabilityTelemetry

OpenTelemetry'de desteklenmez.

Application Insights Örneği:

TelemetryClient.TrackAvailability()
PageViewTelemetry

OpenTelemetry'de desteklenmez.

Application Insights Örneği:

TelemetryClient.TrackPageView()

Konsol ve çalışan hizmeti uygulamaları için canlı ölçümler alabilir miyim?

Canlı ölçümleri içermeyen konsol ve çalışan hizmeti uygulamaları için Azure İzleyici OpenTelemetry Exporter'ı öneririz.

Sonraki adımlar

İpucu

Ürün grubumuz bu belgeler hakkında aktif olarak geri bildirim almak istiyor. Destek bölümüne geri bildirim otel@microsoft.com sağlayın veya bölümüne bakın.

Destek

  • Azure desteği sorunlar için bir Azure desteği bileti açın.
  • OpenTelemetry sorunları için doğrudan OpenTelemetry .NET topluluğuna başvurun.
  • Azure İzleyici Dışarı Aktarma ile ilgili açık sorunların listesi için GitHub Sorunları Sayfasına bakın.