Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 56|Jawab: 0

[ASP.NET] ASP.NET Inti (34) Konteks Pelacakan

[Salin tautan]
Diposting pada4 hari yang lalu | | | |
Persyaratan: Dalam arsitektur layanan mikro, ketika mengalami masalah, seringkali sangat sulit untuk memecahkan masalah, tidak mengetahui apakah itu pengecualian yang dilemparkan oleh layanan, mungkin layanan menulis bug, atau ada masalah dengan informasi yang dikirimkan oleh layanan yang memanggil layanan. Jika konteks semua permintaan dapat direkam, yaitu tautan ke seluruh permintaan transaksi penuh, sangat penting untuk memecahkan masalah dan menganalisis masalah.

Resensi:
ASP.NET Pelacakan tautan inti (2) menggunakan integrasi SkyAPM
https://www.itsvse.com/thread-9458-1-1.html

ASP.NET Pelacakan Tautan Inti (4) Akses ke pelacakan tautan Jaeger
https://www.itsvse.com/thread-9537-1-1.html

Pelacakan tumpukan pengecualian ideal untuk aplikasi yang menargetkan satu proses, seperti sistem aplikasi monolitik. Namun di sisi lain, untuk berurusan dengan aplikasi terdistribusi, seperti arsitektur layanan mikro, jejak tumpukan tidak cukup untuk menunjukkan jejak pesan secara keseluruhan. Inilah sebabnya mengapa alat dan standar pelacakan terdistribusi menjadi perlu. W3C mendefinisikan standar untuk jenis pelacakan ini yang disebut Konteks Pelacakan .

Standar Konteks Pelacakan

Dokumentasi Konteks Pelacakan W3C:Login hyperlink terlihat.

Spesifikasi Konteks Pelacakan W3C mendefinisikan standar dan format untuk header HTTP untuk menyebarkan informasi konteks pelacakan terdistribusi. Ini mendefinisikan 2 bidang yang digunakan untuk menyebarkan alur pelacakan di header permintaan HTTP. Mari kita lihat 2 bidang ini dalam definisi standar:

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

bidang traceparent

Spesifikasi bidang traceparent didefinisikan dalam bentuk Extended Baccos Paradigm (ABNF) dan terdiri dari 4 bagian:
Versi - Traceid - ParentID/Spanid - TraceFlags

Misalnya:
00-480e22a2781fe54d992d878662248d94-b4b37b64bb3f6141-00

  • version: 8 位,系统适配的追踪上下文版本,当前位 00
  • trace-id: 16 字节,追踪整体的标识。用于在系统中标识一个分布式追踪整体,Nilainya persis sama di tautan yang sama
  • parent-id/span-id: 8 byte untuk mengekspresikan induk rentang saat ini dalam permintaan masuk atau permintaan keluar.
  • trace-flags: 8 位,调用者的建议标志,可以考虑为调用者的建议,限制为 3 个原因:信息或是滥用,调用方的错误,或者在调用方与被调用方的不同负载。

Semua bidang dikodekan dalam heksadesimal, seperti yang ditunjukkan pada gambar di bawah ini:



Pelacakan terdistribusi .NET

Pelacakan terdistribusi adalah teknik diagnostik yang membantu teknisi melokalkan kegagalan dan masalah performa dalam aplikasi, terutama yang mungkin didistribusikan di beberapa komputer atau proses. Teknik ini menghubungkan pekerjaan yang dilakukan oleh komponen aplikasi yang berbeda bersama-sama melalui pelacakan permintaan dalam aplikasi dan memisahkannya dari pekerjaan lain yang mungkin dilakukan aplikasi saat menangani permintaan bersamaan. Misalnya, penyeimbang beban mungkin pertama-tama menerima permintaan untuk layanan web biasa, lalu meneruskannya ke proses server web, lalu mengeluarkan beberapa kueri ke database. Dengan pelacakan terdistribusi, teknisi dapat membedakan apakah langkah-langkah ini gagal, berapa lama waktu yang dibutuhkan setiap langkah, dan pesan apa yang dapat dicatat saat setiap langkah berjalan.

Di .NET, pustaka System.Diagnostics.Activity telah dikonfigurasi untuk menggunakan standar W3C. Header Request-Id header traceparent gaya W3C ditambahkan di ASP.NET Core 2.0. Untuk mengubahnya menjadi header traceparent yang sesuai dengan Konteks Pelacakan W3C, atur properti statis Activity.DefaultIdFormat ke W3C saat Anda memulai program. Kodenya adalah sebagai berikut:
proses pengujian,Browser -> Antarmuka layanan A (/http, backend menggunakan HttpClient untuk meminta layanan B) -> antarmuka layanan B (/test), Layanan A menghasilkan Konteks Pelacakan dan Konteks Pelacakan Layanan B, kodenya adalah sebagai berikut:
Mulai layanan A dan B, seperti yang ditunjukkan pada gambar berikut:



Browser membuka Layanan A, seperti yang ditunjukkan pada gambar berikut:


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

Konten tanggapan:{"id":"00-9891603e6c4921598951f425d98e4df7-8874f9b2f9c0702e-00","traceId":"9891603e6c4921598951f425d98e4df7","spanId":"8874f9b2f9c0702e","parentId": "00-9891603e6c4921598951f425d98e4df7-e0336cc56a4f2150-00","traceFlags":"None","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:
{
  Tanggal: Mon, 22 Dec 2025 01:37:21 GMT
  Pelayan: Kestrel
  Transfer-Encoding: dipotong
  Koneksi: tetap hidup
  Jenis Konten: aplikasi/json; Charset = UTF-8
}, Request = Metode: GET, RequestUri: 'http://localhost.charlesproxy.com:5551/test', Versi: 1.1, Content: <null>, Header:
{
  TraceParent: 00-9891603e6c4921598951f425d98e4df7-e0336cc56a4f2150-00
}, RequestTaskStatus = RanToCompletion }
--------------------------------------------------
Dengan menggunakan alat pengambilan paket Charles Proxy, permintaan dan respons adalah sebagai berikut:



Jika Anda ingin menonaktifkan HttpClient dari meneruskan traceparent, variabel lingkungan diatur sebagai berikut:

Referensi:

Login hyperlink terlihat.
Login hyperlink terlihat.
Login hyperlink terlihat.
Login hyperlink terlihat.
Login hyperlink terlihat.
Login hyperlink terlihat.




Mantan:010 Editor tidak dilengkapi dengan templat DEX secara default
Depan:Kompilasi proyek front-end Tidak dapat mengatur properti undefined (pengaturan 'induk')
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com