WedX - журнал о программировании и компьютерных науках

ETW — удаление файла журнала приводит к сбою ведения журнала?

Я начал использовать ведение журнала ETW в соответствии с рекомендациями Microsoft из-за его высокой производительности и предотвращения изобретения велосипеда и т. д.

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

У меня вопрос - как быть в этой ситуации? Есть ли способ указать ETW заблокировать файл, чтобы предотвратить его удаление? Должно ли что-то возвращать ошибку?

Обратите внимание, что я использую уровень API NT5, но эта проблема наблюдается на NT6+.

Соответствующие API:

RegisterTraceGuids
StartTrace
EnableTrace
TraceEvent

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

13.01.2015

Ответы:


1

Если вы используете библиотеку EventSource, ознакомьтесь с записью в блоге Вэнса Моррисона, Почему мой EventSource не создает никаких событий? Краткий ответ: обычно исключения проглатываются, потому что применение. В записи в блоге он объясняет, как просматривать возникающие исключения, устанавливая сеанс внешней трассировки. Вы можете периодически запрашивать наличие файла и выводить отчет об ошибках каким-либо способом, который вы можете обнаружить.

14.01.2015
  • Я использую необработанный API-интерфейс win32, поэтому не может быть никаких исключений (кроме нарушений прав доступа, которые означали бы ошибку в ОС) 15.01.2015
  • Я использовал его из оболочки .net, и я не вижу там много информации о сбоях. ETW предназначен главным образом для того, чтобы создание файла журнала было отдельным процессом от создания трассировки событий. 15.01.2015
  • Итак, вы думаете, что удаление файла журнала во время его работы означает, что он должен просто молча выйти из строя до следующей перезагрузки? Даже если сеанс ETW исчезнет при следующей перезагрузке? мне кажется большой недостаток 16.01.2015
  • @paulm Я не знаю лучшего решения этой проблемы, но в этом и заключается смысл дизайна. Продолжение работы приложения или службы важнее, чем их регистрация. Существует конструктор, который вы можете использовать с классом .net EventSource, который вызовет исключение в случае сбоя: msdn.microsoft.com/en-us/library/hh485655(v=vs.110).aspx 17.01.2015
  • @paulm Я должен добавить еще одну проблему, которую я обнаружил сегодня: открытие файла .etl с помощью PerfView, в то время как файл добавляется в другой процесс, приводит к тому, что файл перестает накапливать события. Сначала мне пришлось сделать копию файла, чтобы он не обрезался. 17.01.2015
  • @paulm Возможно, обратитесь на форум MSDN. Я сделаю это для проблемы с PerfView, когда у меня будет время. Вэнс, как правило, отвечает там. 17.01.2015
  • @paulm Еще один возможный обходной путь — поддерживать отдельный текстовый файл журнала в дополнение к файлу .etl, используя процесс вашего собственного создания. Это просто резервная копия. Конечно, лучше затруднить удаление/блокировку файла .etl. 17.01.2015
  • Однако копия файла не решит проблему. Пользователь все равно откроет исходный файл и сломает его. 17.01.2015
  • @paulm Не используя собственный API, я не могу сказать наверняка, но с .net API, который должен быть оболочкой, источник события отделен от сеанса трассировки событий. В этом случае будет прерван сеанс трассировки событий, а не источник события. Используя .net API, вы можете создать EventListener (msdn .microsoft.com/en-us/library/) в одном и том же процессе, и он будет продолжать работать, поскольку у вас есть полный контроль над этим. 20.01.2015
  • Это создает приватный сеанс? Могут ли другие процессы регистрировать события в вашем прослушивателе в этом случае? Сбивает с толку то, как они изменили условия в управляемом API. 20.01.2015
  • @paulm StartTrace создает сеанс трассировки. Сеанс трассировки может быть в другом процессе или в том же процессе, генерирующем события, поскольку источники событий используют для связи объект ядра. Я не думаю, что в родном API есть эквивалент EventListener. EventListener специфичен только для одного процесса — вы не можете прослушивать другой процесс. 21.01.2015
  • Однако есть некоторые флаги для создания сеанса как частного - где только один и тот же процесс может слушать, это должно быть то, что использует .NET? 21.01.2015
  • @paulm Я так не думаю, но человека, которого нужно спросить, зовут Вэнс Моррисон. 23.01.2015
  • @paulm Как бы то ни было, открытие файла .etl с помощью PerfView с использованием последней версии больше не приводит к тому, что файл перестает накапливать события. Я не знаю, стали ли базовые компоненты ETW более надежными в отношении удаления файлов. 26.05.2015
  • @paulm Я использую Windows 7, последние обновления, однако, скорее всего, исправление было в приложении PerfView, а не в ОС. 27.05.2015
  • Проблема удаления файла, по-видимому, вызвана тем, что ядро ​​​​удерживает открытый дескриптор файла ETL, ожидающего удаления, поэтому это должно быть исправление на стороне ядра. 27.05.2015
  • @paulm Моя собственная проблема заключалась не в удалении файла, которого я просто избегаю, а в том, что открытие файла .etl с помощью PerfView привело к тому, что файл перестал накапливать события. 27.05.2015
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]