static String prometheusValue(WebClient prometheus, String query) throws Exception {
    QueryStringEncoder encoder = new QueryStringEncoder("/api/v1/query");
    encoder.addParam("query", query);
    String response = prometheus.get(encoder.toString()).aggregate().join().contentUtf8();
    return OBJECT_MAPPER.readTree(response).at("/data/result/0/value/1").asText();
  }
This benchmark runs zipkin-server, storage backends, an example application, prometheus, grafana,
and wrk using docker to generate a performance report.

<p>Currently there are two environment variable knobs

<ul>
  <li>
    RELEASE_VERSION - specify to a released zipkin server. If unspecified, will use the current code,
    i.e., the code currently displayed in your IDE.
  </li>
  <li>
    ZIPKIN_BENCHMARK_WAIT - set to true to have the benchmark wait until user manually terminates at the end.
    Useful to manually inspect prometheus / grafana.
  </li>
</ul>

<p>Note to Windows laptop users: you will probably need to restart the Docker daemon before a
session of benchmarks. Docker containers seem to have time get out of sync when a computer sleeps
until you restart the daemon - this causes Prometheus metrics to not scrape properly.
benchmarks/src/test/java/zipkin2/server/ServerIntegratedBenchmark.java