Skip to content

Commit 8f5bc40

Browse files
Visualize benchmark results with Kibana
With this commit we embed Kibana dashboards for nightly and release benchmarks. As we want to gather further feedback we did not yet remove the old functionality based on dygraphs (this will happen in elastic#33). Closes elastic#23 Closes elastic#9 Closes elastic#11 Closes elastic#12
1 parent 6eaa4b2 commit 8f5bc40

File tree

8 files changed

+445
-1165
lines changed

8 files changed

+445
-1165
lines changed

external/pages/default/geonames/index.html

+28-191
Original file line numberDiff line numberDiff line change
@@ -26,55 +26,26 @@
2626

2727
<script type="text/javascript">
2828
var charts = {
29-
init: function() {
29+
init: function(resultsChart, comparisonChart) {
30+
this.resultsChart = resultsChart;
31+
this.comparisonChart = comparisonChart;
3032
charts.toggleCompare($("#checkToggleCompare")[0]);
3133
},
3234

3335
showResults: function() {
34-
var annotationSource = false;
35-
36-
charts.indexingThroughput = chartingLib.renderChart('indexing_throughput', 'Indexing throughput', 'Mean Throughput [docs/s]', 'indexing_throughput_annotations.json');
37-
charts.totalTimes = chartingLib.renderChart('indexing_total_times', 'Total times', 'Time [min]', 'indexing_total_times_annotations.json');
38-
charts.mergeParts = chartingLib.renderChart('merge_parts', 'Merge Times, By Part', 'Time [min]', annotationSource);
39-
charts.segmentMemory = chartingLib.renderChart('segment_total_memory', 'Segment total heap used', 'Heap used [MB]', annotationSource);
40-
charts.cpuUsage = chartingLib.renderChart('indexing_cpu_usage', 'Indexing CPU usage', 'CPU usage [%]', 'indexing_cpu_usage_annotations.json')
41-
charts.diskUsage = chartingLib.renderChart('disk_usage', 'Index disk usage', '[GB]', annotationSource),
42-
charts.segmentCounts = chartingLib.renderChart('segment_counts', 'Index segment counts', 'Segment count', 'segment_counts_annotations.json'),
43-
charts.queryLatency = chartingLib.renderChart('search_latency_queries', 'Search Latency', '99th Percentile Latency [ms]', 'search_latency_queries_annotations.json'),
44-
charts.statsLatency = chartingLib.renderChart('search_latency_stats', 'Stats Latency', '99th Percentile Latency [ms]', annotationSource),
45-
charts.gcTimes = chartingLib.renderChart('gc_times', 'GC times', 'Total GC runtime [s]', 'gc_times_annotations.json')
46-
47-
48-
chartingLib.synchronize([
49-
charts.indexingThroughput,
50-
charts.totalTimes,
51-
charts.mergeParts,
52-
charts.segmentMemory,
53-
charts.cpuUsage,
54-
charts.diskUsage,
55-
charts.segmentCounts,
56-
charts.queryLatency,
57-
charts.statsLatency,
58-
charts.gcTimes
59-
]);
36+
this.showChart(this.resultsChart);
6037
},
6138

6239
compare: function() {
63-
// workaround for a deficiency in dygraphs bar charts and CSV data sources
64-
var versions = ["1.7.6", "2.4.5", "5.4.0", "master", "Docker 5.4.0"];
40+
this.showChart(this.comparisonChart);
41+
},
42+
6543

66-
charts.indexingThroughput = chartingLib.renderBarChart('indexing_throughput', 'Indexing throughput', 'Mean Throughput [docs/s]', versions);
67-
charts.totalTimes = chartingLib.renderBarChart('indexing_total_times', 'Total times', 'Time [min]', versions);
68-
charts.mergeParts = chartingLib.renderBarChart('merge_parts', 'Merge Times, By Part', 'Time [min]', versions);
69-
charts.segmentMemory = chartingLib.renderBarChart('segment_total_memory', 'Segment total heap used', 'Heap used [MB]', versions);
70-
charts.cpuUsage = chartingLib.renderBarChart('indexing_cpu_usage', 'Indexing CPU usage', 'CPU usage [%]', versions)
71-
charts.diskUsage = chartingLib.renderBarChart('disk_usage', 'Index disk usage', '[GB]', versions),
72-
charts.segmentCounts = chartingLib.renderBarChart('segment_counts', 'Index segment counts', 'Segment count', versions),
73-
charts.queryLatency = chartingLib.renderBarChart('search_latency_queries', 'Search Latency', '99th Percentile Latency [ms]', versions),
74-
charts.statsLatency = chartingLib.renderBarChart('search_latency_stats', 'Stats Latency', '99th Percentile Latency [ms]', versions),
75-
charts.gcTimes = chartingLib.renderBarChart('gc_times', 'GC times', 'Total GC runtime [s]', versions)
44+
showChart: function(chartId) {
45+
$("#charts").html("<iframe id=\"charts\" src=\"https://elasticsearch-benchmark-analytics.elastic.co/app/kibana#/dashboard/" + chartId + "?embed=true&_g=(refreshInterval%3A(display%3AOff%2Cpause%3A!f%2Cvalue%3A0)%2Ctime%3A(from%3Anow-1y%2Cmode%3Aquick%2Cto%3Anow))\" height=\"100%\" width=\"100%\" frameBorder=\"0\"></iframe>");
7646
},
7747

48+
7849
toggleCompare: function(e) {
7950
if (e.checked) {
8051
this.compare();
@@ -83,8 +54,13 @@
8354
}
8455
}
8556
}
86-
8757
</script>
58+
59+
<style>
60+
body,html,.main-display-area,.col-md-12 {
61+
height:100%;
62+
}
63+
</style>
8864
</head>
8965

9066
<body>
@@ -103,20 +79,8 @@
10379
</div>
10480
<div class="navbar-collapse collapse">
10581
<ul class="nav navbar-nav">
106-
<li class="dropdown active">
107-
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Geonames <b class="caret"></b></a>
108-
<ul class="dropdown-menu">
109-
<li><a href="#indexing_throughput">Indexing Throughput</a></li>
110-
<li><a href="#indexing_total_times">Total times</a></li>
111-
<li><a href="#merge_parts">Merge Times, By Part</a></li>
112-
<li><a href="#segment_total_memory">Segment total heap used</a></li>
113-
<!--<li><a href="#indexing_cpu_usage">Indexing CPU usage</a></li>-->
114-
<li><a href="#disk_usage">Index disk usage</a></li>
115-
<li><a href="#segment_counts">Index segment counts</a></li>
116-
<li><a href="#search_latency_queries">Search Latency</a></li>
117-
<li><a href="#search_latency_stats">Stats Latency</a></li>
118-
<li><a href="#gc_times">GC times</a></li>
119-
</ul>
82+
<li class="active">
83+
<a href="#">Geonames</a>
12084
</li>
12185
<li><a href="../geopoint/index.html">Geopoint</a></li>
12286
<li><a href="../percolator/index.html">Percolator</a></li>
@@ -131,43 +95,13 @@
13195

13296
<div class="container">
13397
<div class="row">
134-
<div class="col-md-12">
135-
<h3>Overview</h3>
136-
<p>The geonames data set contains a lot of structured data. String fields are always indexed as <code>text</code> with a raw
137-
<code>keyword</code> subfield. We run the following variations (which we call "challenges" in Rally):</p>
138-
<ul>
139-
<li><strong>Append</strong>: Indexes the whole document corpus using Elasticsearch default settings. We only adjust the
140-
number of replicas as we benchmark a single node cluster and Rally will only start the benchmark if the cluster turns
141-
green. Document ids are unique so all index operations are append only. After that a couple of queries are run in
142-
parallel by multiple clients.
143-
</li>
144-
<li><strong>Append Sorted</strong>: Indexes the whole document corpus in an index sorted by country_code field in ascending
145-
order. Document ids are unique so all index operations are append only.
146-
</li>
147-
<li><strong>Id Conflicts</strong>: Indexes the whole document corpus using a setup that will lead to a larger indexing
148-
throughput than the default settings. Rally will produce duplicate ids in 25% of all documents (not configurable) so we
149-
can simulate a scenario with appends most of the time and some updates in between.
150-
</li>
151-
</ul>
152-
<p>The benchmarks are run either for an out of the box configuration of Elasticsearch ("default settings") or with a larger heap
153-
of 4GB ("4g heap"). For more details please refer to the <a
154-
href="https://github.com/elastic/rally-tracks/blob/master/geonames/track.json">geonames track specification</a> and
155-
have a look at our <a href="../index.html">benchmarking methodology</a>). The benchmark results are also provided as a
156-
<a href="https://elasticsearch-benchmark-analytics.elastic.co/app/kibana#/dashboard/Nightly-Benchmark-Overview">Kibana
157-
dashboard</a>.</p>
158-
</div>
159-
</div>
160-
161-
<div class="row">
162-
<div class="col-md-6">
98+
<div class="col-md-8">
16399
<h3>Results</h3>
164100
<div class="alert alert-success alert-dismissible" role="alert">
165101
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
166-
<strong>Hint</strong> Click and drag to zoom. Double-click to zoom out.
167-
</div>
168-
<div class="alert alert-success alert-dismissible" role="alert">
169-
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
170-
<strong>Hint</strong> Click a data point to see the diff between it and the previous race.
102+
<strong>Hint</strong> These diagrams are just provided as an overview. Please go to the
103+
<a href="https://elasticsearch-benchmark-analytics.elastic.co/app/kibana#/dashboard/6893cc90-396b-11e7-8727-77c9f451e7f2">Kibana dashboard</a>
104+
if you want to analyze the results in more detail.
171105
</div>
172106
<div>
173107
<input type="checkbox" id="checkToggleCompare" onClick="charts.toggleCompare(this)">
@@ -176,107 +110,11 @@ <h3>Results</h3>
176110
</div>
177111
</div>
178112

179-
<div class="row">
180-
<!-- weird, dygraph needs label div *before* the graph in the DOM, otherwise it will not work -->
181-
<div class="col-md-2 col-md-push-10">
182-
<div id="chart_indexing_throughput_labels"></div>
183-
</div>
184-
<div class="col-md-10 col-md-pull-2">
185-
<a name="indexing_throughput" id="indexing_throughput"></a>
186-
<div id="chart_indexing_throughput" class="benchmark-chart"></div>
187-
</div>
188-
</div>
189-
190-
<div class="row">
191-
<div class="col-md-2 col-md-push-10">
192-
<div id="chart_indexing_total_times_labels"></div>
193-
</div>
194-
<div class="col-md-10 col-md-pull-2">
195-
<a name="indexing_total_times" id="indexing_total_times"></a>
196-
<div id="chart_indexing_total_times" class="benchmark-chart"></div>
197-
</div>
198-
</div>
199-
200-
<div class="row">
201-
<div class="col-md-2 col-md-push-10">
202-
<div id="chart_merge_parts_labels"></div>
203-
</div>
204-
<div class="col-md-10 col-md-pull-2">
205-
<a name="merge_parts" id="merge_parts"></a>
206-
<div id="chart_merge_parts" class="benchmark-chart"></div>
207-
</div>
208-
</div>
209-
210-
<div class="row">
211-
<div class="col-md-2 col-md-push-10">
212-
<div id="chart_segment_total_memory_labels"></div>
213-
</div>
214-
<div class="col-md-10 col-md-pull-2">
215-
<a name="segment_total_memory" id="segment_total_memory"></a>
216-
<div id="chart_segment_total_memory" class="benchmark-chart"></div>
217-
</div>
218-
</div>
219-
220-
<div class="row" style="display:none">
221-
<div class="col-md-2 col-md-push-10">
222-
<div id="chart_indexing_cpu_usage_labels"></div>
223-
</div>
224-
<div class="col-md-10 col-md-pull-2">
225-
<a name="indexing_cpu_usage" id="indexing_cpu_usage"></a>
226-
<div id="chart_indexing_cpu_usage" class="benchmark-chart"></div>
227-
</div>
228-
</div>
229-
230-
<div class="row">
231-
<div class="col-md-2 col-md-push-10">
232-
<div id="chart_disk_usage_labels"></div>
233-
</div>
234-
<div class="col-md-10 col-md-pull-2">
235-
<a name="disk_usage" id="disk_usage"></a>
236-
<div id="chart_disk_usage" class="benchmark-chart"></div>
237-
</div>
238-
</div>
239-
240-
<div class="row">
241-
<div class="col-md-2 col-md-push-10">
242-
<div id="chart_segment_counts_labels"></div>
243-
</div>
244-
<div class="col-md-10 col-md-pull-2">
245-
<a name="segment_counts" id="segment_counts"></a>
246-
<div id="chart_segment_counts" class="benchmark-chart"></div>
247-
</div>
248-
</div>
249-
250-
<div class="row">
251-
<div class="col-md-2 col-md-push-10">
252-
<div id="chart_search_latency_queries_labels"></div>
253-
</div>
254-
<div class="col-md-10 col-md-pull-2">
255-
<a name="search_latency_queries" id="search_latency_queries"></a>
256-
<div id="chart_search_latency_queries" class="benchmark-chart"></div>
257-
</div>
258-
</div>
259-
260-
<div class="row">
261-
<div class="col-md-2 col-md-push-10">
262-
<div id="chart_search_latency_stats_labels"></div>
263-
</div>
264-
<div class="col-md-10 col-md-pull-2">
265-
<a name="search_latency_stats" id="search_latency_stats"></a>
266-
<div id="chart_search_latency_stats" class="benchmark-chart"></div>
267-
</div>
268-
</div>
269-
270-
<div class="row">
271-
<div class="col-md-2 col-md-push-10">
272-
<div id="chart_gc_times_labels"></div>
273-
</div>
274-
<div class="col-md-10 col-md-pull-2">
275-
<a name="gc_times" id="gc_times"></a>
276-
<div id="chart_gc_times" class="benchmark-chart"></div>
113+
<div class="row" style="height:220em">
114+
<div class="col-md-12">
115+
<div id="charts" style="width:100%; height:100%"></div>
277116
</div>
278117
</div>
279-
280118
</div> <!-- /container -->
281119

282120

@@ -285,11 +123,10 @@ <h3>Results</h3>
285123
<!-- Placed at the end of the document so the pages load faster -->
286124
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
287125
<script src="../assets/js/bootstrap.min.js"></script>
288-
<script type="text/javascript" src="../assets/js/dygraph-combined.js"></script>
289-
<script type="text/javascript" src="../assets/js/synchronizer.js"></script>
290-
<script type="text/javascript" src="../assets/js/charts.js"></script>
291126
<script>
292-
$(document).ready(charts.init);
127+
$(document).ready(function() {
128+
charts.init("6893cc90-396b-11e7-8727-77c9f451e7f2", "6687d4f0-3ba5-11e7-aa82-6514dc2fe291");
129+
});
293130

294131
</script>
295132
</body>

0 commit comments

Comments
 (0)