
Быстрый (и безопасный) парсер для формата Windows XML Event Log (EVTX)
Кроссплатформенный парсер формата журнала событий Windows XML

Предпочитаете вариант без установки? Полнофункциональный EVTX-проводник работает прямо в вашем браузере, основанный на том же ядре Rust, скомпилированном в WebAssembly.
👉 Попробуйте сейчас: https://omerbenamram.github.io/evtx/
Все происходит локально – файлы никогда не покидают ваш компьютер. Основные возможности:
.evtx файлов (или нажмите для просмотра) – обрабатывает очень большие логи!EventData – все на базе DuckDB-WASMПросмотрщик статически размещается на GitHub Pages; после первой загрузки он полностью работает офлайн.
cargo install evtxevtx_dump (Утилита командной строки):Основная бинарная утилита, предоставляемая этим крейтом, — evtx_dump, обеспечивающая быстрый способ преобразования файлов .evtx в различные форматы вывода.
Несколько примеров
evtx_dump <evtx_file> выведет содержимое записей evtx в формате xml.evtx_dump -o json <evtx_file> выведет содержимое записей evtx в формате JSON.evtx_dump -f <output_file> -o json <input_file> выведет содержимое записей evtx в формате JSON в указанный файл.cat <evtx_file> | evtx_dump -o jsonl - прочитает EVTX файл из stdin (полезно для конвейеров/распаковки).evtx_dump можно комбинировать с fd для удобной пакетной обработки файлов:
fd -e evtx -x evtx_dump -o jsonl просканирует папку и выведет все evtx файлы в один файл jsonlines.fd -e evtx -x evtx_dump '{}' -f '{.}.xml' создаст xml-файл рядом с каждым evtx файлом, рекурсивно для всех файлов в папке!xargs (или gxargs на mac) и jq: fd -a -e evtx | xargs -I input sh -c "evtx_dump -o jsonl input | jq --arg path "input" '. + {path: \$path}'"Примечание: по умолчанию evtx_dump будет пытаться использовать многопоточность, это означает, что записи могут быть возвращены не по порядку.
Чтобы принудительно использовать однопоточный режим (который также гарантирует порядок), можно передать -t 1.
Записи EVTX могут ссылаться на определения шаблонов, хранящиеся в бинарных файлах провайдеров (EXE/DLL/SYS). evtx_dump может извлечь эти шаблоны в офлайн-кэш и использовать их во время отрисовки.
Примечание: эта функциональность требует сборки evtx_dump с Cargo-фичей wevt_templates (релизные бинарники могут уже включать её).
Создание кэша (один портативный файл .wevtcache):
evtx_dump extract-wevt-templates --input <provider.dll> --output /tmp/wevt_cache.wevtcache --overwriteДамп EVTX-файла с использованием кэша (детерминированное правило: применяется только при сбое записи из-за явно отсутствующего/поврежденного GUID шаблона):
evtx_dump --wevt-cache /tmp/wevt_cache.wevtcache <log.evtx>Вспомогательные средства отладки:
TemplateInstance записи (JSONL):
evtx_dump dump-template-instances --input <log.evtx> --record-id <ID> | head -n1evtx_dump apply-wevt-cache --cache /tmp/wevt_cache.wevtcache --template-guid <GUID> --evtx <log.evtx> --record-id <ID>См. docs/wevt_templates.md для деталей и предыстории (issue #103).
use evtx::EvtxParser;
use std::path::PathBuf;
// Change this to a path of your .evtx sample.
let fp = PathBuf::from(format!("{}/samples/security.evtx", std::env::var("CARGO_MANIFEST_DIR").unwrap()));
let mut parser = EvtxParser::from_path(fp).unwrap();
for record in parser.records() {
match record {
Ok(r) => println!("Record {}\n{}", r.event_record_id, r.data),
Err(e) => eprintln!("{}", e),
}
}
Параллельная версия включается при компиляции с фичей "multithreading" (включена по умолчанию).
При использовании многопоточности evtx значительно быстрее любого другого доступного парсера.
По производительности на одном ядре он одновременно самый быстрый и единственный кроссплатформенный парсер, поддерживающий вывод как xml, так и JSON.
Производительность была протестирована на моей машине с помощью hyperfine (инструмент статистических измерений).
Тесты запущены на 12-ядерном AMD Ryzen 3900X.
Запуск тестов: июнь 2026 (evtx 0.12.2).
Система: Arch Linux (Linux 7.0.11-arch1-1 x86_64).
Коммит тестов: 99a6def.
Столбцы evtx — и pyevtx-rs, наши собственные Python-биндинги, оборачивающие то же ядро Rust — были переизмерены в июне 2026 на той же машине после внедрения переработки компилированных шаблонов (см. docs/compiled-templates.html). Оба являются PGO-сборками, которые поставляются для Linux/macOS (релизный бинарник и PyPI-колесо; подробности ниже). pyevtx-rs ограничен Python-маршалингом для каждой записи (один словарь на запись), а не парсером, поэтому он не видит полного ускорения ядра. Остальные цифры конкурентов (libevtx, velocidex/evtx, golang-evtx, python-evtx) перенесены без изменений из январского 2026 прогона на том же оборудовании — внешние инструменты, чья производительность не изменилась.
Протестированные библиотеки: