Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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:
- Gelen istek, belirli bir bileşendeki hata veya verilen sipariş gibi tek tek işlemleri kaydeden günlükler.
- Ölçümler, tamamlanan istek sayısı, etkin istekler, satılan pencere öğeleri gibi sayaçlar ve ölçüm cihazları veya istek gecikme süresinin histogramı olabilir.
- Dağıtılmış izleme, dağıtılmış bir sistemdeki bileşenler arasında istekleri ve etkinlikleri izler, böylece zamanın nereye harcandığını görebilir ve belirli hataları izleyebilirsiniz.
Günlükler, ölçümler ve dağıtılmış izleme birlikte bazen gözlemlenebilirliğin üç sütunu olarak bilinir.
Her sütun aşağıdakilerden gelen 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:
- Kodda açıkça, OpenTelemetry gibi bir kitaplığa başvurarak ve onu kullanarak. Kaynak koduna erişiminiz varsa ve uygulamayı yeniden derleyebilirseniz, bu en güçlü ve yapılandırılabilir mekanizmadır.
- İşlem dışından EventPipe kullanarak. 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 işleme enjekte edilebilir ve sonrasında enstrümantasyon toplayabilir. Bu yaklaşımın bir örneği OpenTelemetry .NET Otomatik Enstrümantasyon'dur.
OpenTelemetry nedir?
OpenTelemetry (OTel), telemetri verilerini toplamak ve yaymaya yönelik açık bir platformlar arası standarttır. OpenTelemetry şunları içerir:
- Kütüphanelerin, kod çalışırken telemetri verilerini kaydetmesi için kullanılacak API'ler.
- Uygulama geliştiricilerinin kaydedilen verilerin hangi bölümünün ağ üzerinden gönderileceğini, nereye gönderileceğini ve nasıl filtrelenebileceğini, arabelleğe alınabileceğini, zenginleştirilebileceğini ve dönüştürülebileceğini yapılandırmak için kullandığı API'ler.
- Anlam kuralları , telemetri verilerinin adlandırması ve içeriği hakkında rehberlik sağlar. Telemetri verileri üreten uygulamalar ve verileri alan araçların farklı veri türlerinin ne anlama geldiğini ve araçların etkili analiz sağlayabilmesi için ne tür verilerin yararlı olduğunu kabul etmek önemlidir.
- İhracatçılar için bir arabirim. Dışarı aktarıcılar, telemetri verilerinin farklı telemetri arka uçlarına belirli biçimlerde iletilmesini sağlayan eklentilerdir.
- OTLP kablo protokolü , telemetri verilerini iletmek için bir satıcı nötr ağ protokolü seçeneğidir. Bazı araçlar ve satıcılar, sahip olabilecekleri önceden var olan özel protokollere ek olarak bu protokolü destekler.
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 Framework, günlüğe kaydetme, ölçümler ve etkinlik API'leri sağladığı için .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ı enstrümantasyon için şu platform API'lerini kullanır:
- Microsoft.Extensions.Logging.ILogger<TCategoryName> loglama için
- System.Diagnostics.Metrics.Meter ölçümler için
- System.Diagnostics.ActivitySourceve System.Diagnostics.Activitydağıtılmış izleme için
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
- Ölçümleme - Bu paketler çalışma zamanından ve ortak kitaplıklardan ölçümleme verisi toplar.
- Exporters, Prometheus, Jaeger ve OTLP gibi APM sistemleriyle etkileşim içerisindedir.
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 araç takımı |
| OpenTelemetry.Instrumentation.GrpcNetClient | Giden gRPC çağrılarını izlemek için gRPC İstemcisi izleme araçları |
| OpenTelemetry.Instrumentation.Http | Giden HTTP çağrılarını izlemek için HttpClient ve HttpWebRequest üzerinde enstrümantasyon sağlamak |
| OpenTelemetry.Instrumentation.SqlClient | Veritabanı işlemlerini izlemek için kullanılan SqlClient enstrümantasyonu |
| 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 protokolünü kullanan ihracatçı |
| OpenTelemetry.Exporter.Prometheus.AspNetCore | Prometheus Exporter, ASP.NET Core uç noktası kullanılarak uygulandı. |
| OpenTelemetry.Exporter.Zipkin | Zipkin izleme için dışa aktarma aracı |
Örnekler
Bu konu, .NET'te OpenTelemetry kullanımına dair birkaç örnek açıklama ile devam etmektedir.
- Örnek: OTLP ve bağımsız Aspire Gösterge Panelini kullanma
- Örnek: Azure Monitor ve Application Insights ile OpenTelemetry kullanma
- Örnek: Prometheus, Grafana ve Jaeger ile OpenTelemetry kullanma
Aspire'de OpenTelemetry
Aspire , dağıtılmış uygulamalar oluşturmayı ve bunlarla çalışmayı kolaylaştırmak için .NET'e yönelik bir uzantı kümesidir. Aspire kullanmanın avantajlarından biri, telemetrinin .NET için OpenTelemetry kitaplıkları kullanılarak yerleşik olmasıdır. Aspire için varsayılan proje şablonları, OTel'i ayarlamak ve yapılandırmak için bir proje içerir ServiceDefaults . Hizmet Varsayılanları projesine bir Aspire çözümündeki her hizmet tarafından başvurulur ve başlatılır.
Hizmet Varsayılanları proje şablonu OTel SDK, ASP.NET, HttpClient ve Çalışma Zamanı İzleme paketlerini içerir ve bunlar Extensions.cs dosyasında yapılandırılır. Telemetriyi dışarı aktarmak için Aspire, Aspire Panosu'nu kullanarak telemetri görselleştirmesi sağlayabilmesi için varsayılan olarak OTLP dışarı aktarmayı içerir.
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 çalıştırdığınızda veya F5 tuşuna bastığınızda projeyi çalıştırdığınızda Aspire panosu otomatik olarak başlatılır.
Aspire hakkında daha fazla ayrıntı için bkz:
- Aspire'a Genel Bakış
- Aspire 'de Telemetri
- Aspire Gösterge Paneli
Aspire Orchestration olmadan Hizmet Varsayılanları projesini yeniden kullanma
ASP.NET projeleri için OTel'i yapılandırmanın muhtemelen en kolay yolu, düzenleme için AppHost gibi 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ırır ve OTLP dışa aktarıcıyı 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.
ServiceDefaults'ı Aspire dışında kullanma adımları şunlardır:
- Visual Studio'da "Yeni Proje Ekle" seçeneğini kullanarak ServiceDefaults projesini çözüme ekleyin veya
dotnet new aspire-servicedefaults --output ServiceDefaultskullanın. - ASP.NET uygulamanızdan ServiceDefaults projesine başvurun. Visual Studio'daProje 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ı, gerekirse AddServiceDefaults() veya belirli işlevler aracılığıyla aşağıdaki ek işlevleri ayarlayabilir:
-
/healthve/aliveuç noktalarıyla sağlık kontrolleri. - Hizmet bulma, Aspire'in geri kalanı olmadan bir no-op olacaktır.
- Hata durumunda istekleri yeniden deneyen
HttpClientiçin dayanıklılığı yapılandırma.