Vaatimukset: Mikropalveluarkkitehtuurissa, kun ongelmia ilmenee, on usein hyvin vaikeaa selvittää, kun ei tiedetä, onko kyseessä palvelun aiheuttama poikkeus, voi olla, että palvelu kirjoittaa virheen vai palvelun lähettämässä tiedossa, joka kutsuu palvelua. Jos kaikkien pyyntöjen konteksti voidaan tallentaa, eli linkki koko transaktiopyyntöön, on ratkaisevan tärkeää selvittää ja analysoida ongelma.
Arvostelu:
Poikkeuspinon jäljet ovat ihanteellisia sovelluksiin, jotka kohdistuvat yhteen prosessiin, kuten monoliittiseen sovellusjärjestelmään. Toisaalta hajautettujen sovellusten, kuten mikropalveluarkkitehtuurin, käsittelyssä pinojäljet eivät riitä näyttämään koko viestijäljitystä. Siksi hajautetut jäljitystyökalut ja standardit tulevat välttämättömiksi. W3C määrittelee tämän tyyppiselle jäljelle standardin nimeltä Trace Context.
Trace Context -standardi
W3C Trace Context -dokumentaatio:Hyperlinkin kirjautuminen on näkyvissä.
W3C Trace Context -määrittely määrittelee standardit ja formaatit HTTP-otsikoille hajautetun jäljityksen kontekstitiedon levittämiseen. Se määrittelee kaksi kenttää, joita käytetään jäljitysvirran levittämiseen HTTP-pyyntöotsikossa. Katsotaanpa näitä kahta kenttää standardimääritelmässä:
- traceparent: 用来描述在追踪图谱中到达请求的位置。它表示在追踪系统中到达请求的通用格式,被所有的 vendor 所理解。
- tracestate: 使用 vendor 特定的数据表示形式来扩展 traceparent,使用 name/value 对形式。在 tracestate 中保存信息是可选的。
Jälki-emokenttä
Jälkivanhemman kentän määrittely määritellään laajennetun Baccos-paradigman (ABNF) muodossa ja koostuu neljästä osasta:
versio - traceid - parentid/spanid - traceflags Esimerkiksi:
00-480e22a2781fe54d992d878662248d94-b4b37b64bb3f6141-00
- version: 8 位,系统适配的追踪上下文版本,当前位 00
- trace-id: 16 字节,追踪整体的标识。用于在系统中标识一个分布式追踪整体,Arvo on täsmälleen sama samassa linkissä。
- parent-id/span-id: 8 tavua ilmaistakseen nykyisen spanin vanhemman saapuvassa tai lähtevässä pyynnössä.
- trace-flags: 8 位,调用者的建议标志,可以考虑为调用者的建议,限制为 3 个原因:信息或是滥用,调用方的错误,或者在调用方与被调用方的不同负载。
Kaikki kentät on koodattu heksadesimaalina, kuten alla olevassa kuvassa näkyy:
.NET-hajautettu jäljitys
Hajautettu jäljitys on diagnostiikkamenetelmä, joka auttaa insinöörejä paikantamaan viat ja suorituskykyongelmat sovelluksissa, erityisesti niissä, jotka voivat olla hajautuneita useiden tietokoneiden tai prosessien kesken. Tämä tekniikka yhdistää eri sovelluskomponenttien tekemän työn sovelluksen pyyntöjen seurannan kautta ja erottaa sen muusta työstä, jota sovellus saattaa tehdä samanaikaisten pyyntöjen käsittelyssä. Esimerkiksi kuormantasaaja voi ensin vastaanottaa pyynnön tyypillisestä verkkopalvelusta, välittää sen web-palvelinprosessille ja lähettää useita kyselyitä tietokantaan. Hajautetun jäljityksen avulla insinöörit voivat erottaa, epäonnistuivatko nämä vaiheet, kuinka kauan kukin vaihe kestää ja mitä viestejä voidaan kirjata kunkin vaiheen aikana.
.NET:ssä System.Diagnostics.Activity-kirjasto on konfiguroitu käyttämään W3C-standardia. W3C-tyylinen traceparent-otsikon Request-ID -otsikko lisättiin ASP.NET Core 2.0:aan. Muuttaaksesi sen traceparent-otsikoksi, joka noudattaa W3C Trace Contextia, aseta Activity.DefaultIdFormat staattinen ominaisuus W3C:ksi ohjelman käynnistäessä. Koodi on seuraava:
testiprosessi,Selain -> A palvelu (/http, backend käyttää HttpClientia pyytääkseen B-palvelua) -> B-palvelu (/testi) -rajapinta, Palvelu A tuottaa oman jäljityskontekstinsa ja palvelu B:n jäljityskontekstin, koodi on seuraava:
Aloita vuorot A ja B, kuten seuraavassa kuvassa näkyy:
Selain avaa Service A:n, kuten seuraavassa kuvassa näkyy:
Id: 00-9891603e6c4921598951f425d98e4df7-bd06e8d507a43f42-00
TraceId: 9891603e6c4921598951f425d98e4df7
SpanId: bd06e8d507a43f42
ParentId:
Vastaussisältö:{"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:
{ Päivämäärä: ma, 22. joulukuuta 2025 klo 01:37:21 GMT Tarjoilija: Kestrel Siirto-koodaus: chunked Yhteys: pysy elossa Sisältötyyppi: application/json; charset=utf-8 }, Request = Metodi: GET, RequestUri: 'http://localhost.charlesproxy.com:5551/test', Versio: 1.1, Sisältö: <null>, Otsikot:
{ traceparent: 00-9891603e6c4921598951f425d98e4df7-e0336cc56a4f2150-00 }, RequestTaskStatus = RanToCompletion } -------------------------------------------------- Charles Proxy -pakettien kaappaustyökalulla pyyntö ja vastaus ovat seuraavat:
Jos haluat estää HttpClientin traceparentin välittämisen, ympäristömuuttujat asetetaan seuraavasti:
Viittaus:
Hyperlinkin kirjautuminen on näkyvissä.
Hyperlinkin kirjautuminen on näkyvissä.
Hyperlinkin kirjautuminen on näkyvissä.
Hyperlinkin kirjautuminen on näkyvissä.
Hyperlinkin kirjautuminen on näkyvissä.
Hyperlinkin kirjautuminen on näkyvissä. |