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

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

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

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

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

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

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

6 ответов


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

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

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


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

по словам блоге объявление RTM, Microsoft.Диагностика.Трассировка.EventSource "позволяет быстро отслеживать приложения в журнале событий Windows, в том числе в производстве".


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

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, но, возможно, эти ссылки помогают вы...


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


в "Блок Приложений Семантического Ведения Журнала " имеет примеры EventListener-производных классов, один из которых записывается в журнал событий. Это описал немного в блоге Вэнса.


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

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

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

детали присутствуют в- http://www.suneet.net/FrmBlogViewer.aspx?blogid=75