ASP.NET Core'da Server-Timing başlığıyla backend metrikleri DevTools'ta
Maarten Balliauw, ASP.NET Core uygulamasına Server-Timing yanıt başlığı ekleyerek veritabanı ve dış API sürelerinin tarayıcı DevTools'ta görünmesini nasıl sağlayacağını anlatıyor. Middleware, ölçüm özelliği ve OpenTelemetry Activity entegrasyonu adım adım ele alınıyor. Backend'de yavaş kalan işlemi bulmak isteyen geliştiriciler için pratik bir yöntem sunuyor.
Kilit noktalar
- Server-Timing başlığı her girdiyi name;dur=ms;desc="..." biçiminde taşır ve tarayıcılar bunu hazır olarak gösterir.
- Middleware, süreyi yanıt başlamadan hemen önce OnStarting içinde yazmalıdır; sonrasında başlık eklenemez.
- Ölçüm özelliği IHttpContextAccessor ya da HttpContext üzerinden her katmana erişilebilir hale getirilir ve erişim kilitlenerek korunur.
- OpenTelemetry kullanıyorsanız etiketleri istek Activity'sine ekleyin; çocuk span'lardaki etiketler middleware tarafından görülmez.
- Iç zamanlamalar bilgi sızdırabilir; ShouldEmit gibi bir koşulla yalnızca geliştirme ortamında ya da yetkili kullanıcılara gönderin.
- Yazar, trailer üzerinden gönderimin yalnızca Firefox'ta DevTools'ta göründüğünü belirtiyor; bu yüzden standart yanıt başlığı tercih ediliyor.
Tarayıcı DevTools'un Network sekmesi DNS ve TLS sürelerini gösterir, ama sunucunun yanıtını beklediği süre yalnızca tek bir çubuk olarak görünür ve bu sürenin veritabanı mı yoksa dış bir API mi tarafından harcandığını söylemez. Server-Timing yanıt başlığı, uygulamanın kendi ölçümlerini tarayıcıya taşımanın standart yoludur ve Chrome, Edge ve Firefox bu değerleri tarayıcının kendi zamanlamalarının yanında gösterir.
Yazar, bir middleware ile isteğin toplam süresini OnStarting geri çağrısında başlığa yazmayı, ardından HttpContext.Features üzerinden bir ölçüm özelliği ekleyerek kod içinden süre kaydetmeyi gösteriyor. Ayrıca using bloğuyla çalışan bir Measure uzantısı, OpenTelemetry Activity verilerini kopyalama ve ActivityListener yaklaşımları anlatılıyor. Başlığın yalnızca geliştirme ortamında ya da yetkili kullanıcılara gönderilmesi önerilir, çünkü ayrıntılı zamanlamalar bir saldırgana iç işleyiş hakkında bilgi verebilir.
Gerçek dünyada kullanımı
- Yavaş bir liste endpoint'inde veritabanı sorgusu ile fiyatlandırma servisi çağrısının hangisinin gecikmeye yol açtığını geliştirme ortamında tarayıcıdan görmek.
- OpenTelemetry ile izlenen bir ASP.NET Core API'sinde request Activity'sine yazılan süreleri DevTools'ta da göstermek.
- Staging ortamında yalnızca Diagnostics rolündeki kullanıcılara iç zamanlama bilgisi açmak.
Neden önemli
Bir isteğin sunucuda nerede vakit kaybettiğini tarayıcıdan, ek bir izleme aracına geçmeden görebilirsiniz. Ancak başlığın üretim ortamında herkese açık olmamasına dikkat etmek gerekir.
Benzer haberler
- MCP Sunucularında Ölçekte Rate Limiting ve Kaynak YönetişimiDEV Community: #aspnetcore1 gün önce
- C# interface'lerinde collection dönüş tipleri: interface, view ve snapshot farkıNick Cosentino (Dev Leader)2 gün önce
- .NET ile SSH, Docker ve Dosya Yönetimi Bir Arada: TermForge İncelemesiHabr C# (ru)2 gün önce