Uczestnicy śledzenia
Śledzenie uczestników to punkty rozszerzalności, które umożliwiają deweloperowi przepływu pracy uzyskiwanie dostępu do TrackingRecord obiektów i ich przetwarzanie. Program .NET Framework 4.6.1 zawiera standardowego uczestnika śledzenia, który zapisuje rekordy śledzenia jako zdarzenia śledzenia zdarzeń systemu Windows (ETW). Które nie spełnia wymagań, można także napisać uczestnikiem niestandardowe śledzenia.
Uczestnicy śledzenia
Infrastruktura śledzenia umożliwia zastosowanie filtru dla wychodzących rekordów śledzenia, tak aby uczestnik mógł subskrybować podzestaw rekordów. Mechanizm stosowania filtru odbywa się za pośrednictwem profilu śledzenia.
Program Windows Workflow Foundation (WF) w programie .NET Framework 4.6.1 udostępnia uczestnika śledzenia, który zapisuje rekordy śledzenia w sesji ETW. Uczestnika jest skonfigurowany w usłudze przepływu pracy przez dodanie zachowania specyficzny dla śledzenia w PLiku konfiguracji. Włączanie funkcji ETW śledzenia uczestnika, który umożliwia śledzenia się wyświetlić podglądu zdarzeń. Przykład zestawu SDK do śledzenia opartego na etW jest dobrym sposobem zapoznania się z śledzeniem WF przy użyciu uczestnika śledzenia opartego na etW.
Uczestnik śledzenia ETW
Program .NET Framework 4.6.1 zawiera uczestnika śledzenia ETW, który zapisuje rekordy śledzenia w sesji ETW. Jest to wykonywane w bardzo wydajny sposób z minimalnym wpływem na wydajność aplikacji lub przepływności serwera. Zaletą korzystania ze standardowego uczestnika śledzenia ETW jest to, że rekordy śledzenia odbierane mogą być wyświetlane z innymi dziennikami aplikacji i systemu w systemie Windows Podgląd zdarzeń.
Standardowy uczestnik śledzenia ETW jest skonfigurowany w pliku Web.config, jak pokazano w poniższym przykładzie.
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<etwTracking profileName="Sample Tracking Profile"/>
</behavior>
</serviceBehaviors>
</behaviors>
<tracking>
<profiles>
<trackingProfile name="Sample Tracking Profile">
….
</trackingProfile>
</profiles>
</tracking>
</system.serviceModel>
</configuration>
Uwaga
trackingProfile
Jeśli nie określono nazwy, takiej jak tylko <etwTracking/>
lub <etwTracking profileName=""/>
, zostanie użyty domyślny profil śledzenia zainstalowany z programem .NET Framework 4.6.1 w pliku Machine.config.
W pliku Machine.config domyślny profil śledzenia subskrybuje rekordy i błędy wystąpienia przepływu pracy.
W programie ETW zdarzenia są zapisywane w sesji ETW za pośrednictwem identyfikatora dostawcy. Identyfikator dostawcy używany przez uczestnika śledzenia ETW do zapisywania rekordów śledzenia w funkcji ETW jest zdefiniowany w sekcji diagnostyki pliku Web.config (w obszarze <system.serviceModel><diagnostics>
). Domyślnie uczestnik śledzenia ETW używa domyślnego identyfikatora dostawcy, jeśli nie został określony, jak pokazano w poniższym przykładzie.
<system.serviceModel>
<diagnostics etwProviderId="52A3165D-4AD9-405C-B1E8-7D9A257EAC9F" />
Na poniższej ilustracji przedstawiono przepływ danych śledzenia za pośrednictwem uczestnika śledzenia ETW. Gdy dane śledzenia dotrą do sesji ETW, można uzyskać do niej dostęp na wiele sposobów. Jednym z najbardziej przydatnych sposobów uzyskiwania dostępu do tych zdarzeń jest Podgląd zdarzeń, popularne narzędzie systemu Windows używane do wyświetlania dzienników i śladów z aplikacji i usług.
Śledzenie danych zdarzenia uczestnika
Uczestnik śledzenia serializuje śledzone dane zdarzenia do sesji ETW w formacie jednego zdarzenia na rekord śledzenia. Zdarzenie jest identyfikowane przy użyciu identyfikatora w zakresie od 100 do 199. Aby uzyskać definicje rekordów zdarzeń śledzenia emitowanych przez uczestnika śledzenia, zobacz temat Informacje o zdarzeniach śledzenia.
Rozmiar zdarzenia ETW jest ograniczony przez rozmiar buforu ETW lub przez maksymalny ładunek zdarzenia ETW, w zależności od tego, która wartość jest mniejsza. Jeśli rozmiar zdarzenia przekracza jeden z tych limitów ETW, zdarzenie zostanie obcięte i jego zawartość zostanie usunięta w dowolny sposób. Zmienne, argumenty, adnotacje i dane niestandardowe nie są selektywnie usuwane. W przypadku obcinania wszystkie te elementy są obcięte niezależnie od wartości, która spowodowała przekroczenie limitu ETW rozmiaru zdarzenia. Usunięte dane są zastępowane ciągiem <item>..<item>
.
Typy złożone w zmiennych, argumentach i niestandardowych elementach danych są serializowane do rekordu NetDataContractSerializer zdarzenia ETW przy użyciu klasy . Ta klasa zawiera informacje o typie CLR w serializowanej parze XML.
Obcięcie danych ładunku z powodu limitów ETW może spowodować wysłanie zduplikowanych rekordów śledzenia do sesji ETW. Taka sytuacja może wystąpić, jeśli więcej niż jedna sesja nasłuchuje zdarzeń, a sesje mają różne limity ładunku dla zdarzeń.
W przypadku sesji z niższym limitem zdarzenie może zostać obcięte. Uczestnik śledzenia ETW nie ma żadnej wiedzy na temat liczby sesji nasłuchiwania zdarzeń; jeśli zdarzenie zostanie obcięte dla sesji, uczestnik ETW ponawia próbę wysłania zdarzenia raz. W takim przypadku sesja skonfigurowana do akceptowania większego rozmiaru ładunku dwukrotnie pobierze zdarzenie (zdarzenie nie obcięte i obcięte). Można zapobiec duplikowaniu, konfigurując wszystkie sesje ETW z tymi samymi limitami rozmiaru buforu.
Uzyskiwanie dostępu do danych śledzenia z uczestnika ETW w Podgląd zdarzeń
Dostęp do zdarzeń zapisywanych w sesji ETW przez uczestnika śledzenia ETW można uzyskać za pośrednictwem Podgląd zdarzeń (przy użyciu domyślnego identyfikatora dostawcy). Dzięki temu można szybko wyświetlać rekordy śledzenia emitowane przez przepływ pracy.
Uwaga
Śledzenie zdarzeń rekordów emitowanych do sesji ETW używa identyfikatorów zdarzeń w zakresie od 100 do 199.
Aby włączyć wyświetlanie rekordów śledzenia w Podgląd zdarzeń
Uruchamianie Podgląd zdarzeń (EVENTVWR.EXE)
Wybierz pozycję Podgląd zdarzeń, Dzienniki aplikacji i usług, Microsoft, Windows, Application Server-Applications.
Kliknij prawym przyciskiem myszy i upewnij się, że wybrano pozycję Wyświetl dzienniki analityczne i Debuguj. Jeśli nie, zaznacz go, aby obok niego pojawi się znacznik wyboru. Spowoduje to wyświetlenie dzienników analizy, wydajności i debugowania .
Kliknij prawym przyciskiem myszy dziennik analityczny , a następnie wybierz pozycję Włącz dziennik. Dziennik będzie istniał w pliku %SystemRoot%\System32\Winevt\Logs\Microsoft-Windows-Application Server-Applications%4Analytic.etl.
Niestandardowy uczestnik śledzenia
Interfejs API uczestnika śledzenia umożliwia rozszerzenie środowiska uruchomieniowego śledzenia przy użyciu uczestnika śledzenia dostarczonego przez użytkownika, który może zawierać niestandardową logikę do obsługi rekordów śledzenia emitowanych przez środowisko uruchomieniowe przepływu pracy. Aby napisać niestandardowego uczestnika śledzenia, deweloper musi zaimplementować metodę Track
w TrackingParticipant klasie . Ta metoda jest wywoływana, gdy rekord śledzenia jest emitowany przez środowisko uruchomieniowe przepływu pracy.
Śledzenie uczestników pochodzi z TrackingParticipant klasy. Dostarczony przez system EtwTrackingParticipant emituje zdarzenie Event Tracking for Windows (ETW) dla każdego odebranego rekordu śledzenia. Aby utworzyć niestandardowego uczestnika śledzenia, zostanie utworzona klasa pochodząca z klasy TrackingParticipant. Aby zapewnić podstawowe funkcje śledzenia, przesłoń Trackelement . Track jest wywoływany, gdy rekord śledzenia jest wysyłany przez środowisko uruchomieniowe i może być przetwarzany w żądany sposób. W poniższym przykładzie zdefiniowano niestandardową klasę uczestnika śledzenia, która emituje wszystkie rekordy śledzenia do okna konsoli. Można również zaimplementować TrackingParticipant obiekt, który przetwarza rekordy śledzenia asynchronicznie przy użyciu jego BeginTrack
metod i EndTrack
class ConsoleTrackingParticipant : TrackingParticipant
{
protected override void Track(TrackingRecord record, TimeSpan timeout)
{
if (record != null)
{
Console.WriteLine("=================================");
Console.WriteLine(record);
}
}
}
Aby użyć określonego uczestnika śledzenia, zarejestruj go w wystąpieniu przepływu pracy, które chcesz śledzić, jak pokazano w poniższym przykładzie.
myInstance.Extensions.Add(new ConsoleTrackingParticipant());
W poniższym przykładzie jest tworzony przepływ pracy składający się z Sequence działania zawierającego WriteLine działanie. Element ConsoleTrackingParticipant
jest dodawany do rozszerzeń, a przepływ pracy jest wywoływany.
Activity activity= new Sequence()
{
Activities =
{
new WriteLine()
{
Text = "Hello World."
}
}
};
WorkflowApplication instance = new WorkflowApplication(activity);
instance.Extensions.Add(new ConsoleTrackingParticipant());
instance.Completed = delegate(WorkflowApplicationCompletedEventArgs e)
{
Console.WriteLine("workflow instance completed, Id = " + instance.Id);
resetEvent.Set();
};
instance.Run();
Console.ReadLine();