Unified local workspace for two DFIR tools:
Event Log Parser(EVTX-focused)
Log Parser(plain-text log analytics)
Both tools are started from one launcher and exposed through one landing page.
- Purpose
- Components
- Parser Capabilities
- Folder Structure
- Prerequisites
- Installation
- Startup
- Daily Workflow
- Usage (Web Import)
- URLs
- Environment Variables
- Troubleshooting
This suite provides a single local entry point for DFIR workflows, so you can:
- launch all services with one command,
- switch between EVTX and text-log workflows quickly,
- and keep analysis operations consistent across investigations.
Running ./start.sh starts four processes:
- EventLogParser backend (
http://localhost:8080) - EventLogParser frontend (
http://localhost:3000) - Log Parser service (
http://localhost:8800) - Landing page server (
http://localhost:8899)
Startup behavior:
- checks required ports (
3000,8080,8800,8899) - waits for health/availability checks before declaring success
- prints
All services started.only after all endpoints are reachable - cleans up child processes when you stop with
Ctrl+C
Best for Windows-native forensic timelines and event-channel investigations.
Core capabilities:
- Multi-threaded EVTX ingestion into SQLite.
- Structured extraction of core event fields (event ID, channel, host, user, SID, provider, timestamp, and raw XML/JSON payloads).
- Full-text event search over indexed event data.
- Filtered event retrieval by event ID, channel, user/SID, IP-related fields, include/exclude keywords, and time window.
- Timeline aggregation with minute/hour buckets.
- Stats aggregation for top event IDs, channels, users, and source/destination IPs.
- Process-focused views (including process-related event IDs).
- Detection engine driven by YAML rules with:
- severity/metadata,
- field-level filters,
- regex matching,
- correlation chains and time windows.
- Investigation/report features:
- standard case summary report,
- custom Markdown report from selected events,
- custom HTML report for print/export workflows.
- Utility endpoints for suspicious events, logon failure/success summaries, and 4624/4625 correlation.
Main API surface (high-value endpoints):
POST /ingestGET /eventsGET /searchGET /timelineGET /statsGET /detectionsPOST /reportPOST /reports/customPOST /reports/custom/html
Best for high-volume web/server/application text logs and pattern-heavy hunts.
Core capabilities:
- Parallel directory scanning for
.log,.txt, rotated log files, and extensionless files. - Text search with include/exclude term sets and
any/allmatch mode. - Structured line parsing for:
- timestamp extraction,
- status code,
- bytes received,
- source/destination/public IPs.
- Filtering and sorting:
status_codefilter,ip_scope(private/public),min_bytes_received,- sorting by file position or bytes ascending/descending.
- Context retrieval API to return surrounding lines around a hit.
- IP summary mode with unique counts and optional CSV export.
- Rule engine for detections with:
- regex criteria,
- field conditions and comparison operators,
- threshold rules,
- time-windowed grouping (
global/src_ip/dst_ip/status).
- Detection persistence in SQLite:
- rule upsert/list/disable,
- detection run history,
- paginated hit listing with cursor ordering,
- false-positive marking and notes,
- CSV export of detection hits.
- Export behavior with writable-directory fallback (
exports->exports_local).
Main API surface (high-value endpoints):
POST /searchPOST /ip_summaryPOST /contextPOST /detections/runGET /detections/rulesPOST /detections/rulesGET /detections/hitsPOST /detections/hits/:id/false_positivePOST /detections/export
DFIR_suite/
├─ setup.sh
├─ start.sh
├─ README.md
├─ landing/
│ └─ index.html
├─ logs/
└─ apps/
├─ EventLogParser/
└─ Log_parser/
Required:
bash- Rust toolchain (
cargo) - Node.js + npm
- Python 3 (or Python)
curlss(fromiproute2)
Recommended:
gitrg(ripgrep)
Use the automated installer (recommended), then start the suite.
From the DFIR_suite directory:
chmod +x setup.sh start.sh
./setup.sh
./start.shsetup.sh installs required system/runtime dependencies, installs npm dependencies for the Event UI, and pre-fetches Rust dependencies for both parsers.
If you do not want to use setup.sh, follow the manual steps below.
Use rustup (recommended):
curl https://sh.rustup.rs -sSf | sh
source "$HOME/.cargo/env"
rustc --version
cargo --versionUse Node.js 20 LTS or newer:
node --version
npm --versionUbuntu/Debian example:
sudo apt update
sudo apt install -y curl iproute2 python3cd apps/EventLogParser/web
npm ci
cd ../../..bash --version
cargo --version
node --version
npm --version
python3 --version
curl --version
ss --versionFrom the DFIR_suite directory:
./start.shIf ports are already in use and you want automatic cleanup:
AUTO_KILL_PORTS=1 ./start.shIf first startup is slow due to builds/dependency install:
STARTUP_TIMEOUT_SECS=900 ./start.sh- Start services with
./start.sh. - Open
http://localhost:8899. - Select the tool:
- Event-focused analysis -> Event Log Parser
- Large text-log analysis -> Log Parser
- Import data from the web UI (see
Usage (Web Import)below). - Run analysis and exports.
- Stop all services with
Ctrl+C.
Store documentation screenshots under docs/images/ to keep the project root clean.
- Open
http://localhost:3000. - Go to
Ingest. - In
EVTX folder path, enter your EVTX directory (for exampleevent_logor an absolute path). - Click
List. - Select one or more files from the table.
- Click
Ingest Selected. - After ingest completes, move to
Events,Search,Timeline, orDetections.
- Open
http://localhost:8800. - In
Root path, enter the directory containing your log files. - Optionally set keywords, exclusions, status/IP filters, and page size.
- Click
Searchto parse and load results. - For detections, open
Detection, provide/select rules, then run detection.
- Landing page:
http://localhost:8899 - Event Parser UI:
http://localhost:3000 - Event Parser API:
http://localhost:8080 - Log Parser UI/API:
http://localhost:8800 - Log Parser health check:
http://localhost:8800/healthz
Supported by start.sh:
AUTO_KILL_PORTS0(default): fail when a required port is in use1: terminate existing listeners on required ports and continue
STARTUP_TIMEOUT_SECS- startup wait timeout
RUST_LOG- Rust logging level
EVTX_DB_PATH- Event parser DB file path
NEXT_PUBLIC_API_BASE- Event frontend API base URL
BIND_ADDRESS- Log Parser bind address
Run:
AUTO_KILL_PORTS=1 ./start.shCheck runtime logs:
tail -n 120 logs/event_backend.log
tail -n 120 logs/event_frontend.log
tail -n 120 logs/log_parser.log
tail -n 120 logs/landing.logcd apps/EventLogParser/web
npm ciExpected on first run:
- Rust compilation
- Node package installation
Use a larger timeout if needed:
STARTUP_TIMEOUT_SECS=1200 ./start.sh




