Add the new realtime-results.html page under svn control

git-svn-id: https://svn.apache.org/repos/asf/jmeter/trunk@1663890 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Bruno Demion 2015-03-04 08:44:18 +00:00
parent 41a411bbcc
commit 5cb5cb2959
1 changed files with 813 additions and 0 deletions

View File

@ -0,0 +1,813 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- Content Stylesheet for Site -->
<!-- start the processing -->
<html>
<head>
<link rel="stylesheet" type="text/css" href="../css/style.css"/>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<meta name="author" value="Philippe Mouawad">
<meta name="email" value="p.mouawad at ubik-ingenierie.com">
<title>Apache JMeter - User's Manual: Live Statistics</title>
</head>
<body bgcolor="#ffffff" text="#000000" link="#525D76">
<table width="100%" cellspacing="0" border="0">
<tr>
<td width="90%" align="left">
<table border="0" cellspacing="0">
<tr>
<td width="10%">
<a href="http://www.apache.org"><img title="Apache Software Foundation" width="290" height="75" src="../images/asf-logo.png" border="0"/></a>
</td>
<td align="left" width="40%">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="http://jmeter.apache.org/"><img width="182" height="88" src="../images/logo.jpg" alt="Apache JMeter" title="Apache JMeter" border="0"/></a>
</td>
</tr>
</table>
</td>
<td align="left" width="50%">
<table cellspacing="0" align="right" border="0">
<tr>
<td align="left"> <a href="https://twitter.com/share"
class="twitter-share-button"
data-text="Powerful Load Testing with
Apache #JMeter" data-via="ApacheJMeter"
data-lang="en-gb" data-size="large">Tweet</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
</td>
<td align="right"> <a
href="https://twitter.com/ApacheJMeter"
class="twitter-follow-button"
data-show-count="false" data-lang="en-gb"
data-size="large">Follow</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
</td>
</tr>
</table>
</td></tr>
</table>
<table border="0" width="100%" cellspacing="4">
<tr><td colspan="2">
<hr noshade size="1"/>
</td></tr>
<tr>
<!-- LEFT SIDE NAVIGATION -->
<td width="20%" valign="top" nowrap="true">
<table border="0" width="100%" cellspacing="0">
<tr><td>
<p><strong>About</strong></p>
<ul>
<li><a href="../index.html">Overview</a>
</li>
<li><a href="http://twitter.com/ApacheJMeter">JMeter on Twitter</a>
<img src="../images/twitter.png" align="top"/></li>
<li><a href="../issues.html">Issue Tracking</a>
</li>
<li><a href="http://projects.apache.org/feeds/rss/jmeter.xml">Subscribe to What's New</a>
</li>
<li><a href="http://www.apache.org/licenses/">License</a>
</li>
</ul>
<p><strong>Download</strong></p>
<ul>
<li><a href="../download_jmeter.cgi">Download Releases</a>
</li>
<li><a href="../nightly.html">Developer (Nightly) Builds</a>
</li>
</ul>
<p><strong>Documentation</strong></p>
<ul>
<li><a href="../changes.html">Changes per version</a>
</li>
<li><a href="../usermanual/get-started.html">Get Started</a>
</li>
<li><a href="../usermanual/index.html">User Manual</a>
</li>
<li><a href="../usermanual/best-practices.html">Best Practices</a>
</li>
<li><a href="../usermanual/component_reference.html">Component Reference</a>
</li>
<li><a href="../usermanual/functions.html">Functions Reference</a>
</li>
<li><a href="../api/index.html">Javadocs</a>
</li>
<li><a href="../building.html">Building JMeter and Add-Ons</a>
</li>
<li><a href="http://wiki.apache.org/jmeter">JMeter Wiki</a>
</li>
<li><a href="http://wiki.apache.org/jmeter/JMeterFAQ">FAQ (Wiki)</a>
</li>
</ul>
<p><strong>Tutorials (PDF format)</strong></p>
<ul>
<li><a href="../usermanual/jmeter_distributed_testing_step_by_step.pdf">Distributed Testing</a>
</li>
<li><a href="../usermanual/jmeter_proxy_step_by_step.pdf">Recording Tests</a>
</li>
<li><a href="../usermanual/junitsampler_tutorial.pdf">JUnit Sampler</a>
</li>
<li><a href="../usermanual/jmeter_accesslog_sampler_step_by_step.pdf">Access Log Sampler</a>
</li>
<li><a href="../extending/jmeter_tutorial.pdf">Extending JMeter</a>
</li>
</ul>
<p><strong>Community</strong></p>
<ul>
<li><a href="http://wiki.apache.org/jmeter/JMeterCommitters">Contributors</a>
</li>
<li><a href="../mail.html">Mailing Lists</a>
</li>
<li><a href="../svnindex.html">SVN Repositories</a>
</li>
</ul>
<p><strong>Foundation</strong></p>
<ul>
<li><a href="http://www.apache.org/">ASF</a>
</li>
<li><a href="http://www.apache.org/foundation/getinvolved.html">Get Involved in the ASF</a>
</li>
<li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
</li>
<li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a>
</li>
</ul>
</td></tr>
<tr><td>
<iframe src="http://www.apache.org/ads/button.html" style="border-width:0; float: left;" frameborder="0" scrolling="no"></iframe>
</td></tr>
</table>
</td>
<td width="80%" align="left" valign="top">
<table>
<tr>
<td bgcolor="#525D76">
<div align="right"><a href="index.html"><font size=-1 color="#ffffff" face="arial,helvetica,sanserif">Index</font></a></div>
</td>
<td bgcolor="#525D76">
<div align="right"><a href="component_reference.html"><font size=-1 color="#ffffff" face="arial,helvetica,sanserif">Next</font></a></div>
</td>
<td bgcolor="#525D76">
<div align="right"><a href="live-statistics.html"><font size=-1 color="#ffffff" face="arial,helvetica,sanserif">Prev</font></a></div>
</td>
</tr>
</table>
<br>
<table border="0" cellspacing="0" cellpadding="2" width="100%">
<tr><td bgcolor="#525D76">
<font color="#ffffff" face="arial,helvetica,sanserif">
<a name="realtime-results"><strong>17. Real-time results</strong></a><a class="sectionlink" href="#realtime-results" title="Link to here">&para;</a></font>
</td></tr>
<tr><td>
<blockquote>
<p>
Since JMeter 2.13 you can get realtime results sent to a backend through the
<a href="component_reference.html#Backend_Listener">
Backend Listener
</a>
using potentially any backend (JDBC, JMS, Webservice...) implementing
<a href="../api/org/apache/jmeter/visualizers/backend/AbstractBackendListenerClient.html">
AbstractBackendListenerClient
</a>
.
<br>
JMeter ships with a GraphiteBackendListenerClient which allows you to send metrics to a Graphite Backend.
<br>
This feature provides:
<ul>
<li>
Live results
</li>
<li>
Nice graphs for metrics
</li>
<li>
Ability to compare 2 or more load tests
</li>
<li>
Having monitoring data as long as JMeter results in the same backend
</li>
<li>
...
</li>
</ul>
In this document we will present the configuration setup to be able to graph and historize the data in 3 different backends:
<ul>
<li>
InfluxDB
</li>
<li>
CollectD
</li>
<li>
Graphite
</li>
</ul>
</p>
<table border="0" cellspacing="0" cellpadding="2" width="100%">
<tr><td bgcolor="#828DA6">
<font color="#ffffff" face="arial,helvetica,sanserif">
<a name="metrics"><strong>17.1 Metrics exposed</strong></a>
<a class="sectionlink" href="#metrics" title="Link to here">&para;</a></font>
</td></tr>
<tr><td>
<blockquote>
<table border="0" cellspacing="0" cellpadding="2" width="100%">
<tr><td bgcolor="#828DA6">
<font color="#ffffff" face="arial,helvetica,sanserif">
<a name="metrics-threads"><strong>17.1.1 Thread/Virtual Users metrics</strong></a>
<a class="sectionlink" href="#metrics-threads" title="Link to here">&para;</a></font>
</td></tr>
<tr><td>
<blockquote>
<p>
Threads metrics are the following:
</p>
<table>
<tr>
<td bgcolor="#039acc" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
Metric Name
</font>
</td>
<td bgcolor="#039acc" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
Description
</font>
</td>
</tr>
<tr>
<td bgcolor="#a0ddf0" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
&lt;rootMetricsPrefix&gt;.cumulated.minActiveThreads
</font>
</td>
<td bgcolor="#a0ddf0" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
Min active threads
</font>
</td>
</tr>
<tr>
<td bgcolor="#a0ddf0" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
&lt;rootMetricsPrefix&gt;.cumulated.maxActiveThreads
</font>
</td>
<td bgcolor="#a0ddf0" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
Max active threads
</font>
</td>
</tr>
<tr>
<td bgcolor="#a0ddf0" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
&lt;rootMetricsPrefix&gt;.cumulated.meanActiveThreads
</font>
</td>
<td bgcolor="#a0ddf0" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
Mean active threads
</font>
</td>
</tr>
<tr>
<td bgcolor="#a0ddf0" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
&lt;rootMetricsPrefix&gt;.cumulated.startedThreads
</font>
</td>
<td bgcolor="#a0ddf0" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
Started threads
</font>
</td>
</tr>
<tr>
<td bgcolor="#a0ddf0" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
&lt;rootMetricsPrefix&gt;.cumulated.stoppedThreads
</font>
</td>
<td bgcolor="#a0ddf0" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
Finished threads
</font>
</td>
</tr>
</table>
</blockquote>
</td></tr>
<tr><td><br></td></tr>
</table>
<table border="0" cellspacing="0" cellpadding="2" width="100%">
<tr><td bgcolor="#828DA6">
<font color="#ffffff" face="arial,helvetica,sanserif">
<a name="metrics-response-times"><strong>17.1.2 Response times metrics</strong></a>
<a class="sectionlink" href="#metrics-response-times" title="Link to here">&para;</a></font>
</td></tr>
<tr><td>
<blockquote>
<p>
Response times metrics are the following:
</p>
<table>
<tr>
<td bgcolor="#039acc" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
Metric Name
</font>
</td>
<td bgcolor="#039acc" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
Description
</font>
</td>
</tr>
<tr>
<td bgcolor="#a0ddf0" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.success
</font>
</td>
<td bgcolor="#a0ddf0" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
Number of successful responses for sampler name
</font>
</td>
</tr>
<tr>
<td bgcolor="#a0ddf0" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.failure
</font>
</td>
<td bgcolor="#a0ddf0" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
Number of failed responses for sampler name
</font>
</td>
</tr>
<tr>
<td bgcolor="#a0ddf0" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.total
</font>
</td>
<td bgcolor="#a0ddf0" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
Total number of requests for sampler name
</font>
</td>
</tr>
<tr>
<td bgcolor="#a0ddf0" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.min
</font>
</td>
<td bgcolor="#a0ddf0" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
Min response time for sampler name
</font>
</td>
</tr>
<tr>
<td bgcolor="#a0ddf0" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.max
</font>
</td>
<td bgcolor="#a0ddf0" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
Max response time for sampler name
</font>
</td>
</tr>
<tr>
<td bgcolor="#a0ddf0" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
&lt;rootMetricsPrefix&gt;.&lt;samplerName&gt;.percentile&lt;percentileValue&gt;
</font>
</td>
<td bgcolor="#a0ddf0" valign="top" align="left">
<font color="#000000" size="-1" face="arial,helvetica,sanserif">
Percentile computed for successful responses of sampler name. You can input as many percentiles as you want (3 or 4 being a reasonable value).<br />
By default listener computes percentiles 90%, 95% and 99%
</font>
</td>
</tr>
</table>
<p>
By default JMeter sends only metrics for all samplers using "__cumulated__" as samplerName.
</p>
</blockquote>
</td></tr>
<tr><td><br></td></tr>
</table>
</blockquote>
</td></tr>
<tr><td><br></td></tr>
</table>
<table border="0" cellspacing="0" cellpadding="2" width="100%">
<tr><td bgcolor="#828DA6">
<font color="#ffffff" face="arial,helvetica,sanserif">
<a name="jmeter-configuration"><strong>17.2 JMeter configuration</strong></a>
<a class="sectionlink" href="#jmeter-configuration" title="Link to here">&para;</a></font>
</td></tr>
<tr><td>
<blockquote>
<p>
To make JMeter send metrics to backend add a
<a href="./component_reference.html#Backend_Listener">
BackendListener
</a>
using the GraphiteBackendListenerClient.
</p>
<p><table border="0" cellspacing="0" cellpadding="0"><tr><td><img width='1138' height='352' src="../images/screenshots/backend_listener.png"/><br>
<font size="-1">Graphite configuration
</font></td></tr></table></p>
</blockquote>
</td></tr>
<tr><td><br></td></tr>
</table>
<table border="0" cellspacing="0" cellpadding="2" width="100%">
<tr><td bgcolor="#828DA6">
<font color="#ffffff" face="arial,helvetica,sanserif">
<a name="influxdb"><strong>17.2 InfluxDB</strong></a>
<a class="sectionlink" href="#influxdb" title="Link to here">&para;</a></font>
</td></tr>
<tr><td>
<blockquote>
<p>
InfluxDB is an open-source, distributed,time-series database that allows to
easily store metrics.
Installation and configuration is very easy, read this for more details
<a href="http://influxdb.com/docs/v0.8/introduction/installation.html" target="_blank">
InfluxDB documentation
</a>
.
<br>
InfluxDB data can be easily viewed in a browser through either
<a href="https://github.com/hakobera/influga" target="_blank">
Influga
</a>
or
<a href="http://grafana.org/" target="_blank">
Grafana
</a>
.
We will use Grafana in this case.
</p>
<table border="0" cellspacing="0" cellpadding="2" width="100%">
<tr><td bgcolor="#828DA6">
<font color="#ffffff" face="arial,helvetica,sanserif">
<a name="influxdb_configuration"><strong>17.2.1 InfluxDB graphite listener configuration</strong></a>
<a class="sectionlink" href="#influxdb_configuration" title="Link to here">&para;</a></font>
</td></tr>
<tr><td>
<blockquote>
<p>
To enable Graphite listener in InfluxDB, edit files /opt/influxdb/shared/config.toml or /usr/local/etc/influxdb.conf, find "input_plugins.graphite" and set this:
</p>
<code>
# Configure the graphite api
<br>
[input_plugins.graphite]
<br>
enabled = true
<br>
address = "0.0.0.0" # If not set, is actually set to bind-address.
<br>
port = 2003
<br>
database = "jmeter" # store graphite data in this database
<br>
# udp_enabled = true # enable udp interface on the same port as the tcp interface
<br>
</code>
</blockquote>
</td></tr>
<tr><td><br></td></tr>
</table>
<table border="0" cellspacing="0" cellpadding="2" width="100%">
<tr><td bgcolor="#828DA6">
<font color="#ffffff" face="arial,helvetica,sanserif">
<a name="influxdb_db_configuration"><strong>17.2.2 InfluxDB database configuration</strong></a>
<a class="sectionlink" href="#influxdb_db_configuration" title="Link to here">&para;</a></font>
</td></tr>
<tr><td>
<blockquote>
<p>
Connect to InfluxDB admin console and create 2 databases:
<ul>
<li>
grafana : Used by Grafana to store the dashboards we will create
</li>
<li>
jmeter : Used by InfluxDB to store the data sent to Graphite Listener as per database="jmeter" config element in influxdb.conf or config.toml
</li>
</ul>
</p>
</blockquote>
</td></tr>
<tr><td><br></td></tr>
</table>
<table border="0" cellspacing="0" cellpadding="2" width="100%">
<tr><td bgcolor="#828DA6">
<font color="#ffffff" face="arial,helvetica,sanserif">
<a name="grafana_configuration"><strong>17.2.3 Grafana configuration</strong></a>
<a class="sectionlink" href="#grafana_configuration" title="Link to here">&para;</a></font>
</td></tr>
<tr><td>
<blockquote>
<p>
Installing grafana is just a matter of putting the unzipped bundle behind an Apache HTTP server.
<br>
Read
<a href="http://grafana.org/docs/" targer="_blank">
documentation
</a>
for more details.
Open config.js file and find datasources element, and edit it like this:
<br>
</p>
<code>
datasources: {
<br>
influxdb: {
<br>
type: 'influxdb',
<br>
url: "http://localhost:8086/db/jmeter",
<br>
username: 'root',
<br>
password: 'root',
<br>
},
grafana: {
<br>
type: 'influxdb',
<br>
url: "http://localhost:8086/db/grafana",
<br>
username: 'root',
<br>
password: 'root',
<br>
grafanaDB: true
<br>
},
<br>
},
</code>
<br>
<p>
Note that grafana has "grafanaDB:true". Also note that here we use root user for simplicity, it is better to dedicate a special user with less rights.
<br>
Here is the kind of dashboard that you could obtain:
</p>
<p><table border="0" cellspacing="0" cellpadding="0"><tr><td><img width='1912' height='957' src="../images/screenshots/grafana_dashboard.png"/><br>
<font size="-1">Grafana dashboard
</font></td></tr></table></p>
</blockquote>
</td></tr>
<tr><td><br></td></tr>
</table>
</blockquote>
</td></tr>
<tr><td><br></td></tr>
</table>
<table border="0" cellspacing="0" cellpadding="2" width="100%">
<tr><td bgcolor="#828DA6">
<font color="#ffffff" face="arial,helvetica,sanserif">
<a name="collectd"><strong>17.3 Collectd</strong></a>
<a class="sectionlink" href="#collectd" title="Link to here">&para;</a></font>
</td></tr>
<tr><td>
<blockquote>
<p>
TODO.
</p>
</blockquote>
</td></tr>
<tr><td><br></td></tr>
</table>
<table border="0" cellspacing="0" cellpadding="2" width="100%">
<tr><td bgcolor="#828DA6">
<font color="#ffffff" face="arial,helvetica,sanserif">
<a name="graphite"><strong>17.4 Graphite</strong></a>
<a class="sectionlink" href="#graphite" title="Link to here">&para;</a></font>
</td></tr>
<tr><td>
<blockquote>
<p>
TODO.
</p>
</blockquote>
</td></tr>
<tr><td><br></td></tr>
</table>
</blockquote>
</p>
</td></tr>
<tr><td><br></td></tr>
</table>
<br>
<table>
<tr>
<td bgcolor="#525D76">
<div align="right"><a href="index.html"><font size=-1 color="#ffffff" face="arial,helvetica,sanserif">Index</font></a></div>
</td>
<td bgcolor="#525D76">
<div align="right"><a href="component_reference.html"><font size=-1 color="#ffffff" face="arial,helvetica,sanserif">Next</font></a></div>
</td>
<td bgcolor="#525D76">
<div align="right"><a href="live-statistics.html"><font size=-1 color="#ffffff" face="arial,helvetica,sanserif">Prev</font></a></div>
</td>
</tr>
</table>
</td>
</tr>
<tr><td colspan="2">
<hr noshade size="1"/>
</td></tr>
<tr><td colspan="2">
<div align="center"><font color="#525D76" size="-1"><em>
Copyright &copy; 1999-2015, Apache Software Foundation
</em></font></div>
</td></tr>
<tr><td colspan="2">
<div align="center"><font color="#525D76" size="-1">
Apache, Apache JMeter, JMeter, the Apache feather, and the Apache JMeter logo are
trademarks of the Apache Software Foundation.
</font>
</div>
</td></tr>
</table>
</body>
</html>
<!-- end the processing -->