.NET, Node.js, Python ve Java uygulamaları için Azure İzleyici OpenTelemetry'yi etkinleştirme

Bu makalede , Azure İzleyici Application Insights'ta deneyimleri desteklemek için OpenTelemetry tabanlı veri toplamanın nasıl etkinleştirileceği ve yapılandırıldığı açıklanır. "Azure İzleyici OpenTelemetry Distro" uygulamasının nasıl yükleneceğini inceleyeceğiz. OpenTelemetry kavramları hakkında daha fazla bilgi edinmek için bkz. OpenTelemetry'ye genel bakış veya OpenTelemetry SSS.

OpenTelemetry Yayın Durumu

.NET, Node.js, Python ve Java uygulamaları için OpenTelemetry teklifleri sağlanır.

Dil Yayın Durumu
Java 1
.NET ⚠️ 2
Node.js ⚠️ 2
Python ⚠️ 2

Dipnotlar

Not

Özelliğe göre yayın durumu için bkz. SSS.

Başlarken

Uygulamanızı OpenTelemetry ile izlemek için bu bölümdeki adımları izleyin.

Önkoşullar

Dikkat

OpenTelemetry Topluluk Paketi ile yan yana çalışan Azure İzleyici OpenTelemetry Dağıtımını test ettik. Dağıtımı yüklemeden önce OpenTelemetry ile ilgili tüm paketleri kaldırmanızı öneririz.

İstemci kitaplığını yükleme

En son Azure.Monitor.OpenTelemetry.AspNetCore NuGet paketini yükleyin:

dotnet add package --prerelease Azure.Monitor.OpenTelemetry.AspNetCore 

Azure İzleyici Application Insights'i etkinleştirme

Azure İzleyici Application Insights'ı etkinleştirmek için uygulamanızda küçük bir değişiklik yapacak ve "Bağlantı Dizenizi" ayarlayacaksınız. Bağlantı Dizesi, uygulamanıza Distro'nun topladığı telemetri verilerini nereye göndereceğinizi bildirir ve sizin için benzersizdir.

Uygulamanızı değiştirme

Uygulamanızın başlangıcına ekleyin UseAzureMonitor() . .NET sürümünüze bağlı olarak, bu sizin veya program.cs sınıfınızda startup.cs olacaktır.

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddOpenTelemetry().UseAzureMonitor();

var app = builder.Build();

app.Run();

Application Insights Kaynağınızdan Bağlantı Dizesini Kopyalama

İpucu

Henüz bir kaynağınız yoksa application insights kaynağı oluşturmak için harika bir zaman.

Benzersiz Bağlantı Dizenizi kopyalamak için:

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

  1. Application Insights kaynağınızın Genel Bakış bölmesine gidin.
  2. Bağlantı Dizenizi bulun.
  3. Bağlantı dizesinin üzerine gelin ve Panoya kopyala simgesini seçin.

Bağlantı Dizesini ortamınıza yapıştırma

Bağlantı Dizenizi yapıştırmak için aşağıdaki seçeneklerden birini belirleyin:

A. Ortam Değişkeni aracılığıyla ayarlama (Önerilen)

Aşağıdaki komutta öğesini benzersiz bağlantı dizenizle değiştirin<Your Connection String>.

APPLICATIONINSIGHTS_CONNECTION_STRING=<Your Connection String>

B. Yapılandırma Dosyası aracılığıyla ayarlama - Yalnızca Java (Önerilen)

adlı applicationinsights.jsonbir yapılandırma dosyası oluşturun ve aşağıdaki içerikle aynı dizine applicationinsights-agent-3.4.13.jar yerleştirin:

{
  "connectionString": "<Your Connection String>"
}

Önceki JSON değerini benzersiz bağlantı dizenizle değiştirin<Your Connection String>.

C. Kod aracılığıyla ayarlama - ASP.NET Core, Node.js ve Yalnızca Python (Önerilmez)

Kod aracılığıyla Bağlantı Dizesi ayarlama gibi bağlantı dizesi yapılandırmasına bakın.

Not

Bağlantı dizesini birden fazla yerde ayarlarsanız, aşağıdaki ilkeye bağlıyız:

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

Verilerin aktığını onaylayın

Uygulamanızı çalıştırın ve Azure portal Application Insights Kaynak sekmenizi açın. Verilerin portalda görünmesi birkaç dakika sürebilir.

Sunucu isteklerinin ve sunucu yanıt süresinin vurgulandığı Application Insights'a Genel Bakış sekmesinin ekran görüntüsü.

İşte bu kadar. Uygulamanız artık Application Insights tarafından izleniyor. Aşağıdaki diğer her şey isteğe bağlıdır ve daha fazla özelleştirme için kullanılabilir.

Çalışmıyor musunuz? ASP.NET Core, Java, Node.js veya Python için sorun giderme sayfasına göz atın.

Önemli

Aynı Application Insights kaynağına telemetri yayan iki veya daha fazla hizmetiniz varsa, Bunları Uygulama Haritası'nda düzgün bir şekilde göstermek için Bulut Rolü Adları'nı ayarlamanız gerekir.

Application Insights izlemesini kullanmanın bir parçası olarak tanılama verilerini toplar ve Microsoft'a göndeririz. Bu veriler Application Insights'ı çalıştırmamıza ve geliştirmemize yardımcı olur. Daha fazla bilgi edinmek için bkz. Azure Uygulaması İçgörüler'de statsbeat.

Otomatik veri toplama

Dağıtımlar, OpenTelemetry "izleme kitaplıkları" içinde toplayarak otomatik olarak veri toplar.

Dahil edilen izleme kitaplıkları

İstekler

Bağımlılıklar

Günlüğe Kaydetme

  • ILogger

ILogger hakkında daha fazla bilgi için bkz. C# ve .NET'te günlüğe kaydetme vekod örnekleri.

Dipnotlar

  • 1: İşlenmeyen özel durumların otomatik raporlamayı destekler
  • 2: OpenTelemetry Ölçümlerini Destekler
  • 3: Varsayılan olarak, günlük yalnızca BİlGİ düzeyinde veya daha yüksek bir düzeyde toplanır. Bu ayarı değiştirmek için yapılandırma seçeneklerine bakın.
  • 4: Varsayılan olarak günlük kaydı yalnızca UYARI düzeyinde veya daha yüksek bir düzeyde toplanır...

Not

Azure İzleyici OpenTelemetry Dağıtımları , Application Insights standart ölçümlerini otomatik olarak yaymak için özel eşleme ve mantık içerir.

İpucu

OpenTelemetry tabanlı teklifler şu anda tüm OpenTelemetry ölçümlerini Ölçüm Gezgini'nde Özel Ölçümler ve Performans Sayaçları olarak gösterir. .NET, Node.js ve Python için ölçüm adı olarak ayarladığınız her şey ölçüm ad alanı olur.

Topluluk izleme kitaplığı ekleme

OpenTelemetry topluluğundan izleme kitaplıkları eklediğinizde otomatik olarak daha fazla veri toplayabilirsiniz.

Not

Topluluk izleme kitaplıklarının kalitesini desteklemiyoruz ve garanti edemiyoruz. Dağıtıma eklemek için bir topluluk araç kitaplığı önermek isterseniz geri bildirim topluluğumuzda bir fikir gönderin veya oy verin.

Dikkat

Bazı izleme kitaplıkları deneysel OpenTelemetry semantik belirtimlerini temel alır. Bunları eklemek sizi gelecekteki hataya neden olan değişikliklere karşı savunmasız bırakabilir.

Topluluk kitaplığı eklemek için veya ConfigureOpenTelemetryTraceProvider yöntemlerini kullanınConfigureOpenTelemetryMeterProvider.

Aşağıdaki örnekte, ek ölçümler toplamak için Çalışma Zamanı İzleme'nin nasıl eklenebilecekleri gösterilmektedir.

var builder = WebApplication.CreateBuilder(args);

builder.Services.ConfigureOpenTelemetryMeterProvider((sp, builder) => builder.AddRuntimeInstrumentation());
builder.Services.AddOpenTelemetry().UseAzureMonitor();

var app = builder.Build();

app.Run();

Özel telemetri toplama

Bu bölümde, uygulamanızdan özel telemetrinin nasıl toplayacağınız açıklanmaktadır.

Dilinize ve sinyal türünüze bağlı olarak, özel telemetri toplamanın farklı yolları vardır, örneğin:

  • OpenTelemetry API'si
  • Dile özgü günlük/ölçüm kitaplıkları
  • Application Insights Klasik API

Aşağıdaki tablo, şu anda desteklenen özel telemetri türlerini temsil eder:

Dil Özel Olaylar Özel Ölçümler Bağımlılıklar Özel durumlar Sayfa Görüntülemeleri İstekler İzlemeler
ASP.NET Core
   OpenTelemetry API'si Yes Yes Yes Yes
   iLogger API'si Yes
   AI Klasik API
Java
   OpenTelemetry API'si Yes Yes Yes Yes
   Logback, Log4j, JUL Yes Yes
   Micrometer ölçümleri Yes
   AI Klasik API Yes Yes Yes Yes Yes Yes Yes
Node.js
   OpenTelemetry API'si Yes Yes Yes Yes
   Konsol, Winston, Bunyan Yes
   AI Klasik API Yes Yes Yes Yes Yes Yes Yes
Python
   OpenTelemetry API'si Yes Yes Yes Yes
   Python Günlük Modülü Yes

Not

Application Insights Java 3.x, Application Insights Klasik API'sine gönderilen telemetri verilerini dinler. Benzer şekilde, Application Insights Node.js 3.x, Application Insights Klasik API'siyle oluşturulan olayları toplar. Bu, yükseltmeyi kolaylaştırır ve tüm özel telemetri türleri OpenTelemetry API'sinde desteklenene kadar özel telemetri desteğimizdeki boşluğu doldurur.

Özel Ölçümler Ekleme

Not

Özel Ölçümler, Azure İzleyici Application Insights'ta önizleme aşamasındadır. Boyutları olmayan özel ölçümler varsayılan olarak kullanılabilir. Boyutları görüntülemek ve uyarı vermek için kabul etmeniz gerekir.

İzleme kitaplıkları tarafından sağlananların ötesinde daha fazla ölçüm toplamayı göz önünde bulundurun.

OpenTelemetry API'si, çeşitli ölçüm senaryolarını kapsayan altı ölçüm "aracı" sunar ve Ölçüm Gezgini'nde ölçümleri görselleştirirken doğru "Toplama Türü"nü seçmeniz gerekir. Bu gereksinim, ölçümleri göndermek için OpenTelemetry Ölçüm API'sini kullanırken ve izleme kitaplığı kullanırken geçerlidir.

Aşağıdaki tabloda OpenTelemetry Ölçüm Araçlarının her biri için önerilen toplama türleri gösterilmektedir.

OpenTelemetry Instrument Azure İzleyici Toplama Türü
Sayaç Sum
Zaman Uyumsuz Sayaç Sum
Histogram Min, Max, Average, Sum ve Count
Zaman Uyumsuz Ölçer Ortalama
UpDownCounter Sum
Zaman Uyumsuz UpDownCounter Sum

Dikkat

Tabloda gösterilenlerin ötesinde toplama türleri genellikle anlamlı değildir.

OpenTelemetry Belirtimi, araçları açıklar ve her birini ne zaman kullanabileceğinize ilişkin örnekler sağlar.

İpucu

Histogram, Application Insights GetMetric Klasik API'sinin en çok yönlü ve en yakın eşdeğeridir. Azure İzleyici şu anda histogram aracını desteklenen beş toplama türümüzde düzleştirir ve yüzdebirlik dilim desteği devam etmektedir. Daha az çok yönlü olsa da, diğer OpenTelemetry araçları uygulamanızın performansı üzerinde daha az etkiye sahiptir.

Histogram Örneği

Uygulama başlatma, bir Ölçüme ada göre abone olmalıdır.

var builder = WebApplication.CreateBuilder(args);

builder.Services.ConfigureOpenTelemetryMeterProvider((sp, builder) => builder.AddMeter("OTel.AzureMonitor.Demo"));
builder.Services.AddOpenTelemetry().UseAzureMonitor();

var app = builder.Build();

app.Run();

aynı Meter ad kullanılarak başlatılmalıdır.

var meter = new Meter("OTel.AzureMonitor.Demo");
Histogram<long> myFruitSalePrice = meter.CreateHistogram<long>("FruitSalePrice");

var rand = new Random();
myFruitSalePrice.Record(rand.Next(1, 1000), new("name", "apple"), new("color", "red"));
myFruitSalePrice.Record(rand.Next(1, 1000), new("name", "lemon"), new("color", "yellow"));
myFruitSalePrice.Record(rand.Next(1, 1000), new("name", "lemon"), new("color", "yellow"));
myFruitSalePrice.Record(rand.Next(1, 1000), new("name", "apple"), new("color", "green"));
myFruitSalePrice.Record(rand.Next(1, 1000), new("name", "apple"), new("color", "red"));
myFruitSalePrice.Record(rand.Next(1, 1000), new("name", "lemon"), new("color", "yellow"));

Sayaç Örneği

Uygulama başlatma, bir Ölçüme ada göre abone olmalıdır.

var builder = WebApplication.CreateBuilder(args);

builder.Services.ConfigureOpenTelemetryMeterProvider((sp, builder) => builder.AddMeter("OTel.AzureMonitor.Demo"));
builder.Services.AddOpenTelemetry().UseAzureMonitor();

var app = builder.Build();

app.Run();

aynı Meter ad kullanılarak başlatılmalıdır.

var meter = new Meter("OTel.AzureMonitor.Demo");
Counter<long> myFruitCounter = meter.CreateCounter<long>("MyFruitCounter");

myFruitCounter.Add(1, new("name", "apple"), new("color", "red"));
myFruitCounter.Add(2, new("name", "lemon"), new("color", "yellow"));
myFruitCounter.Add(1, new("name", "lemon"), new("color", "yellow"));
myFruitCounter.Add(2, new("name", "apple"), new("color", "green"));
myFruitCounter.Add(5, new("name", "apple"), new("color", "red"));
myFruitCounter.Add(4, new("name", "lemon"), new("color", "yellow"));

Ölçer Örneği

Uygulama başlatma, bir Ölçüme ada göre abone olmalıdır.

var builder = WebApplication.CreateBuilder(args);

builder.Services.ConfigureOpenTelemetryMeterProvider((sp, builder) => builder.AddMeter("OTel.AzureMonitor.Demo"));
builder.Services.AddOpenTelemetry().UseAzureMonitor();

var app = builder.Build();

app.Run();

aynı Meter ad kullanılarak başlatılmalıdır.

var process = Process.GetCurrentProcess();

var meter = new Meter("OTel.AzureMonitor.Demo");
ObservableGauge<int> myObservableGauge = meter.CreateObservableGauge("Thread.State", () => GetThreadState(process));

private static IEnumerable<Measurement<int>> GetThreadState(Process process)
{
    foreach (ProcessThread thread in process.Threads)
    {
        yield return new((int)thread.ThreadState, new("ProcessId", process.Id), new("ThreadId", thread.Id));
    }
}

Özel Özel Durumlar Ekleme

İzleme kitaplıklarının özel durumları otomatik olarak Application Insights'a bildirmesini seçin. Ancak, izleme kitaplıkları raporunun ötesinde özel durumları el ile raporlamak isteyebilirsiniz. Örneğin, kodunuz tarafından yakalanan özel durumlar normalde bildirilir. Hataların bölümü ve uçtan uca işlem görünümleri dahil olmak üzere ilgili deneyimlere dikkat çekmek için bunları raporlamak isteyebilirsiniz.

  • Etkinlik kullanarak bir Özel Durumu günlüğe kaydetmek için:
    using (var activity = activitySource.StartActivity("ExceptionExample"))
    {
        try
        {
            throw new Exception("Test exception");
        }
        catch (Exception ex)
        {
            activity?.SetStatus(ActivityStatusCode.Error);
            activity?.RecordException(ex);
        }
    }
    
  • ILogger kullanarak bir Özel Durumu günlüğe kaydetmek için:
    var logger = loggerFactory.CreateLogger(logCategoryName);
    
    try
    {
        throw new Exception("Test Exception");
    }
    catch (Exception ex)
    {
        logger.Log(
            logLevel: LogLevel.Error,
            eventId: 0,
            exception: ex,
            message: "Hello {name}.",
            args: new object[] { "World" });
    }
    

Özel Spans Ekleme

İki senaryoda özel bir yayılma alanı eklemek isteyebilirsiniz. İlk olarak, izleme kitaplığı tarafından henüz toplanmamış bir bağımlılık isteği olduğunda. İkincisi, bir uygulama işlemini uçtan uca işlem görünümünde bir yayılma alanı olarak modellemek istediğinizde.

Not

Activity Ad alanından ve ActivitySource sınıfları System.Diagnostics sırasıyla ve Tracer'nin Span OpenTelemetry kavramlarını temsil ediyor. kullanarak yerine TracerProvideroluşturucusunu kullanarak doğrudan oluşturursunuzActivitySource. Her ActivitySource sınıf kullanılarak AddSource()açıkça bağlanmalıdırTracerProvider. Bunun nedeni OpenTelemetry izleme API'sinin bölümlerinin doğrudan .NET çalışma zamanına dahil edilmiş olmasıdır. Daha fazla bilgi edinmek için bkz. OpenTelemetry .NET İzleme API'sine Giriş.

internal static readonly ActivitySource activitySource = new("ActivitySourceName");

var builder = WebApplication.CreateBuilder(args);

builder.Services.ConfigureOpenTelemetryTracerProvider((sp, builder) => builder.AddSource("ActivitySourceName"));
builder.Services.AddOpenTelemetry().UseAzureMonitor();

var app = builder.Build();

app.MapGet("/", () =>
{
    using (var activity = activitySource.StartActivity("CustomActivity"))
    {
        // your code here
    }

    return $"Hello World!";
});

app.Run();

çağrılırken StartActivity varsayılan olarak ActivityKind.Internal ayarlanır, ancak başka ActivityKindherhangi bir sağlayabilirsiniz. ActivityKind.Client, ActivityKind.Producerve ActivityKind.Internal Application Insights dependenciesile eşlenir. ActivityKind.Server ve ActivityKind.Consumer Application Insights requestsile eşlenir.

Application Insights Klasik API'sini kullanarak özel telemetri gönderme

Mümkün olduğunda OpenTelemetry API'lerini kullanmanızı öneririz, ancak Application Insights Klasik API'lerinikullanmanız gerektiğinde bazı senaryolar olabilir.

Bu .NET'te kullanılamaz.

Telemetriyi değiştirme

Bu bölümde telemetrinin nasıl değiştirileceği açıklanmaktadır.

Span öznitelikleri ekleme

Bu öznitelikler telemetrinize özel özellik eklemeyi içerebilir. Application Insights şemasında İstemci IP'leri gibi isteğe bağlı alanlar ayarlamak için öznitelikleri de kullanabilirsiniz.

Span'a özel özellik ekleme

Spans'a eklediğiniz tüm öznitelikler özel özellikler olarak dışarı aktarılır. İstekler, bağımlılıklar, izlemeler veya özel durumlar tablosunda customDimensions alanını doldurur.

Span öznitelikleri eklemek için aşağıdaki iki yoldan birini kullanın:

İpucu

İzleme kitaplıkları tarafından sağlanan seçenekleri kullanmanın avantajı, kullanılabilir olduğunda bağlamın tamamının kullanılabilir olmasıdır. Sonuç olarak, kullanıcılar daha fazla öznitelik eklemeyi veya filtrelemeyi seçebilir. Örneğin, HttpClient izleme kitaplığındaki zenginleştirme seçeneği, kullanıcıların HttpRequestMessage'a ve HttpResponseMessage'a erişmesini sağlar. Herhangi bir öğeyi seçip bir öznitelik olarak depolayabilirler.

  1. Birçok izleme kitaplığı zenginleştirme seçeneği sunar. Yönergeler için tek tek izleme kitaplıklarının benioku dosyalarına bakın:

  2. Özel işlemci kullanın:

İpucu

Azure İzleyici'yi eklemeden önce burada gösterilen işlemciyi ekleyin.

var builder = WebApplication.CreateBuilder(args);

builder.Services.ConfigureOpenTelemetryTracerProvider((sp, builder) => builder.AddProcessor(new ActivityEnrichingProcessor()));
builder.Services.AddOpenTelemetry().UseAzureMonitor();

var app = builder.Build();

app.Run();

Aşağıdaki kodla projenize ekleyin ActivityEnrichingProcessor.cs :

public class ActivityEnrichingProcessor : BaseProcessor<Activity>
{
    public override void OnEnd(Activity activity)
    {
        // The updated activity will be available to all processors which are called after this processor.
        activity.DisplayName = "Updated-" + activity.DisplayName;
        activity.SetTag("CustomDimension1", "Value1");
        activity.SetTag("CustomDimension2", "Value2");
    }
}

Kullanıcı IP'sini ayarlama

span özniteliğini ayarlayarak http.client_ip istekler için client_IP alanını doldurabilirsiniz. Application Insights, kullanıcı konumu öznitelikleri oluşturmak için IP adresini kullanır ve ardından varsayılan olarak atar.

Özel özellik ekleme örneğini kullanın, ancak içindeki ActivityEnrichingProcessor.csaşağıdaki kod satırlarını değiştirin:

// only applicable in case of activity.Kind == Server
activity.SetTag("http.client_ip", "<IP Address>");

Kullanıcı kimliğini veya kimliği doğrulanmış kullanıcı kimliğini ayarlama

aşağıdaki yönergeleri kullanarak istekler için user_Id veya user_AuthenticatedId alanını doldurabilirsiniz. Kullanıcı Kimliği anonim bir kullanıcı tanımlayıcısıdır. Kimliği Doğrulanmış Kullanıcı Kimliği bilinen bir kullanıcı tanımlayıcısıdır.

Önemli

Kimliği Doğrulanmış Kullanıcı Kimliği'ni ayarlamadan önce geçerli gizlilik yasalarına başvurun.

Özel özellik ekleme örneğini kullanın.

activity?.SetTag("enduser.id", "<User Id>");

Günlük Öznitelikleri Ekleme

OpenTelemetry kullanır. NET'in ILogger'ları. Günlüklere özel boyutlar ekleme, ileti şablonu kullanılarak gerçekleştirilebilir.

Telemetri filtreleme

Telemetriyi uygulamanızdan ayrılmadan önce filtrelemek için aşağıdaki yöntemleri kullanabilirsiniz.

  1. Birçok izleme kitaplığı bir filtre seçeneği sağlar. Yönergeler için tek tek izleme kitaplıklarının benioku dosyalarına bakın:

  2. Özel işlemci kullanın:

    İpucu

    Azure İzleyici'yi eklemeden önce burada gösterilen işlemciyi ekleyin.

    var builder = WebApplication.CreateBuilder(args);
    
    builder.Services.ConfigureOpenTelemetryTracerProvider((sp, builder) => builder.AddProcessor(new ActivityFilteringProcessor()));
    builder.Services.ConfigureOpenTelemetryTracerProvider((sp, builder) => builder.AddSource("ActivitySourceName"));
    builder.Services.AddOpenTelemetry().UseAzureMonitor();
    
    var app = builder.Build();
    
    app.Run();
    

    Aşağıdaki kodla projenize ekleyin ActivityFilteringProcessor.cs :

    public class ActivityFilteringProcessor : BaseProcessor<Activity>
    {
        public override void OnStart(Activity activity)
        {
            // prevents all exporters from exporting internal activities
            if (activity.Kind == ActivityKind.Internal)
            {
                activity.IsAllDataRequested = false;
            }
        }
    }
    
  3. Belirli bir kaynak kullanılarak açıkça eklenmiyorsa, bu kaynak kullanılarak AddSource("ActivitySourceName")oluşturulan etkinliklerin hiçbiri dışarı aktarılamaz.

İzleme kimliğini veya span kimliğini alma

İzleme kimliğini veya span kimliğini almak isteyebilirsiniz. Application Insights dışında bir hedefe gönderilen günlükleriniz varsa, izleme kimliğini veya span kimliğini eklemeyi göz önünde bulundurun. Bunu yapmak, hata ayıklama ve sorunları tanılama sırasında daha iyi bağıntı sağlar.

Not

Activity ad alanından System.Diagnostics ve ActivitySource sınıfları sırasıyla ve Tracer'nin Span OpenTelemetry kavramlarını temsil ediyor. Bunun nedeni OpenTelemetry izleme API'sinin parçalarının doğrudan .NET çalışma zamanına dahil edilmiş olmasıdır. Daha fazla bilgi edinmek için bkz. OpenTelemetry .NET İzleme API'sine Giriş.

Activity activity = Activity.Current;
string traceId = activity?.TraceId.ToHexString();
string spanId = activity?.SpanId.ToHexString();

Destek

OpenTelemetry geri bildirimi

Geri bildirim sağlamak için:

Sonraki adımlar