perf-sentinel v0.2.0
Second release. Adds multi-format trace ingestion, interactive inspection, SARIF export, and deeper detection capabilities.
New Features
- Explain mode (
perf-sentinel explain --trace-id ID): colored span tree view with JSON output, depth guard (256), and cyclic parent protection - TUI inspect mode (
perf-sentinel inspect): 3-panel ratatui interface (traces, findings, detail + span tree) with cached tree per trace - SARIF v2.1.0 export (
--format sarif): compatible with GitHub/GitLab code scanning integration - Jaeger & Zipkin ingestion: Jaeger JSON and Zipkin JSON v2 formats with auto-detection via byte-level heuristics
- pg_stat_statements ingestion (
perf-sentinel pg-stat): CSV/JSON auto-detection, top-N rankings by total_exec_time/calls/mean_exec_time, cross-reference with trace findings via--traces - Fanout detection: new
ExcessiveFanoutfinding type with configurablemax_fanout(default 20, range 1–100,000) - Cross-trace slow percentiles: p50/p95/p99 via nearest-rank algorithm
- Grafana Exemplars: OpenMetrics exemplar annotations on
findings_totalandio_waste_ratiometrics
Improvements
- SQL tokenizer: double-quoted identifiers and PostgreSQL dollar-quoted strings (
$$/$tag$) now supported; CTEs andCALLconfirmed working - ID validation:
sanitize_id()with char-boundary-aware UTF-8 truncation (MAX_ID_LENGTH=128) at normalize boundary - Pipeline:
analyze_with_traces()extracted to reduce duplication; sharedsort_findings()between pipeline and inspect parent_span_idadded toSpanEventfor tree building and fanout detectionis_avoidable_io()as single source of truth for waste classification- SonarCloud complexity fixes across SQL tokenizer, bench, and normalize modules
- Security audit workflow updated to actions-rust-lang/audit v1.2.7
Documentation
- OTel Collector config (
otel-collector-config.yaml) with batch, tail_sampling, and filter examples - Docker Compose with healthchecks
- Contributor Covenant Code of Conduct v2.1
- Generic domain examples in tests and fixtures
Performance
- >100k events/sec throughput
- <5 MB RSS idle, <20 MB loaded (10k traces)
- <10 MB binary size (stripped, LTO)
- <1ms latency per event
Install
# Prebuilt binaries (Linux amd64/arm64, macOS arm64, Windows amd64)
curl -LO https://github.com/robintra/perf-sentinel/releases/download/v0.2.0/perf-sentinel-linux-amd64
chmod +x perf-sentinel-linux-amd64
sudo mv perf-sentinel-linux-amd64 /usr/local/bin/perf-sentinel# From crates.io
cargo install perf-sentinel# Docker Hub (linux/amd64, linux/arm64)
docker pull robintrassard/perf-sentinel:0.2.0
docker run --rm robintrassard/perf-sentinel:0.2.0Also available on GHCR: ghcr.io/robintra/perf-sentinel:0.2.0
Links
- Integration guide (Java, .NET, Rust, OTel Collector)
- Configuration reference
- Architecture docs