diff --git a/.ci/Jenkinsfile_coverage b/.ci/Jenkinsfile_coverage
index 63798e2e29e44..3f4732f15f334 100644
--- a/.ci/Jenkinsfile_coverage
+++ b/.ci/Jenkinsfile_coverage
@@ -23,6 +23,8 @@ def handleIngestion(timestamp) {
kibanaPipeline.downloadCoverageArtifacts()
kibanaCoverage.prokLinks("### Process HTML Links")
kibanaCoverage.collectVcsInfo("### Collect VCS Info")
+ kibanaCoverage.generateReports("### Merge coverage reports")
+ kibanaCoverage.uploadCombinedReports()
kibanaCoverage.ingest(timestamp, '### Injest && Upload')
kibanaCoverage.uploadCoverageStaticSite(timestamp)
}
diff --git a/.ci/Jenkinsfile_flaky b/.ci/Jenkinsfile_flaky
index 425a5e71798b1..2f496329dfd8e 100644
--- a/.ci/Jenkinsfile_flaky
+++ b/.ci/Jenkinsfile_flaky
@@ -70,6 +70,8 @@ def getWorkerFromParams(isXpack, job, ciGroup) {
"run `node scripts/mocha`"
)
})
+ } else if (job == 'accessibility') {
+ return kibanaPipeline.functionalTestProcess('kibana-accessibility', './test/scripts/jenkins_accessibility.sh')
} else if (job == 'firefoxSmoke') {
return kibanaPipeline.functionalTestProcess('firefoxSmoke', './test/scripts/jenkins_firefox_smoke.sh')
} else if(job == 'visualRegression') {
@@ -79,7 +81,9 @@ def getWorkerFromParams(isXpack, job, ciGroup) {
}
}
- if (job == 'firefoxSmoke') {
+ if (job == 'accessibility') {
+ return kibanaPipeline.functionalTestProcess('xpack-accessibility', './test/scripts/jenkins_xpack_accessibility.sh')
+ } else if (job == 'firefoxSmoke') {
return kibanaPipeline.functionalTestProcess('xpack-firefoxSmoke', './test/scripts/jenkins_xpack_firefox_smoke.sh')
} else if(job == 'visualRegression') {
return kibanaPipeline.functionalTestProcess('xpack-visualRegression', './test/scripts/jenkins_xpack_visual_regression.sh')
diff --git a/.ci/end2end.groovy b/.ci/end2end.groovy
index 8e9b041d32d3e..0cd64dcfd41fd 100644
--- a/.ci/end2end.groovy
+++ b/.ci/end2end.groovy
@@ -12,8 +12,7 @@ pipeline {
environment {
BASE_DIR = 'src/github.com/elastic/kibana'
HOME = "${env.WORKSPACE}"
- APM_ITS = 'apm-integration-testing'
- CYPRESS_DIR = 'x-pack/plugins/apm/e2e'
+ E2E_DIR = 'x-pack/plugins/apm/e2e'
PIPELINE_LOG_LEVEL = 'DEBUG'
}
options {
@@ -43,32 +42,6 @@ pipeline {
env.APM_UPDATED = isGitRegionMatch(patterns: regexps)
}
}
- dir("${APM_ITS}"){
- git changelog: false,
- credentialsId: 'f6c7695a-671e-4f4f-a331-acdce44ff9ba',
- poll: false,
- url: "git@github.com:elastic/${APM_ITS}.git"
- }
- }
- }
- stage('Start services') {
- options { skipDefaultCheckout() }
- when {
- anyOf {
- expression { return params.FORCE }
- expression { return env.APM_UPDATED != "false" }
- }
- }
- steps {
- notifyStatus('Starting services', 'PENDING')
- dir("${APM_ITS}"){
- sh './scripts/compose.py start master --no-kibana'
- }
- }
- post {
- unsuccessful {
- notifyStatus('Environmental issue', 'FAILURE')
- }
}
}
stage('Prepare Kibana') {
@@ -85,7 +58,7 @@ pipeline {
steps {
notifyStatus('Preparing kibana', 'PENDING')
dir("${BASE_DIR}"){
- sh script: "${CYPRESS_DIR}/ci/prepare-kibana.sh"
+ sh "${E2E_DIR}/ci/prepare-kibana.sh"
}
}
post {
@@ -105,24 +78,20 @@ pipeline {
steps{
notifyStatus('Running smoke tests', 'PENDING')
dir("${BASE_DIR}"){
- sh '''
- jobs -l
- docker build --tag cypress --build-arg NODE_VERSION=$(cat .node-version) ${CYPRESS_DIR}/ci
- docker run --rm -t --user "$(id -u):$(id -g)" \
- -v `pwd`:/app --network="host" \
- --name cypress cypress'''
+ sh "${E2E_DIR}/ci/run-e2e.sh"
}
}
post {
always {
- dir("${BASE_DIR}"){
- archiveArtifacts(allowEmptyArchive: false, artifacts: "${CYPRESS_DIR}/**/screenshots/**,${CYPRESS_DIR}/**/videos/**,${CYPRESS_DIR}/**/test-results/*e2e-tests.xml")
- junit(allowEmptyResults: true, testResults: "${CYPRESS_DIR}/**/test-results/*e2e-tests.xml")
- }
- dir("${APM_ITS}"){
- sh 'docker-compose logs > apm-its.log || true'
- sh 'docker-compose down -v || true'
- archiveArtifacts(allowEmptyArchive: false, artifacts: 'apm-its.log')
+ dir("${BASE_DIR}/${E2E_DIR}"){
+ archiveArtifacts(allowEmptyArchive: false, artifacts: 'cypress/screenshots/**,cypress/videos/**,cypress/test-results/*e2e-tests.xml')
+ junit(allowEmptyResults: true, testResults: 'cypress/test-results/*e2e-tests.xml')
+ dir('tmp/apm-integration-testing'){
+ sh 'docker-compose logs > apm-its-docker.log || true'
+ sh 'docker-compose down -v || true'
+ archiveArtifacts(allowEmptyArchive: true, artifacts: 'apm-its-docker.log')
+ }
+ archiveArtifacts(allowEmptyArchive: true, artifacts: 'tmp/*.log')
}
}
unsuccessful {
@@ -137,7 +106,7 @@ pipeline {
post {
always {
dir("${BASE_DIR}"){
- archiveArtifacts(allowEmptyArchive: true, artifacts: "${CYPRESS_DIR}/ingest-data.log,kibana.log")
+ archiveArtifacts(allowEmptyArchive: true, artifacts: "${E2E_DIR}/kibana.log")
}
}
}
diff --git a/.ci/es-snapshots/Jenkinsfile_verify_es b/.ci/es-snapshots/Jenkinsfile_verify_es
index c87ca01354315..a6fe980242afe 100644
--- a/.ci/es-snapshots/Jenkinsfile_verify_es
+++ b/.ci/es-snapshots/Jenkinsfile_verify_es
@@ -22,8 +22,8 @@ def SNAPSHOT_MANIFEST = "https://storage.googleapis.com/kibana-ci-es-snapshots-d
kibanaPipeline(timeoutMinutes: 150) {
catchErrors {
slackNotifications.onFailure(
- title: ":broken_heart: *<${env.BUILD_URL}|[${SNAPSHOT_VERSION}] ES Snapshot Verification Failure>*",
- message: ":broken_heart: [${SNAPSHOT_VERSION}] ES Snapshot Verification Failure",
+ title: "*<${env.BUILD_URL}|[${SNAPSHOT_VERSION}] ES Snapshot Verification Failure>*",
+ message: "[${SNAPSHOT_VERSION}] ES Snapshot Verification Failure",
) {
retryable.enable(2)
withEnv(["ES_SNAPSHOT_MANIFEST=${SNAPSHOT_MANIFEST}"]) {
diff --git a/.ci/packer_cache.sh b/.ci/packer_cache.sh
index ab68a60dcfc27..11f9ccaeddb1e 100755
--- a/.ci/packer_cache.sh
+++ b/.ci/packer_cache.sh
@@ -35,20 +35,20 @@ mkdir -p ".geckodriver"
cp "node_modules/geckodriver/geckodriver.tar.gz" .geckodriver/geckodriver.tar.gz
echo "$geckodriverPkgVersion" > .geckodriver/pkgVersion
+echo "Creating bootstrap_cache archive"
+
# archive cacheable directories
mkdir -p "$HOME/.kibana/bootstrap_cache"
tar -cf "$HOME/.kibana/bootstrap_cache/$branch.tar" \
- node_modules \
- packages/*/node_modules \
- x-pack/node_modules \
- x-pack/legacy/plugins/*/node_modules \
- x-pack/legacy/plugins/reporting/.chromium \
- test/plugin_functional/plugins/*/node_modules \
- examples/*/node_modules \
+ x-pack/plugins/reporting/.chromium \
.es \
.chromedriver \
.geckodriver;
+echo "Adding node_modules"
+# Find all of the node_modules directories that aren't test fixtures, and aren't inside other node_modules directories, and append them to the tar
+find . -type d -name node_modules -not -path '*__fixtures__*' -prune -print0 | xargs -0I % tar -rf "$HOME/.kibana/bootstrap_cache/$branch.tar" "%"
+
echo "created $HOME/.kibana/bootstrap_cache/$branch.tar"
if [ "$branch" == "master" ]; then
diff --git a/.eslintignore b/.eslintignore
index 362b3e42d48e5..fbdd70703f3c4 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -3,6 +3,7 @@
/.es
/build
/built_assets
+/config/apm.dev.js
/data
/html_docs
/optimize
@@ -25,7 +26,8 @@ target
/src/plugins/vis_type_timelion/public/_generated_/**
/src/plugins/vis_type_timelion/public/webpackShims/jquery.flot.*
/x-pack/legacy/plugins/**/__tests__/fixtures/**
-/x-pack/plugins/apm/e2e/cypress/**/snapshots.js
+/x-pack/plugins/apm/e2e/**/snapshots.js
+/x-pack/plugins/apm/e2e/tmp/*
/x-pack/plugins/canvas/canvas_plugin
/x-pack/plugins/canvas/canvas_plugin_src/lib/flot-charts
/x-pack/plugins/canvas/shareable_runtime/build
diff --git a/.eslintrc.js b/.eslintrc.js
index 86ac92de9042d..f0b7d6864bef0 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -50,7 +50,7 @@ const ELASTIC_LICENSE_HEADER = `
`;
const allMochaRulesOff = {};
-Object.keys(require('eslint-plugin-mocha').rules).forEach(k => {
+Object.keys(require('eslint-plugin-mocha').rules).forEach((k) => {
allMochaRulesOff['mocha/' + k] = 'off';
});
@@ -202,6 +202,11 @@ module.exports = {
from: ['(src|x-pack)/plugins/*/server/**/*'],
errorMessage: `Public code can not import from server, use a common directory.`,
},
+ {
+ target: ['(src|x-pack)/plugins/*/common/**/*'],
+ from: ['(src|x-pack)/plugins/*/(server|public)/**/*'],
+ errorMessage: `Common code can not import from server or public, use a common directory.`,
+ },
{
target: [
'(src|x-pack)/legacy/**/*',
@@ -220,7 +225,7 @@ module.exports = {
'!src/core/server/index.ts', // relative import
'!src/core/server/mocks{,.ts}',
'!src/core/server/types{,.ts}',
- '!src/core/server/test_utils',
+ '!src/core/server/test_utils{,.ts}',
// for absolute imports until fixed in
// https://github.com/elastic/kibana/issues/36096
'!src/core/server/*.test.mocks{,.ts}',
@@ -582,11 +587,11 @@ module.exports = {
},
/**
- * SIEM overrides
+ * Security Solution overrides
*/
{
// front end typescript and javascript files only
- files: ['x-pack/plugins/siem/public/**/*.{js,ts,tsx}'],
+ files: ['x-pack/plugins/security_solution/public/**/*.{js,ts,tsx}'],
rules: {
'import/no-nodejs-modules': 'error',
'no-restricted-imports': [
@@ -600,7 +605,7 @@ module.exports = {
},
{
// typescript only for front and back end
- files: ['x-pack/{,legacy/}plugins/siem/**/*.{ts,tsx}'],
+ files: ['x-pack/{,legacy/}plugins/security_solution/**/*.{ts,tsx}'],
rules: {
// This will be turned on after bug fixes are complete
// '@typescript-eslint/explicit-member-accessibility': 'warn',
@@ -635,7 +640,7 @@ module.exports = {
// {
// // will introduced after the other warns are fixed
// // typescript and javascript for front end react performance
- // files: ['x-pack/plugins/siem/public/**/!(*.test).{js,ts,tsx}'],
+ // files: ['x-pack/plugins/security_solution/public/**/!(*.test).{js,ts,tsx}'],
// plugins: ['react-perf'],
// rules: {
// // 'react-perf/jsx-no-new-object-as-prop': 'error',
@@ -646,7 +651,7 @@ module.exports = {
// },
{
// typescript and javascript for front and back end
- files: ['x-pack/{,legacy/}plugins/siem/**/*.{js,ts,tsx}'],
+ files: ['x-pack/{,legacy/}plugins/security_solution/**/*.{js,ts,tsx}'],
plugins: ['eslint-plugin-node', 'react'],
env: {
mocha: true,
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index a160094a54130..4716346277029 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -6,10 +6,7 @@
/x-pack/plugins/dashboard_enhanced/ @elastic/kibana-app
/x-pack/plugins/lens/ @elastic/kibana-app
/x-pack/plugins/graph/ @elastic/kibana-app
-/src/legacy/server/url_shortening/ @elastic/kibana-app
-/src/legacy/server/sample_data/ @elastic/kibana-app
/src/legacy/core_plugins/kibana/public/local_application_service/ @elastic/kibana-app
-/src/legacy/core_plugins/kibana/public/dev_tools/ @elastic/kibana-app
/src/plugins/dashboard/ @elastic/kibana-app
/src/plugins/discover/ @elastic/kibana-app
/src/plugins/input_control_vis/ @elastic/kibana-app
@@ -142,6 +139,8 @@
/config/kibana.yml @elastic/kibana-platform
/x-pack/plugins/features/ @elastic/kibana-platform
/x-pack/plugins/licensing/ @elastic/kibana-platform
+/x-pack/plugins/global_search/ @elastic/kibana-platform
+/x-pack/plugins/cloud/ @elastic/kibana-platform
/packages/kbn-config-schema/ @elastic/kibana-platform
/src/legacy/server/config/ @elastic/kibana-platform
/src/legacy/server/http/ @elastic/kibana-platform
@@ -157,7 +156,6 @@
/x-pack/legacy/plugins/security/ @elastic/kibana-security
/x-pack/legacy/plugins/spaces/ @elastic/kibana-security
/x-pack/plugins/spaces/ @elastic/kibana-security
-/x-pack/legacy/plugins/encrypted_saved_objects/ @elastic/kibana-security
/x-pack/plugins/encrypted_saved_objects/ @elastic/kibana-security
/x-pack/plugins/security/ @elastic/kibana-security
/x-pack/test/api_integration/apis/security/ @elastic/kibana-security
@@ -179,7 +177,7 @@
/x-pack/plugins/telemetry_collection_xpack/ @elastic/pulse
# Kibana Alerting Services
-/x-pack/plugins/alerting/ @elastic/kibana-alerting-services
+/x-pack/plugins/alerts/ @elastic/kibana-alerting-services
/x-pack/plugins/actions/ @elastic/kibana-alerting-services
/x-pack/plugins/event_log/ @elastic/kibana-alerting-services
/x-pack/plugins/task_manager/ @elastic/kibana-alerting-services
@@ -228,12 +226,12 @@
/x-pack/test/plugin_functional/plugins/resolver_test/ @elastic/endpoint-app-team @elastic/siem
/x-pack/test/plugin_functional/test_suites/resolver/ @elastic/endpoint-app-team @elastic/siem
-# SIEM
-/x-pack/plugins/siem/ @elastic/siem @elastic/endpoint-app-team
+# Security Solution
+/x-pack/plugins/security_solution/ @elastic/siem @elastic/endpoint-app-team
/x-pack/test/detection_engine_api_integration @elastic/siem @elastic/endpoint-app-team
-/x-pack/test/api_integration/apis/siem @elastic/siem @elastic/endpoint-app-team
+/x-pack/test/api_integration/apis/security_solution @elastic/siem @elastic/endpoint-app-team
/x-pack/plugins/case @elastic/siem @elastic/endpoint-app-team
/x-pack/plugins/lists @elastic/siem @elastic/endpoint-app-team
# Security Intelligence And Analytics
-/x-pack/plugins/siem/server/lib/detection_engine/rules/prepackaged_rules @elastic/security-intelligence-analytics
+/x-pack/plugins/security_solution/server/lib/detection_engine/rules/prepackaged_rules @elastic/security-intelligence-analytics
diff --git a/.gitignore b/.gitignore
index f843609d32f7e..b3911d0f8d0c2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -44,8 +44,8 @@ package-lock.json
*.sublime-*
npm-debug.log*
.tern-project
-x-pack/plugins/apm/tsconfig.json
-apm.tsconfig.json
-/x-pack/legacy/plugins/apm/e2e/snapshots.js
-/x-pack/plugins/apm/e2e/snapshots.js
.nyc_output
+
+# apm plugin
+/x-pack/plugins/apm/tsconfig.json
+apm.tsconfig.json
diff --git a/.node-version b/.node-version
index 5b7269c0a98f3..b61c07ffddbd1 100644
--- a/.node-version
+++ b/.node-version
@@ -1 +1 @@
-10.19.0
+10.21.0
diff --git a/.nvmrc b/.nvmrc
index 5b7269c0a98f3..b61c07ffddbd1 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-10.19.0
+10.21.0
diff --git a/.sass-lint.yml b/.sass-lint.yml
index db895583eb8a7..eb43af293c670 100644
--- a/.sass-lint.yml
+++ b/.sass-lint.yml
@@ -4,7 +4,6 @@ files:
- 'src/legacy/core_plugins/timelion/**/*.s+(a|c)ss'
- 'src/plugins/vis_type_vislib/**/*.s+(a|c)ss'
- 'src/plugins/vis_type_xy/**/*.s+(a|c)ss'
- - 'x-pack/legacy/plugins/security/**/*.s+(a|c)ss'
- 'x-pack/plugins/canvas/**/*.s+(a|c)ss'
- 'x-pack/plugins/triggers_actions_ui/**/*.s+(a|c)ss'
- 'x-pack/plugins/lens/**/*.s+(a|c)ss'
@@ -12,6 +11,7 @@ files:
- 'x-pack/legacy/plugins/maps/**/*.s+(a|c)ss'
- 'x-pack/plugins/maps/**/*.s+(a|c)ss'
- 'x-pack/plugins/spaces/**/*.s+(a|c)ss'
+ - 'x-pack/plugins/security/**/*.s+(a|c)ss'
ignore:
- 'x-pack/plugins/canvas/shareable_runtime/**/*.s+(a|c)ss'
rules:
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index a9a2f609e0913..4bf659345d387 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -13,26 +13,44 @@ A high level overview of our contributing guidelines.
- ["My issue isn't getting enough attention"](#my-issue-isnt-getting-enough-attention)
- ["I want to help!"](#i-want-to-help)
- [How We Use Git and GitHub](#how-we-use-git-and-github)
+ - [Forking](#forking)
- [Branching](#branching)
- [Commits and Merging](#commits-and-merging)
+ - [Rebasing and fixing merge conflicts](#rebasing-and-fixing-merge-conflicts)
- [What Goes Into a Pull Request](#what-goes-into-a-pull-request)
- [Contributing Code](#contributing-code)
- [Setting Up Your Development Environment](#setting-up-your-development-environment)
+ - [Increase node.js heap size](#increase-nodejs-heap-size)
+ - [Running Elasticsearch Locally](#running-elasticsearch-locally)
+ - [Nightly snapshot (recommended)](#nightly-snapshot-recommended)
+ - [Keeping data between snapshots](#keeping-data-between-snapshots)
+ - [Source](#source)
+ - [Archive](#archive)
+ - [Sample Data](#sample-data)
+ - [Running Elasticsearch Remotely](#running-elasticsearch-remotely)
+ - [Running remote clusters](#running-remote-clusters)
+ - [Running Kibana](#running-kibana)
+ - [Running Kibana in Open-Source mode](#running-kibana-in-open-source-mode)
+ - [Unsupported URL Type](#unsupported-url-type)
- [Customizing `config/kibana.dev.yml`](#customizing-configkibanadevyml)
+ - [Potential Optimization Pitfalls](#potential-optimization-pitfalls)
- [Setting Up SSL](#setting-up-ssl)
- [Linting](#linting)
+ - [Setup Guide for VS Code Users](#setup-guide-for-vs-code-users)
- [Internationalization](#internationalization)
- [Localization](#localization)
+ - [Styling with SASS](#styling-with-sass)
- [Testing and Building](#testing-and-building)
- [Debugging server code](#debugging-server-code)
- [Instrumenting with Elastic APM](#instrumenting-with-elastic-apm)
- - [Debugging Unit Tests](#debugging-unit-tests)
- - [Unit Testing Plugins](#unit-testing-plugins)
- - [Automated Accessibility Testing](#automated-accessibility-testing)
- - [Cross-browser compatibility](#cross-browser-compatibility)
- - [Testing compatibility locally](#testing-compatibility-locally)
- - [Running Browser Automation Tests](#running-browser-automation-tests)
- - [Browser Automation Notes](#browser-automation-notes)
+ - [Unit testing frameworks](#unit-testing-frameworks)
+ - [Running specific Kibana tests](#running-specific-kibana-tests)
+ - [Debugging Unit Tests](#debugging-unit-tests)
+ - [Unit Testing Plugins](#unit-testing-plugins)
+ - [Automated Accessibility Testing](#automated-accessibility-testing)
+ - [Cross-browser compatibility](#cross-browser-compatibility)
+ - [Testing compatibility locally](#testing-compatibility-locally)
+ - [Running Browser Automation Tests](#running-browser-automation-tests)
- [Building OS packages](#building-os-packages)
- [Writing documentation](#writing-documentation)
- [Release Notes Process](#release-notes-process)
@@ -414,7 +432,7 @@ extract them to a `JSON` file or integrate translations back to Kibana. To know
We cannot support accepting contributions to the translations from any source other than the translators we have engaged to do the work.
We are still to develop a proper process to accept any contributed translations. We certainly appreciate that people care enough about the localization effort to want to help improve the quality. We aim to build out a more comprehensive localization process for the future and will notify you once contributions can be supported, but for the time being, we are not able to incorporate suggestions.
-### Syling with SASS
+### Styling with SASS
When writing a new component, create a sibling SASS file of the same name and import directly into the JS/TS component file. Doing so ensures the styles are never separated or lost on import and allows for better modularization (smaller individual plugin asset footprint).
@@ -467,10 +485,10 @@ macOS users on a machine with a discrete graphics card may see significant speed
- Uncheck the "Prefer integrated to discrete GPU" option
- Restart iTerm
-### Debugging Server Code
+#### Debugging Server Code
`yarn debug` will start the server with Node's inspect flag. Kibana's development mode will start three processes on ports `9229`, `9230`, and `9231`. Chrome's developer tools need to be configured to connect to all three connections. Add `localhost:` for each Kibana process in Chrome's developer tools connection tab.
-### Instrumenting with Elastic APM
+#### Instrumenting with Elastic APM
Kibana ships with the [Elastic APM Node.js Agent](https://github.com/elastic/apm-agent-nodejs) built-in for debugging purposes.
Its default configuration is meant to be used by core Kibana developers only, but it can easily be re-configured to your needs.
@@ -490,16 +508,24 @@ module.exports = {
};
```
+APM [Real User Monitoring agent](https://www.elastic.co/guide/en/apm/agent/rum-js/current/index.html) is not available in the Kibana distributables,
+however the agent can be enabled by setting `ELASTIC_APM_ACTIVE` to `true`.
+flags
+```
+ELASTIC_APM_ACTIVE=true yarn start
+// activates both Node.js and RUM agent
+```
+
Once the agent is active, it will trace all incoming HTTP requests to Kibana, monitor for errors, and collect process-level metrics.
The collected data will be sent to the APM Server and is viewable in the APM UI in Kibana.
-### Unit testing frameworks
+#### Unit testing frameworks
Kibana is migrating unit testing from Mocha to Jest. Legacy unit tests still
exist in Mocha but all new unit tests should be written in Jest. Mocha tests
are contained in `__tests__` directories. Whereas Jest tests are stored in
the same directory as source code files with the `.test.js` suffix.
-### Running specific Kibana tests
+#### Running specific Kibana tests
The following table outlines possible test file locations and how to invoke them:
@@ -532,7 +558,7 @@ Test runner arguments:
yarn test:ftr:runner --config test/api_integration/config.js --grep='should return 404 if id does not match any sample data sets'
```
-### Debugging Unit Tests
+#### Debugging Unit Tests
The standard `yarn test` task runs several sub tasks and can take several minutes to complete, making debugging failures pretty painful. In order to ease the pain specialized tasks provide alternate methods for running the tests.
@@ -559,7 +585,7 @@ In the screenshot below, you'll notice the URL is `localhost:9876/debug.html`. Y
![Browser test debugging](http://i.imgur.com/DwHxgfq.png)
-### Unit Testing Plugins
+#### Unit Testing Plugins
This should work super if you're using the [Kibana plugin generator](https://github.com/elastic/kibana/tree/master/packages/kbn-plugin-generator). If you're not using the generator, well, you're on your own. We suggest you look at how the generator works.
@@ -570,7 +596,7 @@ yarn test:mocha
yarn test:karma:debug # remove the debug flag to run them once and close
```
-### Automated Accessibility Testing
+#### Automated Accessibility Testing
To run the tests locally:
@@ -587,11 +613,11 @@ can be run locally using their browser plugins:
- [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)
- [Firefox](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/)
-### Cross-browser Compatibility
+#### Cross-browser Compatibility
-#### Testing Compatibility Locally
+##### Testing Compatibility Locally
-##### Testing IE on OS X
+###### Testing IE on OS X
* [Download VMWare Fusion](http://www.vmware.com/products/fusion/fusion-evaluation.html).
* [Download IE virtual machines](https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/#downloads) for VMWare.
@@ -602,7 +628,7 @@ can be run locally using their browser plugins:
* Now you can run your VM, open the browser, and navigate to `http://computer.local:5601` to test Kibana.
* Alternatively you can use browserstack
-#### Running Browser Automation Tests
+##### Running Browser Automation Tests
[Read about the `FunctionalTestRunner`](https://www.elastic.co/guide/en/kibana/current/development-functional-tests.html) to learn more about how you can run and develop functional tests for Kibana core and plugins.
diff --git a/Gruntfile.js b/Gruntfile.js
index c33a576d4340f..0216ab12f7cc5 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -19,7 +19,7 @@
require('./src/setup_node_env');
-module.exports = function(grunt) {
+module.exports = function (grunt) {
// set the config once before calling load-grunt-config
// and once during so that we have access to it via
// grunt.config.get() within the config files
diff --git a/Jenkinsfile b/Jenkinsfile
index f435b18c6d824..11dca544f3226 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -41,9 +41,9 @@ kibanaPipeline(timeoutMinutes: 155, checkPrChanges: true) {
'xpack-ciGroup9': kibanaPipeline.xpackCiGroupProcess(9),
'xpack-ciGroup10': kibanaPipeline.xpackCiGroupProcess(10),
'xpack-accessibility': kibanaPipeline.functionalTestProcess('xpack-accessibility', './test/scripts/jenkins_xpack_accessibility.sh'),
- 'xpack-siemCypress': { processNumber ->
- whenChanged(['x-pack/plugins/siem/', 'x-pack/test/siem_cypress/']) {
- kibanaPipeline.functionalTestProcess('xpack-siemCypress', './test/scripts/jenkins_siem_cypress.sh')(processNumber)
+ 'xpack-securitySolutionCypress': { processNumber ->
+ whenChanged(['x-pack/plugins/security_solution/', 'x-pack/test/security_solution_cypress/']) {
+ kibanaPipeline.functionalTestProcess('xpack-securitySolutionCypress', './test/scripts/jenkins_security_solution_cypress.sh')(processNumber)
}
},
diff --git a/config/kibana.yml b/config/kibana.yml
index 8725888159506..72e0764f849a0 100644
--- a/config/kibana.yml
+++ b/config/kibana.yml
@@ -90,7 +90,7 @@
# Specifies the path where Kibana creates the process ID file.
#pid.file: /var/run/kibana.pid
-# Enables you specify a file where Kibana stores log output.
+# Enables you to specify a file where Kibana stores log output.
#logging.dest: stdout
# Set the value of this setting to true to suppress all logging output.
diff --git a/docs/api/saved-objects/bulk_get.asciidoc b/docs/api/saved-objects/bulk_get.asciidoc
index a6fdeb69ba925..eaf91a662849e 100644
--- a/docs/api/saved-objects/bulk_get.asciidoc
+++ b/docs/api/saved-objects/bulk_get.asciidoc
@@ -35,7 +35,7 @@ experimental[] Retrieve multiple {kib} saved objects by ID.
==== Response body
`saved_objects`::
- (array) Top-level property the contains objects that represent the response for each of the requested objects. The order of the objects in the response is identical to the order of the objects in the request.
+ (array) Top-level property containing objects that represent the response for each of the requested objects. The order of the objects in the response is identical to the order of the objects in the request.
Saved objects that are unable to persist are replaced with an error object.
diff --git a/docs/apm/advanced-queries.asciidoc b/docs/apm/advanced-queries.asciidoc
index f89f994e59e57..7b771eb662616 100644
--- a/docs/apm/advanced-queries.asciidoc
+++ b/docs/apm/advanced-queries.asciidoc
@@ -11,7 +11,7 @@ or, to only show transactions that are slower than a specified time threshold.
==== Example APM app queries
* Exclude response times slower than 2000 ms: `transaction.duration.us > 2000000`
-* Filter by response status code: `context.response.status_code >= 400`
+* Filter by response status code: `context.response.status_code ≥ 400`
* Filter by single user ID: `context.user.id : 12`
When querying in the APM app, you're merely searching and selecting data from fields in Elasticsearch documents.
diff --git a/docs/apm/api.asciidoc b/docs/apm/api.asciidoc
index 3e4b515e009de..7411f37d3c692 100644
--- a/docs/apm/api.asciidoc
+++ b/docs/apm/api.asciidoc
@@ -11,6 +11,12 @@ Some APM app features are provided via a REST API:
* <>
* <>
+[float]
+[[apm-api-example]]
+=== Using the APIs
+
+Users interacting with APM APIs must have <>.
+In addition, there are request headers to be aware of, like `kbn-xsrf: true`, and `Content-Type: applicaton/json`.
Here's an example CURL request that adds an annotation to the APM app:
[source,curl]
@@ -32,16 +38,8 @@ curl -X POST \
}'
----
-For more information, the Kibana <> provides information on how to use Kibana APIs,
-like required request headers and authentication options.
-
-// AGENT CONFIG API
-// GET --> Feature (APM) Read
-// CREATE/EDIT/DELETE --> Feature (APM) All
-
-// ANNOTATION API
-// Feature (APM) All
-// Index: `observability-annotations`. Privileges: `create_index`, `create_doc`, `manage`, and `read`.
+The Kibana <> provides additional information on how to use Kibana APIs,
+required request headers, and token-based authentication options.
////
*******************************************************
@@ -61,6 +59,8 @@ The following Agent configuration APIs are available:
* <> to list all Agent configurations.
* <> to search for an Agent configuration.
+See <> for information on the privileges required to use this API endpoint.
+
////
*******************************************************
////
@@ -327,6 +327,8 @@ The following APIs are available:
By default, annotations are stored in a newly created `observability-annotations` index.
The name of this index can be changed in your `config.yml` by editing `xpack.observability.annotations.index`.
+See <> for information on the privileges required to use this API endpoint.
+
////
*******************************************************
////
diff --git a/docs/apm/apm-app-users.asciidoc b/docs/apm/apm-app-users.asciidoc
new file mode 100644
index 0000000000000..442a07d279725
--- /dev/null
+++ b/docs/apm/apm-app-users.asciidoc
@@ -0,0 +1,256 @@
+[role="xpack"]
+[[apm-app-users]]
+== APM app users and privileges
+
+:beat_default_index_prefix: apm
+:beat_kib_app: APM app
+:annotation_index: `observability-annotations`
+
+++++
+Users and privileges
+++++
+
+You can use role-based access control to grant users access to secured
+resources. The roles that you set up depend on your organization's security
+requirements and the minimum privileges required to use specific features.
+
+{es-security-features} provides {ref}/built-in-roles.html[built-in roles] that grant a
+subset of the privileges needed by APM users.
+When possible, assign users the built-in roles to minimize the affect of future changes on your security strategy.
+If no built-in role is available, you can assign users the privileges needed to accomplish a specific task.
+In general, there are three types of privileges you'll work with:
+
+* **Elasticsearch cluster privileges**: Manage the actions a user can perform against your cluster.
+* **Elasticsearch index privileges**: Control access to the data in specific indices your cluster.
+* **Kibana space privileges**: Grant users write or read access to features and apps within Kibana.
+
+////
+*********************************** ***********************************
+////
+
+[role="xpack"]
+[[apm-app-reader]]
+=== APM reader user
+
+++++
+Create an APM reader user
+++++
+
+[[apm-app-reader-full]]
+==== Full APM reader
+
+APM reader users typically need to view the APM app, dashboards, and visualizations that contain APM data.
+These users might also need to create and edit dashboards, visualizations, and machine learning jobs.
+
+. Assign the following built-in roles:
++
+[options="header"]
+|====
+|Role | Purpose
+
+|`kibana_admin`
+|Grants access to all features in Kibana.
+
+|`apm_user`
+|Grants the privileges required for APM users on +{beat_default_index_prefix}*+ indices
+
+|`machine_learning_admin`
+|Grants the privileges required to create, update, and view machine learning jobs
+|====
+
+[[apm-app-reader-partial]]
+==== Partial APM reader
+
+In some instances, you may wish to restrict certain Kibana apps that a user has access to.
+
+. Assign the following built in roles:
++
+[options="header"]
+|====
+|Role | Purpose
+|`apm_user`
+|Grants the privileges required for APM users on +{beat_default_index_prefix}*+ indices
+|====
+
+. Assign space privileges to any Kibana space that the user needs access to.
+Here are two examples:
++
+[options="header"]
+|====
+|Type | Privilege | Purpose
+
+| Spaces
+| `Read` or `All` on the {beat_kib_app}
+| Allow the use of the the {beat_kib_app}
+
+| Spaces
+| `Read` or `All` on Dashboards, Visualize, and Discover
+| Allow the user to view, edit, and create dashboards, as well as browse data.
+|====
+
+. Finally, assign the following role if a user needs to enable and edit machine learning features:
++
+[options="header"]
+|====
+|Role | Purpose
+
+|`machine_learning_admin`
+|Grants the privileges required to create, update, and view machine learning jobs
+|====
+
+////
+*********************************** ***********************************
+////
+
+[role="xpack"]
+[[apm-app-central-config-user]]
+=== APM app central config user
+
+++++
+Create a central config user
+++++
+
+[[apm-app-central-config-manager]]
+==== Central configuration manager
+
+Central configuration users need to be able to view, create, update, and delete Agent configurations.
+
+. Assign the following built-in roles:
++
+[options="header"]
+|====
+|Role | Purpose
+
+|`apm_user`
+|Grants the privileges required for APM users on +{beat_default_index_prefix}*+ indices
+|====
+
+. Assign the following Kibana space privileges:
++
+[options="header"]
+|====
+|Type | Privilege | Purpose
+
+| Spaces
+|`All` on {beat_kib_app}
+|Allow full use of the {beat_kib_app}
+|====
+
+[[apm-app-central-config-reader]]
+==== Central configuration reader
+
+In some instances, you may wish to create a user that can only read central configurations,
+but not create, update, or delete them.
+
+. Assign the following built-in roles:
++
+[options="header"]
+|====
+|Role | Purpose
+|`apm_user`
+|Grants the privileges required for APM users on +{beat_default_index_prefix}*+ indices
+|====
+
+. Assign the following Kibana space privileges:
++
+[options="header"]
+|====
+|Type | Privilege | Purpose
+
+| Spaces
+|`read` on the {beat_kib_app}
+|Allow read access to the {beat_kib_app}
+|====
+
+[[apm-app-central-config-api]]
+==== Central configuration API
+
+See <>.
+
+////
+*********************************** ***********************************
+////
+
+[role="xpack"]
+[[apm-app-api-user]]
+=== APM app API user
+
+++++
+Create an API user
+++++
+
+[[apm-app-api-config-manager]]
+==== Central configuration API
+
+Users can list, search, create, update, and delete central configurations via the APM app API.
+
+. Assign the following Kibana space privileges:
++
+[options="header"]
+|====
+|Type | Privilege | Purpose
+
+| Spaces
+|`all` on the {beat_kib_app}
+|Allow all access to the {beat_kib_app}
+|====
+
+[[apm-app-api-config-reader]]
+==== Central configuration API reader
+
+Sometimes a user only needs to list and search central configurations via the APM app API.
+
+. Assign the following Kibana space privileges:
++
+[options="header"]
+|====
+|Type | Privilege | Purpose
+
+| Spaces
+|`read` on the {beat_kib_app}
+|Allow read access to the {beat_kib_app}
+|====
+
+[[apm-app-api-annotation-manager]]
+==== Annotation API
+
+Users can use the annotation API to create annotations on their APM data.
+
+. Create a new role, named something like `annotation_role`,
+and assign the following privileges:
++
+[options="header"]
+|====
+|Type | Privilege | Purpose
+
+|Index
+|`manage` on +{annotation_index}+ index
+|Check if the +{annotation_index}+ index exists
+
+|Index
+|`read` on +{annotation_index}+ index
+|Read the +{annotation_index}+ index
+
+|Index
+|`create_index` on +{annotation_index}+ index
+|Create the +{annotation_index}+ index
+
+|Index
+|`create_doc` on +{annotation_index}+ index
+|Create new annotations in the +{annotation_index}+ index
+|====
+
+. Assign the `annotation_role` created previously,
+and the following Kibana space privileges to any annotation API users:
++
+[options="header"]
+|====
+|Type | Privilege | Purpose
+
+| Spaces
+|`all` on the {beat_kib_app}
+|Allow all access to the {beat_kib_app}
+|====
+
+//LEARN MORE
+//Learn more about <>.
diff --git a/docs/apm/deployment-annotations.asciidoc b/docs/apm/deployment-annotations.asciidoc
index 9abcd9f6efc74..142b0c0193d74 100644
--- a/docs/apm/deployment-annotations.asciidoc
+++ b/docs/apm/deployment-annotations.asciidoc
@@ -7,13 +7,40 @@
++++
For enhanced visibility into your deployments, we offer deployment annotations on all transaction charts.
-This feature automatically tags new deployments, so you can easily see if your deploy has increased response times
-for an end-user, or if the memory/CPU footprint of your application has changed.
-Being able to identify bad deployments quickly enables you to rollback and fix issues without causing costly outages.
+This feature enables you to easily determine if your deployment has increased response times for an end-user,
+or if the memory/CPU footprint of your application has changed.
+Being able to quickly identify bad deployments enables you to rollback and fix issues without causing costly outages.
+
+By default, automatic deployment annotations are enabled.
+This means the APM app will create an annotation on your data when the `service.version` of your application changes.
+
+Alternatively, you can explicitly create deployment annotations with our annotation API.
+The API can integrate into your CI/CD pipeline,
+so that each time you deploy, a POST request is sent to the annotation API endpoint:
+
+[source,console]
+----
+curl -X POST \
+ http://localhost:5601/api/apm/services/${SERVICE_NAME}/annotation \ <1>
+-H 'Content-Type: application/json' \
+-H 'kbn-xsrf: true' \
+-H 'Authorization: Basic ${API_KEY}' \ <2>
+-d '{
+ "@timestamp": "${DEPLOY_TIME}", <3>
+ "service": {
+ "version": "${SERVICE_VERSION}" <4>
+ },
+ "message": "${MESSAGE}" <5>
+ }'
+----
+<1> The `service.name` of your application
+<2> An APM app API key with sufficient privileges
+<3> The time of the deployment
+<4> The `service.version` to be displayed in the annotation
+<5> A custom message to be displayed in the annotation
+
+See the <> reference for more information.
-Deployment annotations are enabled by default, and can be created with the <>.
-If there are no created annotations for the selected time period,
-the APM app will automatically annotate your data if the `service.version` of your application changes.
NOTE: If custom annotations have been created for the selected time period, any derived annotations, i.e., those created automatically when `service.version` changes, will not be shown.
diff --git a/docs/apm/index.asciidoc b/docs/apm/index.asciidoc
index 79190efccdff2..53ffee5e061d6 100644
--- a/docs/apm/index.asciidoc
+++ b/docs/apm/index.asciidoc
@@ -31,6 +31,8 @@ include::getting-started.asciidoc[]
include::how-to-guides.asciidoc[]
+include::apm-app-users.asciidoc[]
+
include::settings.asciidoc[]
include::api.asciidoc[]
diff --git a/docs/apm/service-maps.asciidoc b/docs/apm/service-maps.asciidoc
index 3a6a96fca9d09..db2f85c54c762 100644
--- a/docs/apm/service-maps.asciidoc
+++ b/docs/apm/service-maps.asciidoc
@@ -62,9 +62,9 @@ Machine learning jobs can be created to calculate anomaly scores on APM transact
When these jobs are active, service maps will display a color-coded anomaly indicator based on the detected anomaly score:
[horizontal]
-image:apm/images/green-service.png[APM green service]:: Max anomaly score **<=25**. Service is healthy.
+image:apm/images/green-service.png[APM green service]:: Max anomaly score **≤25**. Service is healthy.
image:apm/images/yellow-service.png[APM yellow service]:: Max anomaly score **26-74**. Anomalous activity detected. Service may be degraded.
-image:apm/images/red-service.png[APM red service]:: Max anomaly score **>=75**. Anomalous activity detected. Service is unhealthy.
+image:apm/images/red-service.png[APM red service]:: Max anomaly score **≥75**. Anomalous activity detected. Service is unhealthy.
[role="screenshot"]
image::apm/images/apm-service-map-anomaly.png[Example view of anomaly scores on service maps in the APM app]
@@ -92,10 +92,10 @@ Type and subtype are based on `span.type`, and `span.subtype`.
Service maps are supported for the following Agent versions:
[horizontal]
-Go Agent:: >= v1.7.0
-Java Agent:: >= v1.13.0
-.NET Agent:: >= v1.3.0
-Node.js Agent:: >= v3.6.0
-Python Agent:: >= v5.5.0
-Ruby Agent:: >= v3.6.0
-Real User Monitoring (RUM) Agent:: >= v4.7.0
+Go Agent:: ≥ v1.7.0
+Java Agent:: ≥ v1.13.0
+.NET Agent:: ≥ v1.3.0
+Node.js Agent:: ≥ v3.6.0
+Python Agent:: ≥ v5.5.0
+Ruby Agent:: ≥ v3.6.0
+Real User Monitoring (RUM) Agent:: ≥ v4.7.0
diff --git a/docs/canvas/canvas-elements.asciidoc b/docs/canvas/canvas-elements.asciidoc
index 4149039a3f87b..9c7467bb452fd 100644
--- a/docs/canvas/canvas-elements.asciidoc
+++ b/docs/canvas/canvas-elements.asciidoc
@@ -27,28 +27,30 @@ By default, most of the elements you create use demo data until you change the d
* *Timelion* — Access your time series data using <> queries. To use Timelion queries, you can enter a query using the <>.
+Each element can display a different data source. Pages and workpads often contain multiple data sources.
+
[float]
[[canvas-add-object]]
==== Add a saved object
-Add a <>, then customize it to fit your display needs.
+Add <> to your workpad, such as maps and visualizations.
-. Click *Embed object*.
+. Click *Add element > Add from Visualize Library*.
-. Select the object you want to add.
+. Select the saved object you want to add.
+
[role="screenshot"]
image::images/canvas-map-embed.gif[]
. To use the customization options, click the panel menu, then select one of the following options:
-* *Edit map* — Opens <> so that you can edit the original map.
+* *Edit map* — Opens <> or <> so that you can edit the original saved object.
-* *Customize panel* — Specifies the object title options.
+* *Edit panel title* — Adds a title to the saved object.
-* *Inspect* — Allows you to drill down into the element data.
+* *Customize time range* — Exposes a time filter dedicated to the saved object.
-* *Customize time range* — Exposes a time filter dedicated to the map.
+* *Inspect* — Allows you to drill down into the element data.
[float]
[[canvas-add-image]]
@@ -56,7 +58,7 @@ image::images/canvas-map-embed.gif[]
To personalize your workpad, add your own logos and graphics.
-. Click *Manage assets*.
+. Click *Add element > Manage assets*.
. On the *Manage workpad assets* window, drag and drop your images.
@@ -83,40 +85,25 @@ Move and resize your elements to meet your design needs.
[[format-canvas-elements]]
==== Format elements
-Align, distribute, and reorder elements for consistency and readability across your workpad pages.
-
-Access the align, distribute, and reorder options by clicking the *Element options* icon.
-
-[role="screenshot"]
-image::images/canvas_element_options.png[]
+For consistency and readability across your workpad pages, align, distribute, and reorder elements.
-To align elements:
+To align two or more elements:
. Press and hold Shift, then select the elements you want to align.
-. Click the , then select *Group*.
+. Click *Edit > Alignment*, then select the alignment option.
-. Click the *Element options* icon, then select *Alignment*.
-
-. Select the alignment option.
-
-To distribute elements:
+To distribute three or more elements:
. Press and hold Shift, then select the elements you want to distribute.
-. Click the *Element options* icon, then select *Group*.
-
-. Click the *Element options* icon, then select *Distribution*.
-
-. Select the distribution option.
+. Click *Edit > Distribution*, then select the distribution option.
To reorder elements:
. Select the element you want to reorder.
-. Click the *Element options* icon, then select *Order*.
-
-. Select the order option.
+. Click *Edit > Order*, then select the order option.
[float]
[[data-display]]
@@ -157,14 +144,14 @@ text.align: center;
To use the elements across all workpads, save the elements.
-When you're ready to save your element, select the element, then click the *Save as new element* icon.
+When you're ready to save your element, select the element, then click *Edit > Save as new element*.
[role="screenshot"]
image::images/canvas_save_element.png[]
-To save a group of elements, press and hold Shift, then select the elements you want to save.
+To save a group of elements, press and hold Shift, select the elements you want to save, then click *Edit > Save as new element*.
-To access your saved elements, click *Add element*, then select *My elements*.
+To access your saved elements, click *Add element > My elements*.
[float]
[[delete-elements]]
@@ -174,9 +161,7 @@ When you no longer need an element, delete it from your workpad.
. Select the element you want to delete.
-. Click the *Element options* icon.
+. Click *Edit > Delete*.
+
[role="screenshot"]
image::images/canvas_element_options.png[]
-
-. Select *Delete*.
diff --git a/docs/canvas/canvas-present-workpad.asciidoc b/docs/canvas/canvas-present-workpad.asciidoc
index 9cd4ecc9519e1..e0139ab943104 100644
--- a/docs/canvas/canvas-present-workpad.asciidoc
+++ b/docs/canvas/canvas-present-workpad.asciidoc
@@ -4,24 +4,20 @@
When you are ready to present your workpad, use and enable the presentation options.
-[float]
-[[view-fullscreen-mode]]
-==== View your workpad in fullscreen mode
+. Configure the autoplay options.
-Click the *Enter fullscreen mode* icon.
+.. From the workpad menu, click *View > Autoplay settings*.
+.. Under *Change cycling interval*, select the interval you want to use, or *Set a custom interval*.
++
[role="screenshot"]
-image::images/canvas-fullscreen.png[Fullscreen mode]
-
-[float]
-[[enable-autoplay]]
-==== Enable autoplay
+image::images/canvas-autoplay-interval.png[Element autoplay interval]
-Automatically cycle through your workpads pages in fullscreen mode.
+. To enable autoplay, click *View > Turn autoplay on*.
-. Click the *Control settings* icon.
-
-. Under *Change cycling interval*, select the interval you want to use.
+. To start your presentation, click *View > Enter fullscreen mode*.
+
[role="screenshot"]
-image::images/canvas-refresh-interval.png[Element data refresh interval]
+image::images/canvas-fullscreen.png[Fullscreen mode]
+
+. When you are ready to exit fullscreen mode, press the Esc (Escape) key.
diff --git a/docs/canvas/canvas-share-workpad.asciidoc b/docs/canvas/canvas-share-workpad.asciidoc
index 5cae3fcc7b531..a095253c6cff3 100644
--- a/docs/canvas/canvas-share-workpad.asciidoc
+++ b/docs/canvas/canvas-share-workpad.asciidoc
@@ -10,14 +10,12 @@ When you've finished your workpad, you can share it outside of {kib}.
Create a JSON file of your workpad that you can export outside of {kib}.
-. From your workpad, click the *Share workpad* icon.
+Click *Share > Download as JSON*.
-. Select *Download as JSON*.
-+
[role="screenshot"]
image::images/canvas-export-workpad.png[Export single workpad]
-Want to export multiple workpads? Go to the *Canvas workpads* view, select the workpads you want to export, then click *Export*.
+Want to export multiple workpads? Go to the *Canvas* home page, select the workpads you want to export, then click *Export*.
[float]
[[create-workpad-pdf]]
@@ -25,69 +23,43 @@ Want to export multiple workpads? Go to the *Canvas workpads* view, select the w
If you have a license that supports the {report-features}, you can create a PDF copy of your workpad that you can save and share outside {kib}.
-For more information, refer to <>.
-
-. From your workpad, click the *Share workpad* icon, then select *PDF reports*.
+Click *Share > PDF reports > Generate PDF*.
-. Click *Generate PDF*.
-+
[role="screenshot"]
image::images/canvas-generate-pdf.gif[Generate PDF]
+For more information, refer to <>.
+
[float]
[[create-workpad-URL]]
==== Create a POST URL
If you have a license that supports the {report-features}, you can create a POST URL that you can use to automatically generate PDF reports using Watcher or a script.
-For more information, refer to <>.
-
-. From your workpad, click the *Share workpad* icon, then select *PDF reports*.
+Click *Share > PDF reports > Copy POST URL*.
-. Click *Copy POST URL*.
-+
[role="screenshot"]
image::images/canvas-create-URL.gif[Create POST URL]
+For more information, refer to <>.
+
[float]
[[add-workpad-website]]
==== Share the workpad on a website
beta[] Canvas allows you to create _shareables_, which are workpads that you download and securely share on any website. To customize the behavior of the workpad on your website, you can choose to autoplay the pages or hide the workpad toolbar.
-. From your workpad, click the *Share this workpad* icon, then select *Share on a website*.
+. Click *Share > Share on a website*.
-. On the *Share on a website* pane, follow the instructions.
+. Follow the *Share on a website* instructions.
. To customize the workpad behavior to autoplay the pages or hide the toolbar, use the inline parameters.
+
To make sure that your data remains secure, the data in the JSON file is not connected to {kib}. Canvas does not display elements that manipulate the data on the workpad.
+
[role="screenshot"]
-image::images/canvas-embed_workpad.gif[Share the workpad on a website]
+image::canvas/images/canvas-embed_workpad.gif[Share the workpad on a website]
+
NOTE: Shareable workpads encode the current state of the workpad in a JSON file. When you make changes to the workpad, the changes do not appear in the shareable workpad on your website.
-[float]
-[[change-the-workpad-settings]]
-==== Change the settings
-
-After you've added the workpad to your website, you can change the autoplay and toolbar settings.
-
-To change the autoplay settings:
-
-. Click the settings icon.
-
-. Click *Auto Play*, then change the settings.
-+
-[role="screenshot"]
-image::images/canvas_share_autoplay_480.gif[Autoplay settings]
-
-To change the toolbar settings:
-
-. Click the settings icon.
-
-. Click *Toolbar*, then change the settings.
-+
-[role="screenshot"]
-image::images/canvas_share_hidetoolbar_480.gif[Hide toolbar settings]
+. To change the settings, click the settings icon, then choose the settings you want to use.
diff --git a/docs/canvas/canvas-tutorial.asciidoc b/docs/canvas/canvas-tutorial.asciidoc
index a38ab4a69598e..9b23817de2767 100644
--- a/docs/canvas/canvas-tutorial.asciidoc
+++ b/docs/canvas/canvas-tutorial.asciidoc
@@ -10,76 +10,64 @@ To get up and running with Canvas, use the following tutorial where you'll creat
For this tutorial, you'll need to add the <>.
[float]
-=== Create and personalize your workpad
+=== Create your workpad
Your first step to working with Canvas is to create a workpad.
-. Open *Canvas*.
+. Open the menu, then click *Kibana > Canvas*.
-. Click *Create workpad*.
-
-. To add a *Name* for your workpad, use the editor. For example, `My Canvas Workpad`.
+. On the *Canvas workpads* page, click *Create workpad*.
[float]
=== Customize your workpad with images
To customize your workpad to look the way you want, add your own images.
-. Click *Add element*, then click *Image*.
+. Click *Add element > Image > Image*.
+
-The default Elastic logo image appears on your page.
+The default Elastic logo image appears on the page.
. To replace the Elastic logo with your own image, select the image, then use the editor.
-. To move the image, click and drag it to your preferred location.
-
[role="screenshot"]
image::images/canvas-image-element.png[]
-You'll notice that the image is tagged as an asset, which allows you to reuse the image from *Manage assets*.
-
[float]
=== Customize your data with metrics
Customize your data by connecting it to the Sample eCommerce orders data.
-. Click *Add element*, then click *Metric*.
+. Click *Add element > Chart > Metric*.
+
-By default, the *Metric* element is connected to a demo data source, which enables you to experiment with the element before you connect it to your own data source.
-
-. To connect the element to your own data source, make sure that the element is selected, then click *Data*.
+By default, the element is connected to the demo data, which enables you to experiment with the element before you connect it to your own data source.
-.. Click *Change your data source*, then click *Elasticsearch SQL*.
+. To connect the element to your own data source, make sure that the element is selected, click *Data > Demo data > Elasticsearch SQL*.
-.. In the *Elasticsearch SQL query* field, enter the following query:
+.. In the *Query* field, enter the following:
+
`SELECT sum(taxless_total_price) AS sum_total_price FROM "kibana_sample_data_ecommerce"`
-+
-The query selects the total price field and sets it to the sum_total_price field. These fields are pulled from the kibana_sample_data_ecommerce index that you installed.
-.. To verify that the data is correct, click *Preview*. If you like what you see, click *Save*.
+.. Click *Save*.
+
-At this point, the element displays an error.
+The query selects the total price field and sets it to the sum_total_price field. All fields are pulled from the kibana_sample_data_ecommerce index.
-. Specify how to process and display the data.
+. At this point, the element appears as an error, so you need to change the element display options.
.. Click *Display*
-.. Under *Number*, select *Value* from the function drop-down list, then select *sum_total_price* from the column drop-down list.
+.. From the *Value* drop-down lists, make sure that *Unique* is selected, then select *sum_total_price*.
.. Change the *Label* to `Total sales`.
-+
-You'll notice that the error is gone, but the number could use some formatting.
-. To format the number, use the Canvas expression language.
+. The error is gone, but the element could use some formatting. To format the number, use the Canvas expression language.
.. Click *Expression editor*.
+
You're now looking at the raw data syntax that Canvas uses to display the element.
-.. Look for `math "sum_total_price"`, then add `| formatNumber "$0a"`.
+.. Change `metricFormat="0,0.[000]"` to `metricFormat="$0a"`.
-.. To update the number, click *Run*.
+.. Click *Run*.
[role="screenshot"]
image::images/canvas-metric-element.png[]
@@ -89,21 +77,17 @@ image::images/canvas-metric-element.png[]
To show what your data can do, add charts, graphs, progress monitors, and more to your workpad.
-. Click *Add element*, then click *Area chart*.
+. Click *Add element > Chart > Area*.
-. To connect the element to your own data source, make sure that the element is selected, then click *Data*.
+. Make sure that the element is selected, then click *Data > Demo data > Elasticsearch SQL*.
-.. Click *Change your data source*, then click *Elasticsearch SQL*.
-
-.. To obtain the taxless total price by date, enter the following into the *Elasticsearch SQL query* field:
+.. To obtain the taxless total price by date, enter the following in the *Query* field:
+
`SELECT order_date, taxless_total_price FROM "kibana_sample_data_ecommerce" ORDER BY order_date`
-+
-Although you used the Elasticsearch SQL data source for the metric and area chart elements, each element can display a different data source. Pages and workpads often contain multiple data sources.
-.. To verify that the data is correct, click *Preview*. If you like what you see, click *Save*.
+.. Click *Save*.
-. Specify how to display the data.
+. Change the display options.
.. Click *Display*
@@ -117,34 +101,20 @@ image::images/canvas-chart-element.png[]
[float]
=== Show how your data changes over time
-To focus your data on a specific time range, add a time filter to your workpad.
+To focus your data on a specific time range, add the time filter.
-. Click *Add element*, then click *Time filter*.
+. Click *Add element > Filter > Time filter*.
-. Specify how to display the data.
+. Click *Display*
-.. Click *Display*
-
-.. To use the date time field from the sample data, enter `order_date` in the *Column* field, then click *Set*.
+. To use the date time field from the sample data, enter `order_date` in the *Column* field, then click *Set*.
[role="screenshot"]
image::images/canvas-timefilter-element.png[]
-To see how the data changes, set the time filter to *Last 7 days*. As you change the time filter options, the metrics dynamically update.
-
-Your workpad is now complete! From the workpad menu, use the icons to:
-
-* Configure the refresh rate for your data
-
-* Refresh the data that displays on your workpad
-
-* Display your workpad in fullscreen mode
-
-* Control the zoom options
-
-* Share your workpad
+To see how the data changes, set the time filter to *Last 7 days*. As you change the time filter options, the elements automatically update.
-* Hide the editing controls
+Your workpad is now complete!
[float]
=== Next steps
diff --git a/docs/canvas/canvas-workpad.asciidoc b/docs/canvas/canvas-workpad.asciidoc
index 42eedf55c404d..ac2d348920114 100644
--- a/docs/canvas/canvas-workpad.asciidoc
+++ b/docs/canvas/canvas-workpad.asciidoc
@@ -20,9 +20,7 @@ To create a workpad, choose one of the following options:
To use the background colors, images, and data of your choice, start with a blank workpad.
-. Open *Canvas*.
-
-. On the *Canvas workpads* view, click *Create workpad*.
+. On the *Canvas workpads* page, click *Create workpad*.
. Add a *Name* to your workpad.
@@ -35,7 +33,7 @@ For example, click *720p* for a traditional presentation layout.
. Click the *Background color* picker, then select the background color for your workpad.
+
[role="screenshot"]
-image::images/canvas-background-color-picker.gif[Canvas color picker]
+image::images/canvas-background-color-picker.png[Canvas color picker]
[float]
[[canvas-template-workpad]]
@@ -43,9 +41,7 @@ image::images/canvas-background-color-picker.gif[Canvas color picker]
If you're unsure about where to start, you can use one of the preconfigured templates that come with Canvas.
-. Open *Canvas*.
-
-. On the *Canvas workpads* view, select *Templates*.
+. On the *Canvas workpads* page, select *Templates*.
. Click the preconfigured template that you want to use.
@@ -57,9 +53,7 @@ If you're unsure about where to start, you can use one of the preconfigured temp
When you want to use a workpad that someone else has already started, import the JSON file into Canvas.
-. Open *Canvas*.
-
-. On the *Canvas workpads* view, click and drag the file to the *Import workpad JSON file* field.
+To import a workpad, go to the *Canvas workpads* page, then click and drag the file to the *Import workpad JSON file* field.
[float]
[[sample-data-workpad]]
@@ -96,23 +90,27 @@ background-color: #3990e6;
[[configure-auto-refresh-interval]]
=== Change the auto-refresh interval
-Increase or decrease how often the data refreshes on your workpad.
+Change how often the data refreshes on your workpad.
-. In the top left corner, click the *Control settings* icon.
+. Click *View > Auto refresh settings*.
-. Under *Change auto-refresh interval*, select the interval you want to use.
+. Select the interval you want to use, or *Set a custom interval*.
+
[role="screenshot"]
image::images/canvas-refresh-interval.png[Element data refresh interval]
-
-TIP: To manually refresh the data, click the *Refresh data* icon.
++
+To manually refresh the data, click image:canvas/images/canvas-refresh-data.png[].
[float]
[[zoom-in-out]]
=== Use the zoom options
-In the upper left corner, click the *Zoom controls* icon, then select one of the options.
+To get a closer look at a portion of your workpad, use the zoom options.
+
+. Click *View > Zoom*.
+. Select the zoom option.
++
[role="screenshot"]
image::images/canvas-zoom-controls.png[Zoom controls]
diff --git a/docs/canvas/images/canvas-embed_workpad.gif b/docs/canvas/images/canvas-embed_workpad.gif
new file mode 100644
index 0000000000000..1cda5b572acef
Binary files /dev/null and b/docs/canvas/images/canvas-embed_workpad.gif differ
diff --git a/docs/canvas/images/canvas-refresh-data.png b/docs/canvas/images/canvas-refresh-data.png
new file mode 100644
index 0000000000000..7a71686f04491
Binary files /dev/null and b/docs/canvas/images/canvas-refresh-data.png differ
diff --git a/docs/development/core/public/kibana-plugin-core-public.appcategory.label.md b/docs/development/core/public/kibana-plugin-core-public.appcategory.label.md
index a7e92f310a62e..02c000e88f31d 100644
--- a/docs/development/core/public/kibana-plugin-core-public.appcategory.label.md
+++ b/docs/development/core/public/kibana-plugin-core-public.appcategory.label.md
@@ -4,7 +4,7 @@
## AppCategory.label property
-Label used for cateogry name. Also used as aria-label if one isn't set.
+Label used for category name. Also used as aria-label if one isn't set.
Signature:
diff --git a/docs/development/core/public/kibana-plugin-core-public.appcategory.md b/docs/development/core/public/kibana-plugin-core-public.appcategory.md
index d91727a1bbf29..b0ec377e165b6 100644
--- a/docs/development/core/public/kibana-plugin-core-public.appcategory.md
+++ b/docs/development/core/public/kibana-plugin-core-public.appcategory.md
@@ -19,6 +19,6 @@ export interface AppCategory
| [ariaLabel](./kibana-plugin-core-public.appcategory.arialabel.md) | string | If the visual label isn't appropriate for screen readers, can override it here |
| [euiIconType](./kibana-plugin-core-public.appcategory.euiicontype.md) | string | Define an icon to be used for the category If the category is only 1 item, and no icon is defined, will default to the product icon Defaults to initials if no icon is defined |
| [id](./kibana-plugin-core-public.appcategory.id.md) | string | Unique identifier for the categories |
-| [label](./kibana-plugin-core-public.appcategory.label.md) | string | Label used for cateogry name. Also used as aria-label if one isn't set. |
+| [label](./kibana-plugin-core-public.appcategory.label.md) | string | Label used for category name. Also used as aria-label if one isn't set. |
| [order](./kibana-plugin-core-public.appcategory.order.md) | number | The order that categories will be sorted in Prefer large steps between categories to allow for further editing (Default categories are in steps of 1000) |
diff --git a/docs/development/core/public/kibana-plugin-core-public.applicationstart.applications_.md b/docs/development/core/public/kibana-plugin-core-public.applicationstart.applications_.md
new file mode 100644
index 0000000000000..d428faa500faf
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.applicationstart.applications_.md
@@ -0,0 +1,18 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ApplicationStart](./kibana-plugin-core-public.applicationstart.md) > [applications$](./kibana-plugin-core-public.applicationstart.applications_.md)
+
+## ApplicationStart.applications$ property
+
+Observable emitting the list of currently registered apps and their associated status.
+
+Signature:
+
+```typescript
+applications$: Observable>;
+```
+
+## Remarks
+
+Applications disabled by [Capabilities](./kibana-plugin-core-public.capabilities.md) will not be present in the map. Applications manually disabled from the client-side using an [application updater](./kibana-plugin-core-public.appupdater.md) are present, with their status properly set as `inaccessible`.
+
diff --git a/docs/development/core/public/kibana-plugin-core-public.applicationstart.geturlforapp.md b/docs/development/core/public/kibana-plugin-core-public.applicationstart.geturlforapp.md
index f36351c8b8f06..055ad9f37e654 100644
--- a/docs/development/core/public/kibana-plugin-core-public.applicationstart.geturlforapp.md
+++ b/docs/development/core/public/kibana-plugin-core-public.applicationstart.geturlforapp.md
@@ -6,7 +6,7 @@
Returns an URL to a given app, including the global base path. By default, the URL is relative (/basePath/app/my-app). Use the `absolute` option to generate an absolute url (http://host:port/basePath/app/my-app)
-Note that when generating absolute urls, the protocol, host and port are determined from the browser location.
+Note that when generating absolute urls, the origin (protocol, host and port) are determined from the browser's location.
Signature:
diff --git a/docs/development/core/public/kibana-plugin-core-public.applicationstart.md b/docs/development/core/public/kibana-plugin-core-public.applicationstart.md
index a93bc61bac527..896de2de32dd5 100644
--- a/docs/development/core/public/kibana-plugin-core-public.applicationstart.md
+++ b/docs/development/core/public/kibana-plugin-core-public.applicationstart.md
@@ -15,6 +15,7 @@ export interface ApplicationStart
| Property | Type | Description |
| --- | --- | --- |
+| [applications$](./kibana-plugin-core-public.applicationstart.applications_.md) | Observable<ReadonlyMap<string, PublicAppInfo | PublicLegacyAppInfo>> | Observable emitting the list of currently registered apps and their associated status. |
| [capabilities](./kibana-plugin-core-public.applicationstart.capabilities.md) | RecursiveReadonly<Capabilities> | Gets the read-only capabilities. |
| [currentAppId$](./kibana-plugin-core-public.applicationstart.currentappid_.md) | Observable<string | undefined> | An observable that emits the current application id and each subsequent id update. |
@@ -22,7 +23,8 @@ export interface ApplicationStart
| Method | Description |
| --- | --- |
-| [getUrlForApp(appId, options)](./kibana-plugin-core-public.applicationstart.geturlforapp.md) | Returns an URL to a given app, including the global base path. By default, the URL is relative (/basePath/app/my-app). Use the absolute option to generate an absolute url (http://host:port/basePath/app/my-app)Note that when generating absolute urls, the protocol, host and port are determined from the browser location. |
+| [getUrlForApp(appId, options)](./kibana-plugin-core-public.applicationstart.geturlforapp.md) | Returns an URL to a given app, including the global base path. By default, the URL is relative (/basePath/app/my-app). Use the absolute option to generate an absolute url (http://host:port/basePath/app/my-app)Note that when generating absolute urls, the origin (protocol, host and port) are determined from the browser's location. |
| [navigateToApp(appId, options)](./kibana-plugin-core-public.applicationstart.navigatetoapp.md) | Navigate to a given app |
+| [navigateToUrl(url)](./kibana-plugin-core-public.applicationstart.navigatetourl.md) | Navigate to given url, which can either be an absolute url or a relative path, in a SPA friendly way when possible.If all these criteria are true for the given url: - (only for absolute URLs) The origin of the URL matches the origin of the browser's current location - The pathname of the URL starts with the current basePath (eg. /mybasepath/s/my-space) - The pathname segment after the basePath matches any known application route (eg. /app// or any application's appRoute configuration)Then a SPA navigation will be performed using navigateToApp using the corresponding application and path. Otherwise, fallback to a full page reload to navigate to the url using window.location.assign |
| [registerMountContext(contextName, provider)](./kibana-plugin-core-public.applicationstart.registermountcontext.md) | Register a context provider for application mounting. Will only be available to applications that depend on the plugin that registered this context. Deprecated, use [CoreSetup.getStartServices](./kibana-plugin-core-public.coresetup.getstartservices.md). |
diff --git a/docs/development/core/public/kibana-plugin-core-public.applicationstart.navigatetourl.md b/docs/development/core/public/kibana-plugin-core-public.applicationstart.navigatetourl.md
new file mode 100644
index 0000000000000..86b86776b0b12
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.applicationstart.navigatetourl.md
@@ -0,0 +1,45 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ApplicationStart](./kibana-plugin-core-public.applicationstart.md) > [navigateToUrl](./kibana-plugin-core-public.applicationstart.navigatetourl.md)
+
+## ApplicationStart.navigateToUrl() method
+
+Navigate to given url, which can either be an absolute url or a relative path, in a SPA friendly way when possible.
+
+If all these criteria are true for the given url: - (only for absolute URLs) The origin of the URL matches the origin of the browser's current location - The pathname of the URL starts with the current basePath (eg. /mybasepath/s/my-space) - The pathname segment after the basePath matches any known application route (eg. /app// or any application's `appRoute` configuration)
+
+Then a SPA navigation will be performed using `navigateToApp` using the corresponding application and path. Otherwise, fallback to a full page reload to navigate to the url using `window.location.assign`
+
+Signature:
+
+```typescript
+navigateToUrl(url: string): Promise;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| url | string | an absolute url, or a relative path, to navigate to. |
+
+Returns:
+
+`Promise`
+
+## Example
+
+
+```ts
+// current url: `https://kibana:8080/base-path/s/my-space/app/dashboard`
+
+// will call `application.navigateToApp('discover', { path: '/some-path?foo=bar'})`
+application.navigateToUrl('https://kibana:8080/base-path/s/my-space/app/discover/some-path?foo=bar')
+application.navigateToUrl('/base-path/s/my-space/app/discover/some-path?foo=bar')
+
+// will perform a full page reload using `window.location.assign`
+application.navigateToUrl('https://elsewhere:8080/base-path/s/my-space/app/discover/some-path') // origin does not match
+application.navigateToUrl('/app/discover/some-path') // does not include the current basePath
+application.navigateToUrl('/base-path/s/my-space/app/unknown-app/some-path') // unknown application
+
+```
+
diff --git a/docs/development/core/public/kibana-plugin-core-public.appmountparameters.onappleave.md b/docs/development/core/public/kibana-plugin-core-public.appmountparameters.onappleave.md
index 7f72d6a52fc2a..e898126a553e2 100644
--- a/docs/development/core/public/kibana-plugin-core-public.appmountparameters.onappleave.md
+++ b/docs/development/core/public/kibana-plugin-core-public.appmountparameters.onappleave.md
@@ -23,10 +23,10 @@ import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter, Route } from 'react-router-dom';
-import { CoreStart, AppMountParams } from 'src/core/public';
+import { CoreStart, AppMountParameters } from 'src/core/public';
import { MyPluginDepsStart } from './plugin';
-export renderApp = ({ element, history, onAppLeave }: AppMountParams) => {
+export renderApp = ({ element, history, onAppLeave }: AppMountParameters) => {
const { renderApp, hasUnsavedChanges } = await import('./application');
onAppLeave(actions => {
if(hasUnsavedChanges()) {
diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.euiicontype.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlink.euiicontype.md
index fe95cb38cd97c..e30e8262f40b2 100644
--- a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.euiicontype.md
+++ b/docs/development/core/public/kibana-plugin-core-public.chromenavlink.euiicontype.md
@@ -4,7 +4,7 @@
## ChromeNavLink.euiIconType property
-A EUI iconType that will be used for the app's icon. This icon takes precendence over the `icon` property.
+A EUI iconType that will be used for the app's icon. This icon takes precedence over the `icon` property.
Signature:
diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.href.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlink.href.md
new file mode 100644
index 0000000000000..a8af0c997ca78
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.chromenavlink.href.md
@@ -0,0 +1,13 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [ChromeNavLink](./kibana-plugin-core-public.chromenavlink.md) > [href](./kibana-plugin-core-public.chromenavlink.href.md)
+
+## ChromeNavLink.href property
+
+Settled state between `url`, `baseUrl`, and `active`
+
+Signature:
+
+```typescript
+readonly href?: string;
+```
diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlink.md
index a9fabb38df869..0349e865bff97 100644
--- a/docs/development/core/public/kibana-plugin-core-public.chromenavlink.md
+++ b/docs/development/core/public/kibana-plugin-core-public.chromenavlink.md
@@ -20,8 +20,9 @@ export interface ChromeNavLink
| [category](./kibana-plugin-core-public.chromenavlink.category.md) | AppCategory | The category the app lives in |
| [disabled](./kibana-plugin-core-public.chromenavlink.disabled.md) | boolean | Disables a link from being clickable. |
| [disableSubUrlTracking](./kibana-plugin-core-public.chromenavlink.disablesuburltracking.md) | boolean | A flag that tells legacy chrome to ignore the link when tracking sub-urls |
-| [euiIconType](./kibana-plugin-core-public.chromenavlink.euiicontype.md) | string | A EUI iconType that will be used for the app's icon. This icon takes precendence over the icon property. |
+| [euiIconType](./kibana-plugin-core-public.chromenavlink.euiicontype.md) | string | A EUI iconType that will be used for the app's icon. This icon takes precedence over the icon property. |
| [hidden](./kibana-plugin-core-public.chromenavlink.hidden.md) | boolean | Hides a link from the navigation. |
+| [href](./kibana-plugin-core-public.chromenavlink.href.md) | string | Settled state between url, baseUrl, and active |
| [icon](./kibana-plugin-core-public.chromenavlink.icon.md) | string | A URL to an image file used as an icon. Used as a fallback if euiIconType is not provided. |
| [id](./kibana-plugin-core-public.chromenavlink.id.md) | string | A unique identifier for looking up links. |
| [linkToLastSubUrl](./kibana-plugin-core-public.chromenavlink.linktolastsuburl.md) | boolean | Whether or not the subUrl feature should be enabled. |
diff --git a/docs/development/core/public/kibana-plugin-core-public.chromenavlinkupdateablefields.md b/docs/development/core/public/kibana-plugin-core-public.chromenavlinkupdateablefields.md
index 7f6dc7e0d5640..bd5a1399cded7 100644
--- a/docs/development/core/public/kibana-plugin-core-public.chromenavlinkupdateablefields.md
+++ b/docs/development/core/public/kibana-plugin-core-public.chromenavlinkupdateablefields.md
@@ -8,5 +8,5 @@
Signature:
```typescript
-export declare type ChromeNavLinkUpdateableFields = Partial>;
+export declare type ChromeNavLinkUpdateableFields = Partial>;
```
diff --git a/docs/development/core/public/kibana-plugin-core-public.legacyapp.appurl.md b/docs/development/core/public/kibana-plugin-core-public.legacyapp.appurl.md
new file mode 100644
index 0000000000000..292bf29962839
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.legacyapp.appurl.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [LegacyApp](./kibana-plugin-core-public.legacyapp.md) > [appUrl](./kibana-plugin-core-public.legacyapp.appurl.md)
+
+## LegacyApp.appUrl property
+
+Signature:
+
+```typescript
+appUrl: string;
+```
diff --git a/docs/development/core/public/kibana-plugin-core-public.legacyapp.disablesuburltracking.md b/docs/development/core/public/kibana-plugin-core-public.legacyapp.disablesuburltracking.md
new file mode 100644
index 0000000000000..af4d0eb7969d3
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.legacyapp.disablesuburltracking.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [LegacyApp](./kibana-plugin-core-public.legacyapp.md) > [disableSubUrlTracking](./kibana-plugin-core-public.legacyapp.disablesuburltracking.md)
+
+## LegacyApp.disableSubUrlTracking property
+
+Signature:
+
+```typescript
+disableSubUrlTracking?: boolean;
+```
diff --git a/docs/development/core/public/kibana-plugin-core-public.legacyapp.linktolastsuburl.md b/docs/development/core/public/kibana-plugin-core-public.legacyapp.linktolastsuburl.md
new file mode 100644
index 0000000000000..fa1314b74fd83
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.legacyapp.linktolastsuburl.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [LegacyApp](./kibana-plugin-core-public.legacyapp.md) > [linkToLastSubUrl](./kibana-plugin-core-public.legacyapp.linktolastsuburl.md)
+
+## LegacyApp.linkToLastSubUrl property
+
+Signature:
+
+```typescript
+linkToLastSubUrl?: boolean;
+```
diff --git a/docs/development/core/public/kibana-plugin-core-public.legacyapp.md b/docs/development/core/public/kibana-plugin-core-public.legacyapp.md
new file mode 100644
index 0000000000000..06533aaa99170
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.legacyapp.md
@@ -0,0 +1,22 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [LegacyApp](./kibana-plugin-core-public.legacyapp.md)
+
+## LegacyApp interface
+
+
+Signature:
+
+```typescript
+export interface LegacyApp extends AppBase
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [appUrl](./kibana-plugin-core-public.legacyapp.appurl.md) | string | |
+| [disableSubUrlTracking](./kibana-plugin-core-public.legacyapp.disablesuburltracking.md) | boolean | |
+| [linkToLastSubUrl](./kibana-plugin-core-public.legacyapp.linktolastsuburl.md) | boolean | |
+| [subUrlBase](./kibana-plugin-core-public.legacyapp.suburlbase.md) | string | |
+
diff --git a/docs/development/core/public/kibana-plugin-core-public.legacyapp.suburlbase.md b/docs/development/core/public/kibana-plugin-core-public.legacyapp.suburlbase.md
new file mode 100644
index 0000000000000..44a1e52ccd244
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.legacyapp.suburlbase.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [LegacyApp](./kibana-plugin-core-public.legacyapp.md) > [subUrlBase](./kibana-plugin-core-public.legacyapp.suburlbase.md)
+
+## LegacyApp.subUrlBase property
+
+Signature:
+
+```typescript
+subUrlBase?: string;
+```
diff --git a/docs/development/core/public/kibana-plugin-core-public.md b/docs/development/core/public/kibana-plugin-core-public.md
index b2524ec48c757..9e4afe0f5133c 100644
--- a/docs/development/core/public/kibana-plugin-core-public.md
+++ b/docs/development/core/public/kibana-plugin-core-public.md
@@ -90,6 +90,7 @@ The plugin integrates with the core system via lifecycle events: `setup`
| [IHttpResponseInterceptorOverrides](./kibana-plugin-core-public.ihttpresponseinterceptoroverrides.md) | Properties that can be returned by HttpInterceptor.request to override the response. |
| [ImageValidation](./kibana-plugin-core-public.imagevalidation.md) | |
| [IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) | Client-side client that provides access to the advanced settings stored in elasticsearch. The settings provide control over the behavior of the Kibana application. For example, a user can specify how to display numeric or date fields. Users can adjust the settings via Management UI. [IUiSettingsClient](./kibana-plugin-core-public.iuisettingsclient.md) |
+| [LegacyApp](./kibana-plugin-core-public.legacyapp.md) | |
| [LegacyCoreSetup](./kibana-plugin-core-public.legacycoresetup.md) | Setup interface exposed to the legacy platform via the ui/new_platform module. |
| [LegacyCoreStart](./kibana-plugin-core-public.legacycorestart.md) | Start interface exposed to the legacy platform via the ui/new_platform module. |
| [LegacyNavLink](./kibana-plugin-core-public.legacynavlink.md) | |
@@ -162,6 +163,8 @@ The plugin integrates with the core system via lifecycle events: `setup`
| [NavType](./kibana-plugin-core-public.navtype.md) | |
| [PluginInitializer](./kibana-plugin-core-public.plugininitializer.md) | The plugin export at the root of a plugin's public directory should conform to this interface. |
| [PluginOpaqueId](./kibana-plugin-core-public.pluginopaqueid.md) | |
+| [PublicAppInfo](./kibana-plugin-core-public.publicappinfo.md) | Public information about a registered [application](./kibana-plugin-core-public.app.md) |
+| [PublicLegacyAppInfo](./kibana-plugin-core-public.publiclegacyappinfo.md) | Information about a registered [legacy application](./kibana-plugin-core-public.legacyapp.md) |
| [PublicUiSettingsParams](./kibana-plugin-core-public.publicuisettingsparams.md) | A sub-set of [UiSettingsParams](./kibana-plugin-core-public.uisettingsparams.md) exposed to the client-side. |
| [RecursiveReadonly](./kibana-plugin-core-public.recursivereadonly.md) | |
| [SavedObjectAttribute](./kibana-plugin-core-public.savedobjectattribute.md) | Type definition for a Saved Object attribute value |
diff --git a/docs/development/core/public/kibana-plugin-core-public.publicappinfo.md b/docs/development/core/public/kibana-plugin-core-public.publicappinfo.md
new file mode 100644
index 0000000000000..c70f3a97a8882
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.publicappinfo.md
@@ -0,0 +1,15 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [PublicAppInfo](./kibana-plugin-core-public.publicappinfo.md)
+
+## PublicAppInfo type
+
+Public information about a registered [application](./kibana-plugin-core-public.app.md)
+
+Signature:
+
+```typescript
+export declare type PublicAppInfo = Omit & {
+ legacy: false;
+};
+```
diff --git a/docs/development/core/public/kibana-plugin-core-public.publiclegacyappinfo.md b/docs/development/core/public/kibana-plugin-core-public.publiclegacyappinfo.md
new file mode 100644
index 0000000000000..cc3e9de3193cb
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.publiclegacyappinfo.md
@@ -0,0 +1,15 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [PublicLegacyAppInfo](./kibana-plugin-core-public.publiclegacyappinfo.md)
+
+## PublicLegacyAppInfo type
+
+Information about a registered [legacy application](./kibana-plugin-core-public.legacyapp.md)
+
+Signature:
+
+```typescript
+export declare type PublicLegacyAppInfo = Omit & {
+ legacy: true;
+};
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.adminclient.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.adminclient.md
deleted file mode 100644
index 3fcb855586129..0000000000000
--- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.adminclient.md
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchServiceSetup](./kibana-plugin-core-server.elasticsearchservicesetup.md) > [adminClient](./kibana-plugin-core-server.elasticsearchservicesetup.adminclient.md)
-
-## ElasticsearchServiceSetup.adminClient property
-
-> Warning: This API is now obsolete.
->
-> Use [ElasticsearchServiceStart.legacy.client](./kibana-plugin-core-server.elasticsearchservicestart.legacy.md) instead.
->
-> A client for the `admin` cluster. All Elasticsearch config value changes are processed under the hood. See [IClusterClient](./kibana-plugin-core-server.iclusterclient.md).
->
-
-Signature:
-
-```typescript
-readonly adminClient: IClusterClient;
-```
-
-## Example
-
-
-```js
-const client = core.elasticsearch.adminClient;
-
-```
-
diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.createclient.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.createclient.md
deleted file mode 100644
index 75bf6c6aa461b..0000000000000
--- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.createclient.md
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchServiceSetup](./kibana-plugin-core-server.elasticsearchservicesetup.md) > [createClient](./kibana-plugin-core-server.elasticsearchservicesetup.createclient.md)
-
-## ElasticsearchServiceSetup.createClient property
-
-> Warning: This API is now obsolete.
->
-> Use [ElasticsearchServiceStart.legacy.createClient](./kibana-plugin-core-server.elasticsearchservicestart.legacy.md) instead.
->
-> Create application specific Elasticsearch cluster API client with customized config. See [IClusterClient](./kibana-plugin-core-server.iclusterclient.md).
->
-
-Signature:
-
-```typescript
-readonly createClient: (type: string, clientConfig?: Partial) => ICustomClusterClient;
-```
-
-## Example
-
-
-```js
-const client = elasticsearch.createCluster('my-app-name', config);
-const data = await client.callAsInternalUser();
-
-```
-
diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.dataclient.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.dataclient.md
deleted file mode 100644
index 867cafa957f42..0000000000000
--- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.dataclient.md
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchServiceSetup](./kibana-plugin-core-server.elasticsearchservicesetup.md) > [dataClient](./kibana-plugin-core-server.elasticsearchservicesetup.dataclient.md)
-
-## ElasticsearchServiceSetup.dataClient property
-
-> Warning: This API is now obsolete.
->
-> Use [ElasticsearchServiceStart.legacy.client](./kibana-plugin-core-server.elasticsearchservicestart.legacy.md) instead.
->
-> A client for the `data` cluster. All Elasticsearch config value changes are processed under the hood. See [IClusterClient](./kibana-plugin-core-server.iclusterclient.md).
->
-
-Signature:
-
-```typescript
-readonly dataClient: IClusterClient;
-```
-
-## Example
-
-
-```js
-const client = core.elasticsearch.dataClient;
-
-```
-
diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.legacy.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.legacy.md
new file mode 100644
index 0000000000000..e8c4c63dc6a96
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.legacy.md
@@ -0,0 +1,19 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [ElasticsearchServiceSetup](./kibana-plugin-core-server.elasticsearchservicesetup.md) > [legacy](./kibana-plugin-core-server.elasticsearchservicesetup.legacy.md)
+
+## ElasticsearchServiceSetup.legacy property
+
+> Warning: This API is now obsolete.
+>
+> Use [ElasticsearchServiceStart.legacy](./kibana-plugin-core-server.elasticsearchservicestart.legacy.md) instead.
+>
+
+Signature:
+
+```typescript
+legacy: {
+ readonly createClient: (type: string, clientConfig?: Partial) => ICustomClusterClient;
+ readonly client: IClusterClient;
+ };
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.md
index ee56f8b4a6284..c1e23527e9516 100644
--- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.md
+++ b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicesetup.md
@@ -15,7 +15,5 @@ export interface ElasticsearchServiceSetup
| Property | Type | Description |
| --- | --- | --- |
-| [adminClient](./kibana-plugin-core-server.elasticsearchservicesetup.adminclient.md) | IClusterClient | |
-| [createClient](./kibana-plugin-core-server.elasticsearchservicesetup.createclient.md) | (type: string, clientConfig?: Partial<ElasticsearchClientConfig>) => ICustomClusterClient | |
-| [dataClient](./kibana-plugin-core-server.elasticsearchservicesetup.dataclient.md) | IClusterClient | |
+| [legacy](./kibana-plugin-core-server.elasticsearchservicesetup.legacy.md) | { readonly createClient: (type: string, clientConfig?: Partial<ElasticsearchClientConfig>) => ICustomClusterClient; readonly client: IClusterClient; } | |
diff --git a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.legacy.md b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.legacy.md
index 08765aaf93d3d..667a36091f232 100644
--- a/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.legacy.md
+++ b/docs/development/core/server/kibana-plugin-core-server.elasticsearchservicestart.legacy.md
@@ -4,6 +4,11 @@
## ElasticsearchServiceStart.legacy property
+> Warning: This API is now obsolete.
+>
+> Provided for the backward compatibility. Switch to the new elasticsearch client as soon as https://github.com/elastic/kibana/issues/35508 done.
+>
+
Signature:
```typescript
diff --git a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registerroutehandlercontext.md b/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registerroutehandlercontext.md
index 8437f86d2d48e..8958b49d98b0c 100644
--- a/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registerroutehandlercontext.md
+++ b/docs/development/core/server/kibana-plugin-core-server.httpservicesetup.registerroutehandlercontext.md
@@ -21,7 +21,7 @@ registerRouteHandlerContext: (contextName
'myApp',
(context, req) => {
async function search (id: string) {
- return await context.elasticsearch.adminClient.callAsInternalUser('endpoint', id);
+ return await context.elasticsearch.legacy.client.callAsInternalUser('endpoint', id);
}
return { search };
}
diff --git a/docs/development/core/server/kibana-plugin-core-server.md b/docs/development/core/server/kibana-plugin-core-server.md
index 14e01fda3d287..147a72016b235 100644
--- a/docs/development/core/server/kibana-plugin-core-server.md
+++ b/docs/development/core/server/kibana-plugin-core-server.md
@@ -125,7 +125,7 @@ The plugin integrates with the core system via lifecycle events: `setup`
| [PluginConfigDescriptor](./kibana-plugin-core-server.pluginconfigdescriptor.md) | Describes a plugin configuration properties. |
| [PluginInitializerContext](./kibana-plugin-core-server.plugininitializercontext.md) | Context that's available to plugins during initialization stage. |
| [PluginManifest](./kibana-plugin-core-server.pluginmanifest.md) | Describes the set of required and optional properties plugin can define in its mandatory JSON manifest file. |
-| [RequestHandlerContext](./kibana-plugin-core-server.requesthandlercontext.md) | Plugin specific context passed to a route handler.Provides the following clients and services: - [savedObjects.client](./kibana-plugin-core-server.savedobjectsclient.md) - Saved Objects client which uses the credentials of the incoming request - [savedObjects.typeRegistry](./kibana-plugin-core-server.isavedobjecttyperegistry.md) - Type registry containing all the registered types. - [elasticsearch.dataClient](./kibana-plugin-core-server.scopedclusterclient.md) - Elasticsearch data client which uses the credentials of the incoming request - [elasticsearch.adminClient](./kibana-plugin-core-server.scopedclusterclient.md) - Elasticsearch admin client which uses the credentials of the incoming request - [uiSettings.client](./kibana-plugin-core-server.iuisettingsclient.md) - uiSettings client which uses the credentials of the incoming request |
+| [RequestHandlerContext](./kibana-plugin-core-server.requesthandlercontext.md) | Plugin specific context passed to a route handler.Provides the following clients and services: - [savedObjects.client](./kibana-plugin-core-server.savedobjectsclient.md) - Saved Objects client which uses the credentials of the incoming request - [savedObjects.typeRegistry](./kibana-plugin-core-server.isavedobjecttyperegistry.md) - Type registry containing all the registered types. - [elasticsearch.legacy.client](./kibana-plugin-core-server.scopedclusterclient.md) - Elasticsearch data client which uses the credentials of the incoming request - [uiSettings.client](./kibana-plugin-core-server.iuisettingsclient.md) - uiSettings client which uses the credentials of the incoming request |
| [RouteConfig](./kibana-plugin-core-server.routeconfig.md) | Route specific configuration. |
| [RouteConfigOptions](./kibana-plugin-core-server.routeconfigoptions.md) | Additional route options. |
| [RouteConfigOptionsBody](./kibana-plugin-core-server.routeconfigoptionsbody.md) | Additional body options for a route |
diff --git a/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.core.md b/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.core.md
index 0d640e52c3a03..7b887d6d421e4 100644
--- a/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.core.md
+++ b/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.core.md
@@ -13,8 +13,9 @@ core: {
typeRegistry: ISavedObjectTypeRegistry;
};
elasticsearch: {
- dataClient: IScopedClusterClient;
- adminClient: IScopedClusterClient;
+ legacy: {
+ client: IScopedClusterClient;
+ };
};
uiSettings: {
client: IUiSettingsClient;
diff --git a/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.md b/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.md
index 0966b91a4ebf2..99be0676bcda3 100644
--- a/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.md
+++ b/docs/development/core/server/kibana-plugin-core-server.requesthandlercontext.md
@@ -6,7 +6,7 @@
Plugin specific context passed to a route handler.
-Provides the following clients and services: - [savedObjects.client](./kibana-plugin-core-server.savedobjectsclient.md) - Saved Objects client which uses the credentials of the incoming request - [savedObjects.typeRegistry](./kibana-plugin-core-server.isavedobjecttyperegistry.md) - Type registry containing all the registered types. - [elasticsearch.dataClient](./kibana-plugin-core-server.scopedclusterclient.md) - Elasticsearch data client which uses the credentials of the incoming request - [elasticsearch.adminClient](./kibana-plugin-core-server.scopedclusterclient.md) - Elasticsearch admin client which uses the credentials of the incoming request - [uiSettings.client](./kibana-plugin-core-server.iuisettingsclient.md) - uiSettings client which uses the credentials of the incoming request
+Provides the following clients and services: - [savedObjects.client](./kibana-plugin-core-server.savedobjectsclient.md) - Saved Objects client which uses the credentials of the incoming request - [savedObjects.typeRegistry](./kibana-plugin-core-server.isavedobjecttyperegistry.md) - Type registry containing all the registered types. - [elasticsearch.legacy.client](./kibana-plugin-core-server.scopedclusterclient.md) - Elasticsearch data client which uses the credentials of the incoming request - [uiSettings.client](./kibana-plugin-core-server.iuisettingsclient.md) - uiSettings client which uses the credentials of the incoming request
Signature:
@@ -18,5 +18,5 @@ export interface RequestHandlerContext
| Property | Type | Description |
| --- | --- | --- |
-| [core](./kibana-plugin-core-server.requesthandlercontext.core.md) | { savedObjects: { client: SavedObjectsClientContract; typeRegistry: ISavedObjectTypeRegistry; }; elasticsearch: { dataClient: IScopedClusterClient; adminClient: IScopedClusterClient; }; uiSettings: { client: IUiSettingsClient; }; } | |
+| [core](./kibana-plugin-core-server.requesthandlercontext.core.md) | { savedObjects: { client: SavedObjectsClientContract; typeRegistry: ISavedObjectTypeRegistry; }; elasticsearch: { legacy: { client: IScopedClusterClient; }; }; uiSettings: { client: IUiSettingsClient; }; } | |
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.md
index a62cee7b654fe..1d3cfa9305c18 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.md
@@ -31,6 +31,7 @@ export declare class Field implements IFieldType
| [indexPattern](./kibana-plugin-plugins-data-public.indexpatternfield.indexpattern.md) | | IndexPattern | |
| [lang](./kibana-plugin-plugins-data-public.indexpatternfield.lang.md) | | string | |
| [name](./kibana-plugin-plugins-data-public.indexpatternfield.name.md) | | string | |
+| [readFromDocValues](./kibana-plugin-plugins-data-public.indexpatternfield.readfromdocvalues.md) | | boolean | |
| [script](./kibana-plugin-plugins-data-public.indexpatternfield.script.md) | | string | |
| [scripted](./kibana-plugin-plugins-data-public.indexpatternfield.scripted.md) | | boolean | |
| [searchable](./kibana-plugin-plugins-data-public.indexpatternfield.searchable.md) | | boolean | |
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.readfromdocvalues.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.readfromdocvalues.md
new file mode 100644
index 0000000000000..4b012c26a8620
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.readfromdocvalues.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternField](./kibana-plugin-plugins-data-public.indexpatternfield.md) > [readFromDocValues](./kibana-plugin-plugins-data-public.indexpatternfield.readfromdocvalues.md)
+
+## IndexPatternField.readFromDocValues property
+
+Signature:
+
+```typescript
+readFromDocValues?: boolean;
+```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.md
index 02cc34baf7c45..75d3abefc74b9 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.md
@@ -114,6 +114,7 @@
| [SearchBar](./kibana-plugin-plugins-data-public.searchbar.md) | |
| [SYNC\_SEARCH\_STRATEGY](./kibana-plugin-plugins-data-public.sync_search_strategy.md) | |
| [syncQueryStateWithUrl](./kibana-plugin-plugins-data-public.syncquerystatewithurl.md) | Helper to setup syncing of global data with the URL |
+| [UI\_SETTINGS](./kibana-plugin-plugins-data-public.ui_settings.md) | |
## Type Aliases
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.plugin._constructor_.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.plugin._constructor_.md
index 5ec2d491295bf..64108a7c7be33 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.plugin._constructor_.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.plugin._constructor_.md
@@ -9,12 +9,12 @@ Constructs a new instance of the `DataPublicPlugin` class
Signature:
```typescript
-constructor(initializerContext: PluginInitializerContext);
+constructor(initializerContext: PluginInitializerContext);
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
-| initializerContext | PluginInitializerContext | |
+| initializerContext | PluginInitializerContext<ConfigSchema> | |
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.plugin.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.plugin.md
index 6cbc1f441c048..0dad92a0a27ca 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.plugin.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.plugin.md
@@ -7,14 +7,14 @@
Signature:
```typescript
-export declare function plugin(initializerContext: PluginInitializerContext): DataPublicPlugin;
+export declare function plugin(initializerContext: PluginInitializerContext): DataPublicPlugin;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
-| initializerContext | PluginInitializerContext | |
+| initializerContext | PluginInitializerContext<ConfigSchema> | |
Returns:
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystringinput.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystringinput.md
index 58690300b3bd6..85eb4825bc2e3 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystringinput.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.querystringinput.md
@@ -7,5 +7,5 @@
Signature:
```typescript
-QueryStringInput: React.FC>
+QueryStringInput: React.FC>
```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchbar.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchbar.md
index b015ebfcbaada..fc141b8c89c18 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchbar.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.searchbar.md
@@ -7,7 +7,7 @@
Signature:
```typescript
-SearchBar: React.ComponentClass, "query" | "isLoading" | "filters" | "onRefresh" | "onRefreshChange" | "refreshInterval" | "indexPatterns" | "customSubmitButton" | "screenTitle" | "dataTestSubj" | "showQueryBar" | "showQueryInput" | "showFilterBar" | "showDatePicker" | "showAutoRefreshOnly" | "isRefreshPaused" | "dateRangeFrom" | "dateRangeTo" | "showSaveQuery" | "savedQuery" | "onQueryChange" | "onQuerySubmit" | "onSaved" | "onSavedQueryUpdated" | "onClearSavedQuery" | "timeHistory" | "onFiltersUpdated">, any> & {
- WrappedComponent: React.ComponentType & ReactIntl.InjectedIntlProps>;
+SearchBar: React.ComponentClass, "query" | "isLoading" | "filters" | "onRefresh" | "onRefreshChange" | "refreshInterval" | "indexPatterns" | "dataTestSubj" | "customSubmitButton" | "screenTitle" | "showQueryBar" | "showQueryInput" | "showFilterBar" | "showDatePicker" | "showAutoRefreshOnly" | "isRefreshPaused" | "dateRangeFrom" | "dateRangeTo" | "showSaveQuery" | "savedQuery" | "onQueryChange" | "onQuerySubmit" | "onSaved" | "onSavedQueryUpdated" | "onClearSavedQuery" | "timeHistory" | "onFiltersUpdated">, any> & {
+ WrappedComponent: React.ComponentType & ReactIntl.InjectedIntlProps>;
}
```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.ui_settings.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.ui_settings.md
new file mode 100644
index 0000000000000..a48f4920b3d26
--- /dev/null
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.ui_settings.md
@@ -0,0 +1,39 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [UI\_SETTINGS](./kibana-plugin-plugins-data-public.ui_settings.md)
+
+## UI\_SETTINGS variable
+
+Signature:
+
+```typescript
+UI_SETTINGS: {
+ META_FIELDS: string;
+ DOC_HIGHLIGHT: string;
+ QUERY_STRING_OPTIONS: string;
+ QUERY_ALLOW_LEADING_WILDCARDS: string;
+ SEARCH_QUERY_LANGUAGE: string;
+ SORT_OPTIONS: string;
+ COURIER_IGNORE_FILTER_IF_FIELD_NOT_IN_INDEX: string;
+ COURIER_SET_REQUEST_PREFERENCE: string;
+ COURIER_CUSTOM_REQUEST_PREFERENCE: string;
+ COURIER_MAX_CONCURRENT_SHARD_REQUESTS: string;
+ COURIER_BATCH_SEARCHES: string;
+ SEARCH_INCLUDE_FROZEN: string;
+ HISTOGRAM_BAR_TARGET: string;
+ HISTOGRAM_MAX_BARS: string;
+ HISTORY_LIMIT: string;
+ SHORT_DOTS_ENABLE: string;
+ FORMAT_DEFAULT_TYPE_MAP: string;
+ FORMAT_NUMBER_DEFAULT_PATTERN: string;
+ FORMAT_PERCENT_DEFAULT_PATTERN: string;
+ FORMAT_BYTES_DEFAULT_PATTERN: string;
+ FORMAT_CURRENCY_DEFAULT_PATTERN: string;
+ FORMAT_NUMBER_DEFAULT_LOCALE: string;
+ TIMEPICKER_REFRESH_INTERVAL_DEFAULTS: string;
+ TIMEPICKER_QUICK_RANGES: string;
+ INDEXPATTERN_PLACEHOLDER: string;
+ FILTERS_PINNED_BY_DEFAULT: string;
+ FILTERS_EDITOR_SUGGEST_VALUES: string;
+}
+```
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.config.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.config.md
new file mode 100644
index 0000000000000..49b5f6040fc84
--- /dev/null
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.config.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [config](./kibana-plugin-plugins-data-server.config.md)
+
+## config variable
+
+Signature:
+
+```typescript
+config: PluginConfigDescriptor
+```
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md
index e756eb9b72905..0efbe8ed4ed64 100644
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.md
@@ -55,12 +55,14 @@
| Variable | Description |
| --- | --- |
| [castEsToKbnFieldTypeName](./kibana-plugin-plugins-data-server.castestokbnfieldtypename.md) | Get the KbnFieldType name for an esType string |
+| [config](./kibana-plugin-plugins-data-server.config.md) | |
| [esFilters](./kibana-plugin-plugins-data-server.esfilters.md) | |
| [esKuery](./kibana-plugin-plugins-data-server.eskuery.md) | |
| [esQuery](./kibana-plugin-plugins-data-server.esquery.md) | |
| [fieldFormats](./kibana-plugin-plugins-data-server.fieldformats.md) | |
| [indexPatterns](./kibana-plugin-plugins-data-server.indexpatterns.md) | |
| [search](./kibana-plugin-plugins-data-server.search.md) | |
+| [UI\_SETTINGS](./kibana-plugin-plugins-data-server.ui_settings.md) | |
## Type Aliases
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.plugin._constructor_.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.plugin._constructor_.md
index 454d8a059a252..4a0a159310b9d 100644
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.plugin._constructor_.md
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.plugin._constructor_.md
@@ -9,12 +9,12 @@ Constructs a new instance of the `DataServerPlugin` class
Signature:
```typescript
-constructor(initializerContext: PluginInitializerContext);
+constructor(initializerContext: PluginInitializerContext);
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
-| initializerContext | PluginInitializerContext | |
+| initializerContext | PluginInitializerContext<ConfigSchema> | |
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.plugin.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.plugin.md
index b3ba75ce29ab6..1773871d946a2 100644
--- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.plugin.md
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.plugin.md
@@ -9,14 +9,14 @@ Static code to be shared externally
Signature:
```typescript
-export declare function plugin(initializerContext: PluginInitializerContext): DataServerPlugin;
+export declare function plugin(initializerContext: PluginInitializerContext): DataServerPlugin;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
-| initializerContext | PluginInitializerContext | |
+| initializerContext | PluginInitializerContext<ConfigSchema> | |
Returns:
diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.ui_settings.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.ui_settings.md
new file mode 100644
index 0000000000000..855cfd11d00ea
--- /dev/null
+++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.ui_settings.md
@@ -0,0 +1,39 @@
+
+
+[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [UI\_SETTINGS](./kibana-plugin-plugins-data-server.ui_settings.md)
+
+## UI\_SETTINGS variable
+
+Signature:
+
+```typescript
+UI_SETTINGS: {
+ META_FIELDS: string;
+ DOC_HIGHLIGHT: string;
+ QUERY_STRING_OPTIONS: string;
+ QUERY_ALLOW_LEADING_WILDCARDS: string;
+ SEARCH_QUERY_LANGUAGE: string;
+ SORT_OPTIONS: string;
+ COURIER_IGNORE_FILTER_IF_FIELD_NOT_IN_INDEX: string;
+ COURIER_SET_REQUEST_PREFERENCE: string;
+ COURIER_CUSTOM_REQUEST_PREFERENCE: string;
+ COURIER_MAX_CONCURRENT_SHARD_REQUESTS: string;
+ COURIER_BATCH_SEARCHES: string;
+ SEARCH_INCLUDE_FROZEN: string;
+ HISTOGRAM_BAR_TARGET: string;
+ HISTOGRAM_MAX_BARS: string;
+ HISTORY_LIMIT: string;
+ SHORT_DOTS_ENABLE: string;
+ FORMAT_DEFAULT_TYPE_MAP: string;
+ FORMAT_NUMBER_DEFAULT_PATTERN: string;
+ FORMAT_PERCENT_DEFAULT_PATTERN: string;
+ FORMAT_BYTES_DEFAULT_PATTERN: string;
+ FORMAT_CURRENCY_DEFAULT_PATTERN: string;
+ FORMAT_NUMBER_DEFAULT_LOCALE: string;
+ TIMEPICKER_REFRESH_INTERVAL_DEFAULTS: string;
+ TIMEPICKER_QUICK_RANGES: string;
+ INDEXPATTERN_PLACEHOLDER: string;
+ FILTERS_PINNED_BY_DEFAULT: string;
+ FILTERS_EDITOR_SUGGEST_VALUES: string;
+}
+```
diff --git a/docs/images/canvas-add-image.gif b/docs/images/canvas-add-image.gif
index a2263e22c4c49..994ec6e1b4f28 100644
Binary files a/docs/images/canvas-add-image.gif and b/docs/images/canvas-add-image.gif differ
diff --git a/docs/images/canvas-add-pages.gif b/docs/images/canvas-add-pages.gif
index a1fa228645836..c6e09d6f386ae 100644
Binary files a/docs/images/canvas-add-pages.gif and b/docs/images/canvas-add-pages.gif differ
diff --git a/docs/images/canvas-autoplay-interval.png b/docs/images/canvas-autoplay-interval.png
new file mode 100644
index 0000000000000..68a7ca248d9ee
Binary files /dev/null and b/docs/images/canvas-autoplay-interval.png differ
diff --git a/docs/images/canvas-background-color-picker.png b/docs/images/canvas-background-color-picker.png
new file mode 100644
index 0000000000000..ec38b5c1c5f7e
Binary files /dev/null and b/docs/images/canvas-background-color-picker.png differ
diff --git a/docs/images/canvas-chart-element.png b/docs/images/canvas-chart-element.png
index d0aa7db375a40..bf5e04bf89af5 100644
Binary files a/docs/images/canvas-chart-element.png and b/docs/images/canvas-chart-element.png differ
diff --git a/docs/images/canvas-create-URL.gif b/docs/images/canvas-create-URL.gif
index 0c9fbf7201d80..11327224fc897 100644
Binary files a/docs/images/canvas-create-URL.gif and b/docs/images/canvas-create-URL.gif differ
diff --git a/docs/images/canvas-element-select.gif b/docs/images/canvas-element-select.gif
index bd0e49377262e..1bfd1132f25c7 100644
Binary files a/docs/images/canvas-element-select.gif and b/docs/images/canvas-element-select.gif differ
diff --git a/docs/images/canvas-export-workpad.png b/docs/images/canvas-export-workpad.png
index fa910daf948d7..213bbaa5a26d3 100644
Binary files a/docs/images/canvas-export-workpad.png and b/docs/images/canvas-export-workpad.png differ
diff --git a/docs/images/canvas-fullscreen.png b/docs/images/canvas-fullscreen.png
index 7e6ec6ad7e7a8..b8a816d290396 100644
Binary files a/docs/images/canvas-fullscreen.png and b/docs/images/canvas-fullscreen.png differ
diff --git a/docs/images/canvas-generate-pdf.gif b/docs/images/canvas-generate-pdf.gif
index 9ef16dc1e5017..513f6b3b960f9 100644
Binary files a/docs/images/canvas-generate-pdf.gif and b/docs/images/canvas-generate-pdf.gif differ
diff --git a/docs/images/canvas-image-element.png b/docs/images/canvas-image-element.png
index f869ccb344a46..13c9090e77c76 100644
Binary files a/docs/images/canvas-image-element.png and b/docs/images/canvas-image-element.png differ
diff --git a/docs/images/canvas-map-embed.gif b/docs/images/canvas-map-embed.gif
index 59ef97e0ceae8..c6ba5c29df42a 100644
Binary files a/docs/images/canvas-map-embed.gif and b/docs/images/canvas-map-embed.gif differ
diff --git a/docs/images/canvas-metric-element.png b/docs/images/canvas-metric-element.png
index d9735a2fb3e91..03871dcc81862 100644
Binary files a/docs/images/canvas-metric-element.png and b/docs/images/canvas-metric-element.png differ
diff --git a/docs/images/canvas-refresh-interval.png b/docs/images/canvas-refresh-interval.png
index 99006a5b8f12d..62e88ad4bf7d0 100644
Binary files a/docs/images/canvas-refresh-interval.png and b/docs/images/canvas-refresh-interval.png differ
diff --git a/docs/images/canvas-timefilter-element.png b/docs/images/canvas-timefilter-element.png
index 8b8356ff5f7ea..e210b0b3288c6 100644
Binary files a/docs/images/canvas-timefilter-element.png and b/docs/images/canvas-timefilter-element.png differ
diff --git a/docs/images/canvas-zoom-controls.png b/docs/images/canvas-zoom-controls.png
index 892721b627027..5c72d118041e4 100644
Binary files a/docs/images/canvas-zoom-controls.png and b/docs/images/canvas-zoom-controls.png differ
diff --git a/docs/images/canvas_element_options.png b/docs/images/canvas_element_options.png
index 191348d919b50..41457bab4ff36 100644
Binary files a/docs/images/canvas_element_options.png and b/docs/images/canvas_element_options.png differ
diff --git a/docs/images/canvas_save_element.png b/docs/images/canvas_save_element.png
index a63f5135f2a0e..8a601efab874a 100644
Binary files a/docs/images/canvas_save_element.png and b/docs/images/canvas_save_element.png differ
diff --git a/docs/images/lens_viz_types.png b/docs/images/lens_viz_types.png
new file mode 100644
index 0000000000000..fb3961ad8bb28
Binary files /dev/null and b/docs/images/lens_viz_types.png differ
diff --git a/docs/images/management-create-rollup-bar-chart.png b/docs/images/management-create-rollup-bar-chart.png
new file mode 100644
index 0000000000000..324cfcb9ee5fb
Binary files /dev/null and b/docs/images/management-create-rollup-bar-chart.png differ
diff --git a/docs/images/management-rollup-index-pattern.png b/docs/images/management-rollup-index-pattern.png
new file mode 100644
index 0000000000000..57ac00be7977c
Binary files /dev/null and b/docs/images/management-rollup-index-pattern.png differ
diff --git a/docs/index.asciidoc b/docs/index.asciidoc
index 5474772ab7da8..add91600a34ea 100644
--- a/docs/index.asciidoc
+++ b/docs/index.asciidoc
@@ -3,11 +3,11 @@
:include-xpack: true
:lang: en
-:kib-repo-dir: {docdir}
+:kib-repo-dir: {kibana-root}/docs
:blog-ref: https://www.elastic.co/blog/
:wikipedia: https://en.wikipedia.org/wiki
-include::{asciidoc-dir}/../../shared/versions/stack/{source_branch}.asciidoc[]
+include::{docs-root}/shared/versions/stack/{source_branch}.asciidoc[]
:docker-repo: docker.elastic.co/kibana/kibana
:docker-image: docker.elastic.co/kibana/kibana:{version}
@@ -18,7 +18,7 @@ include::{asciidoc-dir}/../../shared/versions/stack/{source_branch}.asciidoc[]
:blob: {repo}blob/{branch}/
:security-ref: https://www.elastic.co/community/security/
-include::{asciidoc-dir}/../../shared/attributes.asciidoc[]
+include::{docs-root}/shared/attributes.asciidoc[]
include::user/index.asciidoc[]
diff --git a/docs/infrastructure/infra-ui.asciidoc b/docs/infrastructure/infra-ui.asciidoc
index 120a22541717c..96550b4ed5758 100644
--- a/docs/infrastructure/infra-ui.asciidoc
+++ b/docs/infrastructure/infra-ui.asciidoc
@@ -109,5 +109,5 @@ Depending on the features you have installed and configured, you may also be abl
* Select *View APM* to <> in the *APM* app.
-* Select *View Uptime* to <> in the *Uptime* app.
+* Select *View Uptime* to {uptime-guide}/uptime-app-overview.html[view uptime information] in the *Uptime* app.
diff --git a/docs/ingest_manager/index.asciidoc b/docs/ingest_manager/index.asciidoc
index 866935d1fa580..1728309f3dfd9 100644
--- a/docs/ingest_manager/index.asciidoc
+++ b/docs/ingest_manager/index.asciidoc
@@ -110,12 +110,12 @@ fetched by this input should be processed and which Data Stream to send it to.
Ingest Management enforces an indexing strategy to allow the system to automatically detect indices and run queries on it. In short the indexing strategy looks as following:
```
-{type}-{dataset}-{namespace}
+{dataset.type}-{dataset.name}-{dataset.namespace}
```
-The `{type}` can be `logs` or `metrics`. The `{namespace}` is the part where the user can use free form. The only two requirement are that it has only characters allowed in an Elasticsearch index name and does NOT contain a `-`. The `dataset` is defined by the data that is indexed. The same requirements as for the namespace apply. It is expected that the fields for type, namespace and dataset are part of each event and are constant keywords. If there is a dataset or a namespace with a `-` inside, it is recommended to replace it either by a `.` or a `_`.
+The `{dataset.type}` can be `logs` or `metrics`. The `{dataset.namespace}` is the part where the user can use free form. The only two requirement are that it has only characters allowed in an Elasticsearch index name and does NOT contain a `-`. The `dataset` is defined by the data that is indexed. The same requirements as for the namespace apply. It is expected that the fields for type, namespace and dataset are part of each event and are constant keywords. If there is a dataset or a namespace with a `-` inside, it is recommended to replace it either by a `.` or a `_`.
-Note: More `{type}`s might be added in the future like `apm` and `endpoint`.
+Note: More `{dataset.type}`s might be added in the future like `traces`.
This indexing strategy has a few advantages:
@@ -133,7 +133,7 @@ Overall it creates smaller indices in size, makes querying more efficient and al
The ingest pipelines for a specific dataset will have the following naming scheme:
```
-{type}-{dataset}-{package.version}
+{dataset.type}-{dataset.name}-{package.version}
```
As an example, the ingest pipeline for the Nginx access logs is called `logs-nginx.access-3.4.1`. The same ingest pipeline is used for all namespaces. It is possible that a dataset has multiple ingest pipelines in which case a suffix is added to the name.
@@ -151,7 +151,7 @@ Each type template contains an ILM policy. Modifying this default ILM policy wil
The templates for a dataset are called as following:
```
-{type}-{dataset}
+{dataset.type}-{dataset.name}
```
The pattern used inside the index template is `{type}-{dataset}-*` to match all namespaces.
diff --git a/docs/logs/using.asciidoc b/docs/logs/using.asciidoc
index 4f5992f945c7a..eb3025f88ce1b 100644
--- a/docs/logs/using.asciidoc
+++ b/docs/logs/using.asciidoc
@@ -96,5 +96,5 @@ When the machine learning anomaly detection features are enabled, click *Log rat
To see other actions related to the event, click *Actions* in the log event details.
Depending on the event and the features you have configured, you may also be able to:
-* Select *View status in Uptime* to <> in the *Uptime* app.
+* Select *View status in Uptime* to {uptime-guide}/uptime-app-overview.html[view related uptime information] in the *Uptime* app.
* Select *View in APM* to <> in the *APM* app.
diff --git a/docs/management/ingest-pipelines/images/ingest-pipeline-list.png b/docs/management/ingest-pipelines/images/ingest-pipeline-list.png
new file mode 100755
index 0000000000000..5080b4e0bd477
Binary files /dev/null and b/docs/management/ingest-pipelines/images/ingest-pipeline-list.png differ
diff --git a/docs/management/ingest-pipelines/images/ingest-pipeline-privileges.png b/docs/management/ingest-pipelines/images/ingest-pipeline-privileges.png
new file mode 100755
index 0000000000000..ad9451e02e2ea
Binary files /dev/null and b/docs/management/ingest-pipelines/images/ingest-pipeline-privileges.png differ
diff --git a/docs/management/ingest-pipelines/images/ingest-pipeline-processor.png b/docs/management/ingest-pipelines/images/ingest-pipeline-processor.png
new file mode 100755
index 0000000000000..8d8b8aa4b42e3
Binary files /dev/null and b/docs/management/ingest-pipelines/images/ingest-pipeline-processor.png differ
diff --git a/docs/management/ingest-pipelines/ingest-pipelines.asciidoc b/docs/management/ingest-pipelines/ingest-pipelines.asciidoc
new file mode 100644
index 0000000000000..8c259dae256d4
--- /dev/null
+++ b/docs/management/ingest-pipelines/ingest-pipelines.asciidoc
@@ -0,0 +1,144 @@
+[role="xpack"]
+[[ingest-node-pipelines]]
+== Ingest Node Pipelines
+
+*Ingest Node Pipelines* enables you to create and manage {es}
+pipelines that perform common transformations and
+enrichments on your data. For example, you might remove a field,
+rename an existing field, or set a new field.
+
+You’ll find *Ingest Node Pipelines* in *Management > Elasticsearch*. With this feature, you can:
+
+* View a list of your pipelines and drill down into details.
+* Create a pipeline that defines a series of tasks, known as processors.
+* Test a pipeline before feeding it with real data to ensure the pipeline works as expected.
+* Delete a pipeline that is no longer needed.
+
+[role="screenshot"]
+image:management/ingest-pipelines/images/ingest-pipeline-list.png["Ingest node pipeline list"]
+
+[float]
+=== Required permissions
+
+The minimum required permissions to access *Ingest Node Pipelines* are
+the `manage_pipeline` and `cluster:monitor/nodes/info` cluster privileges.
+
+You can add these privileges in *Management > Security > Roles*.
+
+[role="screenshot"]
+image:management/ingest-pipelines/images/ingest-pipeline-privileges.png["Privileges required for Ingest Node Pipelines"]
+
+[float]
+[[ingest-node-pipelines-manage]]
+=== Manage pipelines
+
+From the list view, you can to drill down into the details of a pipeline.
+To
+edit, clone, or delete a pipeline, use the *Actions* menu.
+
+If you don’t have any pipelines, you can create one using the
+*Create pipeline* form. You’ll define processors to transform documents
+in a specific way. To handle exceptions, you can optionally define
+failure processors to execute immediately after a failed processor.
+Before creating the pipeline, you can verify it provides the expected output.
+
+[float]
+[[ingest-node-pipelines-example]]
+==== Example: Create a pipeline
+
+In this example, you’ll create a pipeline to handle server logs in the
+Common Log Format. The log looks similar to this:
+
+[source,js]
+----------------------------------
+212.87.37.154 - - [05/May/2020:16:21:15 +0000] \"GET /favicon.ico HTTP/1.1\"
+200 3638 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6)
+AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\"
+----------------------------------
+
+The log contains an IP address, timestamp, and user agent. You want to give
+these three items their own field in {es} for fast search and visualization.
+You also want to know where the request is coming from.
+
+. In *Ingest Node Pipelines*, click *Create a pipeline*.
+. Provide a name and description for the pipeline.
+. Define the processors:
++
+[source,js]
+----------------------------------
+[
+ {
+ "grok": {
+ "field": "message",
+ "patterns": ["%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \\[%{HTTPDATE:timestamp}\\] \"%{WORD:verb} %{DATA:request} HTTP/%{NUMBER:httpversion}\" %{NUMBER:response:int} (?:-|%{NUMBER:bytes:int}) %{QS:referrer} %{QS:agent}"]
+ }
+ },
+ {
+ "date": {
+ "field": "timestamp",
+ "formats": [ "dd/MMM/YYYY:HH:mm:ss Z" ]
+ }
+ },
+ {
+ "geoip": {
+ "field": "clientip"
+ }
+ },
+ {
+ "user_agent": {
+ "field": "agent"
+ }
+ }
+ ]
+----------------------------------
++
+This code defines four {ref}/ingest-processors.html[processors] that run sequentially:
+{ref}/grok-processor.html[grok], {ref}/date-processor.html[date],
+{ref}/geoip-processor.html[geoip], and {ref}/user-agent-processor.html[user_agent].
+Your form should look similar to this:
++
+[role="screenshot"]
+image:management/ingest-pipelines/images/ingest-pipeline-processor.png["Processors for Ingest Node Pipelines"]
+
+. To verify that the pipeline gives the expected outcome, click *Test pipeline*.
+
+. In the *Document* tab, provide the following sample document for testing:
++
+[source,js]
+----------------------------------
+[
+ {
+ "_source": {
+ "message": "212.87.37.154 - - [05/May/2020:16:21:15 +0000] \"GET /favicon.ico HTTP/1.1\" 200 3638 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\""
+ }
+ }
+]
+----------------------------------
+
+. Click *Run the pipeline* and check if the pipeline worked as expected.
++
+You can also
+view the verbose output and refresh the output from this view.
+
+. If everything looks correct, close the panel, and then click *Create pipeline*.
++
+At this point, you’re ready to use the Elasticsearch index API to load
+the logs data.
+
+. In the Kibana Console, index a document with the pipeline
+you created.
++
+[source,js]
+----------------------------------
+PUT my-index/_doc/1?pipeline=access_logs
+{
+ "message": "212.87.37.154 - - [05/May/2020:16:21:15 +0000] \"GET /favicon.ico HTTP/1.1\" 200 3638 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\""
+}
+----------------------------------
+
+. To verify, run:
++
+[source,js]
+----------------------------------
+GET my-index/_doc/1
+----------------------------------
diff --git a/docs/management/rollups/create_and_manage_rollups.asciidoc b/docs/management/rollups/create_and_manage_rollups.asciidoc
index da2e190847fdb..e9e4054f3b9ba 100644
--- a/docs/management/rollups/create_and_manage_rollups.asciidoc
+++ b/docs/management/rollups/create_and_manage_rollups.asciidoc
@@ -60,7 +60,7 @@ You can read more at {ref}/rollup-job-config.html[rollup job configuration].
=== Try it: Create and visualize rolled up data
This example creates a rollup job to capture log data from sample web logs.
-To follow along, add the <>.
+To follow along, add the <>.
In this example, you want data that is older than 7 days in the target index pattern `kibana_sample_data_logs`
to roll up once a day into the index `rollup_logstash`. You’ll bucket the
@@ -127,19 +127,36 @@ rollup index, or you can remove or archive it using < Index Patterns* so you can
+select your rolled up data for visualizations. Click *Create index pattern*, and select *Rollup index pattern* from the dropdown.
++
+[role="screenshot"]
+image::images/management-rollup-index-pattern.png[][Create rollup index pattern]
+
+. Enter *rollup_logstash,kibana_sample_logs* as your *Index Pattern* and `@timestamp`
+as the *Time Filter field name*.
++
The notation for a combination index pattern with both raw and rolled up data
-is `rollup_logstash,kibana_sample_data_logs`.
+is `rollup_logstash,kibana_sample_data_logs`. In this index pattern, `rollup_logstash`
+matches the rolled up index pattern and `kibana_sample_data_logs` matches the index
+pattern for raw data.
+. Go to *Visualize* and create a vertical bar chart. Choose `rollup_logstash,kibana_sample_data_logs`
+as your source to see both the raw and rolled up data.
++
[role="screenshot"]
-image::images/management_rollup_job_vis.png[][Visualization of rolled up data]
+image::images/management-create-rollup-bar-chart.png[][Create visualization of rolled up data]
-You can then create a dashboard that contains visualizations of the rolled up
-data, raw data, or both. For more information, refer to <>.
+. Look at the data in your visualization.
++
+[role="screenshot"]
+image::images/management_rollup_job_vis.png[][Visualization of rolled up data]
+. Optionally, create a dashboard that contains visualizations of the rolled up
+data, raw data, or both.
++
[role="screenshot"]
image::images/management_rollup_job_dashboard.png[][Dashboard with rolled up data]
diff --git a/docs/maps/images/embed_in_dashboard.jpeg b/docs/maps/images/embed_in_dashboard.jpeg
new file mode 100644
index 0000000000000..7be233e7a0364
Binary files /dev/null and b/docs/maps/images/embed_in_dashboard.jpeg differ
diff --git a/docs/maps/index.asciidoc b/docs/maps/index.asciidoc
index de90d7adb29c0..6480d64bdd174 100644
--- a/docs/maps/index.asciidoc
+++ b/docs/maps/index.asciidoc
@@ -11,17 +11,41 @@ With *Elastic Maps*, you can:
* Create maps with multiple layers and indices.
* Upload GeoJSON files into Elasticsearch.
-* Embed your map in Dashboards.
-* Plot individual documents or use aggregations to plot any data set, no matter how large.
-* Create choropleth maps.
-* Use data driven styling to symbolize features from property values.
-* Focus the data you want to display with searches.
+* Embed your map in dashboards.
+* Symbolize features using data values.
+* Focus in on just the data you want.
-Start your tour of *Elastic Maps* with the <>.
+*Ready to get started?* Start your tour of *Elastic Maps* with the <>.
+
+[float]
+=== Create maps with multiple layers and indices
+You can use multiple layers and indices to show all your data in a single map. This enables your map to show how data sits relative to physical features like weather patterns, human-made features like international borders, and business-specific features like sales regions. You can plot individual documents or use aggregations to plot any data set, no matter how large.
[role="screenshot"]
image::maps/images/sample_data_ecommerce.png[]
+[float]
+=== Upload GeoJSON files into Elasticsearch
+Elastic Maps makes it easy to import geospatial data into the Elastic Stack. Using the GeoJSON Upload feature, you can drag and drop your point and shape data files directly into Elasticsearch, and then use them as layers in the map.
+
+[float]
+=== Embed your map in dashboards
+Viewing data from different angles provides better insights. Dimensions that are obscured in one visualization might be illuminated in another. Add your map to a dashboard and view your geospatial data alongside bar charts, pie charts, tag clouds, and more.
+
+This choropleth map shows the density of non-emergency service requests in San Diego by council district. The map is embedded in a dashboard, so users can better understand when services are requested and gain insight into the top requested services.
+
+[role="screenshot"]
+image::maps/images/embed_in_dashboard.jpeg[]
+
+[float]
+=== Symbolize features using data values
+You can customize each layer to highlight meaningful dimensions in your data. For example, you can use dark colors to symbolize areas with more web log traffic, and lighter colors to symbolize areas with less traffic.
+
+[float]
+=== Focus in on just the data you want
+You can search across your Elasticsearch layers to focus in on just the data you want. Draw a polygon on the map or use the shape from features to create spatial filters to narrow search results to documents that either intersect with, are within, or do not intersect with the specified geometry. Filter individual layers to compares facets.
+
+
--
include::maps-getting-started.asciidoc[]
diff --git a/docs/settings/ml-settings.asciidoc b/docs/settings/ml-settings.asciidoc
index 24e38e73bca9b..83443636fa633 100644
--- a/docs/settings/ml-settings.asciidoc
+++ b/docs/settings/ml-settings.asciidoc
@@ -6,14 +6,14 @@
++++
You do not need to configure any settings to use {kib} {ml-features}. They are
-enabled by default.
+enabled by default.
[[general-ml-settings-kb]]
==== General {ml} settings
[cols="2*<"]
|===
-| `xpack.ml.enabled`
+| `xpack.ml.enabled` {ess-icon}
| Set to `true` (default) to enable {kib} {ml-features}. +
+
If set to `false` in `kibana.yml`, the {ml} icon is hidden in this {kib}
@@ -23,13 +23,7 @@ enabled by default.
|===
-[[data-visualizer-settings]]
-==== {data-viz} settings
+[[advanced-ml-settings-kb]]
+==== Advanced {ml} settings
-[cols="2*<"]
-|===
-| `xpack.ml.file_data_visualizer.max_file_size`
- | Sets the file size limit when importing data in the {data-viz}. The default
- value is `100MB`. The highest supported value for this setting is `1GB`.
-
-|===
+Refer to <>.
\ No newline at end of file
diff --git a/docs/setup/docker.asciidoc b/docs/setup/docker.asciidoc
index 12ee96b21b0c7..e8029ed1bbe9b 100644
--- a/docs/setup/docker.asciidoc
+++ b/docs/setup/docker.asciidoc
@@ -93,7 +93,7 @@ Some example translations are shown here:
[horizontal]
**Environment Variable**:: **Kibana Setting**
`SERVER_NAME`:: `server.name`
-`KIBANA_DEFAULTAPPID`:: `kibana.defaultAppId`
+`SERVER_BASEPATH`:: `server.basePath`
`MONITORING_ENABLED`:: `monitoring.enabled`
In general, any setting listed in <> can be
diff --git a/docs/setup/settings.asciidoc b/docs/setup/settings.asciidoc
index 6596f93a88f51..1be9d5b1ef35b 100644
--- a/docs/setup/settings.asciidoc
+++ b/docs/setup/settings.asciidoc
@@ -216,7 +216,9 @@ on the {kib} index at startup. {kib} users still need to authenticate with
| Enables use of interpreter in Visualize. *Default: `true`*
| `kibana.defaultAppId:`
- | The default application to load. *Default: `"home"`*
+ | *deprecated* This setting is deprecated and will get removed in Kibana 8.0.
+Please use the `defaultRoute` advanced setting instead.
+The default application to load. *Default: `"home"`*
| `kibana.index:`
| {kib} uses an index in {es} to store saved searches, visualizations, and
@@ -627,17 +629,17 @@ Valid locales are: `en`, `zh-CN`, `ja-JP`. *Default: `en`*
|===
-include::{docdir}/settings/alert-action-settings.asciidoc[]
-include::{docdir}/settings/apm-settings.asciidoc[]
-include::{docdir}/settings/dev-settings.asciidoc[]
-include::{docdir}/settings/graph-settings.asciidoc[]
-include::{docdir}/settings/infrastructure-ui-settings.asciidoc[]
-include::{docdir}/settings/i18n-settings.asciidoc[]
-include::{docdir}/settings/logs-ui-settings.asciidoc[]
-include::{docdir}/settings/ml-settings.asciidoc[]
-include::{docdir}/settings/monitoring-settings.asciidoc[]
-include::{docdir}/settings/reporting-settings.asciidoc[]
+include::{kib-repo-dir}/settings/alert-action-settings.asciidoc[]
+include::{kib-repo-dir}/settings/apm-settings.asciidoc[]
+include::{kib-repo-dir}/settings/dev-settings.asciidoc[]
+include::{kib-repo-dir}/settings/graph-settings.asciidoc[]
+include::{kib-repo-dir}/settings/infrastructure-ui-settings.asciidoc[]
+include::{kib-repo-dir}/settings/i18n-settings.asciidoc[]
+include::{kib-repo-dir}/settings/logs-ui-settings.asciidoc[]
+include::{kib-repo-dir}/settings/ml-settings.asciidoc[]
+include::{kib-repo-dir}/settings/monitoring-settings.asciidoc[]
+include::{kib-repo-dir}/settings/reporting-settings.asciidoc[]
include::secure-settings.asciidoc[]
-include::{docdir}/settings/security-settings.asciidoc[]
-include::{docdir}/settings/spaces-settings.asciidoc[]
-include::{docdir}/settings/telemetry-settings.asciidoc[]
+include::{kib-repo-dir}/settings/security-settings.asciidoc[]
+include::{kib-repo-dir}/settings/spaces-settings.asciidoc[]
+include::{kib-repo-dir}/settings/telemetry-settings.asciidoc[]
diff --git a/docs/uptime-guide/alerting.asciidoc b/docs/uptime-guide/alerting.asciidoc
new file mode 100644
index 0000000000000..bf9e7693fc7a5
--- /dev/null
+++ b/docs/uptime-guide/alerting.asciidoc
@@ -0,0 +1,33 @@
+[role="xpack"]
+[[uptime-alerting]]
+
+=== Uptime alerting
+
+The Uptime app integrates with Kibana's {kibana-ref}/alerting-getting-started.html[alerting and actions]
+feature. It provides a set of built-in actions and Uptime specific threshold alerts for you to use
+and enables central management of all alerts from {kibana-ref}/management.html[Kibana Management].
+
+[role="screenshot"]
+image::images/create-alert.png[Create alert]
+
+[float]
+==== Monitor status alerts
+
+To receive alerts when a monitor goes down, use the alerting menu at the top of the
+overview page. Use a query in the alert flyout to determine which monitors to check
+with your alert. If you already have a query in the overview page search bar it will
+be carried over into this box.
+
+[role="screenshot"]
+image::images/monitor-status-alert.png[Create monitor status alert flyout]
+
+[float]
+==== TLS alerts
+
+Uptime also provides the ability to create an alert that will notify you when one or
+more of your monitors have a TLS certificate that will expire within some threshold,
+or when its age exceeds a limit. The values for these thresholds are configurable on
+the <>.
+
+[role="screenshot"]
+image::images/tls-alert.png[Create TLS alert flyout]
diff --git a/docs/uptime-guide/app-overview.asciidoc b/docs/uptime-guide/app-overview.asciidoc
new file mode 100644
index 0000000000000..692489a7ad311
--- /dev/null
+++ b/docs/uptime-guide/app-overview.asciidoc
@@ -0,0 +1,70 @@
+[role="xpack"]
+[[uptime-app]]
+== Uptime app
+
+The Uptime app in {kib} enables you to monitor the status of network endpoints via HTTP/S, TCP, and ICMP.
+You can explore endpoint status over time, drill down into specific monitors,
+and view a high-level snapshot of your environment at any point in time.
+
+[role="screenshot"]
+image::images/uptime-overview.png[Uptime app overview]
+
+[role="xpack"]
+[[uptime-app-overview]]
+=== Overview
+
+The Uptime overview helps you quickly identify and diagnose outages and
+other connectivity issues within your network or environment. You can use the date range
+selection that is global to the Uptime app, to highlight
+an absolute date range, or a relative one, similar to other areas of {kib}.
+
+[float]
+=== Filter bar
+
+The Filter bar enables you to quickly view specific groups of monitors, or even
+an individual monitor if you have defined many.
+
+This control allows you to use automated filter options, as well as input custom filter
+text to select specific monitors by field, URL, ID, and other attributes.
+
+[role="screenshot"]
+image::images/filter-bar.png[Filter bar]
+
+[float]
+=== Snapshot panel
+
+The Snapshot panel displays the overall
+status of the environment you're monitoring or a subset of those monitors.
+You can see the total number of detected monitors within the selected
+Uptime date range, along with the number of monitors
+in an `up` or `down` state, which is based on the last check reported by Heartbeat
+for each monitor.
+
+Next to the counts, there is a histogram displaying the change over time throughout the
+selected date range.
+
+[role="screenshot"]
+image::images/snapshot-view.png[Snapshot view]
+
+[float]
+=== Monitor list
+
+Information about individual monitors is displayed in the monitor list and provides a quick
+way to navigate to a more in-depth visualization for interesting hosts or endpoints.
+
+The information displayed includes the recent status of a host or endpoint, when the monitor was last checked, its
+ID and URL, and its IP address. There is also sparkline showing its check status over time.
+
+[role="screenshot"]
+image::images/monitor-list.png[Monitor list]
+
+[float]
+=== Observability integrations
+
+The Monitor list also contains a menu of available integrations. When Uptime detects Kubernetes or
+Docker related host information, it provides links to open the Metrics app or Logs app pre-filtered
+for this host. Additionally, to help you quickly determine if these solutions contain data relevant to you,
+this feature contains links to filter the other views on the host's IP address.
+
+[role="screenshot"]
+image::images/observability_integrations.png[Observability integrations]
diff --git a/docs/uptime-guide/certificates.asciidoc b/docs/uptime-guide/certificates.asciidoc
new file mode 100644
index 0000000000000..58db91aa080eb
--- /dev/null
+++ b/docs/uptime-guide/certificates.asciidoc
@@ -0,0 +1,15 @@
+[role="xpack"]
+[[uptime-certificates]]
+
+=== Certificates
+
+The certificates page enables you to visualize TLS certificate data in your indices. In addition to the
+common name, associated monitors, issuer information, and SHA fingerprints, Uptime also assigns a status
+derived from the threshold values in the <>.
+
+Several of the columns on this page are sortable. You can use the search bar at the top of the view
+to find values in most of the TLS-related fields in your Uptime indices. Additionally, using the `Alerts`
+dropdown at the top of the page you can create a TLS alert.
+
+[role="screenshot"]
+image::images/certificates-page.png[Certificates]
diff --git a/docs/uptime-guide/deployment-arch.asciidoc b/docs/uptime-guide/deployment-arch.asciidoc
index d8edf290b9a5e..c1b2f596c6665 100644
--- a/docs/uptime-guide/deployment-arch.asciidoc
+++ b/docs/uptime-guide/deployment-arch.asciidoc
@@ -4,22 +4,24 @@
There are multiple ways to deploy Uptime and Heartbeat.
Use the information in this section to determine the best deployment for you.
-A guiding principle is that an outage that takes down the service being monitored should not also take down Heartbeat.
-You want Heartbeat to be functioning even when your service is not, so the guidelines here help you maximise this possibility.
+A guiding principle is that when an outage takes down the service being monitored it should not also take down Heartbeat.
+You want Heartbeat to be functioning even when your service is not, so the guidelines here help you maximize this possibility.
-Heartbeat is generally run as a centralized service within a data center.
+Heartbeat is commonly run as a centralized service within a data center.
While it is possible to run it as a separate "sidecar" process paired with each process/container, we recommend against it.
Running Heartbeat centrally ensures you will still be able to see monitoring data in the event of an overloaded, disconnected, or otherwise malfunctioning server.
-For further redundancy, you may want to deploy multiple Heartbeats across geographic and/or network boundaries to provide more data.
- Specify Heartbeat's observer {heartbeat-ref}/configuration-observer-options.html[geo options] to do so. Some examples might be:
+For further redundancy, you may want to deploy multiple Heartbeats across geographic and network boundaries to provide more data.
+To do so, specify Heartbeat's observer {heartbeat-ref}/configuration-observer-options.html[geo options].
+
+Some examples might be:
* **A site served from a content delivery network (CDN) with points of presence (POPs) around the globe:**
-In this case you may want to have multiple Heartbeat instances at different data centers around the world checking to see if your site is reachable via local CDN POPs.
+To check if your site is reachable via CDN POPS, you may want to have multiple Heartbeat instances at different data centers around the world.
* **A service within a single data center that is accessed across multiple VPNs:**
Set up one Heartbeat instance within the VPN the service operates from, and another within an additional VPN that users access the service from.
-Having both instances will help pinpoint network errors in the event of an outage.
+Having both instances helps pinpoint network errors in the event of an outage.
* **A single service running primarily in a US east coast data center, with a hot failover located in a US west coast data center:**
In each data center, run a Heartbeat instance that checks both the local copy of the service and its counterpart across the country.
Set up two monitors in each region, one for the local service and one for the remote service.
-In the event of a data center failure it will be immediately obvious if the service had a connectivity issue to the outside world or if the failure was only internal.
+In the event of a data center failure it will be immediately apparent if the service had a connectivity issue to the outside world or if the failure was only internal.
diff --git a/docs/uptime-guide/images/cert-exp.png b/docs/uptime-guide/images/cert-exp.png
new file mode 100644
index 0000000000000..cd87668db96dd
Binary files /dev/null and b/docs/uptime-guide/images/cert-exp.png differ
diff --git a/docs/uptime-guide/images/certificates-page.png b/docs/uptime-guide/images/certificates-page.png
new file mode 100644
index 0000000000000..598aae982cd6a
Binary files /dev/null and b/docs/uptime-guide/images/certificates-page.png differ
diff --git a/docs/uptime-guide/images/check-history.png b/docs/uptime-guide/images/check-history.png
new file mode 100644
index 0000000000000..aac5efd9b91d3
Binary files /dev/null and b/docs/uptime-guide/images/check-history.png differ
diff --git a/docs/uptime-guide/images/create-alert.png b/docs/uptime-guide/images/create-alert.png
new file mode 100644
index 0000000000000..54a0c400cad4c
Binary files /dev/null and b/docs/uptime-guide/images/create-alert.png differ
diff --git a/docs/uptime-guide/images/crosshair-example.png b/docs/uptime-guide/images/crosshair-example.png
new file mode 100644
index 0000000000000..f9e89c4f622e0
Binary files /dev/null and b/docs/uptime-guide/images/crosshair-example.png differ
diff --git a/docs/uptime-guide/images/filter-bar.png b/docs/uptime-guide/images/filter-bar.png
new file mode 100644
index 0000000000000..b7c424d3d0d91
Binary files /dev/null and b/docs/uptime-guide/images/filter-bar.png differ
diff --git a/docs/uptime-guide/images/indices.png b/docs/uptime-guide/images/indices.png
new file mode 100644
index 0000000000000..4090747b6726c
Binary files /dev/null and b/docs/uptime-guide/images/indices.png differ
diff --git a/docs/uptime/images/monitor-charts.png b/docs/uptime-guide/images/monitor-charts.png
similarity index 100%
rename from docs/uptime/images/monitor-charts.png
rename to docs/uptime-guide/images/monitor-charts.png
diff --git a/docs/uptime-guide/images/monitor-list.png b/docs/uptime-guide/images/monitor-list.png
new file mode 100644
index 0000000000000..c9a8eccf01f6e
Binary files /dev/null and b/docs/uptime-guide/images/monitor-list.png differ
diff --git a/docs/uptime-guide/images/monitor-status-alert.png b/docs/uptime-guide/images/monitor-status-alert.png
new file mode 100644
index 0000000000000..847a0f58f02ce
Binary files /dev/null and b/docs/uptime-guide/images/monitor-status-alert.png differ
diff --git a/docs/uptime-guide/images/observability_integrations.png b/docs/uptime-guide/images/observability_integrations.png
new file mode 100644
index 0000000000000..3b23aa2dbd2a5
Binary files /dev/null and b/docs/uptime-guide/images/observability_integrations.png differ
diff --git a/docs/uptime-guide/images/settings.png b/docs/uptime-guide/images/settings.png
new file mode 100644
index 0000000000000..d19b7f842ea68
Binary files /dev/null and b/docs/uptime-guide/images/settings.png differ
diff --git a/docs/uptime-guide/images/snapshot-view.png b/docs/uptime-guide/images/snapshot-view.png
new file mode 100644
index 0000000000000..b6f07fb0721aa
Binary files /dev/null and b/docs/uptime-guide/images/snapshot-view.png differ
diff --git a/docs/uptime-guide/images/status-bar.png b/docs/uptime-guide/images/status-bar.png
new file mode 100644
index 0000000000000..fd72e2b78c2a0
Binary files /dev/null and b/docs/uptime-guide/images/status-bar.png differ
diff --git a/docs/uptime-guide/images/tls-alert.png b/docs/uptime-guide/images/tls-alert.png
new file mode 100644
index 0000000000000..19efe07838903
Binary files /dev/null and b/docs/uptime-guide/images/tls-alert.png differ
diff --git a/docs/uptime-guide/images/uptime-overview.png b/docs/uptime-guide/images/uptime-overview.png
new file mode 100644
index 0000000000000..25c88b2d14287
Binary files /dev/null and b/docs/uptime-guide/images/uptime-overview.png differ
diff --git a/docs/uptime-guide/index.asciidoc b/docs/uptime-guide/index.asciidoc
index 09763182fa88f..01a93cb454ea9 100644
--- a/docs/uptime-guide/index.asciidoc
+++ b/docs/uptime-guide/index.asciidoc
@@ -1,5 +1,3 @@
-// short-version can be: 8, 7, 6, etc.
-:short-version: 8
include::{asciidoc-dir}/../../shared/versions/stack/{source_branch}.asciidoc[]
include::{asciidoc-dir}/../../shared/attributes.asciidoc[]
@@ -12,3 +10,13 @@ include::install.asciidoc[]
include::deployment-arch.asciidoc[]
+include::app-overview.asciidoc[]
+
+include::monitor.asciidoc[]
+
+include::settings.asciidoc[]
+
+include::certificates.asciidoc[]
+
+include::alerting.asciidoc[]
+
diff --git a/docs/uptime-guide/install.asciidoc b/docs/uptime-guide/install.asciidoc
index 0ed1270ca92ce..05b9c6665562f 100644
--- a/docs/uptime-guide/install.asciidoc
+++ b/docs/uptime-guide/install.asciidoc
@@ -29,7 +29,7 @@ first see the https://www.elastic.co/support/matrix[Elastic Support Matrix] for
[[install-elasticsearch]]
=== Step 1: Install Elasticsearch
-Install an Elasticsearch cluster, start it up, and make sure it's running.
+Install an {es} cluster, start it up, and make sure it's running.
. Verify that your system meets the
https://www.elastic.co/support/matrix#matrix_jvm[minimum JVM requirements] for {es}.
@@ -39,7 +39,7 @@ https://www.elastic.co/support/matrix#matrix_jvm[minimum JVM requirements] for {
[[install-kibana]]
=== Step 2: Install Kibana
-Install Kibana, start it up, and open up the web interface:
+Install {kib}, start it up, and open up the web interface:
. {stack-gs}/get-started-elastic-stack.html#install-kibana[Install Kibana].
. {stack-gs}/get-started-elastic-stack.html#_launch_the_kibana_web_interface[Launch the Kibana Web Interface].
@@ -48,27 +48,27 @@ Install Kibana, start it up, and open up the web interface:
=== Step 3: Install and configure Heartbeat
Uptime requires the setup of monitors in Heartbeat.
-These monitors provide the data you'll be visualizing in the {kibana-ref}/xpack-uptime.html[Uptime UI].
+These monitors provide the data you'll be visualizing in the {kibana-ref}/xpack-uptime.html[Uptime app].
-See the *Setup Instructions* in Kibana for instructions on installing and configuring Heartbeat.
+For instructions on installing and configuring Heartbeat, see the *Setup Instructions* in {kib}.
Additional information is available in {heartbeat-ref}/heartbeat-configuration.html[Configure Heartbeat].
[role="screenshot"]
image::images/uptime-setup.png[Installation instructions on the Uptime page in Kibana]
[[setup-security]]
-=== Step 4: Setup Security
+=== Step 4: Set up Security
Secure your installation by following the {heartbeat-ref}/securing-heartbeat.html[Secure Heartbeat] documentation.
[float]
==== Important considerations
-* Make sure you're using the same major versions of Heartbeat and Kibana.
+* Make sure you're using the same major versions of Heartbeat and {kib}.
-* Index patterns tell Kibana which Elasticsearch indices you want to explore.
-The Uptime UI requires a +heartbeat-{short-version}*+ index pattern.
-If you have configured a different index pattern, you can use {ref}/indices-aliases.html[index aliases] to ensure data is recognized by the UI.
+* Index patterns tell {kib} which {es} indices you want to explore.
+The Uptime app requires a +heartbeat-{major-version-only}*+ index pattern.
+If you have configured a different index pattern, you can use {ref}/indices-aliases.html[index aliases] to ensure data is recognized by the Uptime app.
After you install and configure Heartbeat,
-the {kibana-ref}/xpack-uptime.html[Uptime UI] will automatically populate with the Heartbeat monitors.
+the {kibana-ref}/xpack-uptime.html[Uptime app] is automatically populated with the Heartbeat monitors.
diff --git a/docs/uptime-guide/monitor.asciidoc b/docs/uptime-guide/monitor.asciidoc
new file mode 100644
index 0000000000000..bb5d315cf63eb
--- /dev/null
+++ b/docs/uptime-guide/monitor.asciidoc
@@ -0,0 +1,59 @@
+[role="xpack"]
+[[uptime-monitor]]
+=== Monitor
+
+The Monitor page helps you gain insights into the performance
+of a specific network endpoint. A detailed visualization of
+the monitor's request duration over time, as well as the `up`/`down`
+status over time, is displayed. By configuring Machine Learning jobs
+on this page, you can also also detect anomalies in response time data.
+
+
+==== Status panel
+
+The Status panel displays a quick summary of the latest information
+regarding your monitor. You can view its latest status, click a link to
+visit the targeted URL, see its most recent request duration, and determine the
+amount of time that has elapsed since the last check.
+
+When two Heartbeat instances are configured in different geographic locations
+the map will show each location as a pinpoint on the map, along with the
+amount of time elapsed since data was last received from that location.
+
+[role="screenshot"]
+image::images/status-bar.png[Status bar]
+
+
+[float]
+==== Monitor charts
+
+The Monitor charts visualize information over the time specified in the
+date range. These charts help you gain insights into how quickly requests are being resolved
+by the targeted endpoint, and give you a sense of how frequently a host or endpoint
+was down in your selected timespan.
+
+[role="screenshot"]
+image::images/monitor-charts.png[Monitor charts]
+
+The Monitor duration chart displays request duration information for your monitor.
+The area surrounding the line is the range of request time for the corresponding
+bucket. The line is the average time. In the upper right hand of this panel
+you can enable Anomaly detection using Machine Learning. When response times change
+in an unexpected way the time range in which they occurred are highlighted with a color.
+
+The pings over time chart is a graphical representation of the check statuses over time.
+Hover over the charts to display crosshairs with specific numeric data.
+
+[role="screenshot"]
+image::images/crosshair-example.png[Chart crosshair]
+
+[float]
+==== Check history
+
+The Check history table lists the total count of this monitor's checks for the selected
+date range. To help find recent problems on a per-check basis, you can filter the checks
+by status and location. This table can help you gain some insight into more granular details
+about recent individual data points that Heartbeat is logging about your host or endpoint.
+
+[role="screenshot"]
+image::images/check-history.png[Check history view]
diff --git a/docs/uptime-guide/overview.asciidoc b/docs/uptime-guide/overview.asciidoc
index c6bd71b1f5574..ab230b27f8cda 100644
--- a/docs/uptime-guide/overview.asciidoc
+++ b/docs/uptime-guide/overview.asciidoc
@@ -2,10 +2,14 @@
[[uptime-overview]]
== Elastic Uptime overview
-Elastic Uptime allows you to monitor the availability and response times of applications and services in real time and to detect problems before they affect users.
+++++
+Overview
+++++
-Elastic Uptime can help you to understand uptime and response time characteristics for your services and applications.
-It can be deployed both inside and outside your organization's network, so you can analyze problems from multiple vantage points.
+Elastic Uptime enables you to monitor the availability and response times of applications and services in real time and to detect problems before they affect users.
+
+Elastic Uptime helps you to understand uptime and response time characteristics for your services and applications.
+It can be deployed both inside and outside your organization's network, so that you can analyze problems from multiple vantage points.
Elastic Uptime uses these components: *Heartbeat*, *Elasticsearch* and *Kibana*.
@@ -37,13 +41,11 @@ The {kibana-ref}/xpack-uptime.html[Elasticsearch Uptime app] in Kibana provides
// ++ In diagram, should be Uptime app, not Uptime UI, possibly even Elastic Uptime? Also applies to Metrics/Logging/APM.
// ++ Need more whitespace around components.
-image::images/uptime-simple-deployment.png[Uptime simple deployment]
-
In this simple deployment, a single instance of Heartbeat is deployed at a single monitoring location to monitor a single service.
The Heartbeat instance sends the monitoring data to Elasticsearch.
Then you can use the Uptime app in Kibana to view the data from Heartbeat and determine the status of the service.
-image::images/uptime-multi-deployment.png[Uptime multiple server deployment]
+image::images/uptime-simple-deployment.png[Uptime simple deployment]
In this deployment, two instances of Heartbeat are deployed at two different monitoring locations.
Both instances monitor the same service.
@@ -51,3 +53,5 @@ The Heartbeat instances send the monitoring data to Elasticsearch.
As before, you can use the Uptime app in Kibana to view the Heartbeat data and determine the status of the service.
When a failure occurs, the multiple monitoring locations enable you to pinpoint the area in which the failure has occurred.
+image::images/uptime-multi-deployment.png[Uptime multiple server deployment]
+
diff --git a/docs/uptime-guide/settings.asciidoc b/docs/uptime-guide/settings.asciidoc
new file mode 100644
index 0000000000000..59f9af631bfa7
--- /dev/null
+++ b/docs/uptime-guide/settings.asciidoc
@@ -0,0 +1,51 @@
+[role="xpack"]
+[[uptime-settings]]
+
+=== Settings
+
+The Uptime settings page lets you change which Heartbeat indices are displayed
+by the uptime app. Users must have the 'all' permission to modify items on this page.
+Uptime settings apply to the current space only. Use different settings in different
+spaces to segment different uptime use cases and domains.
+
+==== Indices
+
+Imagine your organization has one team for internal IT services, and another
+for public services. Each team operates independently and is only responsible for its
+own services. In this scenario, you might set up separate Heartbeat instances for each team,
+writing out to index patterns named `it-heartbeat-\*`, and `external-heartbeat-\*`. You would
+create separate roles and users for each in Elasticsearch, each with access to their own spaces,
+named `it` and `external` respectively. Within each space you would navigate to the settings page
+and set the correct index pattern to match only the indices that space is allowed to access.
+
+Note: The pattern set here only restricts what the Uptime app shows. Users may still be able
+to manually query Elasticsearch for data outside this pattern.
+
+[role="screenshot"]
+image::images/indices.png[Heartbeat indices]
+
+See the {kibana-ref}/uptime-security.html[Uptime security] and {heartbeat-ref}/securing-heartbeat.html[Heartbeat security]
+docs for more information.
+
+==== Certificate thresholds
+
+You can modify settings in this section to control how Uptime will visualize your TLS values in
+the <>. These settings also determine which certificates will be
+selected by any TLS alert you define.
+
+There are two fields, `age` and `expiration`. Use the `age` threshold to specify when Uptime should warn
+you about certificates that have been valid for too long. Use the `expiration` threshold to specify when Uptime should warn you
+about certificates that have approaching expiration dates.
+
+For example, a common security requirement is to make sure that none of your organization's TLS certificates have been
+valid for longer than one year. Modifying the `Age limit` field's value to 365 days will help you keep track of which
+certificates you may want to refresh.
+
+Likewise, to see which of your TLS certificates are close to expiring ahead of time, specify
+an `Expiration threshold` on this page. When the count of a certificate's remaining valid days falls
+below this threshold, Uptime will consider it in a warning state. When you define a TLS alert, you receive a
+notification from Uptime about the certificate.
+
+[role="screenshot"]
+image::images/cert-exp.png[Certification expiration thresholds]
+
diff --git a/docs/uptime/images/alert-flyout.png b/docs/uptime/images/alert-flyout.png
deleted file mode 100644
index 7fc1e3d9aefe2..0000000000000
Binary files a/docs/uptime/images/alert-flyout.png and /dev/null differ
diff --git a/docs/uptime/images/check-history.png b/docs/uptime/images/check-history.png
deleted file mode 100644
index 91565bf59aa7f..0000000000000
Binary files a/docs/uptime/images/check-history.png and /dev/null differ
diff --git a/docs/uptime/images/crosshair-example.png b/docs/uptime/images/crosshair-example.png
deleted file mode 100644
index a4559eac1c3e7..0000000000000
Binary files a/docs/uptime/images/crosshair-example.png and /dev/null differ
diff --git a/docs/uptime/images/filter-bar.png b/docs/uptime/images/filter-bar.png
deleted file mode 100644
index dee735d0f4907..0000000000000
Binary files a/docs/uptime/images/filter-bar.png and /dev/null differ
diff --git a/docs/uptime/images/monitor-list.png b/docs/uptime/images/monitor-list.png
deleted file mode 100644
index 0c8ad473428bd..0000000000000
Binary files a/docs/uptime/images/monitor-list.png and /dev/null differ
diff --git a/docs/uptime/images/observability_integrations.png b/docs/uptime/images/observability_integrations.png
deleted file mode 100644
index 6589c0c5565dd..0000000000000
Binary files a/docs/uptime/images/observability_integrations.png and /dev/null differ
diff --git a/docs/uptime/images/settings.png b/docs/uptime/images/settings.png
deleted file mode 100644
index dd36f0a6d702b..0000000000000
Binary files a/docs/uptime/images/settings.png and /dev/null differ
diff --git a/docs/uptime/images/snapshot-view.png b/docs/uptime/images/snapshot-view.png
deleted file mode 100644
index 1fce2e9592c14..0000000000000
Binary files a/docs/uptime/images/snapshot-view.png and /dev/null differ
diff --git a/docs/uptime/images/status-bar.png b/docs/uptime/images/status-bar.png
deleted file mode 100644
index 8d242789cdccd..0000000000000
Binary files a/docs/uptime/images/status-bar.png and /dev/null differ
diff --git a/docs/uptime/images/uptime-overview.png b/docs/uptime/images/uptime-overview.png
new file mode 100644
index 0000000000000..25c88b2d14287
Binary files /dev/null and b/docs/uptime/images/uptime-overview.png differ
diff --git a/docs/uptime/index.asciidoc b/docs/uptime/index.asciidoc
index a355f8ecf4843..66c9e9357420f 100644
--- a/docs/uptime/index.asciidoc
+++ b/docs/uptime/index.asciidoc
@@ -1,21 +1,19 @@
+[chapter]
[role="xpack"]
[[xpack-uptime]]
= Uptime
-[partintro]
---
-Uptime allows you to monitor the status of network endpoints via HTTP/S, TCP, and ICMP.
+The Uptime app in {kib} enables you to monitor the status of network endpoints via HTTP/S, TCP, and ICMP.
You can explore endpoint status over time, drill down into specific monitors,
-and easily view a high-level snapshot of your environment at any point in time.
+and view a high-level snapshot of your environment at any point in time.
+
+[role="screenshot"]
+image::images/uptime-overview.png[Uptime app overview]
+
+[float]
+=== Get started
To get started with Elastic Uptime, refer to {uptime-guide}/install-uptime.html[Install Uptime].
-* <>
-* <>
-* <>
---
-include::overview.asciidoc[]
-include::monitor.asciidoc[]
-include::settings.asciidoc[]
diff --git a/docs/uptime/monitor.asciidoc b/docs/uptime/monitor.asciidoc
deleted file mode 100644
index 8a4be1f11a721..0000000000000
--- a/docs/uptime/monitor.asciidoc
+++ /dev/null
@@ -1,59 +0,0 @@
-[role="xpack"]
-[[uptime-monitor]]
-== Monitor
-
-The Monitor page will help you get further insight into the performance
-of a specific network endpoint. You'll see a detailed visualization of
-the monitor's request duration over time, as well as the `up`/`down`
-status over time. You can also also detect anomalies in response time data
-by configuring Machine Learning jobs on this page.
-
-[float]
-=== Status panel
-
-[role="screenshot"]
-image::uptime/images/status-bar.png[Status bar]
-
-The Status panel displays a quick summary of the latest information
-regarding your monitor. You can view its latest status, click a link to
-visit the targeted URL, see its most recent request duration, and determine the
-amount of time that has elapsed since the last check.
-
-When two Heartbeat instances are configured in different geographic locations
-the map will show each location as a pinpoint on the map, along with the
-amount of time elapsed since data was last received from that location.
-
-
-[float]
-=== Monitor charts
-
-[role="screenshot"]
-image::uptime/images/monitor-charts.png[Monitor charts]
-
-The Monitor charts visualize information over the time specified in the
-date range. These charts can help you gain insight into how quickly requests are being resolved
-by the targeted endpoint, and give you a sense of how frequently a host or endpoint
-was down in your selected timespan.
-
-The Monitor duration chart displays request duration information for your monitor.
-The area surrounding the line is the range of request time for the corresponding
-bucket. The line is the average time. Anomaly detection using Machine Learning
-can be configured in the upper right hand of this panel. When response times change
-in an unexpected way the time range in which they occurred will be given filled with a color.
-
-The pings over time chart is a graphical representation of the check statuses over time.
-Hover over the charts to display crosshairs with more specific numeric data.
-
-[role="screenshot"]
-image::uptime/images/crosshair-example.png[Chart crosshair]
-
-[float]
-=== Check history
-
-[role="screenshot"]
-image::uptime/images/check-history.png[Check history view]
-
-The Check history displays the total count of this monitor's checks for the selected
-date range. You can additionally filter the checks by status and location to help find recent problems
-on a per-check basis. This table can help you gain some insight into more granular details
-about recent individual data points Heartbeat is logging about your host or endpoint.
diff --git a/docs/uptime/overview.asciidoc b/docs/uptime/overview.asciidoc
deleted file mode 100644
index 71c09c968e512..0000000000000
--- a/docs/uptime/overview.asciidoc
+++ /dev/null
@@ -1,73 +0,0 @@
-[role="xpack"]
-[[uptime-overview]]
-
-== Overview
-
-The Uptime overview is intended to help you quickly identify and diagnose outages and
-other connectivity issues within your network or environment. There is a date range
-selection that is global to the Uptime UI; you can use this selection to highlight
-an absolute date range, or a relative one, similar to other areas of Kibana.
-
-[float]
-=== Filter bar
-
-[role="screenshot"]
-image::uptime/images/filter-bar.png[Filter bar]
-
-The filter bar is designed to let you quickly view specific groups of monitors, or even
-an individual monitor, if you have defined many.
-
-This control allows you to use automated filter options, as well as input custom filter
-text to select specific monitors by field, URL, ID, and other attributes.
-
-[float]
-=== Snapshot panel
-
-[role="screenshot"]
-image::uptime/images/snapshot-view.png[Snapshot view]
-
-This panel is intended to quickly give you a sense of the overall
-status of the environment you're monitoring, or a subset of those monitors.
-Here, you can see the total number of detected monitors within the selected
-Uptime date range. In addition to the total, the counts for the number of monitors
-in an `up` or `down` state are displayed, based on the last check reported by Heartbeat
-for each monitor.
-
-Next to the counts, there is a histogram displaying the change over time throughout the
-selected date range.
-
-[float]
-=== Monitor list
-
-[role="screenshot"]
-image::uptime/images/monitor-list.png[Monitor list]
-
-The Monitor list displays information at the level of individual monitors.
-The data shown here will flesh out your individual monitors, and provide a quick
-way to navigate to a more in-depth visualization for interesting hosts or endpoints.
-
-This table includes information like the most recent status, when the monitor was last checked, its
-ID and URL, its IP address, and a dedicated sparkline showing its check status over time.
-
-[float]
-=== Creating and managing alerts
-
-[role="screenshot"]
-image::uptime/images/alert-flyout.png[Create alert flyout]
-
-To receive alerts when a monitor goes down, use the alerting menu at the top of the
-overview page. Use a query in the alert flyout to determine which monitors to check
-with your alert. If you already have a query in the overview page search bar it will
-be carried over into this box.
-
-[float]
-=== Observability integrations
-
-[role="screenshot"]
-image::uptime/images/observability_integrations.png[Observability integrations]
-
-The Monitor list also contains a menu of possible integrations. If Uptime detects Kubernetes or
-Docker related host information, it will provide links to open the Metrics app or Logs app pre-filtered
-for this host. Additionally, this feature supplies links to simply filter the other views on the host's
-IP address, to help you quickly determine if these other solutions contain data relevant to your current
-interest.
diff --git a/docs/uptime/settings.asciidoc b/docs/uptime/settings.asciidoc
deleted file mode 100644
index 55da6e802bec6..0000000000000
--- a/docs/uptime/settings.asciidoc
+++ /dev/null
@@ -1,27 +0,0 @@
-[role="xpack"]
-[[uptime-settings]]
-
-== Settings
-
-[role="screenshot"]
-image::uptime/images/settings.png[Filter bar]
-
-The Uptime settings page lets you change which Heartbeat indices are displayed
-by the uptime app. Users must have the 'all' permission to modify items on this page.
-Uptime settings apply to the current space only. Use different settings in different
-spaces to segment different uptime use cases and domains.
-
-As an example, imagine your organization has one team for internal IT services, and another
-for public services. Each team operates independently and is only responsible for its
-own services. In this scenario, you might set up separate Heartbeat instances for each team,
-writing out to index patterns named `it-heartbeat-\*`, and `external-heartbeat-\*`. You would
-create separate roles and users for each in Elasticsearch, each with access to their own spaces,
-named `it` and `external` respectively. Within each space you would navigate to the settings page
-and set the correct index pattern to match only the indices that space is allowed to access.
-
-Note that the pattern set here only restricts what the Uptime app shows. Users may still be able
-to manually query Elasticsearch for data outside this pattern!
-
-See the <>
-and {heartbeat-ref}/securing-heartbeat.html[Heartbeat security]
-docs for more information.
diff --git a/docs/user/alerting/index.asciidoc b/docs/user/alerting/index.asciidoc
index df11f5f03a7de..6f691f2715bc8 100644
--- a/docs/user/alerting/index.asciidoc
+++ b/docs/user/alerting/index.asciidoc
@@ -160,7 +160,7 @@ If you are using an *on-premises* Elastic Stack deployment:
If you are using an *on-premises* Elastic Stack deployment with <>:
-* Transport Layer Security (TLS) must be configured for communication <>. {kib} alerting uses <> to secure background alert checks and actions, and API keys require {ref}/configuring-tls.html#tls-http[TLS on the HTTP interface].
+* You must enable Transport Layer Security (TLS) for communication <>. {kib} alerting uses <> to secure background alert checks and actions, and API keys require {ref}/configuring-tls.html#tls-http[TLS on the HTTP interface]. A proxy will not suffice.
[float]
[[alerting-security]]
diff --git a/docs/user/canvas.asciidoc b/docs/user/canvas.asciidoc
index 98033c5a87f6f..355684f7448a1 100644
--- a/docs/user/canvas.asciidoc
+++ b/docs/user/canvas.asciidoc
@@ -5,7 +5,7 @@
[partintro]
--
-Canvas is a data visualization and presentation tool that sits within Kibana. With Canvas, you can pull live data directly from Elasticsearch, and combine the data with colors, images, text, and your imagination to create dynamic, multi-page, pixel-perfect displays. If you are a little bit creative, a little bit technical, and a whole lot curious, then Canvas is for you.
+Canvas is a data visualization and presentation tool that sits within {kib}. With Canvas, you can pull live data directly from {es}, and combine the data with colors, images, text, and your imagination to create dynamic, multi-page, pixel-perfect displays. If you are a little bit creative, a little bit technical, and a whole lot curious, then Canvas is for you.
With Canvas, you can:
@@ -13,9 +13,7 @@ With Canvas, you can:
* Customize your workpad with your own visualizations, such as images and text.
-* Customize your data by pulling it directly from Elasticsearch.
-
-* Show off your data with charts, graphs, progress monitors, and more.
+* Pull your data directly from Elasticsearch, then show it off with charts, graphs, progress monitors, and more.
* Focus the data you want to display with filters.
diff --git a/docs/user/dashboard.asciidoc b/docs/user/dashboard.asciidoc
index 301efb2dfe2c0..1614f00f37ac7 100644
--- a/docs/user/dashboard.asciidoc
+++ b/docs/user/dashboard.asciidoc
@@ -160,7 +160,7 @@ When you're finished adding and arranging the panels, save the dashboard.
. Enter the dashboard *Title* and optional *Description*, then *Save* the dashboard.
[[sharing-dashboards]]
-=== Share the dashboard
+== Share the dashboard
[[embedding-dashboards]]
Share your dashboard outside of {kib}.
diff --git a/docs/user/management.asciidoc b/docs/user/management.asciidoc
index a4ba320e826b1..1704a80847652 100644
--- a/docs/user/management.asciidoc
+++ b/docs/user/management.asciidoc
@@ -1,117 +1,171 @@
[[management]]
-= Management
+= Stack Management
[partintro]
--
-*Management* is home to UIs for managing all things Elastic Stack—
+*Stack Management* is home to UIs for managing all things Elastic Stack—
indices, clusters, licenses, UI settings, index patterns, spaces, and more.
[float]
-[[manage-Elasticsearch]]
-== Manage {es}
+[[manage-ingest]]
+== Ingest
[cols="50, 50"]
|===
-a| <>
+| <>
+| Create and manage {es}
+pipelines that enable you to perform common transformations and
+enrichments on your data.
-Replicate indices on a remote cluster and copy them to a follower index on a local cluster.
-This is important for
-disaster recovery. It also keeps data local for faster queries.
+| {logstash-ref}/logstash-centralized-pipeline-management.html[Logstash Pipelines]
+| Create, edit, and delete your Logstash pipeline configurations.
-| <>
-
-Create a policy for defining the lifecycle of an index as it ages
-through the hot, warm, cold, and delete phases.
-Such policies help you control operation costs
-because you can put data in different resource tiers.
+| <>
+| Manage your Beats configurations in a central location and
+quickly deploy configuration changes to all Beats running across your enterprise.
-a| <>
-View index settings, mappings, and statistics and perform operations, such as refreshing,
-flushing, and clearing the cache. Practicing good index management ensures
-that your data is stored cost effectively.
+|===
-| <>
+[float]
+[[manage-data]]
+== Data
-View the status of your license, start a trial, or install a new license. For
-the full list of features that are included in your license,
-see the https://www.elastic.co/subscriptions[subscription page].
+[cols="50, 50"]
+|===
-| <>
+a| <>
+| View index settings, mappings, and statistics and perform operations, such as refreshing,
+flushing, and clearing the cache. Practicing good index management ensures
+that your data is stored cost effectively.
-Manage your remote clusters for use with cross-cluster search and cross-cluster replication.
-You can add and remove remote clusters, and check their connectivity.
+| <>
+|Create a policy for defining the lifecycle of an index as it ages
+through the hot, warm, cold, and delete phases.
+Such policies help you control operation costs
+because you can put data in different resource tiers.
-| <>
+| <>
+|Define a policy that creates, schedules, and automatically deletes snapshots to ensure that you
+have backups of your cluster in case something goes wrong.
-Create a job that periodically aggregates data from one or more indices, and then
+| <>
+|Create a job that periodically aggregates data from one or more indices, and then
rolls it into a new, compact index. Rollup indices are a good way to store months or
years of historical data in combination with your raw data.
-| <>
+| {ref}/transforms.html[Transforms]
+|Use transforms to pivot existing {es} indices into summarized or entity-centric indices.
-Define a policy that creates, schedules, and automatically deletes snapshots to ensure that you
-have backups of your cluster in case something goes wrong.
+| <>
+|Replicate indices on a remote cluster and copy them to a follower index on a local cluster.
+This is important for
+disaster recovery. It also keeps data local for faster queries.
-| {ref}/transforms.html[*Transforms*]
+| <>
+|Manage your remote clusters for use with cross-cluster search and cross-cluster replication.
+You can add and remove remote clusters, and check their connectivity.
+|===
-Use transforms to pivot existing {es} indices into summarized or entity-centric indices.
+[float]
+[[manage-alerts-insights]]
+== Alerts and Insights
-| <>
+[cols="50, 50"]
+|===
-Identify the issues that you need to address before upgrading to the
-next major version of {es}, and then reindex, if needed.
+| <>
+| Centrally manage your alerts across {kib}. Create and manage reusable
+connectors for triggering actions.
+
+| <>
+| Monitor the generation of reports—PDF, PNG, and CSV—and download reports that you previously generated.
+A report can contain a dashboard, visualization, saved search, or Canvas workpad.
-| <>
+| {ml-docs}/ml-jobs.html[Machine Learning Jobs]
+| View your {anomaly-jobs} and {dfanalytics-jobs}. Open the Single Metric
+Viewer or Anomaly Explorer to see your {ml} results.
-Detect changes in your data by creating, managing, and monitoring alerts.
-For example, create an alert when the maximum total CPU usage on a machine goes
+| <>
+| Detect changes in your data by creating, managing, and monitoring alerts.
+For example, you might create an alert when the maximum total CPU usage on a machine goes
above a certain percentage.
|===
[float]
-[[manage-kibana]]
-== Manage {kib}
+[[manage-security]]
+== Security
[cols="50, 50"]
|===
-a| <>
+a| <>
+|View the users that have been defined on your cluster.
+Add or delete users and assign roles that give users
+specific privileges.
-Customize {kib} to suit your needs. Change the format for displaying dates, turn on dark mode,
-set the timespan for notification messages, and much more.
-
-| <>
+| <>
+|View the roles that exist on your cluster. Customize
+the actions that a user with the role can perform, on a cluster, index, and space level.
-Centrally manage your alerts across {kib}. Create and manage reusable
-connectors for triggering actions.
+| <>
+| Create secondary credentials so that you can send requests on behalf of the user.
+Secondary credentials have the same or lower access rights.
-| <>
+| <>
+| Assign roles to your users using a set of rules. Role mappings are required
+when authenticating via an external identity provider, such as Active Directory,
+Kerberos, PKI, OIDC, and SAML.
-Create and manage the index patterns that help you retrieve your data from {es}.
+|===
-| <>
+[float]
+[[manage-kibana]]
+== {kib}
-Monitor the generation of reports—PDF, PNG, and CSV—and download reports that you previously generated.
-A report can contain a dashboard, visualization, saved search, or Canvas workpad.
+[cols="50, 50"]
+|===
-| <>
+a| <>
+|Create and manage the index patterns that retrieve your data from {es}.
-Copy, edit, delete, import, and export your saved objects.
+| <>
+| Copy, edit, delete, import, and export your saved objects.
These include dashboards, visualizations, maps, index patterns, Canvas workpads, and more.
-| <>
-
-Create spaces to organize your dashboards and other saved objects into categories.
+| <>
+| Create spaces to organize your dashboards and other saved objects into categories.
A space is isolated from all other spaces,
so you can tailor it to your needs without impacting others.
-|
+a| <>
+| Customize {kib} to suit your needs. Change the format for displaying dates, turn on dark mode,
+set the timespan for notification messages, and much more.
+
+|===
+
+[float]
+[[manage-stack]]
+== Stack
+[cols="50, 50"]
|===
+| <>
+| View the status of your license, start a trial, or install a new license. For
+the full list of features that are included in your license,
+see the https://www.elastic.co/subscriptions[subscription page].
+
+| <>
+| Identify the issues that you need to address before upgrading to the
+next major version of {es}, and then reindex, if needed.
+
+|===
+
+
+
--
include::{kib-repo-dir}/management/advanced-options.asciidoc[]
@@ -140,6 +194,8 @@ include::{kib-repo-dir}/management/index-lifecycle-policies/example-index-lifecy
include::{kib-repo-dir}/management/managing-indices.asciidoc[]
+include::{kib-repo-dir}/management/ingest-pipelines/ingest-pipelines.asciidoc[]
+
include::{kib-repo-dir}/management/managing-fields.asciidoc[]
include::{kib-repo-dir}/management/managing-licenses.asciidoc[]
diff --git a/docs/user/security/authorization/index.asciidoc b/docs/user/security/authorization/index.asciidoc
index 853c735418cea..4b91812660c78 100644
--- a/docs/user/security/authorization/index.asciidoc
+++ b/docs/user/security/authorization/index.asciidoc
@@ -2,16 +2,17 @@
[[xpack-security-authorization]]
=== Granting access to {kib}
-The Elastic Stack comes with the `kibana_admin` {ref}/built-in-roles.html[built-in role], which you can use to grant access to all Kibana features in all spaces. To grant users access to a subset of spaces or features, you can create a custom role that grants the desired Kibana privileges.
+The Elastic Stack comes with the `kibana_admin` {ref}/built-in-roles.html[built-in role], which you can use to grant access to all Kibana features in all spaces. To grant users access to a subset of spaces or features, you can create a custom role that grants the desired Kibana privileges.
When you assign a user multiple roles, the user receives a union of the roles’ privileges. Therefore, assigning the `kibana_admin` role in addition to a custom role that grants Kibana privileges is ineffective because `kibana_admin` has access to all the features in all spaces.
NOTE: When running multiple tenants of Kibana by changing the `kibana.index` in your `kibana.yml`, you cannot use `kibana_admin` to grant access. You must create custom roles that authorize the user for that specific tenant. Although multi-tenant installations are supported, the recommended approach to securing access to Kibana segments is to grant users access to specific spaces.
[role="xpack"]
+[[xpack-kibana-role-management]]
=== {kib} role management
-To create a role that grants {kib} privileges, go to **Management -> Security -> Roles** and click **Create role**.
+To create a role that grants {kib} privileges, go to **Management -> Security -> Roles** and click **Create role**.
[[adding_kibana_privileges]]
==== Adding {kib} privileges
@@ -63,7 +64,7 @@ Features are available to users when their roles grant access to the features, *
Using the same role, it’s possible to assign different privileges to different spaces. After you’ve added space privileges, click **Add space privilege**. If you’ve already added privileges for either *** Global (all spaces)** or an individual space, you will not be able to select these in the **Spaces** selection control.
-Additionally, if you’ve already assigned privileges at *** Global (all spaces)**, you are only able to assign additional privileges to individual spaces. Similar to the behavior of multiple roles granting the union of all privileges, space privileges are also a union. If you’ve already granted the user the **All** privilege at *** Global (all spaces)**, you’re not able to restrict the role to only the **Read** privilege at an individual space.
+Additionally, if you’ve already assigned privileges at *** Global (all spaces)**, you are only able to assign additional privileges to individual spaces. Similar to the behavior of multiple roles granting the union of all privileges, space privileges are also a union. If you’ve already granted the user the **All** privilege at *** Global (all spaces)**, you’re not able to restrict the role to only the **Read** privilege at an individual space.
==== Privilege summary
@@ -111,4 +112,3 @@ image::user/security/images/privilege-example-2.png[Privilege example 2]
[role="screenshot"]
image::user/security/images/privilege-example-3.png[Privilege example 3]
-
diff --git a/docs/visualize/lens.asciidoc b/docs/visualize/lens.asciidoc
index 422afbb201183..38ccb7878a92b 100644
--- a/docs/visualize/lens.asciidoc
+++ b/docs/visualize/lens.asciidoc
@@ -4,60 +4,51 @@
beta[]
-*Lens* provides you with a simple and fast way to create visualizations from your {es} data. With Lens, you can:
+*Lens* is a simple and fast way to create visualizations of your {es} data. With *Lens*,
+you drag and drop your data fields onto the visualization builder pane, and *Lens* automatically generates
+a visualization that best displays your data.
-* Quickly build visualizations by dragging and dropping data fields.
+With Lens, you can:
-* Understand your data with a summary view on each field.
+* Explore your data in just a few clicks.
-* Easily change the visualization type by selecting the automatically generated visualization suggestions.
+* Create visualizations with multiple layers and indices.
-* Save your visualization for use in a dashboard.
+* Use the automatically generated visualization suggestions to change the visualization type.
-[float]
-[[drag-drop]]
-=== Drag and drop
-
-The panel shows the data fields for the selected time period. When
-you drag a field from the data panel, Lens highlights where you can drop that field. The first time you drag a data field,
-you'll see two places highlighted in green:
-
-* The visualization builder pane
+* Add your visualizations to dashboards and Canvas workpads.
-* The *X-axis* or *Y-axis* fields
-
-You can incorporate many fields into your visualization, and Lens uses heuristics to decide how
-to apply each one to the visualization.
+To get started with *Lens*, click a field in the data panel, then drag and drop the field on a highlighted area.
[role="screenshot"]
image::images/lens_drag_drop.gif[]
-TIP: Drag-and-drop capabilities are available only when Lens knows how to use the data. You can still customize
-your visualization if Lens is unable to make a suggestion.
+You can incorporate many fields into your visualization, and Lens uses heuristics to decide how to apply each one to the visualization.
+
+TIP: Drag-and-drop capabilities are available only when Lens knows how to use the data. If *Lens* is unable to automatically generate a visualization,
+you can still configure the customization options for your visualization.
[float]
[[apply-lens-filters]]
-==== Find the right data
+==== Filter the data panel fields
-Lens shows you fields based on the <> you have defined in
-{kib}, and the current time range. When you change the index pattern or time filter,
-the list of fields are updated.
+The fields in the data panel based on your selected <>, and the <>.
-To narrow the list of fields, you can:
+To change the index pattern, click it, then select a new one. The fields in the data panel automatically update.
-* Enter the field name in *Search field names*.
+To filter the fields in the data panel:
-* Click *Filter by type*, then select the filter. You can also select *Only show fields with data*
-to show the full list of fields from the index pattern.
+* Enter the name in *Search field names*.
+
+* Click *Filter by type*, then select the filter. To show all of the fields in the index pattern, deselect *Only show fields with data*.
[float]
[[view-data-summaries]]
==== Data summaries
-To help you decide exactly the data you want to display, get a quick summary of each data field.
-The summary shows the distribution of values in the time range.
+To help you decide exactly the data you want to display, get a quick summary of each field. The summary shows the distribution of values in the time range.
-To view the data information, navigate to a data field, then click *i*.
+To view the field summary information, navigate to the field, then click *i*.
[role="screenshot"]
image::images/lens_data_info.png[]
@@ -66,46 +57,40 @@ image::images/lens_data_info.png[]
[[change-the-visualization-type]]
==== Change the visualization type
-With Lens, you are no longer required to build each visualization from scratch. Lens allows
-you to switch between any supported chart type at any time. Lens also provides
-suggestions, which are shortcuts to alternate visualizations based on the data you have.
+*Lens* enables you to switch between any supported visualization type at any time.
-You can switch between suggestions without losing your previous state:
+*Suggestions* are shortcuts to alternate visualizations that *Lens* generates for you.
[role="screenshot"]
image::images/lens_suggestions.gif[]
-If you want to switch to a chart type that is not suggested, click the chart type,
-then select a chart type. When there is an exclamation point (!)
-next to a chart type, Lens is unable to transfer your current data, but
+If you'd like to use a visualization type that is not suggested, click the visualization type,
+then select a new one.
+
+[role="screenshot"]
+image::images/lens_viz_types.png[]
+
+When there is an exclamation point (!)
+next to a visualization type, Lens is unable to transfer your data, but
still allows you to make the change.
[float]
[[customize-operation]]
-==== Customize the data for your visualization
+==== Change the aggregation and labels
Lens allows some customizations of the data for each visualization.
-. Click the index pattern name, then select the new index pattern.
-+
-If there is a match, Lens displays the new data. All fields that do not match the index pattern are removed.
-
-. Change the data field options, such as the aggregation or label.
-
-.. Click *Drop a field here* or the field name in the column.
+. Click *Drop a field here* or the field name in the column.
-.. Change the options that appear depending on the type of field.
+. Change the options that appear depending on the type of field.
[float]
[[layers]]
-==== Layers in bar, line, and area charts
+==== Add layers and indices
-The bar, line, and area charts allow you to layer two different series. To add a layer, click *+*.
+Bar, line, and area charts allow you to visualize multiple data layers and indices so that you can compare and analyze data from multiple sources.
-To remove a layer, click the chart icon next to the index name:
-
-[role="screenshot"]
-image::images/lens_remove_layer.png[]
+To add a layer, click *+*, then drag and drop the fields for the new layer. To view a different index, click it, then select a new one.
[float]
[[lens-tutorial]]
@@ -125,50 +110,48 @@ To start, you'll need to add the <>.
Drag and drop your data onto the visualization builder pane.
-. Open *Visualize*, then click *Create visualization*.
+. From the menu, click *Visualize*, then click *Create visualization*.
. On the *New Visualization* window, click *Lens*.
-. Select the *kibana_sample_data_ecommerce* index.
+. Select the *kibana_sample_data_ecommerce* index pattern.
-. Click image:images/time-filter-calendar.png[], then click *Last 7 days*. The list of data fields are updated.
+. Click image:images/time-filter-calendar.png[], then click *Last 7 days*.
++
+The fields in the data panel update.
. Drag and drop the *taxful_total_price* data field to the visualization builder pane.
+
[role="screenshot"]
image::images/lens_tutorial_1.png[Lens tutorial]
-Lens has taken your intent to see *taxful_total_price* and added in the *order_date* field to show
-average order prices over time.
+To display the average order prices over time, *Lens* automatically added in *order_date* field.
To break down your data, drag the *category.keyword* field to the visualization builder pane. Lens
-understands that you want to show the top categories and compare them across the dates,
-and creates a chart that compares the sales for each of the top 3 categories:
+knows that you want to show the top categories and compare them across the dates,
+and creates a chart that compares the sales for each of the top three categories:
[role="screenshot"]
image::images/lens_tutorial_2.png[Lens tutorial]
[float]
[[customize-lens-visualization]]
-==== Further customization
+==== Customize your visualization
-Customize your visualization to look exactly how you want.
+Make your visualization look exactly how you want with the customization options.
. Click *Average of taxful_total_price*.
-.. Change the *Label* to `Sales`, or a name that you prefer for the data.
+.. Change the *Label* to `Sales`.
. Click *Top values of category.keyword*.
-.. Increase *Number of values* to `10`. The visualization updates in the background to show there are only
+.. Change *Number of values* to `10`. The visualization updates to show there are only
six available categories.
++
+Look at the *Suggestions*. An area chart is not an option, but for sales data, a stacked area chart might be the best option.
-. Look at the suggestions. None of them show an area chart, but for sales data, a stacked area chart
-might make sense. To switch the chart type:
-
-.. Click *Stacked bar chart* in the column.
-
-.. Click *Stacked area*.
+. To switch the chart type, click *Stacked bar chart* in the column, then click *Stacked area* from the *Select a visualizations* window.
+
[role="screenshot"]
image::images/lens_tutorial_3.png[Lens tutorial]
@@ -177,6 +160,6 @@ image::images/lens_tutorial_3.png[Lens tutorial]
[[lens-tutorial-next-steps]]
==== Next steps
-Now that you've created your visualization in Lens, you can add it to a Dashboard.
+Now that you've created your visualization, you can add it to a dashboard or Canvas workpad.
-For more information, see <>.
+For more information, refer to <> or <