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.

RevealUncover 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 spike34.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