[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-elastic-running-benchmarks":3,"mdc--usre37-key":34,"related-org-elastic-running-benchmarks":1050,"related-repo-elastic-running-benchmarks":1211},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"running-benchmarks","run Rally benchmarks against Elasticsearch","Run Rally benchmarks (races) against Elasticsearch — an existing\u002Fexternal cluster or a Rally-provisioned distribution — and read the summary report. Use when running a race (any pipeline, track, challenge, target-hosts, or auth) or when interpreting throughput, latency, and service_time results.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"elastic","Elastic","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Felastic.png",[12,16,17,20],{"name":13,"slug":14,"type":15},"Performance","performance","tag",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},"Elasticsearch","elasticsearch",{"name":21,"slug":22,"type":15},"Testing","testing",2027,"https:\u002F\u002Fgithub.com\u002Felastic\u002Frally","2026-07-12T07:46:37.277964",null,339,[19],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[19],"Macrobenchmarking framework for Elasticsearch","https:\u002F\u002Fgithub.com\u002Felastic\u002Frally\u002Ftree\u002FHEAD\u002Fskills\u002Frunning-benchmarks","---\nname: running-benchmarks\ndescription: >-\n  Run Rally benchmarks (races) against Elasticsearch — an existing\u002Fexternal\n  cluster or a Rally-provisioned distribution — and read the summary report.\n  Use when running a race (any pipeline, track, challenge, target-hosts, or\n  auth) or when interpreting throughput, latency, and service_time results.\n---\n\n# Running Rally benchmarks\n\nLaunch a race against Elasticsearch and interpret its summary report. Rally can run\nbenchmarks several ways (see [Choose a pipeline](#choose-a-pipeline)).\n\nFor **meaningful results**, prefer an existing\u002Fexternal cluster you control: running Rally\nlocally co-locates the load driver and the system under test on one host, where they can\nperturb each other's measurements. Local deployment is a good fit when that's not a\nconcern — smoke testing, fast iterative local development, or demos.\n\n## Safety\n\n- **Never run Rally as root** — Elasticsearch refuses to start with root privileges.\n- **Strongly avoid benchmarking production.** Rally mutates cluster state (creating,\n  writing to, and deleting indices), and competing traffic can perturb results. Prefer a\n  dedicated, quiet environment.\n\n## Choose a pipeline\n\nRally infers the pipeline from your flags.\n\n| Pipeline | Use when | Selected by |\n|---|---|---|\n| `benchmark-only` | **Primary path.** Cluster is already running and you provisioned it. | `--pipeline=benchmark-only --target-hosts=...` |\n| `from-distribution` | Rally downloads and runs Elasticsearch locally. Setup checks\u002Fdemos; sharing a host skews results, so only large differences stand out. | `--distribution-version=X` |\n| `from-sources` | Rally builds Elasticsearch from a git revision and runs it locally (CI\u002Fdev). Setup checks\u002Fdemos; sharing a host skews results, so only large differences stand out. | `--revision=...` |\n\n`benchmark-only` trade-off (`docs\u002Fpipelines.rst`): because Rally did not provision the\ncluster, results are not easily reproducible and Rally cannot gather host-level metrics\n(CPU, GC, disk I\u002FO, index size). Treat those numbers as directional.\n\n## Launch a race\n\n1. Discover tracks, then inspect one:\n\n   ```bash\n   esrally list tracks\n   esrally info --track=pmc\n   ```\n\n2. Run against the cluster:\n\n   ```bash\n   esrally race --track=pmc --pipeline=benchmark-only \\\n     --target-hosts=10.5.5.10:9200,10.5.5.11:9200\n   ```\n\n3. Secured cluster — TLS + basic auth via `--client-options`:\n\n   ```bash\n   esrally race --track=pmc --pipeline=benchmark-only --target-hosts=host:9243 \\\n     --client-options=\"use_ssl:true,verify_certs:true,basic_auth_user:'elastic',basic_auth_password:'changeme'\"\n   ```\n\n   API-key auth (including Elastic Cloud \u002F Serverless — see `docs\u002Fserverless.rst`):\n\n   ```bash\n   esrally race --track=geonames --pipeline=benchmark-only --target-hosts=${ES_HOST}:443 \\\n     --client-options=\"use_ssl:true,api_key:${ES_API_KEY}\" --on-error=abort\n   ```\n\n4. Record the `race-id` so you can find the results later. Rally assigns a random UUID by\n   default; pass your own with `--race-id` to know it up front:\n\n   ```bash\n   RACE_ID=$(uuidgen)\n   esrally race --track=pmc --pipeline=benchmark-only --target-hosts=host:9200 --race-id=\"$RACE_ID\"\n   echo \"$RACE_ID\"   # note this for `esrally compare` \u002F metrics-store queries\n   ```\n\n   If Rally generated the id, recover the most recent one afterwards with `esrally list races`.\n   (Optionally add `--user-tags=\"key:value\"` for human-friendly filtering — not required.)\n5. Save the report: `--report-file=~\u002Fbenchmarks\u002Fresult.md` (add `--report-format=csv` for CSV).\n6. Fast setup\u002Fsmoke check: add `--test-mode` to ingest a tiny slice instead of the full corpus.\n\nMulti-cluster A\u002FB (benchmark-only only; telemetry disabled in this mode): add `--multi-cluster`\nwith JSON-format `--target-hosts`\u002F`--client-options`. See `docs\u002Frecipes.rst`.\n\nRaces are long-running (often 20+ minutes) and download large corpora on the first run for a\ntrack. Treat a race as a long job, not a quick command.\n\n## Validate correctness before trusting numbers\n\nRally does **not** abort on query errors by default — it folds them into the **error rate**\nin the summary, which silently skews results.\n\n- Confirm operations return the hits you expect. A mapping mismatch (e.g. `text` vs `keyword`)\n  yields 0 hits with no error.\n- While validating, use `--on-error=abort` and\u002For add track-level `assertions` and run with\n  `--enable-assertions`.\n- A non-zero error rate on a task means those results are suspect. See `docs\u002Frecipes.rst`.\n\n## Read the summary report\n\n- **throughput** — operations per second (higher is better).\n- **latency** — includes the time a request waits in the queue before Rally sends it.\n- **service_time** — request→response only, excludes wait (what most load-test tools\n  incorrectly call \"latency\").\n- **processing_time** — includes Rally's client-side overhead; a large gap vs `service_time`\n  points to a client-side bottleneck.\n- Metrics are reported **per task**; \"Cumulative … of primary shards\" is not wall-clock time.\n- Check **error rate** first as a validity gate.\n\nSee `docs\u002Fsummary_report.rst` and `docs\u002Fmetrics.rst`.\n\n## References\n\n- Running & pipelines: `docs\u002Frace.rst`, `docs\u002Fpipelines.rst`\n- Recipes (existing cluster, Elastic Cloud, multi-cluster): `docs\u002Frecipes.rst`\n- Serverless: `docs\u002Fserverless.rst`\n- Report & metric definitions: `docs\u002Fsummary_report.rst`, `docs\u002Fmetrics.rst`\n- All flags (do not invent flags; verify here or via `esrally \u003Csubcommand> --help`): `docs\u002Fcommand_line_reference.rst`\n- Comparing and charting results across past races: the `accessing-benchmark-results` skill\n",{"data":35,"body":36},{"name":4,"description":6},{"type":37,"children":38},"root",[39,48,63,76,83,108,113,118,235,253,259,722,758,763,769,788,850,856,929,949,955,1044],{"type":40,"tag":41,"props":42,"children":44},"element","h1",{"id":43},"running-rally-benchmarks",[45],{"type":46,"value":47},"text","Running Rally benchmarks",{"type":40,"tag":49,"props":50,"children":51},"p",{},[52,54,61],{"type":46,"value":53},"Launch a race against Elasticsearch and interpret its summary report. Rally can run\nbenchmarks several ways (see ",{"type":40,"tag":55,"props":56,"children":58},"a",{"href":57},"#choose-a-pipeline",[59],{"type":46,"value":60},"Choose a pipeline",{"type":46,"value":62},").",{"type":40,"tag":49,"props":64,"children":65},{},[66,68,74],{"type":46,"value":67},"For ",{"type":40,"tag":69,"props":70,"children":71},"strong",{},[72],{"type":46,"value":73},"meaningful results",{"type":46,"value":75},", prefer an existing\u002Fexternal cluster you control: running Rally\nlocally co-locates the load driver and the system under test on one host, where they can\nperturb each other's measurements. Local deployment is a good fit when that's not a\nconcern — smoke testing, fast iterative local development, or demos.",{"type":40,"tag":77,"props":78,"children":80},"h2",{"id":79},"safety",[81],{"type":46,"value":82},"Safety",{"type":40,"tag":84,"props":85,"children":86},"ul",{},[87,98],{"type":40,"tag":88,"props":89,"children":90},"li",{},[91,96],{"type":40,"tag":69,"props":92,"children":93},{},[94],{"type":46,"value":95},"Never run Rally as root",{"type":46,"value":97}," — Elasticsearch refuses to start with root privileges.",{"type":40,"tag":88,"props":99,"children":100},{},[101,106],{"type":40,"tag":69,"props":102,"children":103},{},[104],{"type":46,"value":105},"Strongly avoid benchmarking production.",{"type":46,"value":107}," Rally mutates cluster state (creating,\nwriting to, and deleting indices), and competing traffic can perturb results. Prefer a\ndedicated, quiet environment.",{"type":40,"tag":77,"props":109,"children":111},{"id":110},"choose-a-pipeline",[112],{"type":46,"value":60},{"type":40,"tag":49,"props":114,"children":115},{},[116],{"type":46,"value":117},"Rally infers the pipeline from your flags.",{"type":40,"tag":119,"props":120,"children":121},"table",{},[122,146],{"type":40,"tag":123,"props":124,"children":125},"thead",{},[126],{"type":40,"tag":127,"props":128,"children":129},"tr",{},[130,136,141],{"type":40,"tag":131,"props":132,"children":133},"th",{},[134],{"type":46,"value":135},"Pipeline",{"type":40,"tag":131,"props":137,"children":138},{},[139],{"type":46,"value":140},"Use when",{"type":40,"tag":131,"props":142,"children":143},{},[144],{"type":46,"value":145},"Selected by",{"type":40,"tag":147,"props":148,"children":149},"tbody",{},[150,183,209],{"type":40,"tag":127,"props":151,"children":152},{},[153,164,174],{"type":40,"tag":154,"props":155,"children":156},"td",{},[157],{"type":40,"tag":158,"props":159,"children":161},"code",{"className":160},[],[162],{"type":46,"value":163},"benchmark-only",{"type":40,"tag":154,"props":165,"children":166},{},[167,172],{"type":40,"tag":69,"props":168,"children":169},{},[170],{"type":46,"value":171},"Primary path.",{"type":46,"value":173}," Cluster is already running and you provisioned it.",{"type":40,"tag":154,"props":175,"children":176},{},[177],{"type":40,"tag":158,"props":178,"children":180},{"className":179},[],[181],{"type":46,"value":182},"--pipeline=benchmark-only --target-hosts=...",{"type":40,"tag":127,"props":184,"children":185},{},[186,195,200],{"type":40,"tag":154,"props":187,"children":188},{},[189],{"type":40,"tag":158,"props":190,"children":192},{"className":191},[],[193],{"type":46,"value":194},"from-distribution",{"type":40,"tag":154,"props":196,"children":197},{},[198],{"type":46,"value":199},"Rally downloads and runs Elasticsearch locally. Setup checks\u002Fdemos; sharing a host skews results, so only large differences stand out.",{"type":40,"tag":154,"props":201,"children":202},{},[203],{"type":40,"tag":158,"props":204,"children":206},{"className":205},[],[207],{"type":46,"value":208},"--distribution-version=X",{"type":40,"tag":127,"props":210,"children":211},{},[212,221,226],{"type":40,"tag":154,"props":213,"children":214},{},[215],{"type":40,"tag":158,"props":216,"children":218},{"className":217},[],[219],{"type":46,"value":220},"from-sources",{"type":40,"tag":154,"props":222,"children":223},{},[224],{"type":46,"value":225},"Rally builds Elasticsearch from a git revision and runs it locally (CI\u002Fdev). Setup checks\u002Fdemos; sharing a host skews results, so only large differences stand out.",{"type":40,"tag":154,"props":227,"children":228},{},[229],{"type":40,"tag":158,"props":230,"children":232},{"className":231},[],[233],{"type":46,"value":234},"--revision=...",{"type":40,"tag":49,"props":236,"children":237},{},[238,243,245,251],{"type":40,"tag":158,"props":239,"children":241},{"className":240},[],[242],{"type":46,"value":163},{"type":46,"value":244}," trade-off (",{"type":40,"tag":158,"props":246,"children":248},{"className":247},[],[249],{"type":46,"value":250},"docs\u002Fpipelines.rst",{"type":46,"value":252},"): because Rally did not provision the\ncluster, results are not easily reproducible and Rally cannot gather host-level metrics\n(CPU, GC, disk I\u002FO, index size). Treat those numbers as directional.",{"type":40,"tag":77,"props":254,"children":256},{"id":255},"launch-a-race",[257],{"type":46,"value":258},"Launch a race",{"type":40,"tag":260,"props":261,"children":262},"ol",{},[263,320,368,545,688,709],{"type":40,"tag":88,"props":264,"children":265},{},[266,268],{"type":46,"value":267},"Discover tracks, then inspect one:",{"type":40,"tag":269,"props":270,"children":275},"pre",{"className":271,"code":272,"language":273,"meta":274,"style":274},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","esrally list tracks\nesrally info --track=pmc\n","bash","",[276],{"type":40,"tag":158,"props":277,"children":278},{"__ignoreMap":274},[279,302],{"type":40,"tag":280,"props":281,"children":284},"span",{"class":282,"line":283},"line",1,[285,291,297],{"type":40,"tag":280,"props":286,"children":288},{"style":287},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[289],{"type":46,"value":290},"esrally",{"type":40,"tag":280,"props":292,"children":294},{"style":293},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[295],{"type":46,"value":296}," list",{"type":40,"tag":280,"props":298,"children":299},{"style":293},[300],{"type":46,"value":301}," tracks\n",{"type":40,"tag":280,"props":303,"children":305},{"class":282,"line":304},2,[306,310,315],{"type":40,"tag":280,"props":307,"children":308},{"style":287},[309],{"type":46,"value":290},{"type":40,"tag":280,"props":311,"children":312},{"style":293},[313],{"type":46,"value":314}," info",{"type":40,"tag":280,"props":316,"children":317},{"style":293},[318],{"type":46,"value":319}," --track=pmc\n",{"type":40,"tag":88,"props":321,"children":322},{},[323,325],{"type":46,"value":324},"Run against the cluster:",{"type":40,"tag":269,"props":326,"children":328},{"className":271,"code":327,"language":273,"meta":274,"style":274},"esrally race --track=pmc --pipeline=benchmark-only \\\n  --target-hosts=10.5.5.10:9200,10.5.5.11:9200\n",[329],{"type":40,"tag":158,"props":330,"children":331},{"__ignoreMap":274},[332,360],{"type":40,"tag":280,"props":333,"children":334},{"class":282,"line":283},[335,339,344,349,354],{"type":40,"tag":280,"props":336,"children":337},{"style":287},[338],{"type":46,"value":290},{"type":40,"tag":280,"props":340,"children":341},{"style":293},[342],{"type":46,"value":343}," race",{"type":40,"tag":280,"props":345,"children":346},{"style":293},[347],{"type":46,"value":348}," --track=pmc",{"type":40,"tag":280,"props":350,"children":351},{"style":293},[352],{"type":46,"value":353}," --pipeline=benchmark-only",{"type":40,"tag":280,"props":355,"children":357},{"style":356},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[358],{"type":46,"value":359}," \\\n",{"type":40,"tag":280,"props":361,"children":362},{"class":282,"line":304},[363],{"type":40,"tag":280,"props":364,"children":365},{"style":293},[366],{"type":46,"value":367},"  --target-hosts=10.5.5.10:9200,10.5.5.11:9200\n",{"type":40,"tag":88,"props":369,"children":370},{},[371,373,379,381,440,444,446,452,454],{"type":46,"value":372},"Secured cluster — TLS + basic auth via ",{"type":40,"tag":158,"props":374,"children":376},{"className":375},[],[377],{"type":46,"value":378},"--client-options",{"type":46,"value":380},":",{"type":40,"tag":269,"props":382,"children":384},{"className":271,"code":383,"language":273,"meta":274,"style":274},"esrally race --track=pmc --pipeline=benchmark-only --target-hosts=host:9243 \\\n  --client-options=\"use_ssl:true,verify_certs:true,basic_auth_user:'elastic',basic_auth_password:'changeme'\"\n",[385],{"type":40,"tag":158,"props":386,"children":387},{"__ignoreMap":274},[388,416],{"type":40,"tag":280,"props":389,"children":390},{"class":282,"line":283},[391,395,399,403,407,412],{"type":40,"tag":280,"props":392,"children":393},{"style":287},[394],{"type":46,"value":290},{"type":40,"tag":280,"props":396,"children":397},{"style":293},[398],{"type":46,"value":343},{"type":40,"tag":280,"props":400,"children":401},{"style":293},[402],{"type":46,"value":348},{"type":40,"tag":280,"props":404,"children":405},{"style":293},[406],{"type":46,"value":353},{"type":40,"tag":280,"props":408,"children":409},{"style":293},[410],{"type":46,"value":411}," --target-hosts=host:9243",{"type":40,"tag":280,"props":413,"children":414},{"style":356},[415],{"type":46,"value":359},{"type":40,"tag":280,"props":417,"children":418},{"class":282,"line":304},[419,424,430,435],{"type":40,"tag":280,"props":420,"children":421},{"style":293},[422],{"type":46,"value":423},"  --client-options=",{"type":40,"tag":280,"props":425,"children":427},{"style":426},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[428],{"type":46,"value":429},"\"",{"type":40,"tag":280,"props":431,"children":432},{"style":293},[433],{"type":46,"value":434},"use_ssl:true,verify_certs:true,basic_auth_user:'elastic',basic_auth_password:'changeme'",{"type":40,"tag":280,"props":436,"children":437},{"style":426},[438],{"type":46,"value":439},"\"\n",{"type":40,"tag":441,"props":442,"children":443},"br",{},[],{"type":46,"value":445},"API-key auth (including Elastic Cloud \u002F Serverless — see ",{"type":40,"tag":158,"props":447,"children":449},{"className":448},[],[450],{"type":46,"value":451},"docs\u002Fserverless.rst",{"type":46,"value":453},"):",{"type":40,"tag":269,"props":455,"children":457},{"className":271,"code":456,"language":273,"meta":274,"style":274},"esrally race --track=geonames --pipeline=benchmark-only --target-hosts=${ES_HOST}:443 \\\n  --client-options=\"use_ssl:true,api_key:${ES_API_KEY}\" --on-error=abort\n",[458],{"type":40,"tag":158,"props":459,"children":460},{"__ignoreMap":274},[461,510],{"type":40,"tag":280,"props":462,"children":463},{"class":282,"line":283},[464,468,472,477,481,486,491,496,501,506],{"type":40,"tag":280,"props":465,"children":466},{"style":287},[467],{"type":46,"value":290},{"type":40,"tag":280,"props":469,"children":470},{"style":293},[471],{"type":46,"value":343},{"type":40,"tag":280,"props":473,"children":474},{"style":293},[475],{"type":46,"value":476}," --track=geonames",{"type":40,"tag":280,"props":478,"children":479},{"style":293},[480],{"type":46,"value":353},{"type":40,"tag":280,"props":482,"children":483},{"style":293},[484],{"type":46,"value":485}," --target-hosts=",{"type":40,"tag":280,"props":487,"children":488},{"style":426},[489],{"type":46,"value":490},"${",{"type":40,"tag":280,"props":492,"children":493},{"style":356},[494],{"type":46,"value":495},"ES_HOST",{"type":40,"tag":280,"props":497,"children":498},{"style":426},[499],{"type":46,"value":500},"}",{"type":40,"tag":280,"props":502,"children":503},{"style":293},[504],{"type":46,"value":505},":443",{"type":40,"tag":280,"props":507,"children":508},{"style":356},[509],{"type":46,"value":359},{"type":40,"tag":280,"props":511,"children":512},{"class":282,"line":304},[513,517,521,526,530,535,540],{"type":40,"tag":280,"props":514,"children":515},{"style":293},[516],{"type":46,"value":423},{"type":40,"tag":280,"props":518,"children":519},{"style":426},[520],{"type":46,"value":429},{"type":40,"tag":280,"props":522,"children":523},{"style":293},[524],{"type":46,"value":525},"use_ssl:true,api_key:",{"type":40,"tag":280,"props":527,"children":528},{"style":426},[529],{"type":46,"value":490},{"type":40,"tag":280,"props":531,"children":532},{"style":356},[533],{"type":46,"value":534},"ES_API_KEY",{"type":40,"tag":280,"props":536,"children":537},{"style":426},[538],{"type":46,"value":539},"}\"",{"type":40,"tag":280,"props":541,"children":542},{"style":293},[543],{"type":46,"value":544}," --on-error=abort\n",{"type":40,"tag":88,"props":546,"children":547},{},[548,550,556,558,564,566,667,670,672,678,680,686],{"type":46,"value":549},"Record the ",{"type":40,"tag":158,"props":551,"children":553},{"className":552},[],[554],{"type":46,"value":555},"race-id",{"type":46,"value":557}," so you can find the results later. Rally assigns a random UUID by\ndefault; pass your own with ",{"type":40,"tag":158,"props":559,"children":561},{"className":560},[],[562],{"type":46,"value":563},"--race-id",{"type":46,"value":565}," to know it up front:",{"type":40,"tag":269,"props":567,"children":569},{"className":271,"code":568,"language":273,"meta":274,"style":274},"RACE_ID=$(uuidgen)\nesrally race --track=pmc --pipeline=benchmark-only --target-hosts=host:9200 --race-id=\"$RACE_ID\"\necho \"$RACE_ID\"   # note this for `esrally compare` \u002F metrics-store queries\n",[570],{"type":40,"tag":158,"props":571,"children":572},{"__ignoreMap":274},[573,596,638],{"type":40,"tag":280,"props":574,"children":575},{"class":282,"line":283},[576,581,586,591],{"type":40,"tag":280,"props":577,"children":578},{"style":356},[579],{"type":46,"value":580},"RACE_ID",{"type":40,"tag":280,"props":582,"children":583},{"style":426},[584],{"type":46,"value":585},"=$(",{"type":40,"tag":280,"props":587,"children":588},{"style":287},[589],{"type":46,"value":590},"uuidgen",{"type":40,"tag":280,"props":592,"children":593},{"style":426},[594],{"type":46,"value":595},")\n",{"type":40,"tag":280,"props":597,"children":598},{"class":282,"line":304},[599,603,607,611,615,620,625,629,634],{"type":40,"tag":280,"props":600,"children":601},{"style":287},[602],{"type":46,"value":290},{"type":40,"tag":280,"props":604,"children":605},{"style":293},[606],{"type":46,"value":343},{"type":40,"tag":280,"props":608,"children":609},{"style":293},[610],{"type":46,"value":348},{"type":40,"tag":280,"props":612,"children":613},{"style":293},[614],{"type":46,"value":353},{"type":40,"tag":280,"props":616,"children":617},{"style":293},[618],{"type":46,"value":619}," --target-hosts=host:9200",{"type":40,"tag":280,"props":621,"children":622},{"style":293},[623],{"type":46,"value":624}," --race-id=",{"type":40,"tag":280,"props":626,"children":627},{"style":426},[628],{"type":46,"value":429},{"type":40,"tag":280,"props":630,"children":631},{"style":356},[632],{"type":46,"value":633},"$RACE_ID",{"type":40,"tag":280,"props":635,"children":636},{"style":426},[637],{"type":46,"value":439},{"type":40,"tag":280,"props":639,"children":641},{"class":282,"line":640},3,[642,648,653,657,661],{"type":40,"tag":280,"props":643,"children":645},{"style":644},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[646],{"type":46,"value":647},"echo",{"type":40,"tag":280,"props":649,"children":650},{"style":426},[651],{"type":46,"value":652}," \"",{"type":40,"tag":280,"props":654,"children":655},{"style":356},[656],{"type":46,"value":633},{"type":40,"tag":280,"props":658,"children":659},{"style":426},[660],{"type":46,"value":429},{"type":40,"tag":280,"props":662,"children":664},{"style":663},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[665],{"type":46,"value":666},"   # note this for `esrally compare` \u002F metrics-store queries\n",{"type":40,"tag":441,"props":668,"children":669},{},[],{"type":46,"value":671},"If Rally generated the id, recover the most recent one afterwards with ",{"type":40,"tag":158,"props":673,"children":675},{"className":674},[],[676],{"type":46,"value":677},"esrally list races",{"type":46,"value":679},".\n(Optionally add ",{"type":40,"tag":158,"props":681,"children":683},{"className":682},[],[684],{"type":46,"value":685},"--user-tags=\"key:value\"",{"type":46,"value":687}," for human-friendly filtering — not required.)",{"type":40,"tag":88,"props":689,"children":690},{},[691,693,699,701,707],{"type":46,"value":692},"Save the report: ",{"type":40,"tag":158,"props":694,"children":696},{"className":695},[],[697],{"type":46,"value":698},"--report-file=~\u002Fbenchmarks\u002Fresult.md",{"type":46,"value":700}," (add ",{"type":40,"tag":158,"props":702,"children":704},{"className":703},[],[705],{"type":46,"value":706},"--report-format=csv",{"type":46,"value":708}," for CSV).",{"type":40,"tag":88,"props":710,"children":711},{},[712,714,720],{"type":46,"value":713},"Fast setup\u002Fsmoke check: add ",{"type":40,"tag":158,"props":715,"children":717},{"className":716},[],[718],{"type":46,"value":719},"--test-mode",{"type":46,"value":721}," to ingest a tiny slice instead of the full corpus.",{"type":40,"tag":49,"props":723,"children":724},{},[725,727,733,735,741,743,748,750,756],{"type":46,"value":726},"Multi-cluster A\u002FB (benchmark-only only; telemetry disabled in this mode): add ",{"type":40,"tag":158,"props":728,"children":730},{"className":729},[],[731],{"type":46,"value":732},"--multi-cluster",{"type":46,"value":734},"\nwith JSON-format ",{"type":40,"tag":158,"props":736,"children":738},{"className":737},[],[739],{"type":46,"value":740},"--target-hosts",{"type":46,"value":742},"\u002F",{"type":40,"tag":158,"props":744,"children":746},{"className":745},[],[747],{"type":46,"value":378},{"type":46,"value":749},". See ",{"type":40,"tag":158,"props":751,"children":753},{"className":752},[],[754],{"type":46,"value":755},"docs\u002Frecipes.rst",{"type":46,"value":757},".",{"type":40,"tag":49,"props":759,"children":760},{},[761],{"type":46,"value":762},"Races are long-running (often 20+ minutes) and download large corpora on the first run for a\ntrack. Treat a race as a long job, not a quick command.",{"type":40,"tag":77,"props":764,"children":766},{"id":765},"validate-correctness-before-trusting-numbers",[767],{"type":46,"value":768},"Validate correctness before trusting numbers",{"type":40,"tag":49,"props":770,"children":771},{},[772,774,779,781,786],{"type":46,"value":773},"Rally does ",{"type":40,"tag":69,"props":775,"children":776},{},[777],{"type":46,"value":778},"not",{"type":46,"value":780}," abort on query errors by default — it folds them into the ",{"type":40,"tag":69,"props":782,"children":783},{},[784],{"type":46,"value":785},"error rate",{"type":46,"value":787},"\nin the summary, which silently skews results.",{"type":40,"tag":84,"props":789,"children":790},{},[791,811,839],{"type":40,"tag":88,"props":792,"children":793},{},[794,796,801,803,809],{"type":46,"value":795},"Confirm operations return the hits you expect. A mapping mismatch (e.g. ",{"type":40,"tag":158,"props":797,"children":799},{"className":798},[],[800],{"type":46,"value":46},{"type":46,"value":802}," vs ",{"type":40,"tag":158,"props":804,"children":806},{"className":805},[],[807],{"type":46,"value":808},"keyword",{"type":46,"value":810},")\nyields 0 hits with no error.",{"type":40,"tag":88,"props":812,"children":813},{},[814,816,822,824,830,832,838],{"type":46,"value":815},"While validating, use ",{"type":40,"tag":158,"props":817,"children":819},{"className":818},[],[820],{"type":46,"value":821},"--on-error=abort",{"type":46,"value":823}," and\u002For add track-level ",{"type":40,"tag":158,"props":825,"children":827},{"className":826},[],[828],{"type":46,"value":829},"assertions",{"type":46,"value":831}," and run with\n",{"type":40,"tag":158,"props":833,"children":835},{"className":834},[],[836],{"type":46,"value":837},"--enable-assertions",{"type":46,"value":757},{"type":40,"tag":88,"props":840,"children":841},{},[842,844,849],{"type":46,"value":843},"A non-zero error rate on a task means those results are suspect. See ",{"type":40,"tag":158,"props":845,"children":847},{"className":846},[],[848],{"type":46,"value":755},{"type":46,"value":757},{"type":40,"tag":77,"props":851,"children":853},{"id":852},"read-the-summary-report",[854],{"type":46,"value":855},"Read the summary report",{"type":40,"tag":84,"props":857,"children":858},{},[859,869,879,889,906,918],{"type":40,"tag":88,"props":860,"children":861},{},[862,867],{"type":40,"tag":69,"props":863,"children":864},{},[865],{"type":46,"value":866},"throughput",{"type":46,"value":868}," — operations per second (higher is better).",{"type":40,"tag":88,"props":870,"children":871},{},[872,877],{"type":40,"tag":69,"props":873,"children":874},{},[875],{"type":46,"value":876},"latency",{"type":46,"value":878}," — includes the time a request waits in the queue before Rally sends it.",{"type":40,"tag":88,"props":880,"children":881},{},[882,887],{"type":40,"tag":69,"props":883,"children":884},{},[885],{"type":46,"value":886},"service_time",{"type":46,"value":888}," — request→response only, excludes wait (what most load-test tools\nincorrectly call \"latency\").",{"type":40,"tag":88,"props":890,"children":891},{},[892,897,899,904],{"type":40,"tag":69,"props":893,"children":894},{},[895],{"type":46,"value":896},"processing_time",{"type":46,"value":898}," — includes Rally's client-side overhead; a large gap vs ",{"type":40,"tag":158,"props":900,"children":902},{"className":901},[],[903],{"type":46,"value":886},{"type":46,"value":905},"\npoints to a client-side bottleneck.",{"type":40,"tag":88,"props":907,"children":908},{},[909,911,916],{"type":46,"value":910},"Metrics are reported ",{"type":40,"tag":69,"props":912,"children":913},{},[914],{"type":46,"value":915},"per task",{"type":46,"value":917},"; \"Cumulative … of primary shards\" is not wall-clock time.",{"type":40,"tag":88,"props":919,"children":920},{},[921,923,927],{"type":46,"value":922},"Check ",{"type":40,"tag":69,"props":924,"children":925},{},[926],{"type":46,"value":785},{"type":46,"value":928}," first as a validity gate.",{"type":40,"tag":49,"props":930,"children":931},{},[932,934,940,942,948],{"type":46,"value":933},"See ",{"type":40,"tag":158,"props":935,"children":937},{"className":936},[],[938],{"type":46,"value":939},"docs\u002Fsummary_report.rst",{"type":46,"value":941}," and ",{"type":40,"tag":158,"props":943,"children":945},{"className":944},[],[946],{"type":46,"value":947},"docs\u002Fmetrics.rst",{"type":46,"value":757},{"type":40,"tag":77,"props":950,"children":952},{"id":951},"references",[953],{"type":46,"value":954},"References",{"type":40,"tag":84,"props":956,"children":957},{},[958,976,986,996,1012,1031],{"type":40,"tag":88,"props":959,"children":960},{},[961,963,969,971],{"type":46,"value":962},"Running & pipelines: ",{"type":40,"tag":158,"props":964,"children":966},{"className":965},[],[967],{"type":46,"value":968},"docs\u002Frace.rst",{"type":46,"value":970},", ",{"type":40,"tag":158,"props":972,"children":974},{"className":973},[],[975],{"type":46,"value":250},{"type":40,"tag":88,"props":977,"children":978},{},[979,981],{"type":46,"value":980},"Recipes (existing cluster, Elastic Cloud, multi-cluster): ",{"type":40,"tag":158,"props":982,"children":984},{"className":983},[],[985],{"type":46,"value":755},{"type":40,"tag":88,"props":987,"children":988},{},[989,991],{"type":46,"value":990},"Serverless: ",{"type":40,"tag":158,"props":992,"children":994},{"className":993},[],[995],{"type":46,"value":451},{"type":40,"tag":88,"props":997,"children":998},{},[999,1001,1006,1007],{"type":46,"value":1000},"Report & metric definitions: ",{"type":40,"tag":158,"props":1002,"children":1004},{"className":1003},[],[1005],{"type":46,"value":939},{"type":46,"value":970},{"type":40,"tag":158,"props":1008,"children":1010},{"className":1009},[],[1011],{"type":46,"value":947},{"type":40,"tag":88,"props":1013,"children":1014},{},[1015,1017,1023,1025],{"type":46,"value":1016},"All flags (do not invent flags; verify here or via ",{"type":40,"tag":158,"props":1018,"children":1020},{"className":1019},[],[1021],{"type":46,"value":1022},"esrally \u003Csubcommand> --help",{"type":46,"value":1024},"): ",{"type":40,"tag":158,"props":1026,"children":1028},{"className":1027},[],[1029],{"type":46,"value":1030},"docs\u002Fcommand_line_reference.rst",{"type":40,"tag":88,"props":1032,"children":1033},{},[1034,1036,1042],{"type":46,"value":1035},"Comparing and charting results across past races: the ",{"type":40,"tag":158,"props":1037,"children":1039},{"className":1038},[],[1040],{"type":46,"value":1041},"accessing-benchmark-results",{"type":46,"value":1043}," skill",{"type":40,"tag":1045,"props":1046,"children":1047},"style",{},[1048],{"type":46,"value":1049},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1051,"total":1210},[1052,1066,1083,1090,1109,1121,1131,1146,1158,1173,1184,1197],{"slug":1041,"name":1041,"fn":1053,"description":1054,"org":1055,"tags":1056,"stars":23,"repoUrl":24,"updatedAt":1065},"retrieve and analyze Rally benchmark results","Retrieve Rally benchmark results from an external Elasticsearch metrics store. Use to list past races, get a single race's overall (per-task) results, chart a metric's trend across multiple runs, compare two races, or check whether a run converged — e.g. \"show me recent geonames races\", \"what's the service_time trend for nyc_taxis over the last 30 days?\", \"compare these two race-ids\". Applies when datastore.type = elasticsearch is set in ~\u002F.rally\u002Frally.ini.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1057,1060,1063,1064],{"name":1058,"slug":1059,"type":15},"Analytics","analytics",{"name":1061,"slug":1062,"type":15},"Data Analysis","data-analysis",{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},"2026-07-12T07:46:38.54144",{"slug":1067,"name":1067,"fn":1068,"description":1069,"org":1070,"tags":1071,"stars":23,"repoUrl":24,"updatedAt":1082},"developing-rally","develop and debug Rally source code","Work on Rally's own codebase, not running benchmarks with it. Use when setting up the dev environment, running Rally's tests or linters, navigating its source, debugging Rally's own code, or making changes to Rally itself.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1072,1075,1076,1079],{"name":1073,"slug":1074,"type":15},"Debugging","debugging",{"name":9,"slug":8,"type":15},{"name":1077,"slug":1078,"type":15},"Engineering","engineering",{"name":1080,"slug":1081,"type":15},"Local Development","local-development","2026-07-12T07:46:35.976807",{"slug":4,"name":4,"fn":5,"description":6,"org":1084,"tags":1085,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1086,1087,1088,1089],{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},{"name":13,"slug":14,"type":15},{"name":21,"slug":22,"type":15},{"slug":1091,"name":1091,"fn":1092,"description":1093,"org":1094,"tags":1095,"stars":1106,"repoUrl":1107,"updatedAt":1108},"cloud-access-management","manage Elastic Cloud organization access","Manage Elastic Cloud organization access: invite users, assign roles to Serverless projects, and create or revoke Cloud API keys. Use when granting, modifying, or auditing user access.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1096,1099,1100,1103],{"name":1097,"slug":1098,"type":15},"Cloud","cloud",{"name":9,"slug":8,"type":15},{"name":1101,"slug":1102,"type":15},"Operations","operations",{"name":1104,"slug":1105,"type":15},"Permissions","permissions",531,"https:\u002F\u002Fgithub.com\u002Felastic\u002Fagent-skills","2026-07-12T07:46:44.946285",{"slug":1110,"name":1110,"fn":1111,"description":1112,"org":1113,"tags":1114,"stars":1106,"repoUrl":1107,"updatedAt":1120},"cloud-create-project","create Elastic Cloud Serverless projects","Creates Elastic Cloud Serverless projects (Elasticsearch, Observability, or Security) via the REST API, saves credentials to file, and bootstraps a scoped Elasticsearch API key. Use when creating a new serverless project, provisioning a search or observability environment, or spinning up a new Elastic Cloud project.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1115,1116,1119],{"name":1097,"slug":1098,"type":15},{"name":1117,"slug":1118,"type":15},"Deployment","deployment",{"name":18,"slug":19,"type":15},"2026-07-12T07:46:42.353362",{"slug":1122,"name":1122,"fn":1123,"description":1124,"org":1125,"tags":1126,"stars":1106,"repoUrl":1107,"updatedAt":1130},"cloud-manage-project","manage Elastic Cloud Serverless projects","Manages existing Elastic Cloud Serverless projects: list, get, update, delete, reset credentials, resume, and load saved credentials. Connects to existing projects by resolving endpoints and acquiring scoped Elasticsearch API keys. Use when performing day-2 operations on serverless projects, connecting to an existing project, loading or resetting project credentials, or looking up project details.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1127,1128,1129],{"name":1097,"slug":1098,"type":15},{"name":18,"slug":19,"type":15},{"name":1101,"slug":1102,"type":15},"2026-07-12T07:46:41.097412",{"slug":1132,"name":1132,"fn":1133,"description":1134,"org":1135,"tags":1136,"stars":1106,"repoUrl":1107,"updatedAt":1145},"cloud-network-security","manage Elastic Cloud network security","Manage Serverless network security (traffic filters): create, update, and delete IP filters and AWS PrivateLink VPC filters. Use when restricting network access or configuring private connectivity.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1137,1138,1139,1142],{"name":1097,"slug":1098,"type":15},{"name":18,"slug":19,"type":15},{"name":1140,"slug":1141,"type":15},"Networking","networking",{"name":1143,"slug":1144,"type":15},"Security","security","2026-07-12T07:46:43.675992",{"slug":1147,"name":1147,"fn":1148,"description":1149,"org":1150,"tags":1151,"stars":1106,"repoUrl":1107,"updatedAt":1157},"cloud-setup","configure Elastic Cloud authentication","Configures Elastic Cloud authentication and environment defaults. Use when setting up EC_API_KEY, configuring Cloud API access, or when another cloud skill requires credentials.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1152,1155,1156],{"name":1153,"slug":1154,"type":15},"Authentication","authentication",{"name":1097,"slug":1098,"type":15},{"name":18,"slug":19,"type":15},"2026-07-12T07:46:39.783105",{"slug":1159,"name":1159,"fn":1160,"description":1161,"org":1162,"tags":1163,"stars":1106,"repoUrl":1107,"updatedAt":1172},"elasticsearch-audit","configure Elasticsearch security audit logs","Enable, configure, and query Elasticsearch security audit logs. Use when the task involves audit logging setup, event filtering, or investigating security incidents like failed logins.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1164,1167,1168,1171],{"name":1165,"slug":1166,"type":15},"Audit","audit",{"name":18,"slug":19,"type":15},{"name":1169,"slug":1170,"type":15},"Logs","logs",{"name":1143,"slug":1144,"type":15},"2026-07-12T07:47:35.092599",{"slug":1174,"name":1174,"fn":1175,"description":1176,"org":1177,"tags":1178,"stars":1106,"repoUrl":1107,"updatedAt":1183},"elasticsearch-authn","configure Elasticsearch authentication realms","Authenticate to Elasticsearch using native, file-based, LDAP\u002FAD, SAML, OIDC, Kerberos, JWT, or certificate realms. Use when connecting with credentials, choosing a realm, or managing API keys. Assumes the target realms are already configured.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1179,1180,1181,1182],{"name":1153,"slug":1154,"type":15},{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},{"name":1143,"slug":1144,"type":15},"2026-07-12T07:47:41.474547",{"slug":1185,"name":1185,"fn":1186,"description":1187,"org":1188,"tags":1189,"stars":1106,"repoUrl":1107,"updatedAt":1196},"elasticsearch-authz","manage Elasticsearch RBAC and security roles","Manage Elasticsearch RBAC: native users, roles, role mappings, document- and field-level security. Use when creating users or roles, assigning privileges, or mapping external realms like LDAP\u002FSAML.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1190,1191,1192,1195],{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},{"name":1193,"slug":1194,"type":15},"RBAC","rbac",{"name":1143,"slug":1144,"type":15},"2026-07-12T07:47:36.394177",{"slug":1198,"name":1198,"fn":1199,"description":1200,"org":1201,"tags":1202,"stars":1106,"repoUrl":1107,"updatedAt":1209},"elasticsearch-esql","query Elasticsearch data with ES|QL","Execute ES|QL (Elasticsearch Query Language) queries, use when the user wants to query Elasticsearch data, analyze logs, aggregate metrics, explore data, or create charts and dashboards from ES|QL results.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1203,1204,1205,1206],{"name":1058,"slug":1059,"type":15},{"name":1061,"slug":1062,"type":15},{"name":18,"slug":19,"type":15},{"name":1207,"slug":1208,"type":15},"SQL","sql","2026-07-12T07:47:40.249533",86,{"items":1212,"total":640},[1213,1220,1227],{"slug":1041,"name":1041,"fn":1053,"description":1054,"org":1214,"tags":1215,"stars":23,"repoUrl":24,"updatedAt":1065},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1216,1217,1218,1219],{"name":1058,"slug":1059,"type":15},{"name":1061,"slug":1062,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"slug":1067,"name":1067,"fn":1068,"description":1069,"org":1221,"tags":1222,"stars":23,"repoUrl":24,"updatedAt":1082},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1223,1224,1225,1226],{"name":1073,"slug":1074,"type":15},{"name":9,"slug":8,"type":15},{"name":1077,"slug":1078,"type":15},{"name":1080,"slug":1081,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":1228,"tags":1229,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1230,1231,1232,1233],{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},{"name":13,"slug":14,"type":15},{"name":21,"slug":22,"type":15}]