Storage Benchmark Kit
WebLogger displays SBK measurements in the SBK Local Web Console without Docker, Prometheus, or Grafana. The
local component is intentionally named differently from the separately deployable SBK Dashboard project. It uses the same
periodic interval measurements delivered through print(...), while printTotal(...) writes cumulative final totals
only to the console. Enabling WebLogger therefore does not add measurement sampling or storage-driver work. The web
console server runs as the SbkWebConsoleMain process, is implemented with the JDK HTTP server,
retains a bounded in-memory history, and sends
new summaries to browsers with server-sent events (SSE).
The browser also synchronizes bounded history every two seconds, so graphs recover automatically if an SSE stream
is delayed, interrupted, or unavailable through an HTTP intermediary.
Use the logger matching the application:
| Application | Logger | Displayed result |
|---|---|---|
sbk or sbk-yal |
WebLogger |
One local SBK workload |
sbm |
SbmWebLogger |
Aggregated results received from distributed SBK clients |
sbk-gem or sbk-gem-yal |
GemWebLogger |
Cluster aggregate produced by GEM’s embedded SBM |
The Local Web Console URL is http://127.0.0.1:9720. The server listens on 0.0.0.0 by default and prints separate
copy-paste run links for loopback, the machine hostname, and its available public/private IPv4 addresses. A browser
on another system can use one of those hostname or IP links when network and firewall policy allow the connection.
The default transport is unsecured HTTP; WebLogger does not start SSH and does not enable TLS or HTTPS.
A read benchmark needs an existing data file. First create one using records of the same size that the reader will request. This preparation command creates a 1 GiB file from 1,048,576 records of 1,024 bytes:
./build/install/sbk/bin/sbk \
-class file -file /tmp/sbk-weblogger.dat \
-writers 1 -size 1024 -records 1048576
Then run a 60-second filesystem read benchmark with live graphs:
./build/install/sbk/bin/sbk \
-class file -file /tmp/sbk-weblogger.dat \
-readers 1 -size 1024 -seconds 60 \
-out WebLogger
SBK starts the web console when necessary and normally opens the run URL in the default browser. On a headless host, disable automatic browser opening and connect through an appropriate secure tunnel:
./build/install/sbk/bin/sbk \
-class file -file /tmp/sbk-weblogger.dat \
-readers 1 -size 1024 -seconds 60 \
-out WebLogger -webopen false
The graphs show completed record rate and throughput, write/read request rates, worker and connection counts,
pending requests, timeout and invalid-latency counts, average/minimum/maximum latency, and configured latency
percentiles. Every point represents one regular SBK reporting window (five seconds by default). Cumulative
printTotal results produced at shutdown or by a total-buffer flush are deliberately excluded because mixing
cumulative and interval values would distort the live graphs. The last interval snapshot remains selectable after
the benchmark finishes.
Logger options appear only after selecting the WebLogger class. Treat generated help as authoritative. The
-web... names identify Local Web Console behavior without implying use of the separately deployable SBK Dashboard.
./build/install/sbk/bin/sbk -out WebLogger -help
./build/install/sbk/bin/sbm -out SbmWebLogger -help
./build/install/sbk/bin/sbk-gem -out GemWebLogger -help
| Option | Default | Meaning |
|---|---|---|
-webhost HOST |
0.0.0.0 |
Address on which the plain HTTP Local Web Console server listens |
-webport PORT |
9720 |
Local Web Console HTTP port |
-webstart true\|false |
true |
Start a compatible Local Web Console server when none is reachable |
-webopen true\|false |
true |
Ask the local desktop to open the Local Web Console run URL |
-webminutes N |
180 |
Minutes of interval snapshots retained for each run (three hours by default) |
-boardname NAME |
empty | Optional display name that identifies the benchmark board in the Local Web Console |
-webstart false is useful when an operator manages the web console process separately. If no compatible
server is available, SBK continues without live graphs and reports the reason. A different service or an older,
incompatible web console on the configured port is never treated as the SBK web console.
One web console server accepts one active WebLogger, SbmWebLogger, or GemWebLogger benchmark at a time. This
prevents unrelated runs from being presented as one active experiment. A second active benchmark exits with an
ownership error identifying the current run and occupied port, and recommends
-webport <different-port>. Selecting another port starts an independent SbkWebConsoleMain, allowing
multiple web consoles to run in parallel without mixing their benchmark streams.
The server lifecycle is:
Closing a browser releases its lease. If a browser or network disappears without a clean close, the lease expires from its last renewal, so a dead TCP connection cannot keep the process alive indefinitely. The logger and browser leases are independent: an attached browser preserves old graphs, but it cannot retain ownership for a dead benchmark.
For manually launched distributed clients, start SBM with SbmWebLogger:
./build/install/sbk/bin/sbm \
-out SbmWebLogger -class file -action r
Then point each SBK client at the SBM host. Remote clients use GrpcLogger; only SBM owns the web console:
./build/install/sbk/bin/sbk \
-class file -file /tmp/sbk-weblogger.dat \
-readers 1 -size 1024 -seconds 60 \
-out GrpcLogger -sbm <sbm-host> -sbmport 9717
For SSH-orchestrated benchmarking, select GemWebLogger on SBK-GEM:
./build/install/sbk/bin/sbk-gem \
-out GemWebLogger -nodes host1,host2 \
-class file -file /tmp/sbk-weblogger.dat \
-readers 1 -size 1024 -seconds 60
GEM starts an embedded SBM. Remote SBK processes send SBP/gRPC measurements to that aggregator, and
GemWebLogger publishes only the combined cluster result to the browser.
The default 0.0.0.0 binding accepts unsecured HTTP connections on every network interface. WebLogger neither
starts SSH nor enables TLS/HTTPS. A remote browser can therefore connect directly:
http://<benchmark-host>:9720
The web console has no authentication or encryption. Use the default only on an isolated, trusted benchmark network
protected by host and network firewall rules. To restrict access to the benchmark host, set
-webhost 127.0.0.1.
An SSH tunnel remains an optional security measure when the web console is bound to loopback:
ssh -L 9720:127.0.0.1:9720 user@benchmark-host
Then open http://127.0.0.1:9720 locally.
| Symptom | Resolution |
|---|---|
| Browser does not open | Copy the printed URL manually, or use -webopen false on headless systems |
| Local Web Console unavailable | Check -webhost, -webport, local firewall rules, and whether startup is disabled |
| Port is incompatible | Stop the unrelated/older service or select another -webport |
| Local Web Console remains on an older UI after upgrading SBK | Close every web console browser tab, wait one idle minute for the old server to exit, and retry |
| Local Web Console already in use | Wait for the named active benchmark to finish; do not combine independent experiments |
| Local Web Console reports an abandoned run | The logger stopped publishing snapshots and heartbeats for one minute, usually because its SBK, SBM, or SBK-GEM process was killed or lost connectivity; correct the failure and start a new benchmark |
| Read benchmark reports no useful data | Create and verify the input file first; use the same record size for preparation and reading |
| Graph disappears after completion | Keep a browser page connected; otherwise the server intentionally exits after one idle minute |
| Remote browser cannot connect | Verify port 9720 is allowed by the benchmark host firewall and use http://<benchmark-host>:9720 |
The implementation is under sbk-api/src/main/java/io/sbk/webconsole. WebConsoleLoggerSupport is shared by SBK,
SBM, and SBK-GEM; WebConsoleServer owns run registration, bounded histories, browser leases, SSE, and idle shutdown.