Olvasás angol nyelven

Megosztás a következőn keresztül:


EventSource-nyomkövetések gyűjtése és megtekintése

Ez a cikk a következő verziókra vonatkozik: ✔️ .NET Core 3.1 és újabb verziók ✔️ .NET-keretrendszer 4.5-ös és újabb verziókra

Az Első lépések útmutató bemutatta, hogyan hozhat létre minimális EventSource-eseményforrást, és hogyan gyűjthet eseményeket egy nyomkövetési fájlban. Ez az oktatóanyag bemutatja, hogy a különböző eszközök hogyan konfigurálhatják a nyomkövetésben gyűjtött eseményeket, majd tekinthetik meg a nyomkövetéseket.

Példaalkalmazás

Az alábbi mintaalkalmazást fogja használni, amely eseményeket hoz létre ehhez az oktatóanyaghoz. Állítson össze egy .NET-konzolalkalmazást, amely a következő kódot tartalmazza:

using System.Diagnostics.Tracing;

namespace EventSourceDemo
{
    public static class Program
    {
        public static void Main(string[] args)
        {
            DemoEventSource.Log.AppStarted("Hello World!", 12);
            DemoEventSource.Log.DebugMessage("Got here");
            DemoEventSource.Log.DebugMessage("finishing startup");
            DemoEventSource.Log.RequestStart(3);
            DemoEventSource.Log.RequestStop(3);
        }
    }

    [EventSource(Name = "Demo")]
    class DemoEventSource : EventSource
    {
        public static DemoEventSource Log { get; } = new DemoEventSource();

        [Event(1, Keywords = Keywords.Startup)]
        public void AppStarted(string message, int favoriteNumber) => WriteEvent(1, message, favoriteNumber);
        [Event(2, Keywords = Keywords.Requests)]
        public void RequestStart(int requestId) => WriteEvent(2, requestId);
        [Event(3, Keywords = Keywords.Requests)]
        public void RequestStop(int requestId) => WriteEvent(3, requestId);
        [Event(4, Keywords = Keywords.Startup, Level = EventLevel.Verbose)]
        public void DebugMessage(string message) => WriteEvent(4, message);


        public class Keywords
        {
            public const EventKeywords Startup = (EventKeywords)0x0001;
            public const EventKeywords Requests = (EventKeywords)0x0002;
        }
    }
}

A gyűjtendő események konfigurálása

A legtöbb eseménygyűjtő eszköz ezeket a konfigurációs beállításokat használja annak eldöntésére, hogy mely eseményeket kell szerepeltetni a nyomkövetésben:

  • Szolgáltatónevek – Ez egy vagy több EventSource-névből álló lista. Csak az ebben a listában szereplő EventSource-on definiált események vehetők fel. Ha az előző példaalkalmazás DemoEventSource osztályából szeretne eseményeket gyűjteni, fel kell vennie a "Demo" EventSource-nevet a szolgáltatónevek listájára.
  • Esemény részletességi szintje – Minden szolgáltatóhoz megadhat részletességi szintet, és az ennél magasabb részletességű események ki lesznek zárva a nyomkövetésből. Ha azt adta meg, hogy az előző példaalkalmazásban a "Demo" szolgáltatónak az Információs részletességi szinten kell gyűjtenie, akkor a DebugMessage esemény ki lesz zárva, mert magasabb szintű. EventLevel A LogAlways(0) megadása egy speciális eset, amely azt jelzi, hogy bármilyen részletességi szintű eseményt bele kell foglalni.
  • Eseményszavak – Minden szolgáltatóhoz megadhat kulcsszavakat, és csak azokat az eseményeket fogja tartalmazni, amelyek legalább egy kulcsszóval fel lesznek címkézve. A fenti példaalkalmazásban, ha megadta az Indítás kulcsszót, akkor csak az AppStarted és a DebugMessage események lesznek belefoglalva. Ha nincsenek megadva kulcsszavak, ez egy speciális eset, és azt jelenti, hogy a kulcsszóval rendelkező eseményeket bele kell foglalni.

A szolgáltató konfigurációjának leírására vonatkozó konvenciók

Bár minden eszköz meghatározza a saját felhasználói felületét a nyomkövetési konfiguráció beállításához, van egy általános konvenció, amelyet számos eszköz használ a konfiguráció szöveges sztringként való megadásakor. A szolgáltatók listája pontosvesszővel tagolt listaként van megadva, és a lista minden szolgáltatóeleme névből, kulcsszavakból és szintből áll, kettőspontokkal elválasztva. A "Demo:3:5" például azonosítja a "Demo" nevű EventSource-t a 3. bitmaszk (a Startup bit és a Requests bit) kulcsszóval, és EventLevel 5-öt, amely a következő Verbose: . Számos eszköz is lehetővé teszi, hogy kihagyja a szintet és a kulcsszavakat, ha nincs szükség szint- vagy kulcsszószűrésre. A "Demo:::5" például csak szintalapú szűrést végez, a "Demo:3" csak kulcsszóalapú szűrést végez, a "Demo" pedig nem végez kulcsszó- vagy szintszűrést.

Visual Studio

A Visual Studio profilkészítője támogatja a nyomkövetések gyűjtését és megtekintését is. Emellett megtekintheti a más eszközök, például a dotnet-trace által előre gyűjtött nyomkövetéseket is.

Nyomkövetés gyűjtése

A Visual Studio profilkészítési eszközeinek többsége előre meghatározott eseménykészleteket használ, amelyek egy adott célt szolgálnak, például a CPU-használat vagy a foglalások elemzését. Ha testre szabott eseményekkel szeretne nyomkövetést gyűjteni, használja az Eseménynapló eszközt.

  1. A Visual Studióban a Performance Profiler megnyitásához válassza az Alt+F2 lehetőséget.

  2. Jelölje be az Eseménynapló jelölőnégyzetet.

    Visual Studio-események megjelenítője

  3. A konfigurációs ablak megnyitásához válassza az Eseménynapló jobb oldalán található kis fogaskerék ikont.

    A További szolgáltatók alatti táblázatban adjon hozzá egy sort minden konfigurálni kívánt szolgáltatóhoz. Ehhez kattintson az Engedélyezve jelölőnégyzetre, majd adja meg a szolgáltató nevét, a kulcsszavakat és a szintet. Nem kell megadnia a szolgáltató GUID azonosítóját; automatikusan ki lesz számítva.

    A Visual Studio eseménynapló beállításai

  4. A konfigurációs beállítások megerősítéséhez kattintson az OK gombra .

  5. Válassza a Start gombot az alkalmazás futtatásának megkezdéséhez és a naplók gyűjtéséhez.

  6. Válassza a Adatgyűjtés leállítása lehetőséget, vagy lépjen ki az alkalmazásból a naplók gyűjtésének leállításához és az összegyűjtött adatok megjelenítéséhez.

Nyomkövetés megtekintése

A Visual Studio megtekintheti a saját maga által gyűjtött nyomkövetéseket, vagy megtekintheti a más eszközökben gyűjtött nyomkövetéseket. Más eszközök nyomkövetéseinek megtekintéséhez használja aFájlmegnyitás> parancsot, és válasszon ki egy nyomkövetési fájlt a fájlválasztóban. A Visual Studio profilkészítője támogatja az .etl fájlokat (az ETW szabványos formátumát), a .nettrace fájlokat (az EventPipe szabványos formátumát) és a .diagsession fájlokat (a Visual Studio standard formátumát). A nyomkövetési fájlok Visual Studióban való használatával kapcsolatos információkért tekintse meg a Visual Studio dokumentációját.

Visual Studio Events Viewer ETW-nyomkövetés

Megjegyzés

A Visual Studio bizonyos eseményeket automatikusan gyűjt az ETW-ből vagy az EventPipe-ből, még akkor is, ha nincsenek explicit módon konfigurálva. Ha olyan eseményeket lát, amelyeket nem ismer fel a Szolgáltató neve vagy az Esemény neve oszlopban, és ki szeretné szűrni őket, a jobb oldali szűrőikonnal csak a megtekinteni kívánt eseményeket választhatja ki.

PerfView

A PerfView egy teljesítményeszköz, amelyet a .NET csapata hozott létre, amely képes az ETW-nyomkövetések gyűjtésére és megtekintésére. A más eszközök által gyűjtött nyomkövetési fájlokat is megtekintheti különböző formátumokban. Ebben az oktatóanyagban összegyűjti a bemutató alkalmazás ETW-nyomkövetését, majd megvizsgálja az összegyűjtött eseményeket a PerfView eseménynaplójában.

Nyomkövetés gyűjtése

  1. Töltse le a PerfView-t a kiadások oldaláról. Ez az oktatóanyag a PerfView 2.0.76-os verziójával készült, de a legutóbbi verzióknak működnie kell.

  2. Indítsa el a PerfView.exe rendszergazdai engedélyekkel.

    Megjegyzés

    Az ETW-nyomkövetési gyűjteményhez mindig rendszergazdai engedélyek szükségesek, de ha csak a PerfView-t használja egy már meglévő nyomkövetés megtekintéséhez, akkor nincs szükség speciális engedélyekre.

    PerfView főablak

  3. A Gyűjtemény menüben válassza a Futtatás lehetőséget. Ekkor megnyílik egy új párbeszédpanel, ahol megadhatja a bemutatóalkalmazás elérési útját.

    A PerfView futtatási párbeszédpanelje

  4. Az összegyűjtött események konfigurálásához bontsa ki a párbeszédpanel alján található Speciális beállítások elemet. A További szolgáltatók szövegmezőbe írja be a korábban ismertetett hagyományos szöveges formátumot használó szolgáltatókat . Ebben az esetben a "Demo:1:4" kifejezést adja meg, ami azt jelenti, hogy az 1. kulcsszóbit (Startup események) és a 4. részletesség (Informational).

    PerfView – Futtatás párbeszédpanel – speciális beállítások

  5. Az alkalmazás elindításához és a nyomkövetés gyűjtésének megkezdéséhez válassza a Parancs futtatása gombot. Amikor az alkalmazás kilép, a PerfViewData.etl nyomkövetés az aktuális könyvtárba lesz mentve.

Nyomkövetés megtekintése

  1. A bal felső sarokban található főablak legördülő szövegmezőjében válassza ki a nyomkövetési fájlt tartalmazó könyvtárat. Ezután kattintson duplán a nyomkövetési fájlra az alábbi fanézetben.

    PerfView főablak – Nyomkövetés kiválasztása

  2. Az Eseménymegjelenítő megjelenítéséhez kattintson duplán a nyomkövetési fájl alatti fanézetben megjelenő Események elemre.

    PerfView-események megjelenítője

  3. A nyomkövetés összes eseménytípusa megjelenik a bal oldali listában. Kattintson duplán egy eseménytípusra (például Demo\AppStarted) a jobb oldali táblázatban található összes ilyen típusú esemény megjelenítéséhez.

    PerfView Event Viewer AppStarted events

Tudjon meg többet

A PerfView használatával kapcsolatos további információkért tekintse meg a PerfView videós oktatóanyagait.

dotnet-trace

A dotnet-trace egy platformfüggetlen parancssori eszköz, amely az EventPipe-nyomkövetés használatával képes nyomkövetéseket gyűjteni a .NET Core-alkalmazásokból. Nem támogatja a nyomkövetési adatok megtekintését, de az általa gyűjtött nyomkövetéseket más eszközök, például a PerfView vagy a Visual Studio is megtekinthetik. A dotnet-trace emellett támogatja az alapértelmezett .nettrace formátumú nyomkövetések más formátumokra való konvertálását is, például Chromium vagy Speedscope.

Nyomkövetés gyűjtése

  1. Töltse le és telepítse a dotnet-trace fájlt.

  2. Futtassa a dotnet-trace collect parancsot a parancssorban:

    E:\temp\EventSourceDemo\bin\Debug\net6.0>dotnet-trace collect --providers Demo:1:4 -- EventSourceDemo.exe
    

    Ennek a következőhöz hasonló kimenetnek kell megjelennie:

    E:\temp\EventSourceDemo\bin\Debug\net6.0> dotnet-trace collect --providers Demo:1:4 -- EventSourceDemo.exe
    
    Provider Name                           Keywords            Level               Enabled By
    Demo                                    0x0000000000000001  Informational(4)    --providers
    
    Launching: EventSourceDemo.exe
    Process        : E:\temp\EventSourceDemo\bin\Debug\net6.0\EventSourceDemo.exe
    Output File    : E:\temp\EventSourceDemo\bin\Debug\net6.0\EventSourceDemo.exe_20220317_021512.nettrace
    
    [00:00:00:00]   Recording trace 0.00     (B)
    Press <Enter> or <Ctrl+C> to exit...
    
    Trace completed.
    

    A dotnet-trace a hagyományos szöveges formátumot használja a szolgáltató konfigurálásának leírásához az --providers argumentumban. A nyomkövetés dotnet-trace használatával történő követésére vonatkozó további lehetőségekért tekintse meg a dotnet-trace dokumentációt.

EventListener

System.Diagnostics.Tracing.EventListener egy .NET API, amely a folyamat során használható a által létrehozott System.Diagnostics.Tracing.EventSourceesemények visszahívásainak fogadására. Ezzel az API-val egyéni naplózási eszközöket hozhat létre, vagy elemezheti a memóriában lévő eseményeket anélkül, hogy szerializálni kellene őket.

A használatához EventListenerdeklaráljon egy típust, amely a következőből EventListenerszármazik: , meghívja EnableEvents az eseményre való feliratkozáshoz bármely érdekes EseményForrásból, és felülbírálja a OnEventWrittenparancsot, amely akkor lesz meghívva, amikor új esemény érhető el. Gyakran hasznos felülbírálni OnEventSourceCreated , hogy mely EventSource-objektumok léteznek, de erre nincs szükség. Az alábbiakban egy példa EventListener implementáció látható, amely az üzenetek fogadásakor a konzolon jelenik meg:

  1. Adja hozzá ezt a kódot a bemutatóalkalmazáshoz.

    class ConsoleWriterEventListener : EventListener
    {
        protected override void OnEventSourceCreated(EventSource eventSource)
        {
            if(eventSource.Name == "Demo")
            {
                EnableEvents(eventSource, EventLevel.Informational);
            }
        }
    
        protected override void OnEventWritten(EventWrittenEventArgs eventData)
        {
            Console.WriteLine(eventData.TimeStamp + " " + eventData.EventName);
        }
    }
    
  2. Módosítsa a metódust Main az új figyelő egy példányának létrehozásához.

    public static void Main(string[] args)
    {
        ConsoleWriterEventListener listener = new ConsoleWriterEventListener();
    
        DemoEventSource.Log.AppStarted("Hello World!", 12);
        DemoEventSource.Log.DebugMessage("Got here");
        DemoEventSource.Log.DebugMessage("finishing startup");
        DemoEventSource.Log.RequestStart(3);
        DemoEventSource.Log.RequestStop(3);
    }
    
  3. Hozza létre és futtassa az alkalmazást. Korábban nem volt kimenete, de most az eseményeket a konzolra írja:

    3/24/2022 9:23:35 AM AppStarted
    3/24/2022 9:23:35 AM RequestStart
    3/24/2022 9:23:35 AM RequestStop