Aracılığıyla paylaş


EventSource İzlemelerini Toplama ve Görüntüleme

Bu makale şunlar için geçerlidir: ✔️ .NET Core 3.1 ve sonraki sürümler ✔️ .NET Framework 4.5 ve üzeri sürümler

Başlarken kılavuzu, en az EventSource oluşturmayı ve izleme dosyasında olayları toplamayı gösterdi. Bu öğreticide, farklı araçların izlemede hangi olayların toplandığını nasıl yapılandırabileceği ve ardından izlemeleri nasıl görüntüleyebileceği gösterilmektedir.

Örnek uygulama

Bu öğretici için olaylar oluşturan aşağıdaki örnek uygulamayı kullanacaksınız. Aşağıdaki kodu içeren bir .NET konsol uygulaması derleyin:

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;
        }
    }
}

Hangi olayların toplayacağını yapılandırma

Olay toplama araçlarının çoğu, izlemede hangi olayların dahil edilmesi gerektiğine karar vermek için bu yapılandırma seçeneklerini kullanır:

  • Sağlayıcı adları - Bu, bir veya daha fazla EventSource adının listesidir. Yalnızca bu listedeki EventSources'ta tanımlanan olaylar dahil edilmeye uygundur. Önceki örnek uygulamadaki DemoEventSource sınıfından olayları toplamak için, sağlayıcı adları listesine EventSource adını "Demo" eklemeniz gerekir.
  • Olay ayrıntı düzeyi - Her sağlayıcı için bir ayrıntı düzeyi tanımlayabilirsiniz ve ayrıntı düzeyi bu düzeyden yüksek olan olaylar izlemenin dışında tutulur. Önceki örnek uygulamadaki "Tanıtım" sağlayıcısının Bilgi ayrıntı düzeyinde toplanması gerektiğini belirttiyseniz DebugMessage olayı daha yüksek bir düzeye sahip olduğundan dışlanır. LogAlways(0) belirtilmesi EventLevel , ayrıntı düzeyindeki olayların dahil edilmesi gerektiğini belirten özel bir durumdur.
  • Olay anahtar sözcükleri - Her sağlayıcı için bir anahtar sözcük kümesi tanımlayabilirsiniz ve yalnızca anahtar sözcüklerden en az biriyle etiketlenmiş olaylar eklenir. Yukarıdaki örnek uygulamada Startup anahtar sözcüğünü belirttiyseniz yalnızca AppStarted ve DebugMessage olayları dahil edilir. Anahtar sözcük belirtilmezse bu özel bir durumdur ve herhangi bir anahtar sözcük içeren olayların dahil edilmesi gerektiği anlamına gelir.

Sağlayıcı yapılandırmasını açıklamaya yönelik kurallar

Her araç izleme yapılandırmasını ayarlamak için kendi kullanıcı arabirimini belirlese de, birçok aracın yapılandırmayı metin dizesi olarak belirtirken kullandığı ortak bir kural vardır. Sağlayıcı listesi noktalı virgülle ayrılmış liste olarak belirtilir ve listedeki her sağlayıcı öğesi ad, anahtar sözcükler ve iki nokta üst üste ile ayrılmış düzeyden oluşur. Örneğin, "Tanıtım:3:5", bit maskesi 3 ( Startup bit ve bit) ve RequestsEventLevel 5 Verboseanahtar sözcüğü olan "Demo" adlı EventSource'ı tanımlar. Birçok araç, düzey veya anahtar sözcük filtrelemesi istenmediyse düzeyi ve anahtar sözcükleri atlamanıza da olanak sağlar. Örneğin, "Tanıtım::5" yalnızca düzey tabanlı filtreleme yapar, "Tanıtım:3" yalnızca anahtar sözcük tabanlı filtreleme yapar ve "Tanıtım" anahtar sözcük veya düzey filtrelemesi yapmaz.

Visual Studio

Visual Studio profil oluşturucu, izlemeleri toplamayı ve görüntülemeyi destekler. Ayrıca dotnet-trace gibi diğer araçlar tarafından önceden toplanan izlemeleri de görüntüleyebilir.

İzleme toplama

Visual Studio'nun profil oluşturma araçlarının çoğu, CPU kullanımını veya ayırmalarını analiz etme gibi belirli bir amaca hizmet eden önceden tanımlanmış olay kümelerini kullanır. Özelleştirilmiş olaylar içeren bir izleme toplamak için Olay Görüntüleyicisi aracını kullanacaksınız.

  1. Visual Studio'da Performans Profili Oluşturucu'yu açmak için Alt+F2'yi seçin.

  2. Olay Görüntüleyicisi onay kutusunu seçin.

    Visual Studio Olay Görüntüleyicisi

  3. Yapılandırma penceresini açmak için Olay Görüntüleyicisi'nin sağındaki küçük dişli simgesini seçin.

    Ek Sağlayıcılar'ın altındaki tabloda, Etkin onay kutusuna tıklayıp sağlayıcı adını, anahtar sözcükleri ve düzeyi girerek yapılandırmak istediğiniz her sağlayıcı için bir satır ekleyin. Sağlayıcı GUID'sini girmeniz gerekmez; otomatik olarak hesaplanır.

    Visual Studio Olay Görüntüleyicisi Ayarları

  4. Yapılandırma ayarlarını onaylamak için Tamam'ı seçin.

  5. Uygulamayı çalıştırmaya ve günlükleri toplamaya başlamak için Başlat'ı seçin.

  6. Günlükleri toplamayı durdurmak ve toplanan verileri göstermek için Koleksiyonu Durdur'u seçin veya uygulamadan çıkın.

İzlemeyi görüntüleme

Visual Studio kendi topladığı izlemeleri görüntüleyebilir veya diğer araçlarda toplanan izlemeleri görüntüleyebilir. Diğer araçlardaki izlemeleri görüntülemek için Dosya>Aç'ı kullanın ve dosya seçicide bir izleme dosyası seçin. Visual Studio profil oluşturucu .etl dosyalarını (ETW'nin standart biçimi), .nettrace dosyalarını (EventPipe'in standart biçimi) ve .diagsession dosyalarını (Visual Studio'nun standart biçimi) destekler. Visual Studio'da izleme dosyalarıyla çalışma hakkında bilgi için Visual Studio belgelerine bakın.

Visual Studio Olay Görüntüleyicisi ETW izlemesi

Not

Visual Studio, açıkça yapılandırılmamış olsalar bile bazı olayları ETW veya EventPipe'den otomatik olarak toplar. Sağlayıcı Adı veya Olay Adı sütununda tanımadığınız olayları görürseniz ve bunları filtrelemek istiyorsanız, yalnızca görüntülemek istediğiniz olayları seçmek için sağdaki filtre simgesini kullanın.

PerfView

PerfView, .NET ekibi tarafından oluşturulan ve ETW izlemelerini toplayıp görüntüleyebilen bir performans aracıdır. Ayrıca çeşitli biçimlerde diğer araçlar tarafından toplanan izleme dosyalarını da görüntüleyebilir. Bu öğreticide, tanıtım uygulamasının ETW izlemesini toplayacak ve ardından PerfView'un olay görüntüleyicisinde toplanan olayları inceleyeceksiniz.

İzleme toplama

  1. Sürümler sayfasından PerfView'ı indirin. Bu öğretici PerfView sürüm 2.0.76 ile yapılmıştır, ancak son sürümler işe yaramalıdır.

  2. Yönetici izinleriyle PerfView.exe başlatın.

    Not

    ETW izleme koleksiyonu her zaman yönetici izinleri gerektirir, ancak önceden var olan bir izlemeyi görüntülemek için yalnızca PerfView kullanıyorsanız, özel izin gerekmez.

    PerfView Ana Penceresi

  3. Topla menüsünde Çalıştır'ı seçin. Bu, tanıtım uygulamasının yolunu gireceğiniz yeni bir iletişim kutusu açar.

    PerfView Çalıştırma İletişim Kutusu

  4. Hangi olayların toplandığını yapılandırmak için iletişim kutusunun altındaki Gelişmiş Seçenekler'i genişletin. Ek Sağlayıcılar metin kutusuna, daha önce açıklanan geleneksel metin biçimini kullanarak sağlayıcılar girin. Bu durumda, "Tanıtım:1:4" girersiniz; bu, anahtar sözcük biti 1 (Startup olaylar) ve ayrıntı 4 (Informational anlamına gelir).

    PerfView Çalıştırma İletişim Kutusu Gelişmiş Ayarları

  5. Uygulamayı başlatmak ve izlemeyi toplamaya başlamak için Komutu Çalıştır düğmesini seçin. Uygulamadan çıkıldığında PerfViewData.etl izlemesi geçerli dizine kaydedilir.

İzlemeyi görüntüleme

  1. Sol üstteki ana pencere açılan metin kutusunda, izleme dosyasını içeren dizini seçin. Ardından aşağıdaki ağaç görünümünde izleme dosyasına çift tıklayın.

    PerfView Ana Penceresi İzleme seçme

  2. Olaylar görüntüleyicisini açmak için izleme dosyasının altındaki ağaç görünümünde görüntülenen Olaylar öğesine çift tıklayın.

    PerfView Olay Görüntüleyicisi

  3. İzlemedeki tüm olay türleri soldaki listede gösterilir. Sağ taraftaki tabloda bu türdeki tüm olayları göstermek için Demo\AppStarted gibi bir olay türüne çift tıklayın.

    PerfView Olayları Görüntüleyicisi UygulamasıBaşlanan olaylar

Daha fazla bilgi edinin

PerfView kullanma hakkında daha fazla bilgi edinmek için Bkz. PerfView video öğreticileri.

dotnet-trace

dotnet-trace , EventPipe izleme kullanarak .NET Core uygulamalarından izleme toplayan platformlar arası bir komut satırı aracıdır. İzleme verilerini görüntülemeyi desteklemez, ancak topladığı izlemeler PerfView veya Visual Studio gibi diğer araçlar tarafından görüntülenebilir. dotnet-trace ayrıca varsayılan .nettrace biçim izlemelerini Chromium veya Speedscope gibi diğer biçimlere dönüştürmeyi de destekler.

İzleme toplama

  1. dotnet-trace'i indirin ve yükleyin.

  2. Komut satırında dotnet-trace collect komutunu çalıştırın:

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

    Bu, şuna benzer bir çıkış göstermelidir:

    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.
    

    dotnet-trace bağımsız değişkeninde sağlayıcı yapılandırmasını --providers tanımlamak için geleneksel metin biçimini kullanır. dotnet-trace kullanarak izleme alma hakkında daha fazla seçenek için dotnet-trace belgelerine bakın.

EventListener

System.Diagnostics.Tracing.EventListener , tarafından oluşturulan olaylar için geri çağırmaları almak üzere işlem içinde kullanılabilecek bir .NET API'dir System.Diagnostics.Tracing.EventSource. Bu API, özel günlük araçları oluşturmak veya bellekteki olayları seri hale getirmeden analiz etmek için kullanılabilir.

kullanmak EventListeneriçin, öğesinden EventListenertüretilen bir tür bildirin, ilgilendiğiniz herhangi bir EventSource'tan olaylara abone olmak için komutunu çağırın EnableEvents ve yeni bir olay kullanılabilir olduğunda çağrılacak olan öğesini geçersiz kılın OnEventWritten. Hangi EventSource nesnelerinin mevcut olduğunu bulmak için geçersiz kılmak OnEventSourceCreated genellikle yararlıdır, ancak bu gerekli değildir. İletiler alındığında konsola yazdıran örnek EventListener bir uygulama aşağıda verilmiştir:

  1. Bu kodu tanıtım uygulamasına ekleyin.

    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. Main Yöntemini değiştirerek yeni dinleyicinin bir örneğini oluşturun.

    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. Uygulamayı derleyin ve çalıştırın. Daha önce çıkışı yoktu, ancak şimdi olayları konsola yazıyor:

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