Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 56|Yanıt: 0

[ASP.NET] ASP.NET Core (34) İz Bağlamı

[Bağlantıyı kopyala]
Yayınlandı4 gün önce | | | |
Gereksinimler: Mikroservis mimarisinde, sorunlarla karşılaşıldığında, sorun gidermek genellikle çok zordur; bunun servisin bir istisna olup olmadığını, hizmetin bir hata yazmasını veya hizmeti çağıran hizmetin ilettiği bilgide bir sorun olup olmadığını bilmemek mümkün değildir. Tüm taleplerin bağlamı, yani tüm işlem talebinin bağlantısı kaydedilebiliyorsa, sorunu çözmek ve analiz etmek kritik öneme sahiptir.

Eleştiri:
ASP.NET Çekirdek bağlantı izleme (2) SkyAPM entegrasyonunu kullanır
https://www.itsvse.com/thread-9458-1-1.html

ASP.NET Çekirdek Bağlantı Takip (4) Jaeger bağlantı izlemeye erişim
https://www.itsvse.com/thread-9537-1-1.html

İstisna yığını izleri, tek bir süreci hedefleyen uygulamalar için idealdir, örneğin monolitik bir uygulama sistemi. Ancak öte yandan, mikroservis mimarileri gibi dağıtık uygulamalarla ilgilenmek için yığın izleri genel mesaj izini göstermek için yeterli değildir. Bu yüzden dağıtık takip araçları ve standartları gerekli hale gelir. W3C, bu tür iz için İz Bağlamı adı verilen bir standart tanımlar.

İz Bağlam standardı

W3C İz Bağlamı dokümantasyonu:Bağlantı girişi görünür.

W3C Trace Context spesifikasyonu, dağıtık iz bağlam bilgisini yaymak için HTTP başlıkları için standartlar ve formatlar tanımlar. HTTP isteği başlığında iz akışını yaymak için kullanılan 2 alan tanımlar. Standart tanımda bu iki alana bir göz atalım:

  • traceparent: 用来描述在追踪图谱中到达请求的位置。它表示在追踪系统中到达请求的通用格式,被所有的 vendor 所理解。
  • tracestate: 使用 vendor 特定的数据表示形式来扩展 traceparent,使用 name/value 对形式。在 tracestate 中保存信息是可选的。

İz ebeveyn alanı

İz ebeveyn alanının spesifikasyonu, Genişletilmiş Baccos Paradigması (ABNF) şeklinde tanımlanır ve 4 bölümden oluşur:
Sürüm - traceid - parentid/spanid - traceflags

Mesela:
00-480e22a2781fe54d992d878662248d94-b4b37b64bb3f6141-00

  • version: 8 位,系统适配的追踪上下文版本,当前位 00
  • trace-id: 16 字节,追踪整体的标识。用于在系统中标识一个分布式追踪整体,Aynı bağlantıda değer tamamen aynıdır
  • parent-id/span-id: Gelen veya giden istekte mevcut span'ın ebeveynini ifade etmek için 8 bayt.
  • trace-flags: 8 位,调用者的建议标志,可以考虑为调用者的建议,限制为 3 个原因:信息或是滥用,调用方的错误,或者在调用方与被调用方的不同负载。

Tüm alanlar aşağıdaki görselde gösterildiği gibi onaltılık olarak kodlanmıştır:



.NET dağıtık takip

Dağıtık izleme, mühendislerin özellikle birden fazla bilgisayar veya süreç arasında dağıtılabilen uygulamalardaki arızaları ve performans sorunlarını yerelleştirmesine yardımcı olan bir tanı tekniğidir. Bu teknik, farklı uygulama bileşenleri tarafından yapılan işleri uygulamadaki istek takibi aracılığıyla ilişkilendirir ve uygulamanın eşzamanlı talepleri işlerken yapabileceği diğer işlerden ayırır. Örneğin, bir yük dengeleyici önce tipik bir web servisi için bir talep alabilir, ardından bunu bir web sunucusu sürecine iletebilir ve veritabanına birden fazla sorgu gönderebilir. Dağıtık takip ile mühendisler bu adımların başarısız olup olmadığını, her adımın ne kadar sürdüğünü ve her adım çalıştığında hangi mesajların kaydedilebileceğini ayırt edebilir.

.NET içinde, System.Diagnostics.Activity kütüphanesi W3C standardını kullanacak şekilde yapılandırılmıştır. W3C tarzı traceparent başlığı Request-ID başlığı ASP.NET Core 2.0'da eklendi. Bunu W3C İz Bağlamına uygun bir traceparent başlığına dönüştürmek için, programı başlattığınızda Activity.DefaultIdFormat statik özelliğini W3C olarak ayarlayın. Kod şöyledir:
test süreci,Tarayıcı -> A servis (/http, arka uç B hizmeti talep etmek için HttpClient kullanır) arayüzü -> B servisi (/test) arayüzü, Servis A kendi İz Bağlamını ve Servis B'nin İz Bağlamını çıkarır, kod şöyledir:
Aşağıdaki şekilde gösterildiği gibi A ve B servislerini başlatın:



Tarayıcı, aşağıdaki şekilde gösterildiği gibi Servis A'yı açıyor:


Id: 00-9891603e6c4921598951f425d98e4df7-bd06e8d507a43f42-00
TraceId: 9891603e6c4921598951f425d98e4df7
SpanId: bd06e8d507a43f42
ParentId:

Yanıt içeriği:{"id":"00-9891603e6c4921598951f425d98e4df7-8874f9b2f9c0702e-00","traceId":"9891603e6c4921598951f425d98e4df7","spanId":"8874f9b2f9c0702e","parentId": "00-9891603e6c4921598951f425d98e4df7-e0336cc56a4f2150-00","traceFlags":"Hiç","isSampled":false}

--------------------------------------------------
Name: HttpHandlerDiagnosticListener
DateTime: 2025/12/22 9:37:22
Id: 00-9891603e6c4921598951f425d98e4df7-e0336cc56a4f2150-00
TraceId: 9891603e6c4921598951f425d98e4df7
SpanId: e0336cc56a4f2150
ParentId: 00-9891603e6c4921598951f425d98e4df7-bd06e8d507a43f42-00

Key: System.Net.Http.HttpRequestOut.Stop, Value: { Response = StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent, Headers:
{
  Tarih: Pzt, 22 Ara 2025 01:37:21 GMT
  Sunucu: Kestrel
  Transfer-Encoding: chunked
  Bağlantı: hayatta kalmayı
  İçerik Türü: application/json; charset=utf-8
}, Request = Yöntem: GET, RequestUri: 'http://localhost.charlesproxy.com:5551/test', Sürüm: 1.1, İçerik: <null>, Başlıklar:
{
  traceparent: 00-9891603e6c4921598951f425d98e4df7-e0336cc56a4f2150-00
}, RequestTaskStatus = RanToCompletion }
--------------------------------------------------
Charles Proxy paket yakalama aracı kullanılarak, talep ve yanıt şu şekildedir:



HttpClient'ın traceparent geçişini engellemek istiyorsanız, ortam değişkenleri aşağıdaki şekilde ayarlanır:

Referans:

Bağlantı girişi görünür.
Bağlantı girişi görünür.
Bağlantı girişi görünür.
Bağlantı girişi görünür.
Bağlantı girişi görünür.
Bağlantı girişi görünür.




Önceki:010 Editör varsayılan olarak DEX şablonu ile gelmez
Önümüzdeki:Ön uç proje derlemesi Tanımlanmamış özelliklerin ayarlanamaz ('parent' ayarı)
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com