JMeterperformance engineeringAIopen sourceproduct launch

JMeter Gave Me Reports. I Needed Answers — So I Built PerfSage Reveal

After years of drowning in JMeter HTML dashboards that report data but never explain it, I built PerfSage Reveal — upload a JTL, get expert charts, SLO verdicts, and actionable insights in one Docker command. Here's the real demo.

TL;DR — For years, my JMeter runs ended the same way: a massive HTML report full of numbers, and me still asking "so what do we do about this?" I built PerfSage Reveal to close that gap — upload any JMeter result file, get expert charts, SLO verdicts, and plain-English recommendations. One Docker command. No toolchain. I validated it on a real 3-minute load test against public APIs. The SLO failed — and Reveal told me exactly why. That's the point.

The problem I kept running into

I’ve been a performance engineer long enough to know the rhythm by heart:

  1. Run a load test in JMeter
  2. Wait for the HTML report to generate
  3. Scroll through tables, charts, and percentiles
  4. Export a screenshot for the stand-up
  5. Go back to the spreadsheet anyway
The uncomfortable truth: Most performance exercises stop at data reporting. We produce beautiful dashboards — but the hard part, turning that data into a decision, still falls on whoever is staring at the screen at 11 PM.

JMeter’s built-in HTML report is fine for showing what happened. It’s not built for explaining what it means.

Every time I opened one, I found myself asking the same questions:

What I saw in the reportWhat I actually needed
p99 latency: 1,124 msIs that a tail-latency problem or normal variance?
Error rate: 31%Which endpoint broke, and when did it start?
Response time scatterAre there outliers hiding in one transaction?
Green average latencyWould my SLO pass or fail — and why?

The answers were always somewhere in the data. But getting to them meant manual digging — pivot tables, custom scripts, or asking the one person on the team who remembers how the last project did it.

Analysis produces real value out of performance data. I kept watching teams skip that step because the tooling made it too painful.


Why I decided to build instead of workaround

We’re in an AI era now. That doesn’t mean I wanted another chatbot that hallucinates about your load test.

What I wanted was simpler and harder:

  • Take any JMeter result file — the .jtl you already have
  • Surface the patterns a senior perf engineer would look for first
  • Present it in a way you can share with people who don’t live in JMeter

So I spent time on the idea, iterated on what “useful analysis” actually looks like in practice, and PerfSage Reveal came out of that.

Reveal — Uncover what your load test really means. Upload your results. Get expert visualizations, SLO tracking, smart recommendations, and optional AI narratives. Export a shareable HTML or PDF report. One container, no extra pipeline.

It’s still early — I’m actively improving it — and I’d genuinely love your feedback if you try it.


See it in action: a real 3-minute load test

To prove this wasn’t just a pretty UI, I ran a short load test against three public APIs — the kind of endpoints every engineer has hit in a tutorial:

GET JSONPlaceholder /posts/{id}
GET httpbin /status/200
GET GitHub /zen

15 virtual users · 3 minutes · no custom scripts afterward.

I pulled the Docker image, started the container, and uploaded the raw .jtl file. That was the entire workflow.

docker run -d \
  --name perfsage-reveal \
  -p 8000:8000 \
  -v perfsage-reveal-data:/app/data \
  -e PERFSAGE_SECRET="your-32-char-secret-here" \
  aashu3201/reveal:latest

Open http://localhost:8000, drag in your JTL, and wait a few seconds.


What Reveal showed me — without me asking

Here’s the dashboard the moment analysis finished:

PerfSage Reveal dashboard showing KPI cards for 3,587 samples, P50 147ms, P90 330ms, P99 1124ms, 31.7% error rate, and expert recommendations flagged as critical
KPI summary and expert recommendations — the first screen I saw after upload. No spreadsheet required.
3,587 Samples Analysed
147 ms P50 Latency
31.7% Error Rate
FAIL SLO Verdict

Within seconds, Reveal flagged things I would have spent an hour hunting for:

FindingWhy it matters
Tail latency on JSONPlaceholder — p99 was 19.9× the medianA few slow responses are punishing real users even when averages look fine
Error spike — 34.4% failures in one time windowSomething broke mid-test, not gradually — worth a timeline look
GitHub /zen at 97% errorsRate limiting under load — the test design issue, not a mystery
This is the moment that sold me on the idea. I didn't configure thresholds. I didn't write a parser. I uploaded a file I already had — and Reveal told me where to look first.

The charts that actually help you decide

Response time scatter — see outliers per transaction at a glance, not buried in an aggregate table:

PerfSage Reveal scatter chart showing response time distribution across JSONPlaceholder, httpbin, and GitHub transactions with visible outlier clusters
Outliers jump out immediately — no filtering, no pivot table.

SLO gauges — Apdex, error budget, and p99 compliance in one view:

PerfSage Reveal SLO gauge charts showing Apdex, error rate, and P99 latency compliance with red fail indicators
SLO pass or fail — visible before you write a single sentence in the incident doc.

Error breakdown — which endpoint, which failure, how much:

PerfSage Reveal sunburst chart breaking down errors by transaction label and response code
GitHub rate-limiting dominated the error picture — obvious in one chart.

And when I needed something to attach to a review or share with a PM? One-click PDF export — 29 charts embedded, ready to send. No “chart not available” placeholders.


Who this is for

If any of this sounds familiar, Reveal is for you:

  • You run JMeter (or inherit JMeter results) and dread the analysis step
  • Your stakeholders want answers, not a 40-tab HTML dump
  • You care about SLOs but don’t want to rebuild the parsing layer every project
  • You want optional AI insights — but only when you’ve configured your own API key
"I can send this to someone who doesn't use JMeter." Same bar I set for my SLO Reporter plugin. Reveal clears it — for the entire analysis workflow, not just the pass/fail gate.

Honest status: early, improving, and open to feedback

PerfSage Reveal is live and usable today — Docker image on Hub, source on GitHub — but I’m treating this as a v0.1 launch, not a finished product.

What’s coming next on my roadmap:

  • Richer AI narrative modes and tighter prompt controls
  • More JMeter format edge cases from real-world uploads
  • Team workflows — compare runs, baseline drift, CI hooks

If you try it and something feels off, missing, or confusing — tell me. Issue on GitHub, DM on LinkedIn, or book a call. That feedback is how this gets better.


Try it yourself

Fastest path — one Docker command:

docker pull aashu3201/reveal:latest

docker run -d \
  --name perfsage-reveal \
  -p 8000:8000 \
  -v perfsage-reveal-data:/app/data \
  -e PERFSAGE_SECRET="change-me-to-a-32-char-random-string" \
  aashu3201/reveal:latest

Then open http://localhost:8000 and upload any JMeter .jtl, .csv, or .xml result file.


Published: May 2026 · By Aashish Bajpai