Index | Next | Prev

15. Real-time results

> Since JMeter 2.13 you can get real-time results sent to a backend through the Backend Listener using potentially any backend (JDBC, JMS, Webservice, …) by providing a class which implements AbstractBackendListenerClient.
> JMeter ships with:

> - a GraphiteBackendListenerClient which allows you to send metrics to a Graphite Backend.
>   This feature provides:
>   - Live results
>   - Nice graphs for metrics
>   - Ability to compare 2 or more load tests
>   - Storing monitoring data as long as JMeter results in the same backend
>   - …
> - an InfluxDBBackendListenerClient introduced in JMeter 3.2 which allows you to send metrics to an InfluxDB Backend using UDP or HTTP protocols This feature provides:
>   - Live results
>   - Nice graphs for metrics
>   - Ability to compare 2 or more load tests
>   - Ability to add annotations to graphs
>   - Storing monitoring data as long as JMeter results in the same backend
>   - …
> In this document we will present the configuration setup to graph and historize the data in different backends:
> - InfluxDB setup for InfluxDBBackendListenerClient
> - InfluxDB setup for GraphiteBackendListenerClient
> - Grafana
> - Graphite

> 15.1 Metrics exposed

> > 15.1.1 Thread/Virtual Users metrics

> > > Thread metrics are the following:

> > > `<rootMetricsPrefix>test.minAT`
> > >   Min active threads
> > > `<rootMetricsPrefix>test.maxAT`
> > >   Max active threads
> > > `<rootMetricsPrefix>test.meanAT`
> > >   Mean active threads
> > > `<rootMetricsPrefix>test.startedT`
> > >   Started threads
> > > `<rootMetricsPrefix>test.endedT`
> > >   Finished threads

> > 15.1.2 Response times metrics

> > > Response related metrics are the following:

> > > `<rootMetricsPrefix><samplerName>.ok.count`
> > >   Number of successful responses for sampler name
> > > `<rootMetricsPrefix><samplerName>.h.count`
> > >   Server hits per seconds, this metric cumulates Sample Result and Sub results (if using Transaction Controller, "Generate parent sampler" should be unchecked)
> > > `<rootMetricsPrefix><samplerName>.ok.min`
> > >   Min response time for successful responses of sampler name
> > > `<rootMetricsPrefix><samplerName>.ok.max`
> > >   Max response time for successful responses of sampler name
> > > `<rootMetricsPrefix><samplerName>.ok.avg`
> > >   Average response time for successful responses of sampler name.
> > > `<rootMetricsPrefix><samplerName>.ok.pct<percentileValue>`
> > >   Percentile computed for successful responses of sampler name. There will be one metric for each calculated value.
> > > `<rootMetricsPrefix><samplerName>.ko.count`
> > >   Number of failed responses for sampler name
> > > `<rootMetricsPrefix><samplerName>.ko.min`
> > >   Min response time for failed responses of sampler name
> > > `<rootMetricsPrefix><samplerName>.ko.max`
> > >   Max response time for failed responses of sampler name
> > > `<rootMetricsPrefix><samplerName>.ko.avg`
> > >   Average response time for failed responses of sampler name.
> > > `<rootMetricsPrefix><samplerName>.ko.pct<percentileValue>`
> > >   Percentile computed for failed responses of sampler name. There will be one metric for each calculated value.
> > > `<rootMetricsPrefix><samplerName>.a.count`
> > >   Number of responses for sampler name (sum of ok.count and ko.count)
> > > `<rootMetricsPrefix><samplerName>.sb.bytes`
> > >   Sent Bytes
> > > `<rootMetricsPrefix><samplerName>.rb.bytes`
> > >   Received Bytes
> > > `<rootMetricsPrefix><samplerName>.a.min`
> > >   Min response time for responses of sampler name (min of ok.count and ko.count)
> > > `<rootMetricsPrefix><samplerName>.a.max`
> > >   Max response time for responses of sampler name (max of ok.count and ko.count)
> > > `<rootMetricsPrefix><samplerName>.a.avg`
> > >   Average response time for responses of sampler name (avg of ok.count and ko.count)
> > > `<rootMetricsPrefix><samplerName>.a.pct<percentileValue>`
> > >   Percentile computed for responses of sampler name. There will be one metric for each calculated value. (calculated on the totals for OK and failed samples)

> > > The default `percentiles` setting on the Backend Listener is "90;95;99", i.e. the 3 percentiles 90%, 95% and 99%.

> > > The Graphite naming hierarchy uses dot (".") to separate elements. This could be confused with decimal percentile values. JMeter converts any such values, replacing dot (".") with underscore ("-"). For example, "`99.9`" becomes "`99_9`"

> > > By default JMeter sends metrics for all samplers accumulated under the samplerName "`all`". If the Backend Listener `samplersList` is configured, then JMeter also sends the metrics for the matching sample names unless `summaryOnly=true`

> 15.2 JMeter configuration

> > To make JMeter send metrics to backend add a BackendListener using the InfluxDBBackendListenerClient.

> > InfluxDB configuration

> 15.3 InfluxDB configuration

> > Do one of the following to store data sent by the Backend Listener:

> > - For InfluxDB 2 setup, create a `jmeter` bucket
> > - For InfluxDB 1.x setup, create a `jmeter` database using the Influx CLI
> > You can also use the HTTP API i.e. `curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE jmeter"`

> > 15.3.1 InfluxDB setup for InfluxDBBackendListenerClient

> > > 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 InfluxDB documentation.
> > > InfluxDB data can be easily viewed in a browser through Grafana.

> > 15.3.2 InfluxDB 2 setup for InfluxDBBackendListenerClient

> > > The configuration should specify the `influxdbToken` parameter and also specify `bucket` and `org` as query parameters in the `influxdbUrl`. See the InfluxDB v2 API for more details.

> > > How to retrieve the required information in the InfluxDB UI:

> > > - influxdbToken
> > > - bucket
> > > - org

> > > InfluxDB 2 configuration

> 15.4 Grafana configuration

> > Installing grafana
> > Read documentation for more details. Add the datasource

> > Grafana dashboard

> 15.5 Graphite Configuration

> > To make JMeter send metrics to backend, add a BackendListener using the GraphiteBackendListenerClient.

> > GraphiteBackendListenerClient section will help you do the configuration.

> > Graphite configuration

> 15.5.1 Graphite Sender

> > Two types of Senders are available. TextGraphiteMetricsSender, PickleGraphiteMetricsSender

> > - For plaintext protocol, set graphiteMetricsSender parameter to `org.apache.jmeter.visualizers.backend.graphite.TextGraphiteMetricsSender`
> > - For pickle protocol, set graphiteMetricsSender parameter to `org.apache.jmeter.visualizers.backend.graphite.PickleGraphiteMetricsSender`

> > To send large amounts of data, use the Pickle sender. It is a more efficient transmission method compared to textplain. Read the Graphite documentation for more details.

> > Graphite pickle sender

Index | Next | Prev

Copyright © 1999-2023, Apache Software Foundation | $Id: realtime-results.xml 1457581 2013-03-17 22:58:08Z sebb $
Apache, Apache JMeter, JMeter, the Apache feather, and the Apache JMeter logo are trademarks of the Apache Software Foundation.