Подтвердить что ты не робот

ETW,.NET 4.5 - как записать в журнал событий?

Я пытаюсь обернуть голову вокруг ETW и как интегрировать t в высокопроизводительное приложение.

Мы все знаем старый страшный EventLog с его неструктурированным (и, следовательно, не столь оптимальным) API.

Теперь есть новый и причудливый API для высокопроизводительной трассировки - ETW, и он получил новый API на стороне .NET в 4.5 в виде класса EventSource, который вы можете легко подкласса (так что не более явное письмо).

Это оставляет мне несколько вопросов, пытаясь заставить это работать.

  • Какова нынешняя предлагаемая наилучшая (в соответствии с документацией, рекомендациями) способ работы с ETW и получать оттуда события в EventLog? У меня здесь есть приложение, которое должно писать (Performance) Events и хотело бы использовать ETW; но события должны появляться в (настраиваемом) журнале событий.
  • Есть ли для этого полный пример? Я могу найти их, но все они относятся к времени .NET 4.0 и начинают с манифеста.

Что я попробовал? Я получил работу EventSource, но просто не смог получить правильную документацию о том, как заставить остальных работать в нисходящем направлении.

4b9b3361

Ответ 1

То, чего вы пытаетесь достичь, невозможно из-за следующего:

  • Чтобы направить события ETW в журнал событий, вам нужно указать канал типа Admin, Operational или какой-либо классический один раз, как приложение в манифесте, и зарегистрировать его с помощью wevtutil. К сожалению, вы не можете использовать EventSource для этого, даже если у вас есть манифест, поскольку базовая реализация не устанавливает байтовый канал в блоке EventDescriptor при вызове WriteEvent, например. ваше событие никогда не помечено для определенного канала.

  • Что EventSource делает за сценой, чтобы избежать громоздкого процесса регистрации манифеста, скомпилировать его в ресурс win32, связать его с сборкой /dll, зарегистрировать его и т.д., чтобы сгенерировать манифест из вашей реализации EventSource и отправить это как известное событие, позволяющее принимающей службе анализировать все другие полезные события, вместо того чтобы полагаться на инфраструктуру окон, чтобы получить информацию о манифесте. Насколько мне известно, PerfView поддерживает это сейчас.

Ответ 2

В августе 2013 года Microsoft.Diagnostics.Tracing.EventSource 1.0.4 бета, выпущенная на NuGet. Три больших победы - поддержка каналов, статическая (установленная) поддержка манифеста (две вещи, необходимые для входа в средство просмотра событий) и поддержка .NET 4.0.

В соответствии с сообщение в блоге, объявляющее RTM, Microsoft.Diagnostics.Tracing.EventSource "позволяет быстро отслеживать приложения в журнале событий Windows, в том числе в производстве".

Ответ 3

Существует небольшое введение:

http://blogs.msdn.com/b/vancem/archive/2012/08/13/windows-high-speed-logging-etw-in-c-net-using-system-diagnostics-tracing-eventsource.aspx

http://blogs.msdn.com/b/vancem/archive/2012/07/09/logging-your-own-etw-events-in-c-system-diagnostics-tracing-eventsource.aspx

Я не пробовал их, потому что я сейчас работаю с .NET 4, но, возможно, эти ссылки помогут вам...

Ответ 4

Это очень интересно, поскольку я уже давно работаю над подобными требованиями. Во-первых, вы можете сгенерировать манифест из класса EventSource, используя его статический метод GenerateManifest (typeof (MyEvents), null). Это предоставит вам манифест ваших событий и т.д., Но не содержит подробностей о каналах. Вам нужно будет определить каналы самостоятельно в манифесте, а затем зарегистрироваться - использовать утилиты wevtutil.exe, mc.exe и rc.exe. Это создаст журналы событий в соответствии с вашим именем поставщика в манифесте.

Интересно, что мне удалось получить журналы Debug и Analytic, чтобы показать мне события, созданные через EventSource. Я мог бы также использовать Perfmon Tracing Session для записи событий за определенный период с фильтрами по ключевым словам и уровням. Поставщик также отображается в списке поставщиков сеанса трассировки.

Единственное, на что я смотрю сейчас, это принести события в каналы Admim и Operation. Пожалуйста, кричите, если вам нужны образцы и т.д.

http://www.suneet.net/FrmBlogViewer.aspx?blogid=75

Ответ 6

MSDN действительно не объясняет это хорошо. Я надеюсь, что Stackoverflow позволит мне добавить ссылку на лекцию Pluralsight, в которой объясняются все темы EventSource в идеале с использованием лучших практик использования https://app.pluralsight.com/library/courses/event-tracing-windows-etw-dotnet/table-of-contents