Skip to content
Macrobenchmarking framework for Elasticsearch
Python Shell Makefile
Branch: master
Clone or download

Latest commit

danielmitterdorfer Allow to forcefully close SSL connections (#1016)
With this commit we expose a new client option `enable_cleanup_closed`
which allows to forcefully close an SSL connection that might not have
been properly closed on the server-side. This avoids potentially leaking
connections.
Latest commit 6961f87 Jun 12, 2020

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.ci Add thespian logs to ci (#971) Apr 29, 2020
.github Add pull request template Aug 26, 2019
benchmarks Provide bulk as bytes in benchmark May 27, 2020
docker Use pbzip2/pigz to decompress corpora if available (#947) Apr 6, 2020
docs Allow to forcefully close SSL connections (#1016) Jun 12, 2020
esrally Allow to forcefully close SSL connections (#1016) Jun 12, 2020
it Migrate track param check to new IT infrastructure (#977) Apr 30, 2020
recipes/ccr Update Elasticsearch version of targets and metricstore in CCR recipe Oct 8, 2019
scripts Expose race-id as command line parameter Oct 1, 2019
tests Scale connection pool automatically (#1015) Jun 12, 2020
.coveragerc Add coverage configuration Nov 3, 2016
.gitignore Add tooling to create a track from existing data (#970) Apr 27, 2020
.pylintrc Avoid redefining arguments (#1010) Jun 8, 2020
AUTHORS Update changelog for Rally release 1.4.1 Feb 20, 2020
CHANGELOG.md Update changelog for Rally release 2.0.0 May 7, 2020
CONTRIBUTING.md Add developer info about intellij (#984) May 7, 2020
LICENSE Simplify first time setup of Rally Dec 3, 2015
MANIFEST.in Script the release process Jun 28, 2016
Makefile Invoke pytest consistently (#999) May 27, 2020
NOTICE Add license headers Jan 3, 2019
README.rst
RELEASE.md Update the release process (#993) May 12, 2020
changelog.py Optimize imports Sep 10, 2019
create-notice.sh Add an asyncio-based load generator (#935) Mar 29, 2020
integration-test.sh Remove experimental race-async subcommand (#1002) Jun 2, 2020
rally Remove 'de minimis' attribution Jan 24, 2019
rallyd Remove 'de minimis' attribution Jan 24, 2019
release-checks.sh Check that origin points to main repo for release Sep 4, 2019
release-docker.sh Allow function-level invocation of integration-test.sh. (#727) Sep 9, 2019
release.sh Start release process creating NOTICE Sep 10, 2019
run.sh Don't invoke setup.py directly (#928) Mar 4, 2020
setup.cfg Add an asyncio-based load generator (#935) Mar 29, 2020
setup.py Invoke pytest consistently (#999) May 27, 2020
tox.ini Invoke pytest consistently (#999) May 27, 2020
version.txt Continue in 2.0.1.dev0 May 7, 2020

README.rst

Rally

Rally is the macrobenchmarking framework for Elasticsearch

What is Rally?

You want to benchmark Elasticsearch? Then Rally is for you. It can help you with the following tasks:

  • Setup and teardown of an Elasticsearch cluster for benchmarking
  • Management of benchmark data and specifications even across Elasticsearch versions
  • Running benchmarks and recording results
  • Finding performance problems by attaching so-called telemetry devices
  • Comparing performance results

We have also put considerable effort in Rally to ensure that benchmarking data are reproducible.

In general, Rally works with all versions of Elasticsearch starting from 1.x but benchmarking with plugins and benchmarking source builds will only work from Elasticsearch 5.0 onwards.

Quick Start

Rally is developed for Unix and is actively tested on Linux and MacOS. Rally supports benchmarking Elasticsearch clusters running on Windows but Rally itself needs to be installed on machines running Unix.

Installing Rally

Note: If you actively develop on Elasticsearch, we recommend that you install Rally in development mode instead as Elasticsearch is fast moving and Rally always adapts accordingly to the latest master version.

Install Python 3.8+ including pip3, git 1.9+ and an appropriate JDK to run Elasticsearch Be sure that JAVA_HOME points to that JDK. Then run the following command, optionally prefixed by sudo if necessary:

pip3 install esrally

If you have any trouble or need more detailed instructions, please look in the detailed installation guide.

Configure

Just invoke esrally configure.

For more detailed instructions and a detailed walkthrough see the configuration guide.

Run your first race

Now we're ready to run our first race:

esrally --distribution-version=6.0.0

This will download Elasticsearch 6.0.0 and run Rally's default track - the geonames track - against it. After the race, a summary report is written to the command line::

------------------------------------------------------
    _______             __   _____
   / ____(_)___  ____ _/ /  / ___/_________  ________
  / /_  / / __ \/ __ `/ /   \__ \/ ___/ __ \/ ___/ _ \
 / __/ / / / / / /_/ / /   ___/ / /__/ /_/ / /  /  __/
/_/   /_/_/ /_/\__,_/_/   /____/\___/\____/_/   \___/
------------------------------------------------------

|                         Metric |                 Task |     Value |   Unit |
|-------------------------------:|---------------------:|----------:|-------:|
|            Total indexing time |                      |   28.0997 |    min |
|               Total merge time |                      |   6.84378 |    min |
|             Total refresh time |                      |   3.06045 |    min |
|               Total flush time |                      |  0.106517 |    min |
|      Total merge throttle time |                      |   1.28193 |    min |
|               Median CPU usage |                      |     471.6 |      % |
|             Total Young Gen GC |                      |    16.237 |      s |
|               Total Old Gen GC |                      |     1.796 |      s |
|                     Index size |                      |   2.60124 |     GB |
|                  Total written |                      |   11.8144 |     GB |
|         Heap used for segments |                      |   14.7326 |     MB |
|       Heap used for doc values |                      |  0.115917 |     MB |
|            Heap used for terms |                      |   13.3203 |     MB |
|            Heap used for norms |                      | 0.0734253 |     MB |
|           Heap used for points |                      |    0.5793 |     MB |
|    Heap used for stored fields |                      |  0.643608 |     MB |
|                  Segment count |                      |        97 |        |
|                 Min Throughput |         index-append |   31925.2 | docs/s |
|              Median Throughput |         index-append |   39137.5 | docs/s |
|                 Max Throughput |         index-append |   39633.6 | docs/s |
|      50.0th percentile latency |         index-append |   872.513 |     ms |
|      90.0th percentile latency |         index-append |   1457.13 |     ms |
|      99.0th percentile latency |         index-append |   1874.89 |     ms |
|       100th percentile latency |         index-append |   2711.71 |     ms |
| 50.0th percentile service time |         index-append |   872.513 |     ms |
| 90.0th percentile service time |         index-append |   1457.13 |     ms |
| 99.0th percentile service time |         index-append |   1874.89 |     ms |
|  100th percentile service time |         index-append |   2711.71 |     ms |
|                           ...  |                  ... |       ... |    ... |
|                           ...  |                  ... |       ... |    ... |
|                 Min Throughput |     painless_dynamic |   2.53292 |  ops/s |
|              Median Throughput |     painless_dynamic |   2.53813 |  ops/s |
|                 Max Throughput |     painless_dynamic |   2.54401 |  ops/s |
|      50.0th percentile latency |     painless_dynamic |    172208 |     ms |
|      90.0th percentile latency |     painless_dynamic |    310401 |     ms |
|      99.0th percentile latency |     painless_dynamic |    341341 |     ms |
|      99.9th percentile latency |     painless_dynamic |    344404 |     ms |
|       100th percentile latency |     painless_dynamic |    344754 |     ms |
| 50.0th percentile service time |     painless_dynamic |    393.02 |     ms |
| 90.0th percentile service time |     painless_dynamic |   407.579 |     ms |
| 99.0th percentile service time |     painless_dynamic |   430.806 |     ms |
| 99.9th percentile service time |     painless_dynamic |   457.352 |     ms |
|  100th percentile service time |     painless_dynamic |   459.474 |     ms |

----------------------------------
[INFO] SUCCESS (took 2634 seconds)
----------------------------------

Getting help

How to Contribute

See all details in the contributor guidelines.

License

This software is licensed under the Apache License, version 2 ("ALv2"), quoted below.

Copyright 2015-2019 Elasticsearch <https://www.elastic.co>

Licensed 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.

You can’t perform that action at this time.