Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az elosztott nyomkövetés egy diagnosztikai technika, amely segít a mérnököknek az alkalmazások hibáinak és teljesítményproblémáinak honosításában, különösen azokban, amelyek több gépen vagy folyamaton keresztül terjeszthetők. Az elosztott nyomkövetésről szóló áttekintést olvassa el, hogy általános információt kapjon arról, hol hasznos az elosztott nyomkövetés.
Nyomkövetések és tevékenységek
Minden alkalommal, amikor egy alkalmazás új kérelmet fogad, nyomkövetéssel társítható. A .NET-ben írt alkalmazásösszetevőkben a nyomkövetési munkaegységeket a System.Diagnostics.Activity példányai képviselik, és a nyomkövetés egésze ezeknek a tevékenységeknek a fáját képezi, ami számos különböző folyamatra terjed ki. Az új kéréshez létrehozott első tevékenység képezi a nyomkövetési fa gyökerét, és nyomon követi a kérés teljes időtartamát és sikerességét/sikertelenségét. A gyermektevékenységek igény szerint létrehozhatóak a munka különböző lépésekre való felosztásához, amelyek egyenként nyomon követhetők. Ha például egy tevékenység egy adott bejövő HTTP-kérést követett egy webkiszolgálón, gyermektevékenységek hozhatók létre a kérés végrehajtásához szükséges adatbázis-lekérdezések nyomon követéséhez. Ez lehetővé teszi az egyes lekérdezések időtartamának és sikerességének független rögzítését. A tevékenységek az egyes munkaegységek egyéb adatait is rögzíthetik, például OperationName, Tagsnevű név-érték párokat és Events. A név azonosítja az elvégzett munka típusát, a címkék rögzíthetik a munka leíró paramétereit, az események pedig egy egyszerű naplózási mechanizmus az időbélyegzett diagnosztikai üzenetek rögzítéséhez.
Jegyzet
Az elosztott nyomkövetésben lévő munkaegységek másik gyakori iparági neve a "Spans". A .NET már évekkel ezelőtt elfogadta a "Tevékenység" kifejezést, mielőtt a "Span" neve jól bevált volna ehhez a fogalomhoz.
Tevékenységazonosítók
Parent-Child elosztott nyomkövetési fában lévő tevékenységek közötti kapcsolatok egyedi azonosítók használatával jönnek létre. . A NET elosztott nyomkövetési implementációja két azonosítós sémát támogat: a W3C standard TraceContext, amely az alapértelmezett a .NET 5+-ban, és egy régebbi , "Hierarchikus" nevű .NET-konvenció, amely a visszamenőleges kompatibilitás érdekében érhető el. Activity.DefaultIdFormat határozza meg, hogy melyik azonosítósémát használja. A W3C TraceContext szabványban minden nyomkövetés globálisan egyedi, 16 bájtos nyomkövetési azonosítóhoz (Activity.TraceId) van rendelve, és a nyomkövetésen belüli összes tevékenységhez egyedi 8 bájtos span-id (Activity.SpanId) van hozzárendelve. Minden tevékenység rögzíti a nyomkövetési azonosítót, a saját span-id-t és a szülő span-id-ját (Activity.ParentSpanId). Mivel az elosztott nyomkövetések nyomon követhetik a munkafolyamatok közötti munkát, előfordulhat, hogy a szülő- és gyermektevékenységek nem ugyanabban a folyamatban működnek. A nyomkövetési azonosító és a szülő span-id kombinációja globálisan egyedileg azonosíthatja a szülőtevékenységet, függetlenül attól, hogy milyen folyamaton belül található.
Activity.DefaultIdFormat szabályozza, hogy a rendszer milyen azonosítóformátumot használ az új nyomkövetések indításához, de alapértelmezés szerint egy új tevékenység meglévő nyomkövetéshez való hozzáadása bármilyen formátumot használ, amelyet a szülőtevékenység használ. A Activity.ForceDefaultIdFormat igaz értékre állítása felülírja ezt a viselkedést, és létrehozza az összes új tevékenységet a DefaultIdFormattal, még akkor is, ha a szülő más azonosítóformátumot használ.
Tevékenységek indítása és leállítása
A folyamat minden szála rendelkezhet egy megfelelő tevékenységobjektummal, amely nyomon követi az adott szálon zajló munkát, és Activity.Currentkeresztül érhető el. Az aktuális tevékenység automatikusan végighalad egy szál összes szinkron hívásán, és követi a különböző szálakon feldolgozott aszinkron hívásokat. Ha az A tevékenység egy szál aktuális tevékenysége, és a kód egy új B tevékenységet indít el, akkor a B lesz az új aktuális tevékenység az adott szálon. Alapértelmezés szerint a B tevékenység az A tevékenységet is szülőként kezeli. Ha a B tevékenység később leáll, az A tevékenység a szál aktuális tevékenységeként lesz visszaállítva. Amikor egy tevékenység elindul, az aktuális időt rögzíti a Activity.StartTimeUtc. Ha leáll, a Activity.Duration az aktuális és a kezdési időpont közötti különbségként lesz kiszámítva.
Folyamathatárok közötti koordináta
A folyamathatárok közötti munka nyomon követéséhez a tevékenység szülőazonosítóit a hálózaton keresztül kell továbbítani, hogy a fogadó folyamat létre tudja hozni azokra hivatkozó tevékenységeket. A W3C TraceContext ID formátum használatakor a .NET a szabványos
Nyomkövetések gyűjtése
A rendszerezett kód képes Activity objektumokat létrehozni egy elosztott nyomkövetés részeként, de az ezekben az objektumokban lévő információkat egy központosított állandó tárolóban kell továbbítani és szerializálni, hogy a teljes nyomkövetés később hasznosan áttekinthető legyen. Számos telemetriai gyűjteménytár képes erre a feladatra, például Application Insights, OpenTelemetry, vagy egy harmadik féltől származó telemetriai vagy APM-szállító által biztosított kódtár. Másik lehetőségként a fejlesztők saját egyéni tevékenység telemetriai gyűjteményt hozhatnak létre System.Diagnostics.ActivityListener vagy System.Diagnostics.DiagnosticListenerhasználatával. Az ActivityListener bármilyen tevékenység megfigyelését támogatja, függetlenül attól, hogy a fejlesztő rendelkezik-e előzetes ismeretekkel. Így az ActivityListener egyszerű és rugalmas általános célú megoldássá válik. Ezzel szemben a DiagnosticListener használata egy összetettebb forgatókönyv, amely megköveteli, hogy az instrumentált kód vegyen részt a DiagnosticSource.StartActivity meghívásával, és a gyűjtőkönyvtárnak ismernie kell a pontos elnevezési információkat, amelyeket az instrumentált kód használ az indításkor. A DiagnosticSource és a DiagnosticListener használatával a létrehozó és a figyelő tetszőleges .NET-objektumokat cserélhet le, és testre szabott információátadási konvenciót hozhat létre.
Mintavétel
A nagy átviteli sebességű alkalmazások jobb teljesítménye érdekében a .NET-en az elosztott nyomkövetés csak a nyomkövetések egy részhalmazát támogatja ahelyett, hogy az összeset rögzítenék. Az ajánlott ActivitySource.StartActivity API-val létrehozott tevékenységek esetében a telemetriai gyűjteménytárak szabályozhatják a mintavételezést a ActivityListener.Sample visszahívással. A naplózási könyvtár dönthet úgy, hogy egyáltalán nem hozza létre a tevékenységet, hogy minimális információval hozza létre a nyomkövetési azonosítók terjesztése érdekében, vagy hogy teljes diagnosztikai adatokkal töltse fel. Ezek a választások a teljesítménybeli többletterhelés növekedését cserélik fel a diagnosztikai hasznosság fokozására. A Activity.Activity és DiagnosticSource.StartActivity meghívásának régebbi mintáját használó tevékenységek is támogathatják a DiagnosticListener mintavételezését a DiagnosticSource.IsEnabledmeghívásával. A .NET-implementációt még a teljes diagnosztikai adatok rögzítésekor is úgy tervezték, hogy gyors legyen – hatékony gyűjtővel párosítva, egy tevékenység körülbelül mikroszekundumban, modern hardveren hozható létre, tölthető fel és továbbítható. A mintavételezés 100 nanoszekundum alá csökkentheti az eszközköltséget minden nem rögzített tevékenység esetén.
Következő lépések
Az elosztott nyomkövetés .NET-alkalmazásokban való használatának első lépéseit például a Elosztott nyomkövetési rendszerállapotcímű témakörben találhatja meg.
A .NET által natív módon kibocsátott tevékenységek listáját .NET-beépített tevékenységek című témakörben találja.