Aracılığıyla paylaş


OpenTelemetry ile .NET gözlemlenebilirliği

Bir uygulamayı çalıştırdığınızda, uygulamanın ne kadar iyi performans sergilediklerini bilmek ve daha büyük hale gelmeden önce olası sorunları algılamak istersiniz. Bunu yapmak için, uygulamanızdan günlükler veya ölçümler gibi telemetri verilerini yayar ve ardından bu verileri izleyip analiz edebilirsiniz.

Gözlemlenebilirlik nedir?

Dağıtılmış sistem bağlamında gözlemlenebilirlik, her bileşenin durumu hakkında telemetriyi izleyip analiz edebilme, performanstaki değişiklikleri gözlemleyebilme ve bu değişikliklerin neden oluştuğunun tanılanmasıdır. Invaziv olan ve uygulamanın çalışmasını etkileyebilen hata ayıklamanın aksine, gözlemlenebilirlik birincil işlem için saydam olması ve sürekli olarak kullanılabilmesi için yeterince küçük bir performans etkisine sahip olması amaçlanmıştır.

Gözlemlenebilirlik genellikle aşağıdakilerin bir bileşimi kullanılarak yapılır:

Günlükler, ölçümler ve dağıtılmış izleme birlikte bazen gözlemlenebilirliğin üç sütunu olarak bilinir.

Her yapı aşağıdakilerden telemetri verilerini içerebilir:

  • Atık toplayıcı veya JIT derleyicisi gibi .NET çalışma zamanı.
  • Kestrel (ASP.NET web sunucusu) ve HttpClientgibi kitaplıklar.
  • Kodunuz tarafından yayılan uygulamaya özgü telemetri.

.NET'te gözlemlenebilirlik yaklaşımları

.NET uygulamalarında gözlemlenebilirlik elde etmenin birkaç farklı yolu vardır:

  • OpenTelemetry gibi bir kitaplığa başvurarak ve kullanarak kodda açıkça. Kaynak koduna erişiminiz varsa ve uygulamayı yeniden derleyebilirseniz, bu en güçlü ve yapılandırılabilir mekanizmadır.
  • EventPipe kullanarak işlem dışı. dotnet-monitor gibi araçlar günlükleri ve ölçümleri dinleyebilir ve sonra bunları herhangi bir kodu etkilemeden işleyebilir.
  • Başlangıç kancası kullanılarak, derlemeler daha sonra izleme toplayan işleme eklenebilir. Bu yaklaşımın bir örneği OpenTelemetry .NET Otomatik İzleme'dir.

OpenTelemetry nedir?

OpenTelemetry (OTel), telemetri verilerini toplamak ve yaymaya yönelik açık bir platformlar arası standarttır. OpenTelemetry şunları içerir:

OTel'in kullanılması, Microsoft'un Azure'daki APM ürünü prometheus ve Grafana, Azure İzleyici gibi açık kaynak sistemler de dahil olmak üzere çok çeşitli APM sistemlerinin veya OpenTelemetry ile iş ortağı olan birçok APM satıcısının kullanılmasını sağlar.

.NET de dahil olmak üzere çoğu dil ve platform için OpenTelemetry uygulamaları vardır.

OpenTelemetry'nin .NET uygulaması

.NET çerçevede günlüğe kaydetme, ölçümler ve etkinlik API'leri sağladığından .NET OpenTelemetry uygulaması diğer platformlardan biraz farklıdır. Bu, OTel'in kitaplık yazarlarının kullanması için API'ler sağlaması gerekmeyecek anlamına gelir. .NET OTel uygulaması izleme için şu platform API'lerini kullanır:

.NET OTel mimarisi

OTel,söz konusu API'lerden ve diğer kaynaklardan (izleme kitaplıkları aracılığıyla) telemetri toplar ve bunları depolama ve analiz için bir uygulama performansı izleme (APM) sistemine aktarır. OTel'in endüstri standardı olarak getirdiği avantaj, toplama için ortak bir mekanizma, telemetri verileri için ortak şemalar ve semantikler ve APM'lerin OTel ile nasıl tümleştirilebileceğine yönelik bir API'dir. OTel kullanmak, uygulamaların APM'ye özgü API'leri veya veri yapılarını kullanmasına gerek olmadığı anlamına gelir; OTel standardına göre çalışır. APM'ler APM'ye özgü bir dışarı aktarma bileşeni uygulayabilir veya telemetri verilerini APM sistemlerine aktarmak için yeni bir kablo standardı olan OTLP'yi kullanabilir.

OpenTelemetry paketleri

.NET'te OpenTelemetry, birkaç kategori oluşturan bir dizi NuGet paketi olarak uygulanır:

  • Çekirdek API
  • İzleme : Bu paketler çalışma zamanından ve ortak kitaplıklardan izleme toplar.
  • Exporters - Prometheus, Jaeger ve OTLP gibi APM sistemleriyle bu arabirim.

Aşağıdaki tabloda ana paketler açıklanmaktadır.

Paket Adı Açıklama
OpenTelemetry Temel OTEL işlevini sağlayan ana kitaplık
OpenTelemetry.Instrumentation.AspNetCore ASP.NET Core ve Kestrel için izleme
OpenTelemetry.Instrumentation.GrpcNetClient Giden gRPC çağrılarını izlemek için gRPC İstemcisi için izleme
OpenTelemetry.Instrumentation.Http Giden HTTP çağrılarını izlemek için HttpClient ve HttpWebRequest için izleme
OpenTelemetry.Instrumentation.SqlClient Veritabanı işlemlerini izlemek için SqlClient kullanılan izleme
OpenTelemetry.Exporter.Console Konsol için dışarı aktarıcı, genellikle hangi telemetrinin dışarı aktarıldığını tanılamak için kullanılır
OpenTelemetry.Exporter.OpenTelemetryProtocol OTLP protokolunu kullanan dışarı veren
OpenTelemetry.Exporter.Prometheus.AspNetCore ASP.NET Core uç noktası kullanılarak uygulanan Prometheus için Exporter
OpenTelemetry.Exporter.Zipkin Zipkin izleme için exporter

Örnekler

Bu konu, .NET'te OpenTelemetry kullanımına yönelik birkaç örnek izlenecek yol ile devam eder:

.NET Aspire'de OpenTelemetry

.NET Aspire , dağıtılmış uygulamalar oluşturmayı ve bunlarla çalışmayı kolaylaştırmak için .NET'e yönelik bir uzantı kümesidir. .NET Aspire kullanmanın avantajlarından biri, telemetrinin .NET için OpenTelemetry kitaplıkları kullanılarak yerleşik olmasıdır. .NET Aspire için varsayılan proje şablonları, bir bölümü OTel'i ayarlayıp yapılandırmak olan bir ServiceDefaults proje içerir. Service Defaults projesine bir .NET Aspire çözümündeki her hizmet tarafından başvurulur ve başlatılır.

Hizmet Varsayılanları proje şablonu OTel SDK'sını, ASP.NET, HttpClient ve Çalışma Zamanı İzleme paketlerini içerir ve bunlar dosyada Extensions.cs yapılandırılır. Telemetriyi dışarı aktarmak için .NET Aspire varsayılan olarak OTLP dışarı aktarmayı içerir, böylece Aspire Panosu'nu kullanarak telemetri görselleştirmesi sağlayabilir.

Aspire Panosu, telemetri gözlemini yerel hata ayıklama döngüsüne getirerek geliştiricilerin yalnızca uygulamaların telemetri ürettiğinden emin olmasını sağlamakla kalmaz, aynı zamanda bu telemetriyi kullanarak bu uygulamaları yerel olarak tanılamasını da sağlar. Hizmetler arasındaki çağrıları gözlemleyebilmek, üretimdeki hata ayıklama zamanında olduğu kadar yararlı olduğunu kanıtlıyor. Project'i Visual Studio'dan veya dotnet run AppHost projeden F5'e AppHost aldığınızda .NET Aspire panosu otomatik olarak başlatılır.

Aspire Panosu

.NET Aspire hakkında daha fazla ayrıntı için bkz:

.NET Aspire Orchestration olmadan Service Defaults projesini yeniden kullanma

ASP.NET projeleri için OTel'i yapılandırmanın muhtemelen en kolay yolu, düzenleme için AppHost gibi .NET Aspire'in geri kalanını kullanmasa bile Aspire Service Defaults projesini kullanmaktır. Hizmet Varsayılanları projesi, Visual Studio veya dotnet newaracılığıyla bir proje şablonu olarak kullanılabilir. OTel'i yapılandırarak OTLP verme işlemini ayarlar. Ardından OTel ortam değişkenlerini kullanarak OTLP uç noktasını telemetri gönderecek şekilde yapılandırabilir ve uygulamanın kaynak özelliklerini sağlayabilirsiniz.

.NET Aspire dışında ServiceDefault kullanma adımları şunlardır:

  • Visual Studio'da Yeni Proje Ekle'yi kullanarak Çözüme ServiceDefaults projesini ekleyin veya dotnet new aspire-servicedefaults --output ServiceDefaults
  • ASP.NET uygulamanızdan ServiceDefaults projesine başvurun. Visual Studio'da "Ekle -> Proje Başvurusu" kullanın ve ServiceDefaults projesini seçin"
  • Uygulama oluşturucu başlatmanızın bir parçası olarak OpenTelemetry kurulum işlevini çağırın.
var builder = WebApplication.CreateBuilder(args);
builder.ConfigureOpenTelemetry();

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Hizmet Varsayılanları, veya belirli işlevler aracılığıyla AddServiceDefaults() gerekirse aşağıdaki ek işlevleri ayarlayabilir:

  • ve /alive uç noktalarıyla /health sistem durumu denetimleri
  • .NET Aspire'in geri kalanı olmadan işlem yapılmayacak hizmet bulma
  • Hata durumunda isteği yeniden deneyecek httpclient için dayanıklılığı yapılandırma