mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 01:38:56 -04:00
# Backport This will backport the following commits from `main` to `8.7`: - [[performance] enable journey run against cloud deployments (#156720)](https://github.com/elastic/kibana/pull/156720) <!--- Backport version: 8.9.7 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sqren/backport) <!--BACKPORT [{"author":{"name":"Dzmitry Lemechko","email":"dzmitry.lemechko@elastic.co"},"sourceCommit":{"committedDate":"2023-05-09T03:35:43Z","message":"[performance] enable journey run against cloud deployments (#156720)\n\n## Summary\r\n\r\nThis PR adds changes and instructions how to run existing performance\r\njourneys against ESS instances.\r\n\r\nAs previously discussed with @pheyos , there are few manual steps to be\r\ndone before running the actual journey:\r\n1. Create cloud deployment and re-configure it the way APM traces are\r\nreported the monitoring cluster\r\n2. Check out the branch matching deployment version (main ->\r\n8.9.0-SNAPSHOT), create user with `superuser` role (we don't test\r\nfunctional features, only performance metrics)\r\n\r\nThen you can run the journey like a regular cloud test suite:\r\n```\r\nexport TEST_KIBANA_URL=https://<username>:<password>@<kibana_url>\r\nexport TEST_ES_URL=https://<username>:<password>@j<elasticsearch_url>:<port>\r\nexport TEST_CLOUD=1\r\nnode scripts/functional_test_runner.js --config x-pack/performance/journeys/$YOUR_JOURNEY_NAME.ts\r\n```\r\n\r\n<img width=\"1357\" alt=\"image\"\r\nsrc=\"https://user-images.githubusercontent.com/10977896/236499836-2738fecb-a5a9-4e58-a10b-915b962af037.png\">\r\n\r\n---------\r\n\r\nCo-authored-by: Jon <jon@budzenski.me>","sha":"e55a92eab0ae28799b51238fb76efa6026673e6e","branchLabelMapping":{"^v8.9.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:skip","wg:performance","v8.7.2","v8.9.0","v8.8.1"],"number":156720,"url":"https://github.com/elastic/kibana/pull/156720","mergeCommit":{"message":"[performance] enable journey run against cloud deployments (#156720)\n\n## Summary\r\n\r\nThis PR adds changes and instructions how to run existing performance\r\njourneys against ESS instances.\r\n\r\nAs previously discussed with @pheyos , there are few manual steps to be\r\ndone before running the actual journey:\r\n1. Create cloud deployment and re-configure it the way APM traces are\r\nreported the monitoring cluster\r\n2. Check out the branch matching deployment version (main ->\r\n8.9.0-SNAPSHOT), create user with `superuser` role (we don't test\r\nfunctional features, only performance metrics)\r\n\r\nThen you can run the journey like a regular cloud test suite:\r\n```\r\nexport TEST_KIBANA_URL=https://<username>:<password>@<kibana_url>\r\nexport TEST_ES_URL=https://<username>:<password>@j<elasticsearch_url>:<port>\r\nexport TEST_CLOUD=1\r\nnode scripts/functional_test_runner.js --config x-pack/performance/journeys/$YOUR_JOURNEY_NAME.ts\r\n```\r\n\r\n<img width=\"1357\" alt=\"image\"\r\nsrc=\"https://user-images.githubusercontent.com/10977896/236499836-2738fecb-a5a9-4e58-a10b-915b962af037.png\">\r\n\r\n---------\r\n\r\nCo-authored-by: Jon <jon@budzenski.me>","sha":"e55a92eab0ae28799b51238fb76efa6026673e6e"}},"sourceBranch":"main","suggestedTargetBranches":["8.7","8.8"],"targetPullRequestStates":[{"branch":"8.7","label":"v8.7.2","labelRegex":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"main","label":"v8.9.0","labelRegex":"^v8.9.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/156720","number":156720,"mergeCommit":{"message":"[performance] enable journey run against cloud deployments (#156720)\n\n## Summary\r\n\r\nThis PR adds changes and instructions how to run existing performance\r\njourneys against ESS instances.\r\n\r\nAs previously discussed with @pheyos , there are few manual steps to be\r\ndone before running the actual journey:\r\n1. Create cloud deployment and re-configure it the way APM traces are\r\nreported the monitoring cluster\r\n2. Check out the branch matching deployment version (main ->\r\n8.9.0-SNAPSHOT), create user with `superuser` role (we don't test\r\nfunctional features, only performance metrics)\r\n\r\nThen you can run the journey like a regular cloud test suite:\r\n```\r\nexport TEST_KIBANA_URL=https://<username>:<password>@<kibana_url>\r\nexport TEST_ES_URL=https://<username>:<password>@j<elasticsearch_url>:<port>\r\nexport TEST_CLOUD=1\r\nnode scripts/functional_test_runner.js --config x-pack/performance/journeys/$YOUR_JOURNEY_NAME.ts\r\n```\r\n\r\n<img width=\"1357\" alt=\"image\"\r\nsrc=\"https://user-images.githubusercontent.com/10977896/236499836-2738fecb-a5a9-4e58-a10b-915b962af037.png\">\r\n\r\n---------\r\n\r\nCo-authored-by: Jon <jon@budzenski.me>","sha":"e55a92eab0ae28799b51238fb76efa6026673e6e"}},{"branch":"8.8","label":"v8.8.1","labelRegex":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"}]}] BACKPORT--> Co-authored-by: Dzmitry Lemechko <dzmitry.lemechko@elastic.co>
This commit is contained in:
parent
1bd85bc256
commit
3692688d01
5 changed files with 128 additions and 10 deletions
|
@ -0,0 +1,93 @@
|
|||
---
|
||||
id: kibDevTutorialRunningPerformanceJourneyInCloud
|
||||
slug: /kibana-dev-docs/tutorial/performance/running_performance_journey_in_cloud
|
||||
title: Running Performance Journey In Cloud
|
||||
summary: Learn how to run performance journey against Cloud cluster
|
||||
date: 2023-05-04
|
||||
tags: ['kibana', 'onboarding', 'setup', 'performance', 'development', 'telemetry']
|
||||
---
|
||||
|
||||
## Overview
|
||||
As a way to better understand user experience with Kibana in cloud, we support running performance journeys against
|
||||
Cloud deployments.
|
||||
The process takes a few steps:
|
||||
- Create a cloud deployment
|
||||
- Re-configure deployment with APM enabled and reporting metrics to the monitoring cluster
|
||||
- Create a user with `superuser` role to run tests with
|
||||
- Checkout the branch that matches your cloud deployment version
|
||||
- Run the performance journey
|
||||
|
||||
### Re-configure deployment for Kibana and Elasticsearch
|
||||
We use [kibana-ops-e2e-perf](https://kibana-ops-e2e-perf.kb.us-central1.gcp.cloud.es.io/) cluster to monitor performance testing.
|
||||
|
||||
If you would like to report APM metrics to this cluster, copy `SECRET_TOKEN` and `SERVER_URL` values from [packages/kbn-journeys/journey/journey_apm_config.ts](https://github.com/elastic/kibana/blob/60c82765779419d356a131e212682b69b035804b/packages/kbn-journeys/journey/journey_apm_config.ts#L10-L11)
|
||||
|
||||
#### Change Elasticsearch configuration
|
||||
In the ESS Admin Console, find your deployment and navigate to `Security` page. Click `Add Settings` under `Elasticsearch keystore` and add new entry:
|
||||
|
||||
```
|
||||
Setting name: tracing.apm.secret_token
|
||||
Secret: <SECRET_TOKEN>
|
||||
```
|
||||
|
||||
Navigate to `Advanced Edit` page and change `Deployment Configuration` by adding the following JSON object to `resources.elasticsearch.plan.elasticsearch`:
|
||||
|
||||
```
|
||||
"user_settings_override_json": {
|
||||
"tracing.apm.enabled": "true",
|
||||
"tracing.apm.environment": "development",
|
||||
"tracing.apm.agent.service_name": "elasticsearch",
|
||||
"tracing.apm.agent.server_url": "<SERVER_URL>",
|
||||
"tracing.apm.agent.metrics_interval": "120s",
|
||||
"tracing.apm.agent.transaction_sample_rate": "1"
|
||||
}
|
||||
```
|
||||
|
||||
Save changes and make sure cluster is restarted successfully.
|
||||
|
||||
#### Change Kibana configuration
|
||||
Navigate to `Advanced Edit` page and change `Deployment Configuration` by adding the following JSON object to `resources.kibana.plan.kibana`:
|
||||
|
||||
```
|
||||
"user_settings_override_json": {
|
||||
"elastic.apm.active": true,
|
||||
"elastic.apm.breakdownMetrics": false,
|
||||
"elastic.apm.captureBody": "all",
|
||||
"elastic.apm.captureRequestHeaders": "true",
|
||||
"elastic.apm.captureSpanStackTraces": false,
|
||||
"elastic.apm.centralConfig": false,
|
||||
"elastic.apm.contextPropagationOnly": "false",
|
||||
"elastic.apm.environment": "development",
|
||||
"elastic.apm.globalLabels.deploymentId": "<DEPLOYMENT_ID>",
|
||||
"elastic.apm.globalLabels.journeyName": "<YOUR_JOURNEY_NAME>",
|
||||
"elastic.apm.longFieldMaxLength": "300000",
|
||||
"elastic.apm.metricsInterval": "120s",
|
||||
"elastic.apm.propagateTracestate": true,
|
||||
"elastic.apm.sanitizeFieldNames": "password,passwd,pwd,secret,*key,*token*,*session*,*credit*,*card*,*auth*,set-cookie,pw,pass,connect.sid",
|
||||
"elastic.apm.secretToken": "<SECRET_TOKEN>",
|
||||
"elastic.apm.serverUrl": "<SERVER_URL>",
|
||||
"elastic.apm.transactionSampleRate": 1
|
||||
}
|
||||
```
|
||||
|
||||
Note: DEPLOYMENT_ID and YOUR_JOURNEY_NAME values are optional labels to find the APM traces for your run.
|
||||
|
||||
Save changes and make sure cluster is restarted successfully.
|
||||
|
||||
### Run the journey
|
||||
Make sure you have created user with `superuser` role and the Kibana repo branch is matching your deployment version.
|
||||
Set env variables to run FTR against your cloud deployment:
|
||||
|
||||
```
|
||||
export TEST_KIBANA_URL=https://<username>:<password>@<kibana_url>
|
||||
export TEST_ES_URL=https://<username>:<password>@<elasticsearch_url>:<port>
|
||||
export TEST_CLOUD=1
|
||||
```
|
||||
|
||||
Run your journey with the command:
|
||||
|
||||
```
|
||||
node scripts/functional_test_runner.js --config x-pack/performance/journeys/$YOUR_JOURNEY_NAME.ts`
|
||||
```
|
||||
|
||||
|
|
@ -35,6 +35,7 @@ export interface BaseStepCtx {
|
|||
kibanaServer: KibanaServer;
|
||||
es: Es;
|
||||
retry: RetryService;
|
||||
auth: Auth;
|
||||
}
|
||||
|
||||
export type AnyStep = Step<{}>;
|
||||
|
|
|
@ -99,10 +99,11 @@ export class JourneyFtrHarness {
|
|||
|
||||
private async setupBrowserAndPage() {
|
||||
const browser = await this.getBrowserInstance();
|
||||
this.context = await browser.newContext({ bypassCSP: true });
|
||||
const browserContextArgs = this.auth.isCloud() ? {} : { bypassCSP: true };
|
||||
this.context = await browser.newContext(browserContextArgs);
|
||||
|
||||
if (this.journeyConfig.shouldAutoLogin()) {
|
||||
const cookie = await this.auth.login({ username: 'elastic', password: 'changeme' });
|
||||
const cookie = await this.auth.login();
|
||||
await this.context.addCookies([cookie]);
|
||||
}
|
||||
|
||||
|
@ -373,6 +374,7 @@ export class JourneyFtrHarness {
|
|||
kibanaServer: this.kibanaServer,
|
||||
es: this.es,
|
||||
retry: this.retry,
|
||||
auth: this.auth,
|
||||
});
|
||||
|
||||
return this.#_ctx;
|
||||
|
|
|
@ -29,7 +29,7 @@ export class Auth {
|
|||
private readonly kibanaServer: KibanaServer
|
||||
) {}
|
||||
|
||||
public async login({ username, password }: Credentials) {
|
||||
public async login(credentials?: Credentials) {
|
||||
const baseUrl = new URL(
|
||||
Url.format({
|
||||
protocol: this.config.get('servers.kibana.protocol'),
|
||||
|
@ -37,9 +37,10 @@ export class Auth {
|
|||
port: this.config.get('servers.kibana.port'),
|
||||
})
|
||||
);
|
||||
|
||||
const loginUrl = new URL('/internal/security/login', baseUrl);
|
||||
const provider = baseUrl.hostname === 'localhost' ? 'basic' : 'cloud-basic';
|
||||
const provider = this.isCloud() ? 'cloud-basic' : 'basic';
|
||||
|
||||
const version = await this.kibanaServer.version.get();
|
||||
|
||||
this.log.info('fetching auth cookie from', loginUrl.href);
|
||||
const authResponse = await axios.request({
|
||||
|
@ -49,11 +50,11 @@ export class Auth {
|
|||
providerType: 'basic',
|
||||
providerName: provider,
|
||||
currentURL: new URL('/login?next=%2F', baseUrl).href,
|
||||
params: { username, password },
|
||||
params: credentials ?? { username: this.getUsername(), password: this.getPassword() },
|
||||
},
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
'kbn-version': await this.kibanaServer.version.get(),
|
||||
'kbn-version': version,
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-site': 'same-origin',
|
||||
},
|
||||
|
@ -61,6 +62,12 @@ export class Auth {
|
|||
maxRedirects: 0,
|
||||
});
|
||||
|
||||
if (authResponse.status !== 200) {
|
||||
throw new Error(
|
||||
`Kibana auth failed: code: ${authResponse.status}, message: ${authResponse.statusText}`
|
||||
);
|
||||
}
|
||||
|
||||
const cookie = extractCookieValue(authResponse);
|
||||
if (cookie) {
|
||||
this.log.info('captured auth cookie');
|
||||
|
@ -82,4 +89,16 @@ export class Auth {
|
|||
url: baseUrl.href,
|
||||
};
|
||||
}
|
||||
|
||||
public getUsername() {
|
||||
return this.config.get('servers.kibana.username');
|
||||
}
|
||||
|
||||
public getPassword() {
|
||||
return this.config.get('servers.kibana.password');
|
||||
}
|
||||
|
||||
public isCloud() {
|
||||
return this.config.get('servers.kibana.hostname') !== 'localhost';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,11 +34,14 @@ export const journey = new Journey({
|
|||
],
|
||||
maxDuration: '10m',
|
||||
},
|
||||
}).step('Login', async ({ page, kbnUrl, inputDelays }) => {
|
||||
}).step('Login', async ({ page, kbnUrl, inputDelays, auth }) => {
|
||||
await page.goto(kbnUrl.get());
|
||||
if (auth.isCloud()) {
|
||||
await page.click(subj('loginCard-basic/cloud-basic'), { delay: inputDelays.MOUSE_CLICK });
|
||||
}
|
||||
|
||||
await page.type(subj('loginUsername'), 'elastic', { delay: inputDelays.TYPING });
|
||||
await page.type(subj('loginPassword'), 'changeme', { delay: inputDelays.TYPING });
|
||||
await page.type(subj('loginUsername'), auth.getUsername(), { delay: inputDelays.TYPING });
|
||||
await page.type(subj('loginPassword'), auth.getPassword(), { delay: inputDelays.TYPING });
|
||||
await page.click(subj('loginSubmit'), { delay: inputDelays.MOUSE_CLICK });
|
||||
|
||||
await waitForChrome(page);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue