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, в том числе в производстве".
существует небольшое введение учебник:
Я не пробовал их, потому что в настоящее время я работаю с .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