Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Для полноты картины стоит коснуться потребителя ETW-событий. Потребитель - это приложение, которое читает логи, созданные в ходе ETW-сессии, или цепляется к ней напрямую и потребляет генерируемые ей события в реальном времени. Консьюмить залоггированую трассу неинтересно. Не буду отвлекать на увлекательный рассказ про парсинг csv или xml или еще какого-нибудь формата. Какие-то потуги в этом направлении предпринимались во второй серии, Скрипты 1-3. Примером потребителя реального времени явлется всем хорошо известный Windows Event Viewer. Подобных приложений можно написать сколько угодно, каждое для своей области. Скажем, Performance Profiling Tools for WPF.
Рис.1
Real-time провайдером может выступать утилита tracerpt, которую мы использовали для преобразования etl в читабельные форматы (см. первая серия, Рис.8, 9). Стартуем сессию сбора событий из SQL Trace (вторая серия, Скрипт 7), направив вывод не в etl-файл, а в real-time (ключ -rt):
logman start SqlDataCollector -ets -rt -p "MSSQLServer Trace" 0 0
Рис.2
Видим среди запущенных ETW-сессий сессию по имени SqlDataCollector, которая стримит свои рез-ты в real-time. Tracerpt может подключиться к этой сессии, улавливать ее выходной стрим и направить его непосредственно в какой-либо читабельный формат:
tracerpt -rt SqlDataCollector -o c:\Temp\SqlDataCollector.xml -of XML
Рис.3
Образуется файл c:\Temp\SqlDataCollector.xml, который будет прирастать по мере поступления событий. Все время сбора он будет занят, открыть и прочесть его удастся по остановке (logman stop) сессии SqlDataCollector.
Написание собственного потребителя реального времени находится не слишком в струе светлых идей популяризации и продвижения .NET. Если провайдера ETW худо-бедно можно изобразить .NET-средствами, как мы видели в предыдущем посте, до потребителя managed world еще, увы, не добрался. Например, вот примерный пример примеривания потребителя применительно к событиям IIS.
Разумеется, со временем нашлись добрые люди, написавшие .NET-обертку вокруг native API и Сшных вызовов, чтобы потреблять события ETWшной сессии из VB.NET и С#. Образцы народного творчества можно найти в блогах и на кодплексе. Словом, интеграция ETW c .NET здесь на том же уровне, что и при создании провайдера на основе манифеста. Наверное, в .NET когда-нибудь появится нормальная поддержка ETW, поскольку это актуальная перспективная технология integrated throughout Windows, offering higher performance, flexibility, zero-config tracing and a lot of other advantages.