Ведение журнала ETW - файл переписывания TraceEventSession

1

У меня есть приложение IIS, которое использует TraceEventSession для захвата сообщений ETW и пересылки их в файл журнала:

TraceEventSession _etwSession = new TraceEventSession(
   "MyEtwLog", @"C:\Logs\MyEtwLog.etl") { 100 };
_etwSession.EnableProvider(
   TraceEventProviders.GetEventSourceGuidFromName, "MyEtwLog"),
   TraceEventLevel.Always);

Он работает нормально, но по какой-то причине каждый раз, когда я перезапускаю приложение, он перезаписывает файл журнала вместо добавления к нему. Любая идея, что мне не хватает?

заранее спасибо

  • 0
    Вы пробовали TraceEventSessionOptions.Attach ?
  • 0
    Я попробовал все три варианта безуспешно.
Теги:
logging
etw
etw-eventsource

2 ответа

5
Лучший ответ

Отказ от ответственности: я вношу свой вклад в TraceEvent внутри Microsoft

Вы можете добавить файл ETW с помощью EVENT_TRACE_FILE_APPEND_MODE, который TraceEvent не поддерживает сегодня. Мы могли бы добавить его, но я вижу больше проблем с раскрытием API, чем нет.

TL; DR - Полные сессии ETW с их метаданными - это то, что регистрируется в каждом файле, и каждый сеанс может иметь разные параметры, например, разрешение часов, например, которые могут вызывать неточности в метке времени, которые могут попадать под ваш радар, и вы можете подать жалобу на какой-то пункт.

Вот что я рекомендую. Я поспал, но вы бы определили, как вращать файлы (например, отслеживать, когда ваш экземпляр IIS обновляется).

var _etwSession = new TraceEventSession("MyEtwLog", @"C:\Logs\MyEtwLog." + MyTimestamp + ".etl");
_etwSession.EnableProvider(new Guid("MyGuid"), TraceEventLevel.Always);

Thread.Sleep(1000 * 60);

_etwSession.SetFileName(@"C:\Logs\MyEtwLog" + timestamp + ".etl");

Немного фона:

Файлы ETW представляют собой двоичные потребительские данные (ваши сообщения журнала), а затем метаданные, предоставленные подсистемой ETW, которые каждое сообщение журнала получает бесплатно. Подобно ThreadID, номер логического процессора, будь то кулачок из режима ядра или пользователя, и, наконец, но самое главное, метка времени, которая на самом деле является значением, зависящим от частоты процессора.

В дополнение к вышесказанному, ETW файл "rundown", подумайте о нем как состоянии операционной системы, также покраснет в файл в начале и в конце сеанса.

И, несмотря на то, что большинство потребителей считают, что журналы ETW похожи на обычные журналы, они вроде бы не такие. Они тесно связаны со временем, когда был сделан след (помните, что ETW использовался в основном для первичного анализа командой Windows Kernel в начале). В последнее время ситуация улучшилась, так что файл может быть полностью обработан независимо, и для ваших целей это может быть очень хорошо.

Но я могу представить много случаев, когда добавление к тому же файлу - не очень хорошая идея.

О, и еще один большой. Файлы ETW читаются последовательно от начала до конца каждый раз. То есть он будет продолжать расти, и вы не можете прочитать его посередине, по крайней мере, не поддерживаемым способом :-)

И, наконец, вы все равно не захотите добавлять, потому что представьте, что вы пишете файл журнала foo.etl, затем вы покупаете шпагат нового процессора и добавляете в этот файл журнала все ваши отметки времени, собранные в предыдущем сеансе, будут отключены какой-нибудь число.

  • 0
    Ваше предложение именно то, что я реализовал (добавив отметку времени в имя файла). Спасибо за ответ.
0

Я не думаю, что тебе что-то не хватает. Невозможно добавить к существующему файлу с помощью TraceEventSession. Объединение различных файлов вместе с TraceEventSession.Merge возможно, но даст только правильные результаты, если они находятся на одном компьютере, и он не перезапускался в среднем.

В ETW API есть способ добавить параметр EVENT_TRACE_FILE_MODE_APPEND, если вы хотите сделать это за пределами TraceEventSession, но у него есть ограничения.

  • 0
    Спасибо за информацию, Ларс. Знаете ли вы, есть ли какая-нибудь альтернатива C # TraceEventSession, которую я могу использовать?
  • 0
    Извините, я не знаю альтернативы

Ещё вопросы

Сообщество Overcoder
Наверх
Меню