From 43e3c089a122d7fc0472a19d97685e2176a21c36 Mon Sep 17 00:00:00 2001 From: Marci W <333176+marciw@users.noreply.github.com> Date: Thu, 20 Feb 2025 08:18:16 -0500 Subject: [PATCH 01/13] Add Troubleshooting entry point (#524) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [Preview](https://docs-v3-preview.elastic.dev/elastic/docs-content/pull/524/troubleshoot/) Apply the new [troubleshooting entry point content type](https://github.com/elastic/docs-projects/issues/408) and confirm Asciidoc content is covered. More improvements to come huge thanks to @shainaraskas for making this so easy ✨ --- .../get-support-help.md | 49 ----------- .../troubleshooting-and-faqs.md | 71 ---------------- raw-migrated-files/toc.yml | 2 - troubleshoot/index.md | 85 +++++++++++++------ .../observability/amazon-data-firehose.md | 2 +- 5 files changed, 59 insertions(+), 150 deletions(-) delete mode 100644 raw-migrated-files/tech-content/starting-with-the-elasticsearch-platform-and-its-solutions/get-support-help.md delete mode 100644 raw-migrated-files/tech-content/starting-with-the-elasticsearch-platform-and-its-solutions/troubleshooting-and-faqs.md diff --git a/raw-migrated-files/tech-content/starting-with-the-elasticsearch-platform-and-its-solutions/get-support-help.md b/raw-migrated-files/tech-content/starting-with-the-elasticsearch-platform-and-its-solutions/get-support-help.md deleted file mode 100644 index 70825cdd6..000000000 --- a/raw-migrated-files/tech-content/starting-with-the-elasticsearch-platform-and-its-solutions/get-support-help.md +++ /dev/null @@ -1,49 +0,0 @@ -# Getting help [get-support-help] - -With your Elastic subscription, you get access to support from the creators of Elasticsearch, Kibana, Beats, Logstash, and much more. We’re here to help! - -::::{note} -For users without an active subscription, visit the [Elastic community forums](https://discuss.elastic.co/) and get answers from the experts in the community, including people from Elastic. - -:::: - - - -## How do I open a support case? [_how_do_i_open_a_support_case] - -There are three ways you can reach out to get support: - -* **From the Support Portal: [http://support.elastic.co](http://support.elastic.co.) The Elastic Support Portal is the central place where you can access all of your cases, subscriptions, and licenses. Within a few hours after subscribing, you receive an email with instructions on how to log in to the Support Portal, where you can track both current and archived cases.
- - ::::{note} - If you just signed up for a trial, you do not get access to the Support Portal until you subscribe. Instead, you can ask for help using the other methods detailed in this document. - :::: - -* **From the {{ecloud}} Console.** Go to the [Support page](https://cloud.elastic.co/support?page=docs&placement=docs-body) or select the support icon, that looks like a life preserver, on any page in the console. -* **By email: `support@elastic.co`**. If you contact us by email, please use the email address that you registered with, so that we can help you more quickly. If you are using a distribution list as your registered email, you can also register a second email address with us. Just open a case to let us know the name and email address you would like to be added. - -When opening a case, there are a few things you can do to get help faster: - -* Include the deployment ID that you want help with, especially if you have several deployments. You can find the deployment ID on the overview page for your cluster in the {{ecloud}} Console. -* Describe the problem. Include any relevant details, including error messages you encountered, dates and times when the problem occurred, or anything else you think might be helpful. -* Upload any pertinent files. - - -## What level of support can I expect? [_what_level_of_support_can_i_expect] - -Support is governed by the [{{ecloud}} Standard Terms of Service](https://www.elastic.co/legal/terms-of-service/cloud). The level of support you can expect to receive depends on your subscription level: - -Standard subscriptions and active trials -: The main focus of support is to ensure your deployment shows a green status and is available. There is no guaranteed initial or ongoing response time, but we do strive to engage on every issue within three business days. We do not offer weekend coverage, so we respond Monday through Friday only. To learn more, check [Working with {{ecloud}} Support](https://www.elastic.co/support/welcome/cloud). - -Gold, Platinum and Enterprise subscriptions -: These subscription levels provide guaranteed response times for support issues, better support coverage hours, and support contacts at Elastic. It also includes support for how-to and development questions. The exact support coverage depends on your subscription level. To learn more, check [Premium Support Services Policy](https://www.elastic.co/legal/support_policy/cloud_premium). - -If you are on a Standard subscription, and you are interested in upgrading your support level, please [contact us](https://www.elastic.co/cloud/contact). We also recommend that you read our best practices guide for getting the most out of your support experience: [https://www.elastic.co/support/welcome](https://www.elastic.co/support/welcome). - - -## Join the community forums [_join_the_community_forums] - -Elasticsearch, Logstash, and Kibana enjoy the benefit of having vibrant and helpful communities. You have our assurance of high-quality support and single source of truth as an {{ecloud}} user, but the Elastic community can also be a useful resource for you whenever you need it. - -If you have any technical questions that are not for our Support team, hop on our [Elastic community forums](https://discuss.elastic.co/) and get answers from the experts in the community, including people from Elastic. diff --git a/raw-migrated-files/tech-content/starting-with-the-elasticsearch-platform-and-its-solutions/troubleshooting-and-faqs.md b/raw-migrated-files/tech-content/starting-with-the-elasticsearch-platform-and-its-solutions/troubleshooting-and-faqs.md deleted file mode 100644 index 7cc8f381b..000000000 --- a/raw-migrated-files/tech-content/starting-with-the-elasticsearch-platform-and-its-solutions/troubleshooting-and-faqs.md +++ /dev/null @@ -1,71 +0,0 @@ -# Troubleshooting and FAQs [troubleshooting-and-faqs] - -Throughout the Elastic docs we have a number of troubleshooting and frequently asked questions (FAQ) pages to help you address problems and find answers about how to use our products. - -**{{stack}}** - -* [Troubleshooting {{ml}} anomaly detection](../../../explore-analyze/machine-learning/anomaly-detection/ml-ad-troubleshooting.md) -* [Azure Marketplace and Resource Manager (ARM) template troubleshooting](https://www.elastic.co/guide/en/elastic-stack-deploy/current/azure-arm-template-troubleshooting.html) -* [{{es}} for Apache Hadoop troubleshooting](../../../troubleshoot/elasticsearch/elasticsearch-hadoop/elasticsearch-for-apache-hadoop.md) -* [Azure Marketplace and Resource Manager (ARM) template FAQ](https://www.elastic.co/guide/en/elastic-stack-deploy/current/azure-marketplace-faq.html) -* [Troubleshooting {{alert-features}}](../../../troubleshoot/kibana/alerts.md) - -**{{es}}** - -* [{{es}} troubleshooting](../../../troubleshoot/elasticsearch/elasticsearch.md) -* [Troubleshooting index lifecycle management errors](../../../troubleshoot/elasticsearch/index-lifecycle-management-errors.md) - -**{{ecloud}}** - -* [Sign up using an email address from another Elastic Cloud account](../../../deploy-manage/deploy/elastic-cloud/create-an-organization.md) -* [{{ess}} AWS Marketplace troubleshooting](../../../deploy-manage/deploy/elastic-cloud/aws-marketplace.md#ec-billing-aws-troubleshooting) -* [Native Azure integration troubleshooting](../../../deploy-manage/deploy/elastic-cloud/azure-native-isv-service.md#ec-azure-integration-troubleshooting) -* [{{ece}} troubleshooting](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-troubleshooting.html) -* [Understanding deployment health FAQ](../../../deploy-manage/monitor/stack-monitoring.md#ec-health-best-practices) -* [{{ess}} FAQ](../../../deploy-manage/deploy/elastic-cloud/cloud-hosted.md) -* [{{ess}} billing FAQ](../../../deploy-manage/cloud-organization/billing/billing-faq.md) -* [{{ess}} technical FAQ](../../../deploy-manage/index.md) -* [Native Azure integration FAQ](../../../deploy-manage/deploy/elastic-cloud/azure-native-isv-service.md) - -**{{kib}}** - -* [Kibana troubleshooting](../../../troubleshoot/kibana.md) -* [Osquery FAQ](../../../solutions/security/investigate/osquery-faq.md) - -**{{observability}}** - -* [Observability troubleshooting](../../../troubleshoot/observability.md) -* [APM troubleshooting](/troubleshoot/observability/apm.md) -* [{{apm-go-agent}} troubleshooting](../../../troubleshoot/observability/apm-agent-go/apm-go-agent.md) -* [{{apm-ios-agent}} troubleshooting](../../../troubleshoot/observability/apm-agent-swift/apm-ios-agent.md) -* [{{apm-java-agent}} troubleshooting](../../../troubleshoot/observability/apm-agent-java/apm-java-agent.md) -* [{{apm-dotnet-agent}} troubleshooting](../../../troubleshoot/observability/apm-agent-dotnet/apm-net-agent.md) -* [{{apm-node-agent}} troubleshooting](../../../troubleshoot/observability/apm-agent-nodejs/apm-nodejs-agent.md) -* [{{apm-php-agent}} troubleshooting](../../../troubleshoot/observability/apm-agent-php/apm-php-agent.md) -* [{{apm-py-agent}} troubleshooting](../../../troubleshoot/observability/apm-agent-python/apm-python-agent.md) -* [{{apm-ruby-agent}} troubleshooting](../../../troubleshoot/observability/apm-agent-ruby/apm-ruby-agent.md) -* [{{apm-rum-agent}} troubleshooting](../../../troubleshoot/observability/apm-agent-rum-js/apm-real-user-monitoring-javascript-agent.md) - -**{{elastic-sec}}** - -* [Troubleshoot missing alerts](../../../troubleshoot/security/detection-rules.md#troubleshoot-signals) - -**{{ls}}** - -* [{{ls}} troubleshooting](../../../troubleshoot/ingest/logstash.md) - -**{{fleet}} and {{agent}}** - -* [{{fleet}} and {{agent}} troubleshooting](../../../troubleshoot/ingest/fleet/fleet-elastic-agent.md) -* [{{fleet}} and {{agent}} FAQ](../../../troubleshoot/ingest/fleet/frequently-asked-questions.md) - -**{{beats}}** - -* [{{auditbeat}} troubleshooting](https://www.elastic.co/guide/en/beats/auditbeat/current/troubleshooting.html) -* [{{filebeat}} troubleshooting](https://www.elastic.co/guide/en/beats/filebeat/current/troubleshooting.html) -* [{{heartbeat}} troubleshooting](https://www.elastic.co/guide/en/beats/heartbeat/current/troubleshooting.html) -* [{{metricbeat}} troubleshooting](https://www.elastic.co/guide/en/beats/metricbeat/current/troubleshooting.html) -* [{{packetbeat}} troubleshooting](https://www.elastic.co/guide/en/beats/packetbeat/current/troubleshooting.html) -* [{{winlogbeat}} troubleshooting](https://www.elastic.co/guide/en/beats/winlogbeat/current/troubleshooting.html) -* [{{log-driver-long}} troubleshooting](../../../troubleshoot/ingest/beats-loggingplugin/elastic-logging-plugin-for-docker.md) -* [{{metricbeat}} Developer FAQ](https://www.elastic.co/guide/en/beats/devguide/current/dev-faq.html) diff --git a/raw-migrated-files/toc.yml b/raw-migrated-files/toc.yml index f642eae75..1c546b830 100644 --- a/raw-migrated-files/toc.yml +++ b/raw-migrated-files/toc.yml @@ -553,5 +553,3 @@ toc: - file: tech-content/starting-with-the-elasticsearch-platform-and-its-solutions/index.md children: - file: tech-content/starting-with-the-elasticsearch-platform-and-its-solutions/get-elastic.md - - file: tech-content/starting-with-the-elasticsearch-platform-and-its-solutions/get-support-help.md - - file: tech-content/starting-with-the-elasticsearch-platform-and-its-solutions/troubleshooting-and-faqs.md diff --git a/troubleshoot/index.md b/troubleshoot/index.md index c2b18348d..9d728631f 100644 --- a/troubleshoot/index.md +++ b/troubleshoot/index.md @@ -6,47 +6,78 @@ mapped_urls: - https://www.elastic.co/guide/en/cloud/current/ec-get-help.html --- -# Troubleshoot +# Troubleshooting + + +% Scope notes: - Match new content type; TOC entry TBD - consider splitting out subsections? + +% see https://docs.elastic.dev/content-architecture/content-type/troubleshooting/entrypoint + +% TODO pull in product-specific tips etc. from other TS sections -% What needs to be done: Refine :::{admonition} WIP ⚠️ **This section is a work in progress.** ⚠️ -The documentation team is actively working on structure, user focus, and more. +The documentation team is actively working on the pages in this section. ::: -Use the topics in this section to troubleshoot Elastic products, features, and deployments. - +This section contains information about resolving common issues you might encounter with Elastic products, as well as troubleshooting resources and guidance. -* [](/troubleshoot/elasticsearch/elasticsearch.md) -* [](/troubleshoot/kibana.md) -* [](/troubleshoot/observability.md) -* [](/troubleshoot/security.md) -* [](/troubleshoot/ingest.md) -* [](/troubleshoot/deployments/elastic-cloud.md) -* [](/troubleshoot/deployments/cloud-enterprise/cloud-enterprise.md) -* [](/troubleshoot/deployments/cloud-on-k8s/kubernetes.md) +If you can't find your issue here, explore the [additional resources](#troubleshoot-additional-resources) or [contact us](#contact-us). +:::{note} +You might need to review the troubleshooting content for more than one product or topic area. In most Elastic deployments, you use multiple components from the [Elastic Stack](/get-started/the-stack.md), plus software to orchestrate your deployment. Because these components communicate with each other, you might see errors in one product that originate from another part of the stack, or from your deployment infrastructure. +::: -## Contact us [contact-us] +* [{{es}}](/troubleshoot/elasticsearch/elasticsearch.md) +* [{{kib}}](/troubleshoot/kibana.md) +* [Elastic {{observability}}](/troubleshoot/observability.md) +* [{{elastic-sec}}](/troubleshoot/security.md) +* [Ingest tools](/troubleshoot/ingest.md) +* [{{ecloud}}](/troubleshoot/deployments/elastic-cloud.md) +* [{{ece}}](/troubleshoot/deployments/cloud-enterprise/cloud-enterprise.md) +* [{{eck}}](/troubleshoot/deployments/cloud-on-k8s/kubernetes.md) -:::{warning} +## Error reference +:::{admonition} WIP Work in progress ::: -% Scope notes: - Match new content type; TOC entry TBD - consider splitting out subsections? +## Additional resources [troubleshoot-additional-resources] -% Use migrated content from existing pages that map to this page: +* Find additional troubleshooting articles in the [Elastic Support Portal](https://support.elastic.co/). -% - [ ] ./raw-migrated-files/tech-content/starting-with-the-elasticsearch-platform-and-its-solutions/get-support-help.md -% - [ ] ./raw-migrated-files/tech-content/starting-with-the-elasticsearch-platform-and-its-solutions/troubleshooting-and-faqs.md -% - next one added by marciw manually for tracking -% - [ ] ./raw-migrated-files/cloud/cloud/ec-get-help.md (especially IDs -- no generated list because page was incorrectly mapped to a new v3 page instead of as a many-to-one for this page) + You can access the Support Portal using your {{ecloud}} account. {{ecloud}} accounts are free and do not require an active subscription. -% WIP sections added by marciw -% see https://docs.elastic.dev/content-architecture/content-type/troubleshooting/entrypoint -% ## one for each grouping -% ## Additional resources [troubleshoot-additional-resources] -% ## Contact us [troubleshoot-contact-us] -% ### Working with support \ No newline at end of file +* Visit the [Elastic community forums](https://discuss.elastic.co) to get answers from experts in the community, including Elastic team members. + +* Use the top search bar to search all our docs for your issue. Some troubleshooting content is contained in other sections of the Elastic documentation. + + +## Contact us [contact-us] + +If you have an [Elastic subscription](https://www.elastic.co/pricing), you can contact Elastic support for assistance. You can reach us in the following ways: + +* **Through the [Elastic Support Portal](https://support.elastic.co/):** The Elastic Support Portal is the central place where you can access all of your cases, subscriptions, and licenses. Within a few hours after subscribing, you receive an email with instructions on how to log in to the Support Portal, where you can track both current and archived cases. + + You can access the portal [directly](https://support.elastic.co/) or by clicking the life preserver icon on any Elastic Cloud page. + + +* **By email:** [support@elastic.co](mailto:support@elastic.co) + + :::{tip} + If you contact us by email, use the email address you registered with so we can help you more quickly. If you are using a distribution list as your registered email, you can also register a second email address with us. Just open a case to let us know the name and email address you want to add. + ::: + +## Working with support [troubleshoot-work-with-support] + +Try these tips when opening a support case: + +* Include the deployment ID that you want help with, especially if you have several deployments. + + You can find the deployment ID on the overview page for your cluster in the {{ecloud}} Console. + +* Describe the problem. Include any relevant details, including error messages you encountered, dates and times when the problem occurred, or anything else you think might be helpful. + +* Upload any pertinent files. diff --git a/troubleshoot/observability/amazon-data-firehose.md b/troubleshoot/observability/amazon-data-firehose.md index aa42d9e3d..1a5430c62 100644 --- a/troubleshoot/observability/amazon-data-firehose.md +++ b/troubleshoot/observability/amazon-data-firehose.md @@ -23,5 +23,5 @@ There are several facets to optimizing the underlying Elasticsearch performance, ## Support [aws-firehose-troubleshooting-support] -If you encounter further problems, please contact [Elastic support](https://www.elastic.co/guide/en/starting-with-the-elasticsearch-platform-and-its-solutions/current/get-support-help.html). +If you encounter further problems, please [contact us]](/troubleshoot/index.md#contact-us). From c5cd76cf26460d083559bee70c04611c1dea8d35 Mon Sep 17 00:00:00 2001 From: natasha-moore-elastic <137783811+natasha-moore-elastic@users.noreply.github.com> Date: Thu, 20 Feb 2025 14:25:27 +0000 Subject: [PATCH 02/13] Security overview cleanup (#527) Adds content to the Solutions and use cases > Security page. Removes raw migrated files since they're not used elsewhere. Preview: [Security](https://docs-v3-preview.elastic.dev/elastic/docs-content/pull/527/solutions/security) --- .../serverless/security-overview.md | 35 ---------------- .../security-docs/security/es-overview.md | 37 ----------------- raw-migrated-files/toc.yml | 3 -- solutions/security.md | 40 ++++++++++++++++--- 4 files changed, 35 insertions(+), 80 deletions(-) delete mode 100644 raw-migrated-files/docs-content/serverless/security-overview.md delete mode 100644 raw-migrated-files/security-docs/security/es-overview.md diff --git a/raw-migrated-files/docs-content/serverless/security-overview.md b/raw-migrated-files/docs-content/serverless/security-overview.md deleted file mode 100644 index b10f90c4f..000000000 --- a/raw-migrated-files/docs-content/serverless/security-overview.md +++ /dev/null @@ -1,35 +0,0 @@ -# {{elastic-sec}} overview [security-overview] - -{{elastic-sec}} combines threat detection analytics, cloud native security, and endpoint protection capabilities in a single solution, so you can quickly detect, investigate, and respond to threats and vulnerabilities across your environment. - -{{elastic-sec}} provides: - -* A detection engine that identifies a wide range of threats -* A workspace for event triage, investigation, and case management -* Interactive data visualization tools -* Integrations for collecting data from various sources - - -## Learn more [siem-integration] - -* [{{elastic-sec}} UI overview](../../../solutions/security/get-started/elastic-security-ui.md): Navigate {{elastic-sec}}'s various tools and interfaces. -* [Detection rules](../../../solutions/security/detect-and-alert/about-detection-rules.md): Use {{elastic-sec}}'s detection engine with custom and prebuilt rules. -* [Cloud security](../../../solutions/security/cloud.md): Enable cloud native security capabilities such as Cloud and Kubernetes security posture management, cloud vulnerability management, and cloud workload protection for Kubernetes and VMs. -* [Install {{elastic-defend}}](../../../solutions/security/configure-elastic-defend/install-elastic-defend.md): Enable key endpoint protection capabilities like event collection and malicious activity prevention. -* [{{ml-cap}}](https://www.elastic.co/products/stack/machine-learning): Enable built-in {{ml}} tools to help you identify malicious behavior. -* [Advanced entity analytics](../../../solutions/security/advanced-entity-analytics.md): Leverage {{elastic-sec}}'s detection engine and {{ml}} capabilities to generate comprehensive risk analytics for hosts and users. -* [Elastic AI Assistant](../../../solutions/security/ai/ai-assistant.md): Ask AI Assistant questions about how to use {{elastic-sec}}, how to understand particular alerts and other documents, and how to write {{esql}} queries. - - -## {{es}} and {{kib}} [elastic-search-and-kibana] - -{{elastic-sec}} uses {{es}} for data storage, management, and search, and {{kib}} is its main user interface. Learn more: - -* [{{es}}](https://www.elastic.co/products/elasticsearch): A real-time, distributed storage, search, and analytics engine. {{elastic-sec}} stores your data using {{es}}. -* [{{kib}}](https://www.elastic.co/products/kibana): An open-source analytics and visualization platform designed to work with {{es}} and {{elastic-sec}}. {{kib}} allows you to search, view, analyze and visualize data stored in {{es}} indices. - - -### {{elastic-endpoint}} self-protection [self-protection] - -For information about {{elastic-endpoint}}'s tamper-protection features, refer to [{{elastic-endpoint}} self-protection features](../../../solutions/security/manage-elastic-defend/elastic-endpoint-self-protection-features.md). - diff --git a/raw-migrated-files/security-docs/security/es-overview.md b/raw-migrated-files/security-docs/security/es-overview.md deleted file mode 100644 index 7ac85dd21..000000000 --- a/raw-migrated-files/security-docs/security/es-overview.md +++ /dev/null @@ -1,37 +0,0 @@ -# {{elastic-sec}} overview [es-overview] - -{{elastic-sec}} combines threat detection analytics, cloud native security, and endpoint protection capabilities in a single solution, so you can quickly detect, investigate, and respond to threats and vulnerabilities across your environment. - -{{elastic-sec}} provides: - -* A detection engine that identifies a wide range of threats -* A workspace for event triage, investigation, and case management -* Interactive data visualization tools -* Integrations for collecting data from various sources - - -## Learn more [siem-integration] - -* [Get started](../../../solutions/security/get-started.md): Learn about system requirements, workspaces, configuration, and data ingestion. -* [{{elastic-sec}} UI overview](../../../solutions/security/get-started/elastic-security-ui.md): Navigate {{elastic-sec}}'s various tools and interfaces. -* [Detection rules](../../../solutions/security/detect-and-alert/about-detection-rules.md): Use {{elastic-sec}}'s detection engine with custom and prebuilt rules. -* [Cloud security](../../../solutions/security/cloud.md): Enable cloud native security capabilities such as Cloud and Kubernetes security posture management, cloud native vulnerability management, and cloud workload protection for Kubernetes and VMs. -* [Install {{elastic-defend}}](../../../solutions/security/configure-elastic-defend/install-elastic-defend.md): Enable key endpoint protection capabilities like event collection and malicious activity prevention. -* [{{ml-cap}}](https://www.elastic.co/products/stack/machine-learning): Enable built-in {{ml}} tools to help you identify malicious behavior. -* [Advanced entity analytics](../../../solutions/security/advanced-entity-analytics.md): Leverage {{elastic-sec}}'s detection engine and {{ml}} capabilities to generate comprehensive risk analytics for hosts and users. -* [Elastic AI assistant](../../../solutions/security/ai/ai-assistant.md): Ask AI Assistant questions about how to use {{elastic-sec}}, how to understand particular alerts and other documents, and how to write {{esql}} queries. -* [{{elastic-sec}} fields and object schemas](https://www.elastic.co/guide/en/security/current/security-ref-intro.html): Learn how to structure data for use with {{elastic-sec}}. - - -## {{es}} and {{kib}} [elastic-search-and-kibana] - -{{elastic-sec}} uses {{es}} for data storage, management, and search, and {{kib}} is its main user interface. Learn more: - -* [{{es}}](https://www.elastic.co/products/elasticsearch): A real-time, distributed storage, search, and analytics engine. {{elastic-sec}} stores your data using {{es}}. -* [{{kib}}](https://www.elastic.co/products/kibana): An open-source analytics and visualization platform designed to work with {{es}} and {{elastic-sec}}. {{kib}} allows you to search, view, analyze and visualize data stored in {{es}} indices. - - -### Elastic Endpoint self-protection [self-protection] - -For information about {{elastic-endpoint}}'s tamper-protection features, refer to [{{elastic-endpoint}} self-protection](../../../solutions/security/manage-elastic-defend/elastic-endpoint-self-protection-features.md). - diff --git a/raw-migrated-files/toc.yml b/raw-migrated-files/toc.yml index 1c546b830..3e71b4e3e 100644 --- a/raw-migrated-files/toc.yml +++ b/raw-migrated-files/toc.yml @@ -338,7 +338,6 @@ toc: - file: docs-content/serverless/security-osquery-placeholder-fields.md - file: docs-content/serverless/security-osquery-response-action.md - file: docs-content/serverless/security-overview-dashboard.md - - file: docs-content/serverless/security-overview.md - file: docs-content/serverless/security-policies-page.md - file: docs-content/serverless/security-posture-faq.md - file: docs-content/serverless/security-posture-management.md @@ -537,8 +536,6 @@ toc: - file: observability-docs/observability/view-infrastructure-metrics.md - file: observability-docs/observability/view-observability-alerts.md - file: security-docs/security/index.md - children: - - file: security-docs/security/es-overview.md - file: stack-docs/elastic-stack/index.md children: - file: stack-docs/elastic-stack/air-gapped-install.md diff --git a/solutions/security.md b/solutions/security.md index c1760244f..022ccc414 100644 --- a/solutions/security.md +++ b/solutions/security.md @@ -1,14 +1,44 @@ --- +navigation_title: "Security" mapped_urls: - https://www.elastic.co/guide/en/security/current/es-overview.html - https://www.elastic.co/guide/en/serverless/current/security-overview.html --- -# Security +# {{elastic-sec}} overview [es-overview] -% What needs to be done: Align serverless/stateful +{{elastic-sec}} combines threat detection analytics, cloud native security, and endpoint protection capabilities in a single solution, so you can quickly detect, investigate, and respond to threats and vulnerabilities across your environment. -% Use migrated content from existing pages that map to this page: +{{elastic-sec}} provides: + +* A detection engine that identifies a wide range of threats +* A workspace for event triage, investigation, and case management +* Interactive data visualization tools +* Integrations for collecting data from various sources + + +## Learn more [siem-integration] + +* [Get started](security/get-started.md): Learn about system requirements, workspaces, configuration, and data ingestion. +* [{{elastic-sec}} UI overview](security/get-started/elastic-security-ui.md): Navigate {{elastic-sec}}'s various tools and interfaces. +* [Detection rules](security/detect-and-alert/about-detection-rules.md): Use {{elastic-sec}}'s detection engine with custom and prebuilt rules. +* [Cloud security](security/cloud.md): Enable cloud native security capabilities such as Cloud and Kubernetes security posture management, cloud native vulnerability management, and cloud workload protection for Kubernetes and VMs. +* [Install {{elastic-defend}}](security/configure-elastic-defend/install-elastic-defend.md): Enable key endpoint protection capabilities like event collection and malicious activity prevention. +* [{{ml-cap}}](https://www.elastic.co/products/stack/machine-learning): Enable built-in {{ml}} tools to help you identify malicious behavior. +* [Advanced entity analytics](security/advanced-entity-analytics.md): Leverage {{elastic-sec}}'s detection engine and {{ml}} capabilities to generate comprehensive risk analytics for hosts and users. +* [Elastic AI assistant](security/ai/ai-assistant.md): Ask AI Assistant questions about how to use {{elastic-sec}}, how to understand particular alerts and other documents, and how to write {{esql}} queries. +* [{{elastic-sec}} fields and object schemas](https://www.elastic.co/guide/en/security/current/security-ref-intro.html): Learn how to structure data for use with {{elastic-sec}}. + + +## {{es}} and {{kib}} [elastic-search-and-kibana] + +{{elastic-sec}} uses {{es}} for data storage, management, and search, and {{kib}} is its main user interface. Learn more: + +* [{{es}}](https://www.elastic.co/products/elasticsearch): A real-time, distributed storage, search, and analytics engine. {{elastic-sec}} stores your data using {{es}}. +* [{{kib}}](https://www.elastic.co/products/kibana): An open-source analytics and visualization platform designed to work with {{es}} and {{elastic-sec}}. {{kib}} allows you to search, view, analyze and visualize data stored in {{es}} indices. + + +### {{elastic-endpoint}} self-protection [self-protection] + +For information about {{elastic-endpoint}}'s tamper-protection features, refer to [{{elastic-endpoint}} self-protection](security/manage-elastic-defend/elastic-endpoint-self-protection-features.md). -% - [ ] ./raw-migrated-files/security-docs/security/es-overview.md -% - [ ] ./raw-migrated-files/docs-content/serverless/security-overview.md \ No newline at end of file From 14f936a27605228c5875ef38f6ac61529a641250 Mon Sep 17 00:00:00 2001 From: natasha-moore-elastic <137783811+natasha-moore-elastic@users.noreply.github.com> Date: Thu, 20 Feb 2025 14:29:09 +0000 Subject: [PATCH 03/13] Remove unneeded version labels (#531) Per [Versions and lifecycle states](https://docs-v3-preview.elastic.dev/elastic/docs-builder/tree/main/versions/#versions-and-lifecycle-states) guidance, > "Add version labels only when a feature was added as part of the major version release (e.g. 9.0.0), or added in subsequent minor releases (e.g. 9.1.0). Do not add version information to features added before these releases." This PR removes unnecessary version labels in Solutions and use cases > Security and Troubleshoot > Observability sections. ### Previews Security - [Hosts page](https://docs-v3-preview.elastic.dev/elastic/docs-content/pull/531/solutions/security/explore/hosts-page) - [Network page](https://docs-v3-preview.elastic.dev/elastic/docs-content/pull/531/solutions/security/explore/network-page) - [Configure network map data](https://docs-v3-preview.elastic.dev/elastic/docs-content/pull/531/solutions/security/explore/configure-network-map-data) - [Users page](https://docs-v3-preview.elastic.dev/elastic/docs-content/pull/531/solutions/security/explore/users-page) - [Indicators of compromise](https://docs-v3-preview.elastic.dev/elastic/docs-content/pull/531/solutions/security/investigate/indicators-of-compromise) Troubleshoot - [Logs](https://docs-v3-preview.elastic.dev/elastic/docs-content/pull/531/troubleshoot/observability/troubleshoot-logs) - [Synthetics](https://docs-v3-preview.elastic.dev/elastic/docs-content/pull/531/troubleshoot/observability/troubleshooting-synthetics) --- solutions/security/explore/configure-network-map-data.md | 2 +- solutions/security/explore/hosts-page.md | 2 +- solutions/security/explore/network-page.md | 2 +- solutions/security/explore/users-page.md | 2 +- solutions/security/investigate/indicators-of-compromise.md | 2 +- troubleshoot/observability/troubleshoot-logs.md | 2 +- troubleshoot/observability/troubleshooting-synthetics.md | 4 ++-- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/solutions/security/explore/configure-network-map-data.md b/solutions/security/explore/configure-network-map-data.md index 990c057c8..703807ed8 100644 --- a/solutions/security/explore/configure-network-map-data.md +++ b/solutions/security/explore/configure-network-map-data.md @@ -21,7 +21,7 @@ To see source and destination connections lines on the map, you must configure ` ## Permissions required [prereq-perms] -To view the map in {{stack}} 9.0.0+, you need a role with at least `Read` [privileges](/deploy-manage/users-roles/cluster-or-deployment-auth/defining-roles.md#adding_kibana_privileges) for the `Maps` feature. In serverless, you need the appropriate [predefined user role](/deploy-manage/users-roles/cloud-organization/user-roles.md#general-assign-user-roles) or a [custom role](/deploy-manage/users-roles/cloud-organization/user-roles.md) with at least `Read` privileges for the `Maps` feature. +To view the map in {{stack}}, you need a role with at least `Read` [privileges](/deploy-manage/users-roles/cluster-or-deployment-auth/defining-roles.md#adding_kibana_privileges) for the `Maps` feature. In serverless, you need the appropriate [predefined user role](/deploy-manage/users-roles/cloud-organization/user-roles.md#general-assign-user-roles) or a [custom role](/deploy-manage/users-roles/cloud-organization/user-roles.md) with at least `Read` privileges for the `Maps` feature. ## Create {{kib}} data views [kibana-index-pattern] diff --git a/solutions/security/explore/hosts-page.md b/solutions/security/explore/hosts-page.md index 36bf8f52e..c9fe35a14 100644 --- a/solutions/security/explore/hosts-page.md +++ b/solutions/security/explore/hosts-page.md @@ -34,7 +34,7 @@ Beneath the KPI charts are data tables, categorized by individual tabs, which ar * **All hosts**: High-level host details. * **Uncommon processes**: Uncommon processes running on hosts. * **Anomalies**: Anomalies discovered by machine learning jobs. -* **Host risk**: The latest recorded host risk score for each host, and its host risk classification. In {{stack}} 9.0.0+, this feature requires a [Platinum subscription](https://www.elastic.co/pricing) or higher. In serverless, this feature requires the Security Analytics Complete [project feature](/deploy-manage/deploy/elastic-cloud/project-settings.md). Click **Enable** on the **Host risk** tab to get started. To learn more, refer to our [entity risk scoring documentation](/solutions/security/advanced-entity-analytics/entity-risk-scoring.md). +* **Host risk**: The latest recorded host risk score for each host, and its host risk classification. In {{stack}}, this feature requires a [Platinum subscription](https://www.elastic.co/pricing) or higher. In serverless, this feature requires the Security Analytics Complete [project feature](/deploy-manage/deploy/elastic-cloud/project-settings.md). Click **Enable** on the **Host risk** tab to get started. To learn more, refer to our [entity risk scoring documentation](/solutions/security/advanced-entity-analytics/entity-risk-scoring.md). * **Sessions**: Linux process events that you can open in [Session View](/solutions/security/investigate/session-view.md), an investigation tool that allows you to examine Linux process data at a hierarchal level. The tables within the **Events** and **Sessions** tabs include inline actions and several customization options. To learn more about what you can do with the data in these tables, refer to [*Manage detection alerts*](/solutions/security/detect-and-alert/manage-detection-alerts.md). diff --git a/solutions/security/explore/network-page.md b/solutions/security/explore/network-page.md index 3b30337d8..892f2c1eb 100644 --- a/solutions/security/explore/network-page.md +++ b/solutions/security/explore/network-page.md @@ -19,7 +19,7 @@ The Network page provides key network activity metrics in an interactive map, an The map provides an interactive visual overview of your network traffic. Hover over source and destination points to show more information, such as host names and IP addresses. ::::{note} -To access the interactive map in {{stack}} 9.0.0+, you need either `Read` or `All` privileges for `Maps` (**Kibana Privileges** → **Analytics** → **Maps**). In serverless, you must have the appropriate user role. To learn more about map setup, refer to [Configure network map data](/solutions/security/explore/configure-network-map-data.md). +To access the interactive map in {{stack}}, you need either `Read` or `All` privileges for `Maps` (**Kibana Privileges** → **Analytics** → **Maps**). In serverless, you must have the appropriate user role. To learn more about map setup, refer to [Configure network map data](/solutions/security/explore/configure-network-map-data.md). :::: diff --git a/solutions/security/explore/users-page.md b/solutions/security/explore/users-page.md index 02cd41285..c910a4952 100644 --- a/solutions/security/explore/users-page.md +++ b/solutions/security/explore/users-page.md @@ -34,7 +34,7 @@ Beneath the KPI charts are data tables, which are useful for viewing and investi * **All users**: A chronological list of unique user names, when they were last active, and the associated domains. * **Authentications**: A chronological list of user authentication events and associated details, such as the number of successes and failures, and the host name of the last successful destination. * **Anomalies**: Unusual activity discovered by machine learning jobs that contain user data. -* **User risk**: The latest recorded user risk score for each user, and its user risk classification. In {{stack}} 9.0.0+, this feature requires a [Platinum subscription](https://www.elastic.co/pricing) or higher. In serverless, this feature requires the Security Analytics Complete [project feature](/deploy-manage/deploy/elastic-cloud/project-settings.md). Click **Enable** on the **User risk** tab to get started. To learn more, refer to our [entity risk scoring documentation](/solutions/security/advanced-entity-analytics/entity-risk-scoring.md). +* **User risk**: The latest recorded user risk score for each user, and its user risk classification. In {{stack}}, this feature requires a [Platinum subscription](https://www.elastic.co/pricing) or higher. In serverless, this feature requires the Security Analytics Complete [project feature](/deploy-manage/deploy/elastic-cloud/project-settings.md). Click **Enable** on the **User risk** tab to get started. To learn more, refer to our [entity risk scoring documentation](/solutions/security/advanced-entity-analytics/entity-risk-scoring.md). The Events table includes inline actions and several customization options. To learn more about what you can do with the data in these tables, refer to [*Manage detection alerts*](/solutions/security/detect-and-alert/manage-detection-alerts.md). diff --git a/solutions/security/investigate/indicators-of-compromise.md b/solutions/security/investigate/indicators-of-compromise.md index c5b2401e8..8fa6f5a49 100644 --- a/solutions/security/investigate/indicators-of-compromise.md +++ b/solutions/security/investigate/indicators-of-compromise.md @@ -9,7 +9,7 @@ mapped_urls: The Indicators page collects data from enabled threat intelligence feeds and provides a centralized view of indicators, also known as indicators of compromise (IoCs). This topic helps you set up the Indicators page and explains how to work with IoCs. ::::{admonition} Requirements -* In {{stack}} 9.0.0+, the Indicators page is an [Enterprise subscription](https://www.elastic.co/pricing) feature. +* In {{stack}}, the Indicators page is an [Enterprise subscription](https://www.elastic.co/pricing) feature. * In serverless, the Indicators page requires the Security Analytics Complete [project feature](/deploy-manage/deploy/elastic-cloud/project-settings.md) * You must have *one* of the following installed on the hosts you want to monitor: diff --git a/troubleshoot/observability/troubleshoot-logs.md b/troubleshoot/observability/troubleshoot-logs.md index 533b41a37..be1db17b9 100644 --- a/troubleshoot/observability/troubleshoot-logs.md +++ b/troubleshoot/observability/troubleshoot-logs.md @@ -38,7 +38,7 @@ You need to either: * Get an API key from an administrator and manually add the API to the {{agent}} configuration. See [Configure the {{agent}}](../../raw-migrated-files/docs-content/serverless/observability-stream-log-files.md#observability-stream-log-files-step-3-configure-the-agent) for more on manually updating the configuration and adding the API key. :::: -::::{tab-item} {{stack}} 9.0.0+ +::::{tab-item} {{stack}} If you don’t have the required privileges to create an API key, you’ll see the following error message: ```plaintext diff --git a/troubleshoot/observability/troubleshooting-synthetics.md b/troubleshoot/observability/troubleshooting-synthetics.md index 367ab2e77..02dd50968 100644 --- a/troubleshoot/observability/troubleshooting-synthetics.md +++ b/troubleshoot/observability/troubleshooting-synthetics.md @@ -55,7 +55,7 @@ When creating a {{private-location}}, you have to: 3. [Add a {{private-location}}](/solutions/observability/apps/monitor-resources-on-private-networks.md#synthetics-private-location-add) in the Synthetics UI. ::: -:::{tab-item} {{stack}} 9.0.0+ +:::{tab-item} {{stack}} 1. [Set up {{fleet-server}} and {{agent}}](/solutions/observability/apps/monitor-resources-on-private-networks.md#synthetics-private-location-fleet-agent). 2. [Connect {{fleet}} to the {{stack}}](/solutions/observability/apps/monitor-resources-on-private-networks.md#synthetics-private-location-connect) and enroll an {{agent}} in {{fleet}}. 3. [Add a {{private-location}}](/solutions/observability/apps/monitor-resources-on-private-networks.md#synthetics-private-location-add) in the {{synthetics-app}}. @@ -119,7 +119,7 @@ There are a few ways to fix this: ::: -:::{tab-item} {{stack}} 9.0.0+ +:::{tab-item} {{stack}} * If you have [write access](/solutions/observability/apps/writer-role.md) including the privileges for [creating new Private Locations](/solutions/observability/apps/writer-role.md#synthetics-role-write-private-locations), you can [create a new Private Location](/solutions/observability/apps/monitor-resources-on-private-networks.md#monitor-via-private-agent). Then try creating the monitor again. * If you do *not* have the right privileges to create a Private Location, you can ask someone with the [necessary privileges](/solutions/observability/apps/writer-role.md#synthetics-role-write-private-locations) to create a Private Location or ask an administrator with a [setup role](/solutions/observability/apps/setup-role.md) to give you the necessary privileges and [create a new Private Location](/solutions/observability/apps/monitor-resources-on-private-networks.md#monitor-via-private-agent). Then try creating the monitor again. * If you want to create a monitor to run on Elastic’s global managed infrastructure, ask an administrator with a [setup role](/solutions/observability/apps/setup-role.md) to update [`Synthetics and Uptime` sub-feature privileges](/solutions/observability/apps/writer-role.md#disable-managed-locations) for the role you’re currently assigned. Then try creating the monitor again. From 1c2e6127db9c705ee469f4c9652e0dd8d4656fe7 Mon Sep 17 00:00:00 2001 From: natasha-moore-elastic <137783811+natasha-moore-elastic@users.noreply.github.com> Date: Thu, 20 Feb 2025 15:09:21 +0000 Subject: [PATCH 04/13] Update section-level applies tags in Troubleshoot (#530) Updates section-level applies tags in Troubleshoot section to use the [new syntax](https://docs-v3-preview.elastic.dev/elastic/docs-builder/tree/main/syntax/applies#sections). Previews: - [Common problems](https://docs-v3-preview.elastic.dev/elastic/docs-content/pull/530/troubleshoot/observability/apm/common-problems) - [Logs](https://docs-v3-preview.elastic.dev/elastic/docs-content/pull/530/troubleshoot/observability/troubleshoot-logs) - [SLOs](https://docs-v3-preview.elastic.dev/elastic/docs-content/pull/530/troubleshoot/observability/troubleshoot-service-level-objectives-slos) - [Synthetics](https://docs-v3-preview.elastic.dev/elastic/docs-content/pull/530/troubleshoot/observability/troubleshooting-synthetics) - [Detection rules](https://docs-v3-preview.elastic.dev/elastic/docs-content/pull/530/troubleshoot/security/detection-rules) --- .../observability/apm/common-problems.md | 60 +++++++++---------- .../observability/troubleshoot-logs.md | 6 +- ...ubleshoot-service-level-objectives-slos.md | 6 +- .../troubleshooting-synthetics.md | 12 ++-- troubleshoot/security/detection-rules.md | 7 +-- 5 files changed, 45 insertions(+), 46 deletions(-) diff --git a/troubleshoot/observability/apm/common-problems.md b/troubleshoot/observability/apm/common-problems.md index 4afa220d7..dd0c01ddf 100644 --- a/troubleshoot/observability/apm/common-problems.md +++ b/troubleshoot/observability/apm/common-problems.md @@ -26,9 +26,9 @@ This section describes common problems you might encounter when using APM Server ## No data is indexed [apm-no-data-indexed] -:::{applies_to} -:stack: all -::: +```yaml {applies_to} +stack: all +``` If no data shows up in {{es}}, first make sure that your APM components are properly connected. @@ -83,9 +83,9 @@ APM Server currently relies on {{es}} to create indices that do not exist. As a ::::::: ## Common SSL-related problems [apm-common-ssl-problems] -:::{applies_to} -:stack: all -::: +```yaml {applies_to} +stack: all +``` * [SSL client fails to connect](#apm-ssl-client-fails) * [x509: cannot validate certificate](#apm-cannot-validate-certificate) @@ -134,9 +134,9 @@ A firewall is refusing the connection. Check if a firewall is blocking the traff ## I/O Timeout [apm-io-timeout] -:::{applies_to} -:stack: all -::: +```yaml {applies_to} +stack: all +``` I/O Timeouts can occur when your timeout settings across the stack are not configured correctly, especially when using a load balancer. @@ -177,17 +177,17 @@ In the agent logs, you won’t see a sign of failures as the APM server asynchro ## Tail-based sampling causing high system memory usage and high disk IO [apm-tail-based-sampling-memory-disk-io] -:::{applies_to} -:stack: all -::: +```yaml {applies_to} +stack: all +``` Tail-based sampling requires minimal memory to run, and there should not be a noticeable increase in RSS memory usage. However, since tail-based sampling writes data to disk, it is possible to see a significant increase in OS page cache memory usage due to disk IO. If you see a drop in throughput and excessive disk activity after enabling tail-based sampling, please ensure that there is enough memory headroom in the system for OS page cache to perform disk IO efficiently. ## Too many unique transaction names [troubleshooting-too-many-transactions] -:::{applies_to} -:stack: all -::: +```yaml {applies_to} +stack: all +``` Transaction names are defined in each APM agent; when an APM agent supports a framework, it includes logic for naming the transactions that the framework creates. In some cases though, like when using an APM agent’s API to create custom transactions, it is up to the user to define a pattern for transaction naming. When transactions are named incorrectly, each unique URL can be associated with a unique transaction group—causing an explosion in the number of transaction groups per service, and leading to inaccuracies in the Applications UI. @@ -231,9 +231,9 @@ If your problem is occurring in a different APM agent, the tips above still appl ## Unknown route [troubleshooting-unknown-route] -:::{applies_to} -:stack: all -::: +```yaml {applies_to} +stack: all +``` The [transaction overview](../../../solutions/observability/apps/transactions-2.md) will only display helpful information when the transactions in your services are named correctly. If you’re seeing "GET unknown route" or "unknown route" in the Applications UI, it could be a sign that something isn’t working as it should. @@ -245,9 +245,9 @@ To resolve this, you’ll need to head over to the relevant [APM agent documenta ## Fields are not searchable [troubleshooting-fields-unsearchable] -:::{applies_to} -:stack: all -::: +```yaml {applies_to} +stack: all +``` In Elasticsearch, index templates are used to define settings and mappings that determine how fields should be analyzed. The recommended index templates for APM come from the built-in {{es}} apm-data plugin. These templates, by default, enable and disable indexing on certain fields. @@ -262,9 +262,9 @@ As an example, some APM agents store cookie values in `http.request.cookies`. Si ## Service Maps: no connection between client and server [service-map-rum-connections] -:::{applies_to} -:stack: all -::: +```yaml {applies_to} +stack: all +``` If the service map is not showing an expected connection between the client and server, it’s likely because you haven’t configured [`distributedTracingOrigins`](https://www.elastic.co/guide/en/apm/agent/rum-js/current/distributed-tracing-guide.html). @@ -272,9 +272,9 @@ This setting is necessary, for example, for cross-origin requests. If you have a ## No data shown in the infrastructure tab [troubleshooting-apm-infra-data] -:::{applies_to} -:stack: all -::: +```yaml {applies_to} +stack: all +``` If you don’t see any data in the **Infrastructure** tab for a selected service in the Applications UI, there are a few possible causes and solutions. @@ -292,9 +292,9 @@ For example, if the APM agent is not configured to use the correct host name, th ## Common response codes [observability-apm-troubleshooting-common-response-codes] -:::{applies_to} -:serverless: all -::: +```yaml {applies_to} +serverless: all +``` ### HTTP 400: Data decoding error / Data validation error [bad-request] diff --git a/troubleshoot/observability/troubleshoot-logs.md b/troubleshoot/observability/troubleshoot-logs.md index be1db17b9..944bfb6c8 100644 --- a/troubleshoot/observability/troubleshoot-logs.md +++ b/troubleshoot/observability/troubleshoot-logs.md @@ -63,9 +63,9 @@ You need to either: ### Failed to create API key [logs-troubleshooting-API-key-failed] -:::{applies_to} -:stack: all -::: +```yaml {applies_to} +stack: all +``` If you don’t have the privileges to create `savedObjects` in {{kib}}, you’ll see the following error message: diff --git a/troubleshoot/observability/troubleshoot-service-level-objectives-slos.md b/troubleshoot/observability/troubleshoot-service-level-objectives-slos.md index ed0a4eca1..dce292b0c 100644 --- a/troubleshoot/observability/troubleshoot-service-level-objectives-slos.md +++ b/troubleshoot/observability/troubleshoot-service-level-objectives-slos.md @@ -191,9 +191,9 @@ Refer to [SLO API calls](https://www.elastic.co/docs/api/doc/kibana/v8/operation ## Upgrade from beta to GA [slo-troubleshoot-beta] -:::{applies_to} -:stack: all -::: +```yaml {applies_to} +stack: all +``` Starting in version 8.12.0, SLOs are generally available (GA). If you’re upgrading from a beta version of SLOs (available in 8.11.0 and earlier), you must migrate your SLO definitions to a new format. Otherwise SLOs won’t show up. diff --git a/troubleshoot/observability/troubleshooting-synthetics.md b/troubleshoot/observability/troubleshooting-synthetics.md index 02dd50968..0eb3186e3 100644 --- a/troubleshoot/observability/troubleshooting-synthetics.md +++ b/troubleshoot/observability/troubleshooting-synthetics.md @@ -18,9 +18,9 @@ For debugging synthetic tests locally, you can set an environment variable, `DEB ### Monitors stopped running after upgrading to 8.8.0 or above [synthetics-troubleshooting-missing-api-key] -:::{applies_to} -:stack: all -::: +```yaml {applies_to} +stack: all +``` Synthetic monitors will stop running if you have gone through this workflow: @@ -128,9 +128,9 @@ There are a few ways to fix this: :::: ### You do not have permission to use Elastic managed locations [synthetics-troubleshooting-public-locations-disabled] -:::{applies_to} -:stack: all -::: +```yaml {applies_to} +stack: all +``` If you try to create or edit a monitor hosted on Elastic’s global managed infrastructure but see a note that you do not have permission to use Elastic managed locations, an administrator has restricted the use of public locations. diff --git a/troubleshoot/security/detection-rules.md b/troubleshoot/security/detection-rules.md index 8585d398b..519689d20 100644 --- a/troubleshoot/security/detection-rules.md +++ b/troubleshoot/security/detection-rules.md @@ -182,10 +182,9 @@ For example, say an event occurred at 10:00 but wasn’t ingested into {{es}} un ### Troubleshoot missing alerts for {{ml}} jobs [ml-job-compatibility] -:::{applies_to} -:serverless: unavailable -::: -% doesn't apply to serverless +```yaml {applies_to} +stack: all +``` {{ml-cap}} detection rules use {{ml}} jobs that have dependencies on data fields populated by the {{beats}} and {{agent}} integrations. In {{stack}} version 8.3, new {{ml}} jobs (prefixed with `v3`) were released to operate on the ECS fields available at that time. From 7254fdc67e3f2ee5eabb5fd1c4de2629d358a4e1 Mon Sep 17 00:00:00 2001 From: wajihaparvez Date: Thu, 20 Feb 2025 11:02:23 -0500 Subject: [PATCH 05/13] [Docs] Add Ingest tools overview and Upload data files (#526) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes: [#327](https://github.com/elastic/docs-projects/issues/372) and [#444](https://github.com/elastic/docs-projects/issues/444) Previews: [Ingest tools overview](https://docs-v3-preview.elastic.dev/elastic/docs-content/pull/526/manage-data/ingest/tools) and [Upload data files](https://docs-v3-preview.elastic.dev/elastic/docs-content/pull/526/manage-data/ingest/upload-data-files) ### Summary - As discussed, combined content from linked resources to add a table for the tools overview. A lot of pages have moved around so I'd really appreciate a quick double-check of the links to make sure they're pointing to the right location 🙏 - Added content to the Upload data files page and changed its location (see questions below) ### Questions 1. Since we decided that a table would work best for the overview, I'm not sure how to incorporate https://www.elastic.co/guide/en/cloud/current/ec-cloud-ingest-data.html on this page. I don't think all of its content fits here based on the new IA. Maybe it could go in the reference section? I'm open to any ideas!! 2. The Upload data files page was originally nested under the Ingest tools overview, but I think it's better suited as a sibling in the overall Manage data/Ingest section. What do you think? --- .../nlp/ml-nlp-ner-example.md | 2 +- .../ml-nlp-text-emb-vector-search-example.md | 2 +- manage-data/ingest.md | 2 +- manage-data/ingest/tools.md | 34 ++++++++-- manage-data/ingest/tools/upload-data-files.md | 19 ------ manage-data/ingest/upload-data-files.md | 63 +++++++++++++++++++ manage-data/toc.yml | 3 +- .../semantic-search-inference.md | 2 +- .../fleet/beats-agent-comparison.md | 6 +- solutions/search/hybrid-semantic-text.md | 2 +- solutions/search/ingest-for-search.md | 2 +- .../semantic-search-elser-ingest-pipelines.md | 2 +- .../semantic-search-inference.md | 2 +- .../semantic-search-semantic-text.md | 2 +- .../serverless-elasticsearch-get-started.md | 2 +- 15 files changed, 105 insertions(+), 40 deletions(-) delete mode 100644 manage-data/ingest/tools/upload-data-files.md create mode 100644 manage-data/ingest/upload-data-files.md diff --git a/explore-analyze/machine-learning/nlp/ml-nlp-ner-example.md b/explore-analyze/machine-learning/nlp/ml-nlp-ner-example.md index 36625fd7b..143b05b61 100644 --- a/explore-analyze/machine-learning/nlp/ml-nlp-ner-example.md +++ b/explore-analyze/machine-learning/nlp/ml-nlp-ner-example.md @@ -113,7 +113,7 @@ Using the example text "Elastic is headquartered in Mountain View, California.", ## Add the NER model to an {{infer}} ingest pipeline [ex-ner-ingest] -You can perform bulk {{infer}} on documents as they are ingested by using an [{{infer}} processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/inference-processor.html) in your ingest pipeline. The novel *Les Misérables* by Victor Hugo is used as an example for {{infer}} in the following example. [Download](https://github.com/elastic/stack-docs/blob/8.5/docs/en/stack/ml/nlp/data/les-miserables-nd.json) the novel text split by paragraph as a JSON file, then upload it by using the [Data Visualizer](../../../manage-data/ingest/tools/upload-data-files.md). Give the new index the name `les-miserables` when uploading the file. +You can perform bulk {{infer}} on documents as they are ingested by using an [{{infer}} processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/inference-processor.html) in your ingest pipeline. The novel *Les Misérables* by Victor Hugo is used as an example for {{infer}} in the following example. [Download](https://github.com/elastic/stack-docs/blob/8.5/docs/en/stack/ml/nlp/data/les-miserables-nd.json) the novel text split by paragraph as a JSON file, then upload it by using the [Data Visualizer](../../../manage-data/ingest/upload-data-files.md). Give the new index the name `les-miserables` when uploading the file. Now create an ingest pipeline either in the [Stack management UI](ml-nlp-inference.md#ml-nlp-inference-processor) or by using the API: diff --git a/explore-analyze/machine-learning/nlp/ml-nlp-text-emb-vector-search-example.md b/explore-analyze/machine-learning/nlp/ml-nlp-text-emb-vector-search-example.md index bed59cf75..a2885dac1 100644 --- a/explore-analyze/machine-learning/nlp/ml-nlp-text-emb-vector-search-example.md +++ b/explore-analyze/machine-learning/nlp/ml-nlp-text-emb-vector-search-example.md @@ -103,7 +103,7 @@ In this step, you load the data that you later use in an ingest pipeline to get The data set `msmarco-passagetest2019-top1000` is a subset of the MS MARCO Passage Ranking data set used in the testing stage of the 2019 TREC Deep Learning Track. It contains 200 queries and for each query a list of relevant text passages extracted by a simple information retrieval (IR) system. From that data set, all unique passages with their IDs have been extracted and put into a [tsv file](https://github.com/elastic/stack-docs/blob/8.5/docs/en/stack/ml/nlp/data/msmarco-passagetest2019-unique.tsv), totaling 182469 passages. In the following, this file is used as the example data set. -Upload the file by using the [Data Visualizer](../../../manage-data/ingest/tools/upload-data-files.md). Name the first column `id` and the second one `text`. The index name is `collection`. After the upload is done, you can see an index named `collection` with 182469 documents. +Upload the file by using the [Data Visualizer](../../../manage-data/ingest/upload-data-files.md). Name the first column `id` and the second one `text`. The index name is `collection`. After the upload is done, you can see an index named `collection` with 182469 documents. :::{image} ../../../images/machine-learning-ml-nlp-text-emb-data.png :alt: Importing the data diff --git a/manage-data/ingest.md b/manage-data/ingest.md index e48a513fd..facc81f2c 100644 --- a/manage-data/ingest.md +++ b/manage-data/ingest.md @@ -28,7 +28,7 @@ Elastic offer tools designed to ingest specific types of general content. The co * To send **application data** directly to {{es}}, use an [{{es}} language client](https://www.elastic.co/guide/en/elasticsearch/client/index.html). * To index **web page content**, use the Elastic [web crawler](https://www.elastic.co/web-crawler). * To sync **data from third-party sources**, use [connectors](https://www.elastic.co/guide/en/elasticsearch/reference/current/es-connectors.html). A connector syncs content from an original data source to an {{es}} index. Using connectors you can create *searchable*, read-only replicas of your data sources. -* To index **single files** for testing in a non-production environment, use the {{kib}} [file uploader](ingest/tools/upload-data-files.md). +* To index **single files** for testing in a non-production environment, use the {{kib}} [file uploader](ingest/upload-data-files.md). If you would like to try things out before you add your own data, try using our [sample data](ingest/sample-data.md). diff --git a/manage-data/ingest/tools.md b/manage-data/ingest/tools.md index a5477ee44..d26ba6aad 100644 --- a/manage-data/ingest/tools.md +++ b/manage-data/ingest/tools.md @@ -18,15 +18,37 @@ mapped_urls: % Use migrated content from existing pages that map to this page: -% - [ ] ./raw-migrated-files/cloud/cloud/ec-cloud-ingest-data.md +% - [x] ./raw-migrated-files/cloud/cloud/ec-cloud-ingest-data.md % Notes: These are resources to pull from, but this new "Ingest tools overiew" page will not be a replacement for any of these old AsciiDoc pages. File upload: https://www.elastic.co/guide/en/kibana/current/connect-to-elasticsearch.html#upload-data-kibana https://www.elastic.co/guide/en/serverless/current/elasticsearch-ingest-data-file-upload.html API: https://www.elastic.co/guide/en/kibana/current/connect-to-elasticsearch.html#_add_data_with_programming_languages https://www.elastic.co/guide/en/elasticsearch/reference/current/docs.html https://www.elastic.co/guide/en/serverless/current/elasticsearch-ingest-data-through-api.html OpenTelemetry: https://github.com/elastic/opentelemetry Fleet and Agent: https://www.elastic.co/guide/en/fleet/current/fleet-overview.html https://www.elastic.co/guide/en/serverless/current/fleet-and-elastic-agent.html Logstash: https://www.elastic.co/guide/en/logstash/current/introduction.html https://www.elastic.co/guide/en/serverless/current/elasticsearch-ingest-data-through-logstash.html https://www.elastic.co/guide/en/serverless/current/logstash-pipelines.html Beats: https://www.elastic.co/guide/en/beats/libbeat/current/beats-reference.html https://www.elastic.co/guide/en/serverless/current/elasticsearch-ingest-data-through-beats.html APM: /solutions/observability/apps/application-performance-monitoring-apm.md Application logging: https://www.elastic.co/guide/en/observability/current/application-logs.html ECS logging: https://www.elastic.co/guide/en/observability/current/logs-ecs-application.html Elastic serverless forwarder for AWS: https://www.elastic.co/guide/en/esf/current/aws-elastic-serverless-forwarder.html Integrations: https://www.elastic.co/guide/en/integrations/current/introduction.html Search connectors: https://www.elastic.co/guide/en/elasticsearch/reference/current/es-connectors.html https://www.elastic.co/guide/en/serverless/current/elasticsearch-ingest-data-through-integrations-connector-client.html Web crawler: https://github.com/elastic/crawler/tree/main/docs -% - [ ] ./raw-migrated-files/ingest-docs/fleet/beats-agent-comparison.md -% - [ ] ./raw-migrated-files/kibana/kibana/connect-to-elasticsearch.md -% - [ ] https://www.elastic.co/customer-success/data-ingestion -% - [ ] https://github.com/elastic/ingest-docs/pull/1373 +% - [This comparison page is being moved to the reference section, so I'm linking to that from the current page - Wajiha] ./raw-migrated-files/ingest-docs/fleet/beats-agent-comparison.md +% - [x] ./raw-migrated-files/kibana/kibana/connect-to-elasticsearch.md +% - [x] https://www.elastic.co/customer-success/data-ingestion +% - [x] https://github.com/elastic/ingest-docs/pull/1373 -% Internal links rely on the following IDs being on this page (e.g. as a heading ID, paragraph ID, etc): +% Internal links rely on the following IDs being on this page (e.g. as a heading ID, paragraph ID, etc): +% These IDs are from content that I'm not including on this current page. I've resolved them by changing the internal links to anchor links where needed. - Wajiha $$$supported-outputs-beats-and-agent$$$ $$$additional-capabilities-beats-and-agent$$$ + +Depending on the type of data you want to ingest, you have a number of methods and tools available for use in your ingestion process. The table below provides more information about the available tools. Refer to our [Ingestion](/manage-data/ingest.md) overview for some guidelines to help you select the optimal tool for your use case. + +
+ +| Tools | Usage | Links to more information | +| ------- | --------------- | ------------------------- | +| Integrations | Ingest data using a variety of Elastic integrations. | [Elastic Integrations](https://www.elastic.co/guide/en/integrations/current/index.html) | +| File upload | Upload data from a file and inspect it before importing it into {{es}}. | [Upload data files](/manage-data/ingest/upload-data-files.md) | +| APIs | Ingest data through code by using the APIs of one of the language clients or the {{es}} HTTP APIs. | [Document APIs](https://www.elastic.co/guide/en/elasticsearch/reference/current/docs.html) | +| OpenTelemetry | Collect and send your telemetry data to Elastic Observability | [Elastic Distributions of OpenTelemetry](https://github.com/elastic/opentelemetry?tab=readme-ov-file#elastic-distributions-of-opentelemetry) | +| Fleet and Elastic Agent | Add monitoring for logs, metrics, and other types of data to a host using Elastic Agent, and centrally manage it using Fleet. | [Fleet and {{agent}} overview](https://www.elastic.co/guide/en/fleet/current/fleet-overview.html)
[{{fleet}} and {{agent}} restrictions (Serverless)](https://www.elastic.co/guide/en/fleet/current/fleet-agent-serverless-restrictions.html)
[{{beats}} and {{agent}} capabilities](https://www.elastic.co/guide/en/fleet/current/beats-agent-comparison.html)|| +| {{elastic-defend}} | {{elastic-defend}} provides organizations with prevention, detection, and response capabilities with deep visibility for EPP, EDR, SIEM, and Security Analytics use cases across Windows, macOS, and Linux operating systems running on both traditional endpoints and public cloud environments. | [Configure endpoint protection with {{elastic-defend}}](/solutions/security/configure-elastic-defend.md) | +| {{ls}} | Dynamically unify data from a wide variety of data sources and normalize it into destinations of your choice with {{ls}}. | [Logstash (Serverless)](https://www.elastic.co/guide/en/serverless/current/elasticsearch-ingest-data-through-logstash.html)
[Logstash pipelines](/manage-data/ingest/transform-enrich/logstash-pipelines.md) | +| {{beats}} | Use {{beats}} data shippers to send operational data to Elasticsearch directly or through Logstash. | [{{beats}} (Serverless)](https://www.elastic.co/guide/en/serverless/current/elasticsearch-ingest-data-through-beats.html)
[What are {{beats}}?](https://www.elastic.co/guide/en/beats/libbeat/current/beats-reference.html)
[{{beats}} and {{agent}} capabilities](https://www.elastic.co/guide/en/fleet/current/beats-agent-comparison.html)| +| APM | Collect detailed performance information on response time for incoming requests, database queries, calls to caches, external HTTP requests, and more. | [Application performance monitoring (APM)](/solutions/observability/apps/application-performance-monitoring-apm.md) | +| Application logs | Ingest application logs using Filebeat, {{agent}}, or the APM agent, or reformat application logs into Elastic Common Schema (ECS) logs and then ingest them using Filebeat or {{agent}}. | [Stream application logs](/solutions/observability/logs/stream-application-logs.md)
[ECS formatted application logs](/solutions/observability/logs/ecs-formatted-application-logs.md) | +| Elastic Serverless forwarder for AWS | Ship logs from your AWS environment to cloud-hosted, self-managed Elastic environments, or {{ls}}. | [Elastic Serverless Forwarder](https://www.elastic.co/guide/en/esf/current/aws-elastic-serverless-forwarder.html) | +| Connectors | Use connectors to extract data from an original data source and sync it to an {{es}} index. | [Ingest content with Elastic connectors +](https://www.elastic.co/guide/en/elasticsearch/reference/current/es-connectors.html)
[Connector clients](https://www.elastic.co/guide/en/serverless/current/elasticsearch-ingest-data-through-integrations-connector-client.html) | +| Web crawler | Discover, extract, and index searchable content from websites and knowledge bases using the web crawler. | [Elastic Open Web Crawler](https://github.com/elastic/crawler#readme) | \ No newline at end of file diff --git a/manage-data/ingest/tools/upload-data-files.md b/manage-data/ingest/tools/upload-data-files.md deleted file mode 100644 index 84f43298b..000000000 --- a/manage-data/ingest/tools/upload-data-files.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -mapped_urls: - - https://www.elastic.co/guide/en/serverless/current/elasticsearch-ingest-data-file-upload.html - - https://www.elastic.co/guide/en/kibana/current/connect-to-elasticsearch.html#upload-data-kibana ---- - -# Upload data files [upload-data-kibana] - -% What needs to be done: Align serverless/stateful - -% Use migrated content from existing pages that map to this page: - -% - [ ] ./raw-migrated-files/docs-content/serverless/elasticsearch-ingest-data-file-upload.md -% - [ ] ./raw-migrated-files/kibana/kibana/connect-to-elasticsearch.md - - - -% Note from David: I've removed the ID $$$upload-data-kibana$$$ from manage-data/ingest.md as those links should instead point to this page. So, please ensure that the following ID is included on this page. I've added it beside the title. - diff --git a/manage-data/ingest/upload-data-files.md b/manage-data/ingest/upload-data-files.md new file mode 100644 index 000000000..212fe3842 --- /dev/null +++ b/manage-data/ingest/upload-data-files.md @@ -0,0 +1,63 @@ +--- +mapped_urls: + - https://www.elastic.co/guide/en/serverless/current/elasticsearch-ingest-data-file-upload.html + - https://www.elastic.co/guide/en/kibana/current/connect-to-elasticsearch.html#upload-data-kibana +--- + +# Upload data files [upload-data-kibana] + +% What needs to be done: Align serverless/stateful + +% Use migrated content from existing pages that map to this page: + +% - [x] ./raw-migrated-files/docs-content/serverless/elasticsearch-ingest-data-file-upload.md +% - [x] ./raw-migrated-files/kibana/kibana/connect-to-elasticsearch.md + +% Note from David: I've removed the ID $$$upload-data-kibana$$$ from manage-data/ingest.md as those links should instead point to this page. So, please ensure that the following ID is included on this page. I've added it beside the title. + +You can upload files, view their fields and metrics, and optionally import them to {{es}} with the Data Visualizer. + +To use the Data Visualizer, click **Upload a file** on the {{es}} **Getting Started** page or navigate to the **Integrations** view and search for **Upload a file**. Clicking **Upload a file** opens the Data Visualizer UI. + +:::{image} /images/serverless-file-uploader-UI.png +:alt: File upload UI +:class: screenshot +::: + +Drag a file into the upload area or click **Select or drag and drop a file** to choose a file from your computer. + +You can upload different file formats for analysis with the Data Visualizer: + +File formats supported up to 500 MB: + +* CSV +* TSV +* NDJSON +* Log files + +File formats supported up to 60 MB: + +* PDF +* Microsoft Office files (Word, Excel, PowerPoint) +* Plain Text (TXT) +* Rich Text (RTF) +* Open Document Format (ODF) + +The Data Visualizer displays the first 1000 rows of the file. You can inspect the data and make any necessary changes before importing it. Click **Import** continue the process. + +This process will create an index and import the data into {{es}}. Once your data is in {{es}}, you can start exploring it, see [Explore and analyze](/explore-analyze/index.md) for more information. + +::::{important} +The upload feature is not intended for use as part of a repeated production process, but rather for the initial exploration of your data. + +:::: + +## Required privileges + +The {{stack-security-features}} provide roles and privileges that control which users can upload files. To upload a file in {{kib}} and import it into an {{es}} index, you’ll need: + +* `manage_pipeline` or `manage_ingest_pipelines` cluster privilege +* `create`, `create_index`, `manage`, and `read` index privileges for the index +* `all` {{kib}} privileges for **Discover** and **Data Views Management** + +You can manage your roles, privileges, and spaces in **{{stack-manage-app}}**. \ No newline at end of file diff --git a/manage-data/toc.yml b/manage-data/toc.yml index 62e359f72..1c5e611a7 100644 --- a/manage-data/toc.yml +++ b/manage-data/toc.yml @@ -91,6 +91,7 @@ toc: - file: ingest/ingest-reference-architectures/agent-es-airgapped.md - file: ingest/ingest-reference-architectures/agent-ls-airgapped.md - file: ingest/sample-data.md + - file: ingest/upload-data-files.md - file: ingest/transform-enrich.md children: - file: ingest/transform-enrich/ingest-pipelines-serverless.md @@ -106,8 +107,6 @@ toc: - file: ingest/transform-enrich/example-enrich-data-by-matching-value-to-range.md - file: ingest/transform-enrich/index-mapping-text-analysis.md - file: ingest/tools.md - children: - - file: ingest/tools/upload-data-files.md - file: lifecycle.md children: - file: lifecycle/data-tiers.md diff --git a/raw-migrated-files/elasticsearch/elasticsearch-reference/semantic-search-inference.md b/raw-migrated-files/elasticsearch/elasticsearch-reference/semantic-search-inference.md index 1486e3d7b..0401d8551 100644 --- a/raw-migrated-files/elasticsearch/elasticsearch-reference/semantic-search-inference.md +++ b/raw-migrated-files/elasticsearch/elasticsearch-reference/semantic-search-inference.md @@ -824,7 +824,7 @@ In this step, you load the data that you later use in the {{infer}} ingest pipel Use the `msmarco-passagetest2019-top1000` data set, which is a subset of the MS MARCO Passage Ranking data set. It consists of 200 queries, each accompanied by a list of relevant text passages. All unique passages, along with their IDs, have been extracted from that data set and compiled into a [tsv file](https://github.com/elastic/stack-docs/blob/main/docs/en/stack/ml/nlp/data/msmarco-passagetest2019-unique.tsv). -Download the file and upload it to your cluster using the [Data Visualizer](../../../manage-data/ingest/tools/upload-data-files.md) in the {{ml-app}} UI. After your data is analyzed, click **Override settings**. Under **Edit field names***, assign `id` to the first column and `content` to the second. Click ***Apply***, then ***Import**. Name the index `test-data`, and click **Import**. After the upload is complete, you will see an index named `test-data` with 182,469 documents. +Download the file and upload it to your cluster using the [Data Visualizer](../../../manage-data/ingest/upload-data-files.md) in the {{ml-app}} UI. After your data is analyzed, click **Override settings**. Under **Edit field names***, assign `id` to the first column and `content` to the second. Click ***Apply***, then ***Import**. Name the index `test-data`, and click **Import**. After the upload is complete, you will see an index named `test-data` with 182,469 documents. ## Ingest the data through the {{infer}} ingest pipeline [reindexing-data-infer] diff --git a/raw-migrated-files/ingest-docs/fleet/beats-agent-comparison.md b/raw-migrated-files/ingest-docs/fleet/beats-agent-comparison.md index 0a5d7e0d9..4acf7eaf5 100644 --- a/raw-migrated-files/ingest-docs/fleet/beats-agent-comparison.md +++ b/raw-migrated-files/ingest-docs/fleet/beats-agent-comparison.md @@ -23,8 +23,8 @@ This article summarizes the features and functionality you need to be aware of b The following steps will help you determine if {{agent}} can support your use case: 1. Determine if the integrations you need are supported and Generally Available (GA) on {{agent}}. To find out if an integration is GA, see the [{{integrations}} quick reference table](https://docs.elastic.co/en/integrations/all_integrations). -2. If the integration is available, check [Supported outputs](../../../manage-data/ingest/tools.md#supported-outputs-beats-and-agent) to see whether the required output is also supported. -3. Review [Capabilities comparison](../../../manage-data/ingest/tools.md#additional-capabilities-beats-and-agent) to determine if any features required by your deployment are supported. {{agent}} should support most of the features available on {{beats}} and is updated for each release. +2. If the integration is available, check [Supported outputs](#supported-outputs-beats-and-agent) to see whether the required output is also supported. +3. Review [Capabilities comparison](#additional-capabilities-beats-and-agent) to determine if any features required by your deployment are supported. {{agent}} should support most of the features available on {{beats}} and is updated for each release. If you are satisfied with all three steps, then {{agent}} is suitable for your deployment. However, if any steps fail your assessment, you should continue using {{beats}}, and review future updates or contact us in the [discuss forum](https://discuss.elastic.co/). @@ -67,7 +67,7 @@ The following table shows the outputs supported by the {{agent}} in 9.0.0-beta1: | [Project paths](https://www.elastic.co/guide/en/beats/filebeat/current/configuration-path.html) | {{agent}} configures these paths to provide a simpler and more streamlinedconfiguration experience. | | [External configuration file loading](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-configuration-reloading.html) | Config is distributed via policy. | | [Live reloading](https://www.elastic.co/guide/en/beats/filebeat/current/_live_reloading.html) | Related to the config file reload. | -| [Outputs](https://www.elastic.co/guide/en/beats/filebeat/current/configuring-output.html) | Configured through {{fleet}}. See [Supported outputs](../../../manage-data/ingest/tools.md#supported-outputs-beats-and-agent). | +| [Outputs](https://www.elastic.co/guide/en/beats/filebeat/current/configuring-output.html) | Configured through {{fleet}}. See [Supported outputs](#supported-outputs-beats-and-agent). | | [SSL](https://www.elastic.co/guide/en/beats/filebeat/current/configuration-ssl.html) | Supported | | [{{ilm-cap}}](https://www.elastic.co/guide/en/beats/filebeat/current/ilm.html) | Enabled by default although the Agent uses [data streams](https://www.elastic.co/guide/en/fleet/current/data-streams.html). | | [{{es}} index template loading](https://www.elastic.co/guide/en/beats/filebeat/current/configuration-template.html) | No longer applicable | diff --git a/solutions/search/hybrid-semantic-text.md b/solutions/search/hybrid-semantic-text.md index 7f906f6a0..1b7670c7e 100644 --- a/solutions/search/hybrid-semantic-text.md +++ b/solutions/search/hybrid-semantic-text.md @@ -56,7 +56,7 @@ In this step, you load the data that you later use to create embeddings from. Use the `msmarco-passagetest2019-top1000` data set, which is a subset of the MS MARCO Passage Ranking data set. It consists of 200 queries, each accompanied by a list of relevant text passages. All unique passages, along with their IDs, have been extracted from that data set and compiled into a [tsv file](https://github.com/elastic/stack-docs/blob/main/docs/en/stack/ml/nlp/data/msmarco-passagetest2019-unique.tsv). -Download the file and upload it to your cluster using the [Data Visualizer](../../manage-data/ingest/tools/upload-data-files.md) in the {{ml-app}} UI. After your data is analyzed, click **Override settings**. Under **Edit field names***, assign `id` to the first column and `content` to the second. Click ***Apply***, then ***Import**. Name the index `test-data`, and click **Import**. After the upload is complete, you will see an index named `test-data` with 182,469 documents. +Download the file and upload it to your cluster using the [Data Visualizer](../../manage-data/ingest/upload-data-files.md) in the {{ml-app}} UI. After your data is analyzed, click **Override settings**. Under **Edit field names***, assign `id` to the first column and `content` to the second. Click ***Apply***, then ***Import**. Name the index `test-data`, and click **Import**. After the upload is complete, you will see an index named `test-data` with 182,469 documents. ## Reindex the data for hybrid search [hybrid-search-reindex-data] diff --git a/solutions/search/ingest-for-search.md b/solutions/search/ingest-for-search.md index 507225594..14659c8c3 100644 --- a/solutions/search/ingest-for-search.md +++ b/solutions/search/ingest-for-search.md @@ -41,7 +41,7 @@ You can use these specialized tools to add general content to {{es}} indices. |--------|-------------|-------| | [**Web crawler**](https://github.com/elastic/crawler) | Programmatically discover and index content from websites and knowledge bases | Crawl public-facing web content or internal sites accessible via HTTP proxy | | [**Search connectors**](https://github.com/elastic/connectors) | Third-party integrations to popular content sources like databases, cloud storage, and business applications | Choose from a range of Elastic-built connectors or build your own in Python using the Elastic connector framework| -| [**File upload**](/manage-data/ingest/tools/upload-data-files.md)| One-off manual uploads through the UI | Useful for testing or very small-scale use cases, but not recommended for production workflows | +| [**File upload**](/manage-data/ingest/upload-data-files.md)| One-off manual uploads through the UI | Useful for testing or very small-scale use cases, but not recommended for production workflows | ### Process data at ingest time diff --git a/solutions/search/semantic-search/semantic-search-elser-ingest-pipelines.md b/solutions/search/semantic-search/semantic-search-elser-ingest-pipelines.md index 5a7689eeb..528477218 100644 --- a/solutions/search/semantic-search/semantic-search-elser-ingest-pipelines.md +++ b/solutions/search/semantic-search/semantic-search-elser-ingest-pipelines.md @@ -102,7 +102,7 @@ The `msmarco-passagetest2019-top1000` dataset was not utilized to train the mode :::: -Download the file and upload it to your cluster using the [File Uploader](../../../manage-data/ingest/tools/upload-data-files.md) in the UI. After your data is analyzed, click **Override settings**. Under **Edit field names***, assign `id` to the first column and `content` to the second. Click ***Apply***, then ***Import**. Name the index `test-data`, and click **Import**. After the upload is complete, you will see an index named `test-data` with 182,469 documents. +Download the file and upload it to your cluster using the [File Uploader](../../../manage-data/ingest/upload-data-files.md) in the UI. After your data is analyzed, click **Override settings**. Under **Edit field names***, assign `id` to the first column and `content` to the second. Click ***Apply***, then ***Import**. Name the index `test-data`, and click **Import**. After the upload is complete, you will see an index named `test-data` with 182,469 documents. ### Ingest the data through the {{infer}} ingest pipeline [reindexing-data-elser] diff --git a/solutions/search/semantic-search/semantic-search-inference.md b/solutions/search/semantic-search/semantic-search-inference.md index fe0335eb7..2f5d61066 100644 --- a/solutions/search/semantic-search/semantic-search-inference.md +++ b/solutions/search/semantic-search/semantic-search-inference.md @@ -829,7 +829,7 @@ In this step, you load the data that you later use in the {{infer}} ingest pipel Use the `msmarco-passagetest2019-top1000` data set, which is a subset of the MS MARCO Passage Ranking data set. It consists of 200 queries, each accompanied by a list of relevant text passages. All unique passages, along with their IDs, have been extracted from that data set and compiled into a [tsv file](https://github.com/elastic/stack-docs/blob/main/docs/en/stack/ml/nlp/data/msmarco-passagetest2019-unique.tsv). -Download the file and upload it to your cluster using the [Data Visualizer](../../../manage-data/ingest/tools/upload-data-files.md) in the {{ml-app}} UI. After your data is analyzed, click **Override settings**. Under **Edit field names***, assign `id` to the first column and `content` to the second. Click ***Apply***, then ***Import**. Name the index `test-data`, and click **Import**. After the upload is complete, you will see an index named `test-data` with 182,469 documents. +Download the file and upload it to your cluster using the [Data Visualizer](../../../manage-data/ingest/upload-data-files.md) in the {{ml-app}} UI. After your data is analyzed, click **Override settings**. Under **Edit field names***, assign `id` to the first column and `content` to the second. Click ***Apply***, then ***Import**. Name the index `test-data`, and click **Import**. After the upload is complete, you will see an index named `test-data` with 182,469 documents. ## Ingest the data through the {{infer}} ingest pipeline [reindexing-data-infer] diff --git a/solutions/search/semantic-search/semantic-search-semantic-text.md b/solutions/search/semantic-search/semantic-search-semantic-text.md index 896d77500..6c968fb40 100644 --- a/solutions/search/semantic-search/semantic-search-semantic-text.md +++ b/solutions/search/semantic-search/semantic-search-semantic-text.md @@ -63,7 +63,7 @@ In this step, you load the data that you later use to create embeddings from it. Use the `msmarco-passagetest2019-top1000` data set, which is a subset of the MS MARCO Passage Ranking data set. It consists of 200 queries, each accompanied by a list of relevant text passages. All unique passages, along with their IDs, have been extracted from that data set and compiled into a [tsv file](https://github.com/elastic/stack-docs/blob/main/docs/en/stack/ml/nlp/data/msmarco-passagetest2019-unique.tsv). -Download the file and upload it to your cluster using the [Data Visualizer](../../../manage-data/ingest/tools/upload-data-files.md) in the {{ml-app}} UI. After your data is analyzed, click **Override settings**. Under **Edit field names***, assign `id` to the first column and `content` to the second. Click ***Apply***, then ***Import**. Name the index `test-data`, and click **Import**. After the upload is complete, you will see an index named `test-data` with 182,469 documents. +Download the file and upload it to your cluster using the [Data Visualizer](../../../manage-data/ingest/upload-data-files.md) in the {{ml-app}} UI. After your data is analyzed, click **Override settings**. Under **Edit field names***, assign `id` to the first column and `content` to the second. Click ***Apply***, then ***Import**. Name the index `test-data`, and click **Import**. After the upload is complete, you will see an index named `test-data` with 182,469 documents. ## Reindex the data [semantic-text-reindex-data] diff --git a/solutions/search/serverless-elasticsearch-get-started.md b/solutions/search/serverless-elasticsearch-get-started.md index b6463e8a4..c71dd2845 100644 --- a/solutions/search/serverless-elasticsearch-get-started.md +++ b/solutions/search/serverless-elasticsearch-get-started.md @@ -109,7 +109,7 @@ If you’re already familiar with Elasticsearch, you can jump right into setting * [{{es}} API](ingest-for-search.md) * [Connector clients](https://www.elastic.co/guide/en/serverless/current/elasticsearch-ingest-data-through-integrations-connector-client.html) - * [File Uploader](../../manage-data/ingest/tools/upload-data-files.md) + * [File Uploader](../../manage-data/ingest/upload-data-files.md) * [{{beats}}](https://www.elastic.co/guide/en/serverless/current/elasticsearch-ingest-data-through-beats.html) * [{{ls}}](https://www.elastic.co/guide/en/serverless/current/elasticsearch-ingest-data-through-logstash.html) * [Elastic Open Web Crawler](https://github.com/elastic/crawler) From c9130558664b59549daeb0eba42cdb7fa2ab1624 Mon Sep 17 00:00:00 2001 From: Colleen McGinnis Date: Thu, 20 Feb 2025 10:07:40 -0600 Subject: [PATCH 06/13] [cross-repo links] Add ID that cross-repo links depends on (#533) Add another ID that cross-repo links depends on like we did in https://github.com/elastic/docs-content/pull/495. --- deploy-manage/deploy/kibana-reporting-configuration.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/deploy-manage/deploy/kibana-reporting-configuration.md b/deploy-manage/deploy/kibana-reporting-configuration.md index f1dac36bf..25cb0281e 100644 --- a/deploy-manage/deploy/kibana-reporting-configuration.md +++ b/deploy-manage/deploy/kibana-reporting-configuration.md @@ -21,6 +21,8 @@ mapped_urls: $$$reporting-chromium-sandbox$$$ +$$$grant-user-access$$$ + ⚠️ **This page is a work in progress.** ⚠️ The documentation team is working to combine content pulled from the following pages: From 31304e9c2e24b6a1922ecef814841711b9b8cc49 Mon Sep 17 00:00:00 2001 From: George Wallace Date: Thu, 20 Feb 2025 09:15:44 -0700 Subject: [PATCH 07/13] merging connectors content (#484) Co-authored-by: shainaraskas <58563081+shainaraskas@users.noreply.github.com> --- deploy-manage/manage-connectors.md | 89 +++++++++++-- images/kibana-connector-listing.png | Bin 120935 -> 0 bytes images/kibana-connectors-import-banner.png | Bin 281591 -> 0 bytes .../serverless/action-connectors.md | 40 ------ .../kibana/kibana/action-types.md | 123 ------------------ .../kibana/kibana/management.md | 2 +- raw-migrated-files/toc.yml | 2 - 7 files changed, 78 insertions(+), 178 deletions(-) delete mode 100644 images/kibana-connector-listing.png delete mode 100644 images/kibana-connectors-import-banner.png delete mode 100644 raw-migrated-files/docs-content/serverless/action-connectors.md delete mode 100644 raw-migrated-files/kibana/kibana/action-types.md diff --git a/deploy-manage/manage-connectors.md b/deploy-manage/manage-connectors.md index ba5c8cdfe..f85d84be1 100644 --- a/deploy-manage/manage-connectors.md +++ b/deploy-manage/manage-connectors.md @@ -2,25 +2,90 @@ mapped_urls: - https://www.elastic.co/guide/en/kibana/current/action-types.html - https://www.elastic.co/guide/en/serverless/current/action-connectors.html +applies_to: + stack: + serverless: --- -# Manage connectors +# Manage connectors [connector-management] -% What needs to be done: Align serverless/stateful +Connectors serve as a central place to store connection information for both Elastic and third-party systems. They enable the linking of actions to rules, which execute as background tasks on the {{kib}} server when rule conditions are met. This allows rules to route actions to various destinations such as log files, ticketing systems, and messaging tools. Different {{kib}} apps may have their own rule types, but they typically share connectors. The **{{stack-manage-app}} > {{connectors-ui}}** provides a central location to view and manage all connectors in the current space. -% GitHub issue: https://github.com/elastic/docs-projects/issues/352 +::::{note} +This page is about {{kib}} connectors that integrate with services like generative AI model providers. If you’re looking for Search connectors that synchronize third-party data into {{es}}, refer to [Connector clients](https://www.elastic.co/guide/en/serverless/current/elasticsearch-ingest-data-through-integrations-connector-client.html). -% Scope notes: Connectors management, probably moving some content to reference. We should align the serverless and stateful documentation. +:::: -% Use migrated content from existing pages that map to this page: +## Required permissions [_required_permissions_2] -% - [ ] ./raw-migrated-files/kibana/kibana/action-types.md -% Notes: 28 children -% - [ ] ./raw-migrated-files/docs-content/serverless/action-connectors.md +Access to connectors is granted based on your privileges to alerting-enabled features. For more information, go to [Security](../explore-analyze/alerts-cases/alerts/alerting-setup.md#alerting-security). -$$$connector-management$$$ +## Connector networking configuration [_connector_networking_configuration] -**This page is a work in progress.** The documentation team is working to combine content pulled from the following pages: +```yaml {applies_to} +stack: +``` -* [/raw-migrated-files/kibana/kibana/action-types.md](/raw-migrated-files/kibana/kibana/action-types.md) -* [/raw-migrated-files/docs-content/serverless/action-connectors.md](/raw-migrated-files/docs-content/serverless/action-connectors.md) \ No newline at end of file +If you're using {{stack}}, use the [action configuration settings](https://www.elastic.co/guide/en/kibana/current/alert-action-settings-kb.html#action-settings) to customize connector networking configurations, such as proxies, certificates, or TLS settings. You can set configurations that apply to all your connectors or use `xpack.actions.customHostSettings` to set per-host configurations. + +## Connector list [connectors-list] + +In **{{stack-manage-app}} > {{connectors-ui}}**, you can find a list of the connectors in the current space. You can use the search bar to find specific connectors by name and type. The **Type** dropdown also enables you to filter to a subset of connector types. + +:::{image} ../images/kibana-connector-filter-by-type.png +:alt: Filtering the connector list by types of connectors +:class: screenshot +::: + +You can delete individual connectors using the trash icon. Alternatively, select multiple connectors and delete them in bulk using the **Delete** button. + +:::{image} ../images/kibana-connector-delete.png +:alt: Deleting connectors individually or in bulk +:class: screenshot +::: + +::::{note} +You can delete a connector even if there are still actions referencing it. When this happens the action will fail to run and errors appear in the {{kib}} logs. + +:::: + +## Creating a new connector [creating-new-connector] + +New connectors can be created with the **Create connector** button, which guides you to select the type of connector and configure its properties. For a full list of available connectors, see [Available connectors](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/connectors-kibana.md). + +::::{note} +Some connector types are paid commercial features, while others are free. For a comparison of the Elastic subscription levels, go to [the subscription page](https://www.elastic.co/subscriptions). +:::: + +:::{image} ../images/kibana-connector-select-type.png +:alt: Connector select type +:class: screenshot +:width: 75% +::: + +After you create a connector, it is available for use any time you set up an action in the current space. + +::::{tip} +For out-of-the-box and standardized connectors, refer to [preconfigured connectors](https://www.elastic.co/guide/en/kibana/current/pre-configured-connectors.html). + +You can also manage connectors as resources with the [Elasticstack provider](https://registry.terraform.io/providers/elastic/elasticstack/latest) for Terraform. For more details, refer to the [elasticstack_kibana_action_connector](https://registry.terraform.io/providers/elastic/elasticstack/latest/docs/resources/kibana_action_connector) resource. + +Preconfigured connectors and the Terraform resource are not available in {{serverless-full}} projects. +:::: + +## Importing and exporting connectors [importing-and-exporting-connectors] + +To import and export connectors, use the [Saved Objects Management UI](/explore-analyze/find-and-organize/saved-objects.md). + +If a connector is missing sensitive information after the import, a **Fix** button appears in **{{connectors-ui}}**. + +:::{image} ../images/kibana-connectors-with-missing-secrets.png +:alt: Connectors with missing secrets +:class: screenshot +::: + +## Monitoring connectors [monitoring-connectors] + +You can query the [Event log index](/explore-analyze/alerts-cases/alerts/event-log-index.md) to gather information on connector successes and failures. + +If you're using {{stack}}, then you can also use the [Task Manager health API](/deploy-manage/monitor/kibana-task-manager-health-monitoring.md) to monitor connector performance. However, if connectors fail to run, they will report as successful to Task Manager. The failure stats will not accurately depict connector failures. diff --git a/images/kibana-connector-listing.png b/images/kibana-connector-listing.png deleted file mode 100644 index 9bd55b49dd8429a39015dab192505dccf85fe652..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120935 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�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 gb34Z|?#|BvlA=!SInI;gPtYILx0*`TidNzO1C {{connectors-ui}}** offers a central place to view and manage all the connectors in the current space. - -:::{image} ../../../images/kibana-connector-listing.png -:alt: Example connector listing in the {{rules-ui}} UI -:class: screenshot -::: - - -## Required permissions [_required_permissions_2] - -Access to connectors is granted based on your privileges to alerting-enabled features. For more information, go to [Security](../../../explore-analyze/alerts-cases/alerts/alerting-setup.md#alerting-security). - - -## Connector networking configuration [_connector_networking_configuration] - -Use the [action configuration settings](https://www.elastic.co/guide/en/kibana/current/alert-action-settings-kb.html#action-settings) to customize connector networking configurations, such as proxies, certificates, or TLS settings. You can set configurations that apply to all your connectors or use `xpack.actions.customHostSettings` to set per-host configurations. - - -## Connector list [connectors-list] - -In **{{stack-manage-app}} > {{connectors-ui}}**, you can find a list of the connectors in the current space. You can use the search bar to find specific connectors by name and type. The **Type** dropdown also enables you to filter to a subset of connector types. - -:::{image} ../../../images/kibana-connector-filter-by-type.png -:alt: Filtering the connector list by types of connectors -:class: screenshot -::: - -You can delete individual connectors using the trash icon. Alternatively, select multiple connectors and delete them in bulk using the **Delete** button. - -:::{image} ../../../images/kibana-connector-delete.png -:alt: Deleting connectors individually or in bulk -:class: screenshot -::: - -::::{note} -You can delete a connector even if there are still actions referencing it. When this happens the action will fail to run and errors appear in the {{kib}} logs. - -:::: - - - -## Creating a new connector [creating-new-connector] - -New connectors can be created with the **Create connector** button, which guides you to select the type of connector and configure its properties. - -:::{image} ../../../images/kibana-connector-select-type.png -:alt: Connector select type -:class: screenshot -::: - -After you create a connector, it is available for use any time you set up an action in the current space. - -For out-of-the-box and standardized connectors, refer to [preconfigured connectors](https://www.elastic.co/guide/en/kibana/current/pre-configured-connectors.html). - -::::{tip} -You can also manage connectors as resources with the [Elasticstack provider](https://registry.terraform.io/providers/elastic/elasticstack/latest) for Terraform. For more details, refer to the [elasticstack_kibana_action_connector](https://registry.terraform.io/providers/elastic/elasticstack/latest/docs/resources/kibana_action_connector) resource. -:::: - - - -## Importing and exporting connectors [importing-and-exporting-connectors] - -To import and export connectors, use the [Saved Objects Management UI](/explore-analyze/find-and-organize/saved-objects.md). - -:::{image} ../../../images/kibana-connectors-import-banner.png -:alt: Connectors import banner -:class: screenshot -::: - -If a connector is missing sensitive information after the import, a **Fix** button appears in **{{connectors-ui}}**. - -:::{image} ../../../images/kibana-connectors-with-missing-secrets.png -:alt: Connectors with missing secrets -:class: screenshot -::: - - -## Monitoring connectors [monitoring-connectors] - -The [Task Manager health API](../../../deploy-manage/monitor/kibana-task-manager-health-monitoring.md) helps you understand the performance of all tasks in your environment. However, if connectors fail to run, they will report as successful to Task Manager. The failure stats will not accurately depict the performance of connectors. - -For more information on connector successes and failures, refer to the [Event log index](../../../explore-analyze/alerts-cases/alerts/event-log-index.md). diff --git a/raw-migrated-files/kibana/kibana/management.md b/raw-migrated-files/kibana/kibana/management.md index b2b82600f..2eab0f956 100644 --- a/raw-migrated-files/kibana/kibana/management.md +++ b/raw-migrated-files/kibana/kibana/management.md @@ -32,7 +32,7 @@ Access to individual features is governed by {{es}} and {{kib}} privileges. Cons | --- | --- | | [{{rules-ui}}](../../../explore-analyze/alerts-cases.md) | Centrally [manage your rules](../../../explore-analyze/alerts-cases/alerts/create-manage-rules.md) across {{kib}}. | | [Cases](../../../explore-analyze/alerts-cases/cases.md) | Create and manage cases to investigate issues. | -| [{{connectors-ui}}](../../../deploy-manage/manage-connectors.md) | Create and [manage reusable connectors](../../../deploy-manage/manage-connectors.md#connector-management) for triggering actions. | +| [{{connectors-ui}}](../../../deploy-manage/manage-connectors.md) | Create and [manage reusable connectors](../../../deploy-manage/manage-connectors.md) for triggering actions. | | [Reporting](../../../explore-analyze/report-and-share.md) | Monitor the generation of reports—PDF, PNG, and CSV—and download reports that you previously generated.A report can contain a dashboard, visualization, table with Discover search results, or Canvas workpad. | | Machine Learning Jobs | View, export, and import your [{{anomaly-detect}}](../../../explore-analyze/machine-learning/anomaly-detection.md) and[{{dfanalytics}}](../../../explore-analyze/machine-learning/data-frame-analytics.md) jobs. Open the Single MetricViewer or Anomaly Explorer to see your {{anomaly-detect}} results. | | [Watcher](../../../explore-analyze/alerts-cases/watcher.md) | 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 goesabove a certain percentage. | diff --git a/raw-migrated-files/toc.yml b/raw-migrated-files/toc.yml index 3e71b4e3e..dbdad1616 100644 --- a/raw-migrated-files/toc.yml +++ b/raw-migrated-files/toc.yml @@ -192,7 +192,6 @@ toc: - file: docs-content/serverless/index.md children: - file: docs-content/serverless/_cloud_native_vulnerability_management_dashboard.md - - file: docs-content/serverless/action-connectors.md - file: docs-content/serverless/ai-assistant-knowledge-base.md - file: docs-content/serverless/application-and-service-monitoring.md - file: docs-content/serverless/attack-discovery.md @@ -451,7 +450,6 @@ toc: - file: ingest-docs/ingest-overview/index.md - file: kibana/kibana/index.md children: - - file: kibana/kibana/action-types.md - file: kibana/kibana/apm-settings-kb.md - file: kibana/kibana/connect-to-elasticsearch.md - file: kibana/kibana/console-kibana.md From 931204c9f20bf5177042ca9e501615dd9d872e6f Mon Sep 17 00:00:00 2001 From: Colleen McGinnis Date: Thu, 20 Feb 2025 10:59:32 -0600 Subject: [PATCH 08/13] Use cross-repo links, update recently available local links (#510) Updates cross-repo links (and other internal links that were not able to be resolved the last time the script was run). --- .../elastic-cloud-enterprise-api-keys.md | 2 +- .../deployments-autoscaling-on-eck.md | 4 +- .../autoscaling/ec-autoscaling-api-example.md | 2 +- deploy-manage/autoscaling/ec-autoscaling.md | 2 +- .../ece-autoscaling-api-example.md | 2 +- deploy-manage/autoscaling/ece-autoscaling.md | 2 +- deploy-manage/autoscaling/ech-autoscaling.md | 2 +- .../cloud-organization/billing/billing-faq.md | 2 +- ...ud-hosted-deployment-billing-dimensions.md | 2 +- .../cloud-organization/tools-and-apis.md | 8 +- .../cloud-enterprise/assign-roles-to-hosts.md | 2 +- ...-add-support-for-node-roles-autoscaling.md | 4 +- .../cloud-enterprise/change-endpoint-urls.md | 2 +- .../configure-host-rhel-cloud.md | 4 +- .../cloud-enterprise/deployment-templates.md | 2 +- ...ce-configure-templates-index-management.md | 2 +- .../deploy/cloud-enterprise/ece-ha.md | 12 +-- .../cloud-enterprise/ece-manage-capacity.md | 8 +- .../deploy/cloud-enterprise/find-cloud-id.md | 8 +- .../migrate-ece-to-podman-hosts.md | 4 +- .../post-installation-steps.md | 2 +- .../advanced-configuration-logstash.md | 2 +- .../advanced-configuration-maps-server.md | 2 +- .../cloud-on-k8s/advanced-configuration.md | 2 +- .../advanced-elasticsearch-node-scheduling.md | 10 +-- .../deploy/cloud-on-k8s/air-gapped-install.md | 2 +- .../cloud-on-k8s/configuration-beats.md | 6 +- .../configuration-examples-beats.md | 2 +- .../configuration-examples-fleet.md | 2 +- .../configuration-examples-standalone.md | 2 +- .../cloud-on-k8s/configuration-fleet.md | 4 +- .../cloud-on-k8s/configuration-standalone.md | 2 +- .../cloud-on-k8s/create-custom-images.md | 4 +- .../custom-configuration-files-plugins.md | 4 +- .../cloud-on-k8s/elastic-maps-server.md | 2 +- .../elastic-stack-configuration-policies.md | 6 +- .../elasticsearch-configuration.md | 4 +- .../elasticsearch-deployment-quickstart.md | 6 +- .../fleet-managed-elastic-agent.md | 2 +- .../deploy/cloud-on-k8s/http-configuration.md | 2 +- .../k8s-kibana-advanced-configuration.md | 10 +-- .../k8s-kibana-http-configuration.md | 2 +- .../cloud-on-k8s/k8s-service-mesh-istio.md | 2 +- .../cloud-on-k8s/k8s-service-mesh-linkerd.md | 2 +- .../kibana-instance-quickstart.md | 4 +- .../deploy/cloud-on-k8s/known-limitations.md | 2 +- .../deploy/cloud-on-k8s/logstash-plugins.md | 32 ++++---- deploy-manage/deploy/cloud-on-k8s/map-data.md | 2 +- .../deploy/cloud-on-k8s/node-configuration.md | 2 +- .../cloud-on-k8s/nodes-orchestration.md | 6 +- .../deploy/cloud-on-k8s/quickstart-fleet.md | 2 +- .../deploy/cloud-on-k8s/readiness-probe.md | 2 +- deploy-manage/deploy/cloud-on-k8s/recipes.md | 2 +- ...requests-routing-to-elasticsearch-nodes.md | 2 +- .../cloud-on-k8s/required-rbac-permissions.md | 6 +- .../cloud-on-k8s/securing-logstash-api.md | 2 +- .../cloud-on-k8s/standalone-elastic-agent.md | 2 +- .../deploy/cloud-on-k8s/transport-settings.md | 4 +- .../cloud-on-k8s/troubleshooting-beats.md | 4 +- .../deploy/cloud-on-k8s/virtual-memory.md | 4 +- .../cloud-on-k8s/volume-claim-templates.md | 2 +- deploy-manage/deploy/elastic-cloud.md | 10 +-- .../elastic-cloud/add-plugins-extensions.md | 6 +- .../elastic-cloud/available-stack-versions.md | 2 +- .../elastic-cloud/azure-native-isv-service.md | 14 ++-- .../deploy/elastic-cloud/change-hardware.md | 6 +- ...eate-an-elastic-cloud-hosted-deployment.md | 4 +- ...nces-from-other-elasticsearch-offerings.md | 12 +-- .../ec-change-hardware-profile.md | 16 ++-- .../ec-configure-deployment-settings.md | 2 +- .../ec-customize-deployment-components.md | 2 +- .../ech-aws-instance-configuration.md | 4 +- .../ech-azure-instance-configuration.md | 4 +- .../ech-gcp-instance-configuration.md | 4 +- .../elastic-cloud/ech-getting-started.md | 2 +- .../deploy/elastic-cloud/ech-migrate-data2.md | 4 +- .../deploy/elastic-cloud/ech-restrictions.md | 8 +- .../elastic-cloud/ech-version-policy.md | 2 +- .../deploy/elastic-cloud/ech-whats-new.md | 4 +- .../deploy/elastic-cloud/find-cloud-id.md | 8 +- ...age-deployments-using-elastic-cloud-api.md | 10 +-- .../manage-integrations-server.md | 2 +- .../manage-plugins-extensions-through-api.md | 4 +- .../restrictions-known-problems.md | 12 +-- ...from-apm-to-integrations-server-payload.md | 2 +- .../bootstrap-checks-heap-size.md | 2 +- .../bootstrap-checks-max-map-count.md | 2 +- .../deploy/self-managed/configure.md | 8 +- .../self-managed/executable-jna-tmpdir.md | 2 +- .../important-settings-configuration.md | 22 +++--- ...asticsearch-from-archive-on-linux-macos.md | 8 +- ...stall-elasticsearch-with-debian-package.md | 6 +- .../install-elasticsearch-with-docker.md | 8 +- .../install-elasticsearch-with-rpm.md | 6 +- ...stall-elasticsearch-with-zip-on-windows.md | 12 +-- .../install-from-archive-on-linux-macos.md | 2 +- .../deploy/self-managed/install-on-windows.md | 2 +- .../install-with-debian-package.md | 2 +- .../deploy/self-managed/install-with-rpm.md | 2 +- .../self-managed/max-number-threads-check.md | 2 +- .../self-managed/networkaddress-cache-ttl.md | 2 +- deploy-manage/deploy/self-managed/plugins.md | 2 +- .../self-managed/system-config-tcpretries.md | 4 +- .../deploy/self-managed/vm-max-map-count.md | 2 +- deploy-manage/distributed-architecture.md | 2 +- .../clusters-nodes-shards/node-roles.md | 14 ++-- .../discovery-cluster-formation.md | 2 +- .../cluster-fault-detection.md | 4 +- .../discovery-hosts-providers.md | 8 +- .../modules-discovery-bootstrap-cluster.md | 8 +- .../modules-discovery-quorums.md | 2 +- .../modules-discovery-voting.md | 2 +- .../kibana-tasks-management.md | 8 +- .../reading-and-writing-documents.md | 4 +- .../shard-allocation-relocation-recovery.md | 10 +-- .../delaying-allocation-when-node-leaves.md | 2 +- .../shard-allocation-awareness.md | 2 +- .../add-and-remove-elasticsearch-nodes.md | 10 +-- .../ece/start-stop-routing-requests.md | 2 +- ...ster-restart-rolling-restart-procedures.md | 14 ++-- .../start-stop-services/start-stop-kibana.md | 4 +- deploy-manage/manage-connectors.md | 6 +- deploy-manage/manage-spaces.md | 4 +- .../kibana-task-manager-health-monitoring.md | 8 +- .../auditing-search-queries.md | 2 +- .../configuring-audit-logs.md | 12 +-- .../kibana-log-settings-examples.md | 2 +- .../logging-configuration/kibana-logging.md | 2 +- .../logfile-audit-events-ignore-policies.md | 4 +- ...ndices-metricbeat-7-internal-collection.md | 2 +- .../configure-stack-monitoring-alerts.md | 2 +- .../monitoring-data/ec-memory-pressure.md | 4 +- .../monitoring-data/ec-vcpu-boost-instance.md | 6 +- .../monitoring-data/elasticsearch-metrics.md | 2 +- .../monitor/monitoring-data/logstash-page.md | 2 +- .../monitor-troubleshooting.md | 2 +- .../visualizing-monitoring-data.md | 2 +- .../collecting-log-data-with-filebeat.md | 18 ++--- ...lecting-monitoring-data-with-metricbeat.md | 12 +-- .../stack-monitoring/ece-stack-monitoring.md | 2 +- .../stack-monitoring/eck-stack-monitoring.md | 4 +- .../stack-monitoring/es-http-exporter.md | 8 +- .../es-legacy-collection-methods.md | 8 +- .../stack-monitoring/es-local-exporter.md | 2 +- .../es-monitoring-collectors.md | 4 +- .../es-monitoring-exporters.md | 6 +- .../stack-monitoring/k8s_when_to_use_it.md | 2 +- .../kibana-monitoring-data.md | 4 +- .../kibana-monitoring-legacy.md | 6 +- .../kibana-monitoring-metricbeat.md | 14 ++-- deploy-manage/production-guidance.md | 10 +-- .../availability-and-resilience.md | 2 +- .../resilience-in-larger-clusters.md | 2 +- .../resilience-in-small-clusters.md | 4 +- .../general-recommendations.md | 6 +- ...bana-alerting-production-considerations.md | 4 +- ...ana-task-manager-scaling-considerations.md | 8 +- .../approximate-knn-search.md | 24 +++--- .../optimize-performance/disk-usage.md | 12 +-- .../optimize-performance/indexing-speed.md | 4 +- .../optimize-performance/search-speed.md | 30 ++++---- .../optimize-performance/size-shards.md | 24 +++--- .../hotfrozen-high-availability.md | 24 +++--- .../remote-clusters/ec-enable-ccs-for-eck.md | 4 +- .../remote-clusters/ec-enable-ccs.md | 10 +-- .../remote-clusters/ec-migrate-ccs.md | 2 +- .../remote-clusters/ec-remote-cluster-ece.md | 8 +- .../ec-remote-cluster-other-ess.md | 6 +- .../ec-remote-cluster-same-ess.md | 10 +-- .../ec-remote-cluster-self-managed.md | 8 +- .../remote-clusters/ece-enable-ccs-for-eck.md | 4 +- .../remote-clusters/ece-enable-ccs.md | 10 +-- .../remote-clusters/ece-migrate-ccs.md | 2 +- .../ece-remote-cluster-ece-ess.md | 10 +-- .../ece-remote-cluster-other-ece.md | 10 +-- .../ece-remote-cluster-same-ece.md | 12 +-- .../ece-remote-cluster-self-managed.md | 10 +-- .../remote-clusters/eck-remote-clusters.md | 8 +- .../remote-clusters-api-key.md | 18 ++--- .../remote-clusters/remote-clusters-cert.md | 10 +-- .../remote-clusters-migrate.md | 8 +- .../remote-clusters-self-managed.md | 8 +- .../remote-clusters-settings.md | 18 ++--- .../remote-clusters-troubleshooting.md | 8 +- deploy-manage/security/different-ca.md | 4 +- ...g-cipher-suites-for-stronger-encryption.md | 2 +- ...nt-with-customer-managed-encryption-key.md | 18 ++--- .../security/httprest-clients-security.md | 8 +- .../security/kibana-session-management.md | 2 +- deploy-manage/security/same-ca.md | 2 +- .../security/secure-clients-integrations.md | 18 ++--- deploy-manage/security/secure-endpoints.md | 2 +- .../security/secure-saved-objects.md | 2 +- .../secure-your-cluster-deployment.md | 2 + .../security/security-certificates-keys.md | 18 ++--- .../set-up-basic-security-plus-https.md | 8 +- .../security/set-up-basic-security.md | 4 +- .../security/set-up-minimal-security.md | 2 +- ...upported-ssltls-versions-by-jdk-version.md | 6 +- .../tools/cross-cluster-replication.md | 10 +-- .../_connect_to_a_remote_cluster.md | 2 +- .../_failback_when_clustera_comes_back.md | 2 +- .../_perform_update_or_delete_by_query.md | 2 +- .../bi-directional-disaster-recovery.md | 2 +- .../ccr-getting-started-prerequisites.md | 2 +- .../ccr-recreate-follower-index.md | 2 +- .../manage-auto-follow-patterns.md | 2 +- .../set-up-cross-cluster-replication.md | 2 +- deploy-manage/tools/snapshot-and-restore.md | 4 +- .../snapshot-and-restore/azure-repository.md | 16 ++-- .../azure-storage-repository.md | 2 +- .../snapshot-and-restore/cloud-enterprise.md | 12 +-- .../snapshot-and-restore/cloud-on-k8s.md | 10 +-- .../snapshot-and-restore/create-snapshots.md | 10 +-- .../ec-aws-custom-repository.md | 2 +- .../ec-gcs-snapshotting.md | 4 +- .../ech-aws-custom-repository.md | 2 +- .../ech-gcs-snapshotting.md | 4 +- .../google-cloud-storage-gcs-repository.md | 2 +- .../google-cloud-storage-repository.md | 6 +- .../manage-snapshot-repositories.md | 2 +- .../minio-on-premise-repository.md | 2 +- .../read-only-url-repository.md | 10 +-- .../snapshot-and-restore/s3-repository.md | 30 ++++---- .../searchable-snapshots.md | 12 +-- .../snapshot-and-restore/self-managed.md | 4 +- .../shared-file-system-repository.md | 6 +- .../source-only-repository.md | 6 +- ...dices-from-older-elasticsearch-versions.md | 24 +++--- .../orchestrator/upgrade-cloud-on-k8s.md | 2 +- .../prepare-to-upgrade/index-compatibility.md | 2 +- .../manage-system-passwords.md | 6 +- .../manage-users-roles.md | 4 +- .../cloud-enterprise-orchestrator/saml.md | 2 +- .../authorization-plugins.md | 2 +- .../controlling-user-cache.md | 2 +- ...looking-up-users-without-authentication.md | 4 +- ...ge-authentication-for-multiple-clusters.md | 10 +-- .../openid-connect.md | 2 + .../operator-only-functionality.md | 6 +- .../cluster-or-deployment-auth/pki.md | 6 +- .../realm-chains.md | 4 +- .../cluster-or-deployment-auth/saml.md | 4 + .../service-accounts.md | 2 +- .../token-based-authentication-services.md | 2 +- .../alerts/alerting-common-issues.md | 14 ++-- .../alerts/alerting-getting-started.md | 2 +- .../alerts-cases/alerts/alerting-setup.md | 10 +-- .../alerts/alerting-troubleshooting.md | 2 +- .../alerts/create-manage-rules.md | 6 +- .../alerts/notifications-domain-allowlist.md | 2 +- .../alerts/rule-action-variables.md | 8 +- .../alerts-cases/alerts/rule-type-es-query.md | 6 +- .../alerts/rule-type-index-threshold.md | 2 +- .../alerts-cases/alerts/rule-types.md | 2 +- .../cases/manage-cases-settings.md | 2 +- .../alerts-cases/cases/manage-cases.md | 4 +- .../alerts-cases/cases/setup-cases.md | 2 +- .../alerts-cases/watcher/actions-email.md | 2 +- .../alerts-cases/watcher/actions-index.md | 2 +- .../alerts-cases/watcher/actions-jira.md | 2 +- .../alerts-cases/watcher/actions-slack.md | 2 +- .../alerts-cases/watcher/actions-webhook.md | 2 +- .../alerts-cases/watcher/enable-watcher.md | 4 +- .../alerts-cases/watcher/encrypting-data.md | 6 +- .../alerts-cases/watcher/input-search.md | 6 +- .../alerts-cases/watcher/schedule-types.md | 6 +- .../alerts-cases/watcher/transform-search.md | 6 +- .../watcher/watch-cluster-status.md | 2 +- .../alerts-cases/watcher/watcher-ui.md | 4 +- ...dashboard-of-panels-with-ecommerce-data.md | 2 +- ...ashboard-of-panels-with-web-server-data.md | 2 +- explore-analyze/dashboards/drilldowns.md | 2 +- .../discover/discover-get-started.md | 2 +- explore-analyze/discover/document-explorer.md | 2 +- explore-analyze/discover/search-sessions.md | 2 +- .../find-and-organize/data-views.md | 4 +- .../find-and-organize/saved-objects.md | 2 +- explore-analyze/geospatial-analysis.md | 40 +++++----- .../anomaly-detection-scale.md | 2 +- .../anomaly-detection/geographic-anomalies.md | 12 +-- .../anomaly-detection/ml-ad-run-jobs.md | 8 +- .../ml-ad-troubleshooting.md | 2 +- .../ml-configuring-aggregation.md | 14 ++-- .../ml-configuring-categories.md | 8 +- .../ml-configuring-populations.md | 2 +- .../ml-configuring-transform.md | 4 +- .../anomaly-detection/ml-functions.md | 14 ++-- .../anomaly-detection/ml-getting-started.md | 10 +-- .../anomaly-detection/ml-limitations.md | 40 +++++----- .../anomaly-detection/move-jobs.md | 4 +- .../anomaly-detection/ootb-ml-jobs.md | 20 ++--- .../ml-dfa-classification.md | 4 +- .../ml-dfa-limitations.md | 2 +- .../data-frame-analytics/ml-dfa-regression.md | 4 +- .../data-frame-analytics/ml-trained-models.md | 4 +- .../machine-learning-in-kibana.md | 2 +- .../inference-processing.md | 2 +- .../xpack-ml-aiops.md | 2 +- .../nlp/ml-nlp-deploy-model.md | 2 +- .../machine-learning/nlp/ml-nlp-elser.md | 6 +- .../nlp/ml-nlp-import-model.md | 6 +- .../machine-learning/nlp/ml-nlp-inference.md | 8 +- .../nlp/ml-nlp-limitations.md | 2 +- .../machine-learning/nlp/ml-nlp-model-ref.md | 2 +- .../nlp/ml-nlp-ner-example.md | 2 +- .../machine-learning/nlp/ml-nlp-overview.md | 2 +- .../machine-learning/nlp/ml-nlp-rerank.md | 2 +- .../nlp/ml-nlp-search-compare.md | 2 +- .../ml-nlp-text-emb-vector-search-example.md | 2 +- .../setting-up-machine-learning.md | 4 +- explore-analyze/numeral-formatting.md | 4 +- explore-analyze/query-filter/aggregations.md | 18 ++--- ...-data-with-aggregations-using-query-dsl.md | 42 +++++------ explore-analyze/query-filter/filtering.md | 2 +- explore-analyze/query-filter/languages/eql.md | 30 ++++---- .../languages/esql-cross-clusters.md | 10 +-- .../languages/esql-getting-started.md | 42 +++++------ .../query-filter/languages/esql-kibana.md | 20 ++--- .../languages/esql-multi-index.md | 6 +- .../query-filter/languages/esql.md | 12 +-- .../example-detect-threats-with-eql.md | 2 +- explore-analyze/query-filter/languages/kql.md | 6 +- .../languages/lucene-query-syntax.md | 2 +- .../query-filter/languages/querydsl.md | 40 +++++----- .../query-filter/languages/sql-cli.md | 2 +- .../query-filter/languages/sql-data-types.md | 44 +++++------ .../languages/sql-functions-aggs.md | 16 ++-- .../languages/sql-functions-datetime.md | 4 +- .../languages/sql-functions-geo.md | 2 +- .../languages/sql-functions-grouping.md | 4 +- .../languages/sql-functions-search.md | 10 +-- .../languages/sql-index-patterns.md | 2 +- .../languages/sql-lexical-structure.md | 4 +- .../languages/sql-like-rlike-operators.md | 4 +- .../query-filter/languages/sql-limitations.md | 4 +- .../query-filter/languages/sql-pagination.md | 2 +- .../languages/sql-rest-filtering.md | 2 +- .../languages/sql-syntax-select.md | 4 +- .../languages/sql-syntax-show-tables.md | 2 +- .../query-filter/languages/sql-translate.md | 2 +- explore-analyze/query-filter/tools/console.md | 2 +- .../query-filter/tools/grok-debugger.md | 2 +- explore-analyze/report-and-share.md | 2 +- .../reporting-troubleshooting-csv.md | 6 +- .../reporting-troubleshooting.md | 4 +- explore-analyze/scripting/dissect.md | 2 +- explore-analyze/scripting/grok.md | 8 +- .../scripting/modules-scripting-engine.md | 2 +- .../scripting/modules-scripting-fields.md | 24 +++--- .../scripting/modules-scripting-painless.md | 2 +- .../scripting/modules-scripting-security.md | 6 +- .../scripting/modules-scripting-using.md | 4 +- .../scripting/scripting-field-extraction.md | 2 +- .../scripting/scripts-search-speed.md | 2 +- .../transforms/ecommerce-transforms.md | 6 +- .../transforms/transform-checkpoints.md | 4 +- .../transforms/transform-examples.md | 8 +- .../transforms/transform-limitations.md | 14 ++-- .../transforms/transform-painless-examples.md | 8 +- explore-analyze/transforms/transform-scale.md | 6 +- explore-analyze/transforms/transform-usage.md | 4 +- explore-analyze/visualize.md | 8 +- .../canvas/canvas-function-reference.md | 6 +- .../visualize/canvas/canvas-tutorial.md | 4 +- .../custom-visualizations-with-vega.md | 2 +- explore-analyze/visualize/esorql.md | 2 +- explore-analyze/visualize/field-statistics.md | 2 +- .../visualize/graph/graph-troubleshooting.md | 2 +- .../visualize/legacy-editors/timelion.md | 2 +- .../visualize/legacy-editors/tsvb.md | 2 +- explore-analyze/visualize/link-panels.md | 2 +- .../visualize/maps/asset-tracking-tutorial.md | 4 +- .../visualize/maps/heatmap-layer.md | 2 +- .../visualize/maps/import-geospatial-data.md | 4 +- .../maps/indexing-geojson-data-tutorial.md | 6 +- .../maps/maps-create-filter-from-map.md | 2 +- .../visualize/maps/maps-grid-aggregation.md | 10 +-- .../maps-search-across-multiple-indices.md | 4 +- .../maps/maps-top-hits-aggregation.md | 2 +- .../visualize/maps/maps-troubleshooting.md | 2 +- .../visualize/maps/point-to-point.md | 2 +- .../maps/reverse-geocoding-tutorial.md | 6 +- explore-analyze/visualize/maps/terms-join.md | 2 +- .../visualize/maps/vector-layer.md | 12 +-- .../visualize/maps/vector-style.md | 10 +-- .../visualize/supported-chart-types.md | 6 +- get-started/deployment-options.md | 2 +- get-started/installing-elastic-stack.md | 10 +-- get-started/introduction.md | 2 +- get-started/the-stack.md | 12 +-- manage-data/data-store/aliases.md | 2 +- manage-data/data-store/data-streams.md | 4 +- .../downsampling-time-series-data-stream.md | 10 +-- .../data-streams/logs-data-stream.md | 18 ++--- .../data-streams/modify-data-stream.md | 12 +-- .../data-store/data-streams/reindex-tsds.md | 2 +- ...ownsampling-using-data-stream-lifecycle.md | 2 +- .../data-streams/run-downsampling-with-ilm.md | 4 +- .../data-streams/set-up-data-stream.md | 8 +- .../data-store/data-streams/set-up-tsds.md | 6 +- .../time-series-data-stream-tsds.md | 50 ++++++------- .../data-streams/use-data-stream.md | 4 +- manage-data/data-store/index-basics.md | 8 +- manage-data/data-store/mapping.md | 12 +-- ...define-runtime-fields-in-search-request.md | 4 +- .../mapping/dynamic-field-mapping.md | 20 ++--- .../data-store/mapping/dynamic-templates.md | 4 +- .../data-store/mapping/explicit-mapping.md | 12 +-- .../explore-data-with-runtime-fields.md | 4 +- .../data-store/mapping/index-runtime-field.md | 4 +- .../data-store/mapping/map-runtime-field.md | 6 +- .../override-field-values-at-query-time.md | 2 +- .../mapping/retrieve-runtime-field.md | 8 +- .../data-store/mapping/runtime-fields.md | 8 +- manage-data/data-store/templates.md | 4 +- .../templates/index-template-management.md | 2 +- manage-data/data-store/text-analysis.md | 6 +- .../text-analysis/anatomy-of-an-analyzer.md | 12 +-- .../text-analysis/configure-text-analysis.md | 4 +- .../configuring-built-in-analyzers.md | 2 +- .../text-analysis/create-custom-analyzer.md | 32 ++++---- .../text-analysis/index-search-analysis.md | 4 +- .../text-analysis/specify-an-analyzer.md | 22 +++--- .../data-store/text-analysis/stemming.md | 20 ++--- .../data-store/text-analysis/token-graphs.md | 12 +-- manage-data/ingest.md | 2 +- .../ingest/ingest-reference-architectures.md | 2 +- .../agent-es-airgapped.md | 2 +- .../agent-kafka-essink.md | 4 +- .../agent-kafka-ls.md | 8 +- .../agent-ls-airgapped.md | 4 +- .../agent-proxy.md | 2 +- .../ls-enrich.md | 10 +-- .../ls-for-input.md | 4 +- .../ls-multi.md | 6 +- .../ls-networkbridge.md | 4 +- .../ingest-reference-architectures/lspq.md | 8 +- .../ingesting-data-for-elastic-solutions.md | 22 +++--- ...icsearch-service-with-logstash-as-proxy.md | 20 ++--- ...nal-database-into-elasticsearch-service.md | 8 +- ...ta-with-nodejs-on-elasticsearch-service.md | 8 +- ...ta-with-python-on-elasticsearch-service.md | 6 +- ...m-nodejs-web-application-using-filebeat.md | 12 +-- ...-from-python-application-using-filebeat.md | 14 ++-- .../ingest/ingesting-timeseries-data.md | 26 +++---- manage-data/ingest/tools.md | 14 ++-- manage-data/ingest/transform-enrich.md | 4 +- ...ample-enrich-data-based-on-exact-values.md | 4 +- ...xample-enrich-data-based-on-geolocation.md | 6 +- ...-enrich-data-by-matching-value-to-range.md | 4 +- .../transform-enrich/example-parse-logs.md | 10 +-- .../ingest-pipelines-serverless.md | 2 +- .../transform-enrich/ingest-pipelines.md | 32 ++++---- .../transform-enrich/logstash-pipelines.md | 4 +- .../set-up-an-enrich-processor.md | 12 +-- manage-data/lifecycle/curator.md | 2 +- manage-data/lifecycle/data-stream.md | 8 +- .../tutorial-data-stream-retention.md | 6 +- ...ed-data-stream-to-data-stream-lifecycle.md | 8 +- manage-data/lifecycle/data-tiers.md | 22 +++--- .../lifecycle/index-lifecycle-management.md | 4 +- .../configure-lifecycle-policy.md | 2 +- .../index-lifecycle.md | 56 +++++++------- .../index-management-in-kibana.md | 6 +- .../manage-existing-indices.md | 2 +- ...-index-allocation-filters-to-node-roles.md | 10 +-- .../index-lifecycle-management/rollover.md | 2 +- .../tutorial-automate-rollover.md | 2 +- .../rollup/getting-started-kibana.md | 2 +- .../lifecycle/rollup/understanding-groups.md | 2 +- manage-data/migrate.md | 4 +- ...lasticsearch-to-manage-time-series-data.md | 10 +-- .../apm-agent-android/release-notes.md | 2 +- .../cloud-on-k8s/k8s-es-secure-settings.md | 2 +- .../cloud-on-k8s/k8s-orchestration.md | 6 +- .../cloud-on-k8s/k8s-saml-authentication.md | 14 ++-- .../cloud-on-k8s/k8s-upgrading-stack.md | 2 +- .../cloud-on-k8s/k8s-users-and-roles.md | 10 +-- .../Elastic-Cloud-Enterprise-overview.md | 2 +- .../ece-add-custom-bundle-plugin.md | 4 +- .../cloud-enterprise/ece-add-user-settings.md | 2 +- .../cloud/cloud-enterprise/ece-api-console.md | 2 +- .../cloud/cloud-enterprise/ece-autoscaling.md | 2 +- .../ece-getting-started-node-js.md | 6 +- .../ece-getting-started-python.md | 6 +- ...started-search-use-cases-beats-logstash.md | 20 ++--- ...ng-started-search-use-cases-db-logstash.md | 8 +- ...ting-started-search-use-cases-node-logs.md | 12 +-- ...ng-started-search-use-cases-python-logs.md | 14 ++-- .../cloud-enterprise/ece-install-offline.md | 2 +- .../ece-manage-apm-settings.md | 2 +- .../ece-manage-integrations-server.md | 2 +- .../ece-manage-kibana-settings.md | 2 +- ...stful-api-examples-configuring-keystore.md | 2 +- .../ece-secure-clusters-kerberos.md | 6 +- .../ece-secure-clusters-oidc.md | 10 +-- .../ece-securing-clusters-JWT.md | 2 +- .../ece-securing-clusters-SAML.md | 4 +- .../ece-securing-clusters-ad.md | 8 +- .../ece-securing-clusters-ldap.md | 8 +- .../cloud-enterprise/ece-securing-clusters.md | 2 +- ...ffic-filtering-deployment-configuration.md | 2 +- .../ece-upgrade-deployment.md | 2 +- .../cloud/cloud-enterprise/ece-upgrade.md | 2 +- .../cloud-enterprise/ece_optional_settings.md | 2 +- .../cloud-heroku/ech-add-user-settings.md | 48 ++++++------ .../cloud/cloud-heroku/ech-adding-plugins.md | 2 +- .../cloud/cloud-heroku/ech-autoscaling.md | 2 +- .../cloud/cloud-heroku/ech-custom-bundles.md | 2 +- .../ech-enable-logging-and-monitoring.md | 2 +- .../cloud/cloud-heroku/ech-getting-started.md | 2 +- .../ech-manage-kibana-settings.md | 74 +++++++++---------- .../cloud-heroku/ech-monitoring-setup.md | 22 +++--- .../cloud/cloud-heroku/ech-password-reset.md | 2 +- .../ech-secure-clusters-kerberos.md | 4 +- .../cloud-heroku/ech-secure-clusters-oidc.md | 6 +- .../cloud-heroku/ech-securing-clusters-JWT.md | 2 +- .../ech-securing-clusters-SAML.md | 4 +- .../cloud/cloud-heroku/ech-security.md | 2 +- .../echsign-outgoing-saml-message.md | 2 +- raw-migrated-files/cloud/cloud/ec-about.md | 4 +- .../cloud/cloud/ec-add-user-settings.md | 48 ++++++------ .../cloud/cloud/ec-autoscaling.md | 2 +- .../cloud/cloud/ec-cloud-ingest-data.md | 48 ++++++------ .../cloud/cloud/ec-custom-bundles.md | 2 +- .../cloud/ec-enable-logging-and-monitoring.md | 2 +- .../cloud/cloud/ec-faq-getting-started.md | 2 +- .../cloud/cloud/ec-getting-started-node-js.md | 8 +- .../cloud/cloud/ec-getting-started-python.md | 6 +- ...started-search-use-cases-beats-logstash.md | 20 ++--- ...ng-started-search-use-cases-db-logstash.md | 8 +- ...ting-started-search-use-cases-node-logs.md | 12 +-- ...ng-started-search-use-cases-python-logs.md | 14 ++-- .../cloud/ec-maintenance-mode-routing.md | 4 +- .../cloud/cloud/ec-manage-kibana-settings.md | 74 +++++++++---------- .../cloud/cloud/ec-metrics-memory-pressure.md | 6 +- .../cloud/cloud/ec-monitoring-setup.md | 26 +++---- .../cloud/cloud/ec-password-reset.md | 2 +- .../cloud/ec-secure-clusters-kerberos.md | 4 +- .../cloud/cloud/ec-secure-clusters-oidc.md | 6 +- .../cloud/cloud/ec-securing-clusters-JWT.md | 2 +- .../cloud/cloud/ec-securing-clusters-SAML.md | 4 +- .../cloud/ec-securing-clusters-oidc-op.md | 6 +- raw-migrated-files/cloud/cloud/ec-security.md | 2 +- .../cloud/ec-select-subscription-level.md | 6 +- .../cloud/ec-sign-outgoing-saml-message.md | 2 +- .../ec-traffic-filtering-through-the-api.md | 2 +- .../serverless/ai-assistant-knowledge-base.md | 2 +- .../detections-logsdb-index-mode-impact.md | 10 +-- .../serverless/elasticsearch-clients.md | 14 ++-- .../serverless/elasticsearch-differences.md | 12 +-- .../elasticsearch-ingest-data-through-api.md | 2 +- .../serverless/general-sign-up-trial.md | 8 +- ...nfrastructure-and-host-monitoring-intro.md | 2 +- .../docs-content/serverless/intro.md | 10 +-- .../observability-add-logs-service-name.md | 6 +- .../serverless/observability-ai-assistant.md | 16 ++-- .../serverless/observability-analyze-hosts.md | 6 +- ...rvability-apm-agents-elastic-apm-agents.md | 70 +++++++++--------- .../observability-apm-get-started.md | 46 ++++++------ .../serverless/observability-case-settings.md | 14 ++-- ...bservability-correlate-application-logs.md | 18 ++--- ...observability-create-anomaly-alert-rule.md | 38 +++++----- ...lity-create-custom-threshold-alert-rule.md | 38 +++++----- ...create-error-count-threshold-alert-rule.md | 38 +++++----- ...d-transaction-rate-threshold-alert-rule.md | 38 +++++----- ...y-create-inventory-threshold-alert-rule.md | 38 +++++----- ...ity-create-latency-threshold-alert-rule.md | 38 +++++----- ...ability-create-slo-burn-rate-alert-rule.md | 38 +++++----- .../observability-detect-metric-anomalies.md | 2 +- .../observability-ecs-application-logs.md | 46 ++++++------ ...observability-filter-and-aggregate-logs.md | 4 +- ...ability-handle-no-results-found-message.md | 4 +- ...observability-infrastructure-monitoring.md | 4 +- .../observability-log-monitoring.md | 12 +-- .../observability-monitor-datasets.md | 2 +- .../observability-monitor-status-alert.md | 38 +++++----- .../observability-parse-log-data.md | 26 +++---- ...bservability-plaintext-application-logs.md | 44 +++++------ .../observability-send-application-logs.md | 2 +- .../observability-stream-log-files.md | 2 +- ...servability-view-infrastructure-metrics.md | 8 +- .../serverless/project-setting-data.md | 4 +- .../serverless/security-about-rules.md | 2 +- .../serverless/security-advanced-settings.md | 8 +- .../serverless/security-alerts-run-osquery.md | 2 +- .../serverless/security-automatic-import.md | 6 +- ...security-behavioral-detection-use-cases.md | 2 +- .../serverless/security-cases-settings.md | 14 ++-- .../serverless/security-data-quality-dash.md | 4 +- .../security-detection-engine-overview.md | 2 +- .../security-detection-entity-dashboard.md | 2 +- .../serverless/security-endpoints-page.md | 2 +- .../security-get-started-with-kspm.md | 2 +- .../serverless/security-ingest-data.md | 58 +++++++-------- .../serverless/security-install-edr.md | 8 +- ...curity-interactive-investigation-guides.md | 2 +- .../security-invest-guide-run-osquery.md | 2 +- .../serverless/security-machine-learning.md | 2 +- .../security-osquery-response-action.md | 2 +- .../security-prebuilt-rules-management.md | 2 +- .../security-query-alert-indices.md | 2 +- .../security-requirements-overview.md | 2 +- .../security-response-actions-config.md | 10 +-- .../serverless/security-response-actions.md | 2 +- .../serverless/security-rules-create.md | 22 +++--- .../serverless/security-timelines-ui.md | 2 +- .../docs-content/serverless/security-ui.md | 4 +- .../serverless/security-view-alert-details.md | 4 +- .../active-directory-realm.md | 8 +- .../autoscaling-fixed-decider.md | 4 +- .../autoscaling-frozen-shards-decider.md | 2 +- .../autoscaling-machine-learning-decider.md | 4 +- .../autoscaling-proactive-storage-decider.md | 2 +- .../autoscaling-reactive-storage-decider.md | 2 +- .../bootstrap-checks-xpack.md | 2 +- .../bootstrap-checks.md | 6 +- .../elasticsearch-reference/built-in-roles.md | 2 +- .../elasticsearch-reference/built-in-users.md | 6 +- .../change-passwords-native-users.md | 2 +- .../configuring-stack-security.md | 18 ++--- .../elasticsearch-reference/defining-roles.md | 8 +- .../documents-indices.md | 4 +- .../elasticsearch-intro-deploy.md | 2 +- .../es-security-principles.md | 2 +- .../field-and-document-access-control.md | 6 +- .../field-level-security.md | 2 +- .../elasticsearch-reference/file-realm.md | 8 +- .../fips-140-compliance.md | 20 ++--- .../how-monitoring-works.md | 16 ++-- .../elasticsearch-reference/index-mgmt.md | 6 +- .../index-modules-allocation.md | 4 +- .../ingest-enriching-data.md | 2 +- .../elasticsearch-reference/ip-filtering.md | 2 +- .../elasticsearch-reference/jwt-auth-realm.md | 12 +-- .../elasticsearch-reference/kerberos-realm.md | 6 +- .../elasticsearch-reference/ldap-realm.md | 10 +-- .../elasticsearch-reference/mapping-roles.md | 2 +- .../monitoring-overview.md | 2 +- .../monitoring-production.md | 18 ++--- .../elasticsearch-reference/native-realm.md | 4 +- .../elasticsearch-reference/oidc-guide.md | 4 +- .../role-mapping-resources.md | 2 +- .../saml-guide-stack.md | 10 +-- .../elasticsearch-reference/search-analyze.md | 12 +-- .../search-with-synonyms.md | 6 +- .../secure-monitoring.md | 4 +- .../secure-settings.md | 14 ++-- .../security-basic-setup-https.md | 8 +- .../security-basic-setup.md | 4 +- .../security-limitations.md | 4 +- .../semantic-search-inference.md | 4 +- .../shard-allocation-filtering.md | 8 +- .../shard-request-cache.md | 4 +- .../snapshot-restore.md | 4 +- .../snapshots-restore-snapshot.md | 10 +-- .../fleet/beats-agent-comparison.md | 54 +++++++------- .../fleet/fleet-elastic-agent-quick-start.md | 2 +- .../kibana/kibana/apm-settings-kb.md | 2 +- .../kibana/kibana/connect-to-elasticsearch.md | 2 +- .../kibana/kibana/console-kibana.md | 2 +- .../kibana/kibana/elasticsearch-mutual-tls.md | 2 +- raw-migrated-files/kibana/kibana/esql.md | 2 +- raw-migrated-files/kibana/kibana/install.md | 2 +- .../kibana/kibana/kibana-authentication.md | 16 ++-- .../kibana/kibana/management.md | 8 +- raw-migrated-files/kibana/kibana/osquery.md | 8 +- .../kibana/kibana/search-ai-assistant.md | 8 +- .../kibana/kibana/secure-reporting.md | 8 +- .../kibana/kibana/set-time-filter.md | 2 +- raw-migrated-files/kibana/kibana/setup.md | 2 +- raw-migrated-files/kibana/kibana/upgrade.md | 2 +- .../kibana/using-kibana-with-security.md | 6 +- .../kibana/kibana/xpack-spaces.md | 4 +- ...report-pipeline-flow-worker-utilization.md | 2 +- .../logstash/logstash/ts-logstash.md | 6 +- .../observability/add-logs-service-name.md | 6 +- .../observability/analyze-hosts.md | 8 +- .../observability/apm-agents.md | 20 ++--- .../observability/apm-anomaly-rule.md | 36 ++++----- .../apm-error-count-threshold-rule.md | 36 ++++----- ...-failed-transaction-rate-threshold-rule.md | 36 ++++----- .../apm-latency-threshold-rule.md | 36 ++++----- .../observability/application-logs.md | 18 ++--- .../observability/configure-settings.md | 2 +- .../observability/custom-threshold-alert.md | 36 ++++----- .../handle-no-results-found-message.md | 4 +- ...nfrastructure-and-host-monitoring-intro.md | 2 +- .../infrastructure-threshold-alert.md | 36 ++++----- .../observability/inspect-metric-anomalies.md | 6 +- .../observability/logs-checklist.md | 10 +-- .../observability/logs-ecs-application.md | 24 +++--- .../logs-filter-and-aggregate.md | 4 +- .../observability/logs-parse.md | 26 +++---- .../observability/logs-plaintext.md | 32 ++++---- .../observability/logs-send-application.md | 2 +- .../observability/logs-stream.md | 4 +- .../observability/manage-cases-settings.md | 2 +- .../observability/manage-cases.md | 4 +- .../observability/monitor-datasets.md | 2 +- .../monitor-infrastructure-and-hosts.md | 2 +- .../observability/monitor-status-alert.md | 36 ++++----- .../observability/obs-ai-assistant.md | 34 ++++----- .../observability/slo-burn-rate-alert.md | 38 +++++----- .../observability/slo-create.md | 4 +- .../observability-docs/observability/slo.md | 2 +- .../view-infrastructure-metrics.md | 10 +-- .../elastic-stack/air-gapped-install.md | 30 ++++---- .../install-stack-demo-secure.md | 12 +-- .../installing-stack-demo-self.md | 8 +- .../stack-docs/elastic-stack/overview.md | 2 +- ...upgrade-elastic-stack-for-elastic-cloud.md | 12 +-- .../upgrading-elastic-stack-on-prem.md | 10 +-- .../elastic-stack/upgrading-elastic-stack.md | 12 +-- .../elastic-stack/upgrading-elasticsearch.md | 2 +- .../elastic-stack/upgrading-kibana.md | 6 +- .../get-elastic.md | 4 +- solutions/observability/apps/api-keys.md | 18 ++--- .../apps/apm-agent-central-configuration.md | 20 ++--- .../apps/apm-agent-tls-communication.md | 26 +++---- .../observability/apps/apm-k8s-attacher.md | 4 +- .../observability/apps/apm-server-binary.md | 52 ++++++------- .../apps/apm-server-performance-diagnostic.md | 2 +- .../observability/apps/apm-server-systemd.md | 2 +- solutions/observability/apps/apm-ui-api.md | 2 +- .../apps/applications-ui-annotation-user.md | 4 +- .../apps/built-in-data-filters.md | 44 +++++------ .../apps/collect-application-data.md | 4 +- .../apps/configure-elasticsearch-output.md | 2 +- .../apps/configure-lightweight-monitors.md | 10 +-- .../observability/apps/configure-logging.md | 4 +- .../apps/configure-logstash-output.md | 22 +++--- .../configure-real-user-monitoring-rum.md | 2 +- .../apps/configure-redis-output.md | 2 +- ...ssign-feature-roles-to-apm-server-users.md | 2 +- ...ss-cluster-search-with-application-data.md | 8 +- .../observability/apps/custom-filters.md | 18 ++--- solutions/observability/apps/data-streams.md | 6 +- .../apps/elastic-apm-events-intake-api.md | 28 +++---- .../enable-apm-server-binary-debugging.md | 2 +- .../apps/filter-application-data.md | 16 ++-- ...ransaction-latency-failure-correlations.md | 2 +- .../apps/fleet-managed-apm-server.md | 74 +++++++++---------- .../apps/get-started-with-uptime.md | 4 +- .../observability/apps/high-availability.md | 2 +- .../apps/inspect-uptime-duration-anomalies.md | 2 +- solutions/observability/apps/inventory.md | 2 +- .../apps/manage-data-retention.md | 2 +- solutions/observability/apps/metadata.md | 46 ++++++------ solutions/observability/apps/metrics.md | 12 +-- .../observability/apps/monitor-apm-server.md | 2 +- .../apps/monitor-fleet-managed-apm-server.md | 12 +-- .../monitor-resources-on-private-networks.md | 10 +-- .../apps/monitoring-aws-lambda-functions.md | 8 +- .../scale-architect-synthetics-deployment.md | 2 +- solutions/observability/apps/secret-token.md | 30 ++++---- solutions/observability/apps/spans.md | 24 +++--- .../apps/ssltls-input-settings.md | 4 +- .../apps/ssltls-output-settings.md | 2 +- ...ch-self-installation-to-apm-integration.md | 8 +- .../apps/synthetics-encryption-security.md | 2 +- solutions/observability/apps/traces.md | 34 ++++----- .../apps/transaction-sampling.md | 14 ++-- .../apps/tutorial-monitor-java-application.md | 34 ++++----- ...lastic-cloud-apm-server-standalone-to-8.md | 2 +- ...lastic-cloud-with-apm-integration-to-80.md | 2 +- ...f-installation-of-apm-integration-to-8x.md | 4 +- ...allation-of-apm-server-standalone-to-8x.md | 2 +- .../apps/upgrade-to-version-8x.md | 2 +- .../apps/uptime-monitoring-deprecated.md | 2 +- .../use-metricbeat-to-send-monitoring-data.md | 10 +-- .../apps/use-opentelemetry-with-apm.md | 8 +- .../apps/view-elasticsearch-index-template.md | 4 +- .../observability/apps/view-monitor-status.md | 2 +- ...s-when-apm-server-elasticsearch-is-down.md | 8 +- ...-services-aws-with-amazon-data-firehose.md | 2 +- ...itor-amazon-web-services-aws-with-beats.md | 18 ++--- ...s-aws-with-elastic-serverless-forwarder.md | 2 +- .../monitor-google-cloud-platform-gcp.md | 20 ++--- .../monitor-microsoft-azure-with-beats.md | 10 +-- .../get-started/add-data-from-splunk.md | 2 +- ...gure-service-level-objective-slo-access.md | 2 +- .../create-an-anomaly-detection-rule.md | 38 +++++----- .../create-an-elasticsearch-query-rule.md | 44 +++++------ .../create-an-uptime-duration-anomaly-rule.md | 36 ++++----- .../create-log-threshold-rule.md | 36 ++++----- .../create-metric-threshold-rule.md | 36 ++++----- .../create-tls-certificate-rule.md | 72 +++++++++--------- ...xplore-infrastructure-metrics-over-time.md | 6 +- .../get-started-with-system-metrics.md | 6 +- .../infra-and-hosts/manage-data-storage.md | 2 +- .../operate-universal-profiling-backend.md | 2 +- ...-2-enable-universal-profiling-in-kibana.md | 8 +- ...tutorial-observe-kubernetes-deployments.md | 42 +++++------ .../tutorial-observe-nginx-instances.md | 10 +-- ...l-profiling-index-life-cycle-management.md | 2 +- .../logs/configure-data-sources.md | 4 +- .../logs/inspect-log-anomalies.md | 4 +- .../observability-ai-assistant.md | 34 ++++----- .../unknown-bucket/aws-metrics.md | 2 +- .../unknown-bucket/kubernetes-pod-metrics.md | 2 +- .../monitor-aws-with-amazon-data-firehose.md | 2 +- .../unknown-bucket/view-monitor-status.md | 2 +- solutions/search/cross-cluster-search.md | 12 +-- .../search/elasticsearch-basics-quickstart.md | 6 +- solutions/search/full-text.md | 12 +-- .../search/full-text/how-full-text-works.md | 8 +- .../mixing-exact-search-with-stemming.md | 2 +- .../static-scoring-signals.md | 14 ++-- .../search/full-text/search-with-synonyms.md | 8 +- .../full-text/text-analysis-during-search.md | 12 +-- solutions/search/hybrid-search.md | 2 +- solutions/search/hybrid-semantic-text.md | 2 +- .../elastic-inference-service-eis.md | 2 +- .../querydsl-full-text-filter-tutorial.md | 26 +++---- .../search/rag/playground-troubleshooting.md | 2 +- solutions/search/rag/playground.md | 2 +- solutions/search/ranking.md | 2 +- .../learning-to-rank-model-training.md | 2 +- .../ranking/learning-to-rank-search-usage.md | 2 +- .../search/ranking/semantic-reranking.md | 4 +- solutions/search/retrievers-examples.md | 8 +- solutions/search/retrievers-overview.md | 2 +- .../search-application-api.md | 8 +- .../search-application-client.md | 4 +- .../near-real-time-search.md | 2 +- solutions/search/search-pipelines.md | 18 ++--- solutions/search/semantic-search/cohere-es.md | 4 +- .../semantic-search-elser-ingest-pipelines.md | 12 +-- .../semantic-search-inference.md | 4 +- .../semantic-search-semantic-text.md | 2 +- .../serverless-elasticsearch-get-started.md | 8 +- .../behavioral-analytics-event-reference.md | 2 +- solutions/search/site-or-app/search-ui.md | 16 ++-- solutions/search/the-search-api.md | 22 +++--- ...er-endpoint-before-cross-cluster-search.md | 2 +- solutions/search/vector/bring-own-vectors.md | 6 +- .../dense-versus-sparse-ingest-pipelines.md | 18 ++--- solutions/search/vector/knn.md | 36 ++++----- solutions/search/vector/sparse-vector.md | 2 +- solutions/security.md | 2 +- .../anomaly-detection.md | 2 +- .../behavioral-detection-use-cases.md | 2 +- .../ai/ai-assistant-knowledge-base.md | 4 +- solutions/security/asset-management.md | 4 +- ...tive-vulnerability-management-dashboard.md | 2 +- .../cloud-native-vulnerability-management.md | 2 +- .../security/cloud/get-started-with-cnvm.md | 2 +- .../security/cloud/get-started-with-kspm.md | 2 +- solutions/security/cloud/ingest-wiz-data.md | 2 +- ...eate-an-elastic-defend-policy-using-api.md | 2 +- .../install-elastic-defend.md | 10 +-- ...-off-diagnostic-data-for-elastic-defend.md | 2 +- .../uninstall-elastic-agent.md | 4 +- ...tive-vulnerability-management-dashboard.md | 2 +- .../dashboards/data-quality-dashboard.md | 4 +- .../dashboards/entity-analytics-dashboard.md | 2 +- solutions/security/detect-and-alert.md | 2 +- .../detect-and-alert/about-detection-rules.md | 4 +- .../detect-and-alert/add-manage-exceptions.md | 4 +- .../detect-and-alert/create-detection-rule.md | 24 +++--- .../create-manage-shared-exception-lists.md | 2 +- .../create-manage-value-lists.md | 4 +- .../detections-requirements.md | 4 +- .../install-manage-elastic-prebuilt-rules.md | 2 +- ...unch-timeline-from-investigation-guides.md | 2 +- .../detect-and-alert/query-alert-indices.md | 2 +- ...logsdb-index-mode-with-elastic-security.md | 12 +-- .../view-detection-alert-details.md | 4 +- .../security/endpoint-response-actions.md | 2 +- .../configure-third-party-response-actions.md | 10 +-- .../explore/configure-network-map-data.md | 4 +- solutions/security/explore/hosts-page.md | 2 +- .../security/get-started/automatic-import.md | 6 +- .../configure-advanced-settings.md | 6 +- .../elastic-security-requirements.md | 6 +- ...enable-threat-intelligence-integrations.md | 8 +- .../ingest-data-to-elastic-security.md | 58 +++++++-------- .../add-osquery-response-actions.md | 2 +- .../investigate/configure-case-settings.md | 14 ++-- .../investigate/indicators-of-compromise.md | 4 +- .../investigate/manage-integration.md | 8 +- .../security/investigate/open-manage-cases.md | 4 +- solutions/security/investigate/osquery-faq.md | 2 +- .../investigate/run-osquery-from-alerts.md | 2 +- .../run-osquery-from-investigation-guides.md | 2 +- solutions/security/investigate/timeline.md | 4 +- .../manage-elastic-defend/endpoints.md | 2 +- .../event-capture-elastic-defend.md | 2 +- .../cloud-enterprise/common-issues.md | 2 +- .../use-emergency-roles-token.md | 2 +- .../cloud-on-k8s/common-problems.md | 2 +- .../cloud-on-k8s/jvm-heap-dumps.md | 2 +- .../cloud-on-k8s/troubleshooting-methods.md | 2 +- .../esf/elastic-serverless-forwarder.md | 2 +- .../allow-all-cluster-allocation.md | 10 +-- .../allow-all-index-allocation.md | 10 +-- .../elasticsearch/circuit-breaker-errors.md | 8 +- .../decrease-disk-usage-data-node.md | 4 +- .../diagnose-unassigned-shards.md | 2 +- troubleshoot/elasticsearch/diagnostic.md | 8 +- .../discovery-troubleshooting.md | 12 +-- .../error-no-such-method.md | 2 +- .../nodejs.md | 2 +- .../elasticsearch-client-ruby-api/ruby.md | 4 +- .../elasticsearch-for-apache-hadoop.md | 4 +- troubleshoot/elasticsearch/elasticsearch.md | 2 +- .../fix-common-cluster-issues.md | 2 +- .../fix-master-node-out-of-disk.md | 4 +- .../fix-other-node-out-of-disk.md | 4 +- .../elasticsearch/fix-watermark-errors.md | 12 +-- troubleshoot/elasticsearch/high-cpu-usage.md | 4 +- .../elasticsearch/high-jvm-memory-pressure.md | 14 ++-- troubleshoot/elasticsearch/hotspotting.md | 20 ++--- .../increase-capacity-data-node.md | 4 +- .../increase-cluster-shard-limit.md | 4 +- .../elasticsearch/increase-shard-limit.md | 4 +- .../elasticsearch/increase-tier-capacity.md | 12 +-- .../index-lifecycle-management-errors.md | 4 +- .../elasticsearch/mapping-explosion.md | 16 ++-- .../monitoring-troubleshooting.md | 4 +- .../red-yellow-cluster-status.md | 16 ++-- .../elasticsearch/rejected-requests.md | 12 +-- troubleshoot/elasticsearch/remote-clusters.md | 8 +- .../repeated-snapshot-failures.md | 6 +- .../security/security-trb-extraargs.md | 2 +- .../security/security-trb-roles.md | 4 +- .../security/trb-security-kerberos.md | 4 +- .../security/trb-security-saml.md | 4 +- .../security/trb-security-setup.md | 4 +- .../security/trb-security-ssl.md | 6 +- .../troubleshoot-migrate-to-tiers.md | 4 +- .../elasticsearch/troubleshooting-searches.md | 10 +-- .../troubleshooting-shards-capacity-issues.md | 16 ++-- .../troubleshooting-unbalanced-cluster.md | 4 +- .../troubleshooting-unstable-cluster.md | 22 +++--- troubleshoot/ingest/fleet/common-problems.md | 38 +++++----- .../fleet/frequently-asked-questions.md | 16 ++-- troubleshoot/ingest/logstash.md | 6 +- troubleshoot/ingest/logstash/kafka.md | 2 +- troubleshoot/kibana/alerts.md | 2 +- troubleshoot/kibana/capturing-diagnostics.md | 2 +- troubleshoot/kibana/error-server-not-ready.md | 2 +- troubleshoot/kibana/graph.md | 2 +- troubleshoot/kibana/maps.md | 2 +- troubleshoot/kibana/migration-failures.md | 4 +- troubleshoot/kibana/monitoring.md | 2 +- troubleshoot/kibana/reporting.md | 4 +- troubleshoot/kibana/task-manager.md | 6 +- ...ticsearch-query-to-the-origin-in-kibana.md | 2 +- .../kibana/using-kibana-server-logs.md | 8 +- .../monitoring/high-memory-pressure.md | 6 +- troubleshoot/monitoring/node-bootlooping.md | 6 +- troubleshoot/monitoring/unavailable-nodes.md | 4 +- troubleshoot/monitoring/unavailable-shards.md | 8 +- .../observability/amazon-data-firehose.md | 2 +- .../apm-agent-dotnet/apm-net-agent.md | 14 ++-- .../apm-agent-go/apm-go-agent.md | 10 +-- .../apm-agent-java/apm-java-agent.md | 34 ++++----- .../apm-agent-nodejs/apm-nodejs-agent.md | 16 ++-- .../apm-agent-php/apm-php-agent.md | 6 +- .../apm-agent-python/apm-python-agent.md | 10 +-- .../apm-agent-ruby/apm-ruby-agent.md | 4 +- ...m-real-user-monitoring-javascript-agent.md | 2 +- .../apm-agent-swift/apm-ios-agent.md | 2 +- troubleshoot/observability/apm.md | 20 ++--- .../apm/_agent_is_not_instrumenting_code.md | 2 +- .../apm/apm-server-performance-diagnostic.md | 2 +- .../observability/apm/common-problems.md | 10 +-- .../apm/enable-apm-server-binary-debugging.md | 2 +- ...s-when-apm-server-elasticsearch-is-down.md | 8 +- troubleshoot/observability/inspect.md | 2 +- .../observability/troubleshoot-logs.md | 6 +- .../troubleshoot-mapping-issues.md | 2 +- ...ubleshoot-service-level-objectives-slos.md | 4 +- .../understanding-no-results-found-message.md | 4 +- troubleshoot/security/detection-rules.md | 2 +- 978 files changed, 4003 insertions(+), 3991 deletions(-) diff --git a/deploy-manage/api-keys/elastic-cloud-enterprise-api-keys.md b/deploy-manage/api-keys/elastic-cloud-enterprise-api-keys.md index 8817a48f3..c58e3a977 100644 --- a/deploy-manage/api-keys/elastic-cloud-enterprise-api-keys.md +++ b/deploy-manage/api-keys/elastic-cloud-enterprise-api-keys.md @@ -70,5 +70,5 @@ To create a bearer token: { "token": "eyJ0eXa......MgBmsw4s" } ``` -2. Specify the bearer token in the Authentication header of your API requests. To learn more, check [accessing the API from the command line](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-api-command-line.html). +2. Specify the bearer token in the Authentication header of your API requests. To learn more, check [accessing the API from the command line](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-enterprise/ece-api-command-line.md). diff --git a/deploy-manage/autoscaling/deployments-autoscaling-on-eck.md b/deploy-manage/autoscaling/deployments-autoscaling-on-eck.md index 3e85baceb..421d109b7 100644 --- a/deploy-manage/autoscaling/deployments-autoscaling-on-eck.md +++ b/deploy-manage/autoscaling/deployments-autoscaling-on-eck.md @@ -10,7 +10,7 @@ Elasticsearch autoscaling requires a valid Enterprise license or Enterprise tria :::: -ECK can leverage the [autoscaling API](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-autoscaling) introduced in Elasticsearch 7.11 to adjust automatically the number of Pods and the allocated resources in a tier. Currently, autoscaling is supported for Elasticsearch [data tiers](https://www.elastic.co/guide/en/elasticsearch/reference/current/data-tiers.html) and machine learning nodes. +ECK can leverage the [autoscaling API](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-autoscaling) introduced in Elasticsearch 7.11 to adjust automatically the number of Pods and the allocated resources in a tier. Currently, autoscaling is supported for Elasticsearch [data tiers](/manage-data/lifecycle/data-tiers.md) and machine learning nodes. ## Enable autoscaling [k8s-enable] @@ -159,7 +159,7 @@ spec: max: 512Gi ``` -You can find [a complete example in the ECK GitHub repository](https://github.com/elastic/cloud-on-k8s/blob/2.16/config/recipes/autoscaling/elasticsearch.yaml) which will also show you how to fine-tune the [autoscaling deciders](https://www.elastic.co/guide/en/elasticsearch/reference/current/autoscaling-deciders.html). +You can find [a complete example in the ECK GitHub repository](https://github.com/elastic/cloud-on-k8s/blob/2.16/config/recipes/autoscaling/elasticsearch.yaml) which will also show you how to fine-tune the [autoscaling deciders](/deploy-manage/autoscaling/autoscaling-deciders.md). ### Change the polling interval [k8s-autoscaling-polling-interval] diff --git a/deploy-manage/autoscaling/ec-autoscaling-api-example.md b/deploy-manage/autoscaling/ec-autoscaling-api-example.md index 8f509e6d5..c80c59824 100644 --- a/deploy-manage/autoscaling/ec-autoscaling-api-example.md +++ b/deploy-manage/autoscaling/ec-autoscaling-api-example.md @@ -7,7 +7,7 @@ mapped_pages: This example demonstrates how to use the Elasticsearch Service RESTful API to create a deployment with autoscaling enabled. -The example deployment has a hot data and content tier, warm data tier, cold data tier, and a machine learning node, all of which will scale within the defined parameters. To learn about the autoscaling settings, check [Deployment autoscaling](../autoscaling.md) and [Autoscaling example](ec-autoscaling-example.md). For more information about using the Elasticsearch Service API in general, check [RESTful API](https://www.elastic.co/guide/en/cloud/current/ec-restful-api.html). +The example deployment has a hot data and content tier, warm data tier, cold data tier, and a machine learning node, all of which will scale within the defined parameters. To learn about the autoscaling settings, check [Deployment autoscaling](../autoscaling.md) and [Autoscaling example](ec-autoscaling-example.md). For more information about using the Elasticsearch Service API in general, check [RESTful API](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-api-restful.md). ## Requirements [ec_requirements] diff --git a/deploy-manage/autoscaling/ec-autoscaling.md b/deploy-manage/autoscaling/ec-autoscaling.md index c7e94def4..999e7bd6b 100644 --- a/deploy-manage/autoscaling/ec-autoscaling.md +++ b/deploy-manage/autoscaling/ec-autoscaling.md @@ -62,7 +62,7 @@ When past behavior on a hot tier indicates that the influx of data can increase * Through ILM policies. For example, if a deployment has only hot nodes and autoscaling is enabled, it automatically creates warm or cold nodes, if an ILM policy is trying to move data from hot to warm or cold nodes. -On machine learning nodes, scaling is determined by an estimate of the memory and CPU requirements for the currently configured jobs and trained models. When a new machine learning job tries to start, it looks for a node with adequate native memory and CPU capacity. If one cannot be found, it stays in an `opening` state. If this waiting job exceeds the queueing limit set in the machine learning decider, a scale up is requested. Conversely, as machine learning jobs run, their memory and CPU usage might decrease or other running jobs might finish or close. In this case, if the duration of decreased resource usage exceeds the set value for `down_scale_delay`, a scale down is requested. Check [Machine learning decider](autoscaling-deciders.md) for more detail. To learn more about machine learning jobs in general, check [Create anomaly detection jobs](https://www.elastic.co/guide/en/machine-learning/current/ml-ad-run-jobs.html). +On machine learning nodes, scaling is determined by an estimate of the memory and CPU requirements for the currently configured jobs and trained models. When a new machine learning job tries to start, it looks for a node with adequate native memory and CPU capacity. If one cannot be found, it stays in an `opening` state. If this waiting job exceeds the queueing limit set in the machine learning decider, a scale up is requested. Conversely, as machine learning jobs run, their memory and CPU usage might decrease or other running jobs might finish or close. In this case, if the duration of decreased resource usage exceeds the set value for `down_scale_delay`, a scale down is requested. Check [Machine learning decider](autoscaling-deciders.md) for more detail. To learn more about machine learning jobs in general, check [Create anomaly detection jobs](/explore-analyze/machine-learning/anomaly-detection/ml-ad-run-jobs.md). On a highly available deployment, autoscaling events are always applied to instances in each availability zone simultaneously, to ensure consistency. diff --git a/deploy-manage/autoscaling/ece-autoscaling-api-example.md b/deploy-manage/autoscaling/ece-autoscaling-api-example.md index 539cedcc8..dfdeb0cde 100644 --- a/deploy-manage/autoscaling/ece-autoscaling-api-example.md +++ b/deploy-manage/autoscaling/ece-autoscaling-api-example.md @@ -7,7 +7,7 @@ mapped_pages: This example demonstrates how to use the Elastic Cloud Enterprise RESTful API to create a deployment with autoscaling enabled. -The example deployment has a hot data and content tier, warm data tier, cold data tier, and a machine learning node, all of which will scale within the defined parameters. To learn about the autoscaling settings, check [Deployment autoscaling](../autoscaling.md) and [Autoscaling example](ece-autoscaling-example.md). For more information about using the Elastic Cloud Enterprise API in general, check [RESTful API](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-restful-api.html). +The example deployment has a hot data and content tier, warm data tier, cold data tier, and a machine learning node, all of which will scale within the defined parameters. To learn about the autoscaling settings, check [Deployment autoscaling](../autoscaling.md) and [Autoscaling example](ece-autoscaling-example.md). For more information about using the Elastic Cloud Enterprise API in general, check [RESTful API](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-enterprise/restful-api.md). ## Requirements [ece_requirements_3] diff --git a/deploy-manage/autoscaling/ece-autoscaling.md b/deploy-manage/autoscaling/ece-autoscaling.md index a39849239..682e76e05 100644 --- a/deploy-manage/autoscaling/ece-autoscaling.md +++ b/deploy-manage/autoscaling/ece-autoscaling.md @@ -62,7 +62,7 @@ When past behavior on a hot tier indicates that the influx of data can increase * Through ILM policies. For example, if a deployment has only hot nodes and autoscaling is enabled, it automatically creates warm or cold nodes, if an ILM policy is trying to move data from hot to warm or cold nodes. -On machine learning nodes, scaling is determined by an estimate of the memory and CPU requirements for the currently configured jobs and trained models. When a new machine learning job tries to start, it looks for a node with adequate native memory and CPU capacity. If one cannot be found, it stays in an `opening` state. If this waiting job exceeds the queueing limit set in the machine learning decider, a scale up is requested. Conversely, as machine learning jobs run, their memory and CPU usage might decrease or other running jobs might finish or close. In this case, if the duration of decreased resource usage exceeds the set value for `down_scale_delay`, a scale down is requested. Check [Machine learning decider](autoscaling-deciders.md) for more detail. To learn more about machine learning jobs in general, check [Create anomaly detection jobs](https://www.elastic.co/guide/en/machine-learning/current/ml-ad-run-jobs.html). +On machine learning nodes, scaling is determined by an estimate of the memory and CPU requirements for the currently configured jobs and trained models. When a new machine learning job tries to start, it looks for a node with adequate native memory and CPU capacity. If one cannot be found, it stays in an `opening` state. If this waiting job exceeds the queueing limit set in the machine learning decider, a scale up is requested. Conversely, as machine learning jobs run, their memory and CPU usage might decrease or other running jobs might finish or close. In this case, if the duration of decreased resource usage exceeds the set value for `down_scale_delay`, a scale down is requested. Check [Machine learning decider](autoscaling-deciders.md) for more detail. To learn more about machine learning jobs in general, check [Create anomaly detection jobs](/explore-analyze/machine-learning/anomaly-detection/ml-ad-run-jobs.md). On a highly available deployment, autoscaling events are always applied to instances in each availability zone simultaneously, to ensure consistency. diff --git a/deploy-manage/autoscaling/ech-autoscaling.md b/deploy-manage/autoscaling/ech-autoscaling.md index 126aeaaa1..eeef25ab3 100644 --- a/deploy-manage/autoscaling/ech-autoscaling.md +++ b/deploy-manage/autoscaling/ech-autoscaling.md @@ -62,7 +62,7 @@ When past behavior on a hot tier indicates that the influx of data can increase * Through ILM policies. For example, if a deployment has only hot nodes and autoscaling is enabled, it automatically creates warm or cold nodes, if an ILM policy is trying to move data from hot to warm or cold nodes. -On machine learning nodes, scaling is determined by an estimate of the memory and CPU requirements for the currently configured jobs and trained models. When a new machine learning job tries to start, it looks for a node with adequate native memory and CPU capacity. If one cannot be found, it stays in an `opening` state. If this waiting job exceeds the queueing limit set in the machine learning decider, a scale up is requested. Conversely, as machine learning jobs run, their memory and CPU usage might decrease or other running jobs might finish or close. In this case, if the duration of decreased resource usage exceeds the set value for `down_scale_delay`, a scale down is requested. Check [Machine learning decider](autoscaling-deciders.md) for more detail. To learn more about machine learning jobs in general, check [Create anomaly detection jobs](https://www.elastic.co/guide/en/machine-learning/current/ml-ad-run-jobs.html). +On machine learning nodes, scaling is determined by an estimate of the memory and CPU requirements for the currently configured jobs and trained models. When a new machine learning job tries to start, it looks for a node with adequate native memory and CPU capacity. If one cannot be found, it stays in an `opening` state. If this waiting job exceeds the queueing limit set in the machine learning decider, a scale up is requested. Conversely, as machine learning jobs run, their memory and CPU usage might decrease or other running jobs might finish or close. In this case, if the duration of decreased resource usage exceeds the set value for `down_scale_delay`, a scale down is requested. Check [Machine learning decider](autoscaling-deciders.md) for more detail. To learn more about machine learning jobs in general, check [Create anomaly detection jobs](/explore-analyze/machine-learning/anomaly-detection/ml-ad-run-jobs.md). On a highly available deployment, autoscaling events are always applied to instances in each availability zone simultaneously, to ensure consistency. diff --git a/deploy-manage/cloud-organization/billing/billing-faq.md b/deploy-manage/cloud-organization/billing/billing-faq.md index f0ee15c8a..c4f4a06a6 100644 --- a/deploy-manage/cloud-organization/billing/billing-faq.md +++ b/deploy-manage/cloud-organization/billing/billing-faq.md @@ -108,7 +108,7 @@ $$$faq-dts$$$What are the data transfer and storage charges and how can I contro $$$faq-taxes$$$What taxes will be applied on my invoice? : Customers within the United States, and US territories, will be billed from Elasticsearch Inc., based out of the United States. The US Sales Tax rate will be based on the SaaS tax rates in the local jurisdiction (state/county/city) of the billing address of your subscription. - Customers outside the United States, will be billed from Elasticsearch BV, based out of the Netherlands. Customers with a billing address in countries with applicable EU VAT will have VAT applied based on their country and status as a business or private customer. Elastic collects VAT Numbers associated with EU VAT to determine your status as a business (B2B) or private / non-business customer (B2C), as this is a key factor to determine Elastic’s liability to charge VAT on your subscription. To update your VAT Number follow the instructions provided in [Add your billing details](https://www.elastic.co/guide/en/cloud/current/ec-billing-details.html). Customers located in countries without EU VAT will not be applied VAT on their invoices. + Customers outside the United States, will be billed from Elasticsearch BV, based out of the Netherlands. Customers with a billing address in countries with applicable EU VAT will have VAT applied based on their country and status as a business or private customer. Elastic collects VAT Numbers associated with EU VAT to determine your status as a business (B2B) or private / non-business customer (B2C), as this is a key factor to determine Elastic’s liability to charge VAT on your subscription. To update your VAT Number follow the instructions provided in [Add your billing details](/deploy-manage/cloud-organization/billing/add-billing-details.md). Customers located in countries without EU VAT will not be applied VAT on their invoices. diff --git a/deploy-manage/cloud-organization/billing/cloud-hosted-deployment-billing-dimensions.md b/deploy-manage/cloud-organization/billing/cloud-hosted-deployment-billing-dimensions.md index 385bfbdf2..84aec88cf 100644 --- a/deploy-manage/cloud-organization/billing/cloud-hosted-deployment-billing-dimensions.md +++ b/deploy-manage/cloud-organization/billing/cloud-hosted-deployment-billing-dimensions.md @@ -57,7 +57,7 @@ Data inter-node charges are currently waived for Azure deployments. Data transfer out of deployments and between nodes of the cluster is hard to control, as it is a function of the use case employed for the cluster and cannot always be tuned. Use cases such as batch queries executed at a frequent interval may be revisited to help lower transfer costs, if applicable. Watcher email alerts also count towards data transfer out of the deployment, so you may want to reduce their frequency and size. -The largest contributor to inter-node data transfer is usually shard movement between nodes in a cluster. The only way to prevent shard movement is by having a single node in a single availability zone. This solution is only possible for clusters up to 64GB RAM and is not recommended as it creates a risk of data loss. [Oversharding](https://www.elastic.co/guide/en/elasticsearch/reference/current/size-your-shards.html) can cause excessive shard movement. Avoiding oversharding can also help control costs and improve performance. Note that creating snapshots generates inter-node data transfer. The *storage* cost of snapshots is detailed later in this document. +The largest contributor to inter-node data transfer is usually shard movement between nodes in a cluster. The only way to prevent shard movement is by having a single node in a single availability zone. This solution is only possible for clusters up to 64GB RAM and is not recommended as it creates a risk of data loss. [Oversharding](/deploy-manage/production-guidance/optimize-performance/size-shards.md) can cause excessive shard movement. Avoiding oversharding can also help control costs and improve performance. Note that creating snapshots generates inter-node data transfer. The *storage* cost of snapshots is detailed later in this document. The exact root cause of unusual data transfer is not always something we can identify as it can have many causes, some of which are out of our control and not associated with Cloud configuration changes. It may help to [enable monitoring](../../monitor/stack-monitoring/elastic-cloud-stack-monitoring.md) and examine index and shard activity on your cluster. diff --git a/deploy-manage/cloud-organization/tools-and-apis.md b/deploy-manage/cloud-organization/tools-and-apis.md index 0cb89d863..7d5946690 100644 --- a/deploy-manage/cloud-organization/tools-and-apis.md +++ b/deploy-manage/cloud-organization/tools-and-apis.md @@ -10,15 +10,15 @@ Most Elastic resources can be accessed and managed through RESTful APIs. While t Elasticsearch Service API : You can use the Elasticsearch Service API to manage your deployments and all of the resources associated with them. This includes performing deployment CRUD operations, scaling or autoscaling resources, and managing traffic filters, deployment extensions, remote clusters, and Elastic Stack versions. You can also access cost data by deployment and by organization. - To learn more about the Elasticsearch Service API, read through the [API overview](https://www.elastic.co/guide/en/cloud/current/ec-restful-api.html), try out some [getting started examples](https://www.elastic.co/guide/en/cloud/current/ec-api-examples.html), and check our [API reference documentation](https://www.elastic.co/docs/api/doc/cloud). + To learn more about the Elasticsearch Service API, read through the [API overview](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-api-restful.md), try out some [getting started examples](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/api-examples.md), and check our [API reference documentation](https://www.elastic.co/docs/api/doc/cloud). - Calls to the Elasticsearch Service API are subject to [Rate limiting](https://www.elastic.co/guide/en/cloud/current/ec-api-rate-limiting.html). + Calls to the Elasticsearch Service API are subject to [Rate limiting](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-api-rate-limiting.md). Elasticsearch APIs : This set of APIs allows you to interact directly with the Elasticsearch nodes in your deployment. You can ingest data, run search queries, check the health of your clusters, manage snapshots, and more. - To use these APIs in Elasticsearch Service read our topic [Access the Elasticsearch API console](https://www.elastic.co/guide/en/cloud/current/ec-api-console.html), and to learn about all of the available endpoints check the [Elasticsearch API reference documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html). + To use these APIs in Elasticsearch Service read our topic [Access the Elasticsearch API console](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-api-console.md), and to learn about all of the available endpoints check the [Elasticsearch API reference documentation](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/index.md). Some [restrictions](../deploy/elastic-cloud/restrictions-known-problems.md#ec-restrictions-apis-elasticsearch) apply when using the Elasticsearch APIs in Elasticsearch Service. @@ -37,7 +37,7 @@ Other Products * [APM event intake API Reference](/solutions/observability/apps/elastic-apm-events-intake-api.md) * [App Search API Reference](https://www.elastic.co/guide/en/app-search/current/api-reference.html) * [Elastic Security APIs](https://www.elastic.co/guide/en/security/current/security-apis.html) - * [Fleet APIs](https://www.elastic.co/guide/en/fleet/current/fleet-api-docs.html) + * [Fleet APIs](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/fleet-api-docs.md) * [Logstash APIs](https://www.elastic.co/guide/en/logstash/current/monitoring-logstash.html) * [Workplace Search API Reference](https://www.elastic.co/guide/en/workplace-search/current/workplace-search-api-overview.html) diff --git a/deploy-manage/deploy/cloud-enterprise/assign-roles-to-hosts.md b/deploy-manage/deploy/cloud-enterprise/assign-roles-to-hosts.md index 654c2f080..2048ac20b 100644 --- a/deploy-manage/deploy/cloud-enterprise/assign-roles-to-hosts.md +++ b/deploy-manage/deploy/cloud-enterprise/assign-roles-to-hosts.md @@ -30,7 +30,7 @@ Once the `director` role is assigned to a runner, the Zookeeper service starts o Each role is associated with a set of Docker containers that provide the specific functionality. -There are some additional roles shown in the Cloud UI, such as the [beats-runner](https://www.elastic.co/guide/en/elastic-stack-glossary/current/terms.html#glossary-beats-runner) and [services-forwarder](https://www.elastic.co/guide/en/elastic-stack-glossary/current/terms.html#glossary-services-forwarder) roles, that are required by Elastic Cloud Enterprise and that you cannot modify. +There are some additional roles shown in the Cloud UI, such as the [beats-runner](asciidocalypse://docs/docs-content/docs/reference/glossary/index.md#glossary-beats-runner) and [services-forwarder](asciidocalypse://docs/docs-content/docs/reference/glossary/index.md#glossary-services-forwarder) roles, that are required by Elastic Cloud Enterprise and that you cannot modify. To assign roles to hosts: diff --git a/deploy-manage/deploy/cloud-enterprise/ce-add-support-for-node-roles-autoscaling.md b/deploy-manage/deploy/cloud-enterprise/ce-add-support-for-node-roles-autoscaling.md index 1bf5f4e29..e6b3adca8 100644 --- a/deploy-manage/deploy/cloud-enterprise/ce-add-support-for-node-roles-autoscaling.md +++ b/deploy-manage/deploy/cloud-enterprise/ce-add-support-for-node-roles-autoscaling.md @@ -12,12 +12,12 @@ System owned deployment templates have already been updated to support both data ## Adding support for node_roles [ece_adding_support_for_node_roles] -The `node_roles` field defines the roles that an Elasticsearch topology element can have, which is used in place of `node_type` when a new feature such as autoscaling is enabled, or when a new data tier is added. This field is supported on [Elastic stack versions 7.10 and above](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-node-types.html). +The `node_roles` field defines the roles that an Elasticsearch topology element can have, which is used in place of `node_type` when a new feature such as autoscaling is enabled, or when a new data tier is added. This field is supported on [Elastic stack versions 7.10 and above](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-enterprise/changes-to-index-allocation-api.md). There are a number of fields that need to be added to each Elasticsearch node in order to support `node_roles`: * **id**: Unique identifier of the topology element. This field, along with the `node_roles`, identifies an Elasticsearch topology element. -* **node_roles**: The list of node roles. Allowable roles are: `master`, `ingest`, `ml`, `data_hot`, `data_content`, `data_warm`, `data_cold`, `data_frozen`, `remote_cluster_client`, and `transform`. For details, check [Node roles](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#node-roles). +* **node_roles**: The list of node roles. Allowable roles are: `master`, `ingest`, `ml`, `data_hot`, `data_content`, `data_warm`, `data_cold`, `data_frozen`, `remote_cluster_client`, and `transform`. For details, check [Node roles](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md#node-roles). * **topology_element_control**: Controls for the topology element. * **min**: The absolute minimum size limit for a topology element. If the value is `0`, that means the topology element can be disabled. diff --git a/deploy-manage/deploy/cloud-enterprise/change-endpoint-urls.md b/deploy-manage/deploy/cloud-enterprise/change-endpoint-urls.md index 8054b7e38..6f7dc9b83 100644 --- a/deploy-manage/deploy/cloud-enterprise/change-endpoint-urls.md +++ b/deploy-manage/deploy/cloud-enterprise/change-endpoint-urls.md @@ -48,7 +48,7 @@ If you have an App Search instance, after specifying a new deployment domain nam ::::{note} -The built-in Proxy Certificate only validates against the default endpoint format described on this page. Once you change it, it is necessary to upload a new Proxy Certificate as described in [Manage security certificates](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-manage-certificates.html). For test only, clients can be configured with hostname verification disabled until the new certificate is uploaded. +The built-in Proxy Certificate only validates against the default endpoint format described on this page. Once you change it, it is necessary to upload a new Proxy Certificate as described in [Manage security certificates](/deploy-manage/security/secure-your-elastic-cloud-enterprise-installation/manage-security-certificates.md). For test only, clients can be configured with hostname verification disabled until the new certificate is uploaded. :::: diff --git a/deploy-manage/deploy/cloud-enterprise/configure-host-rhel-cloud.md b/deploy-manage/deploy/cloud-enterprise/configure-host-rhel-cloud.md index 481e4aca9..bef34bece 100644 --- a/deploy-manage/deploy/cloud-enterprise/configure-host-rhel-cloud.md +++ b/deploy-manage/deploy/cloud-enterprise/configure-host-rhel-cloud.md @@ -20,7 +20,7 @@ Create a RHEL 8 (the version must be >= 8.5, but <9), RHEL 9, Rocky Linux 8, or * For RHEL 8, follow your internal guidelines to add a vanilla RHEL 8 VM to your environment. Note that the version must be >= 8.5, but <9. -Verify that required traffic is allowed. Check the [Networking prerequisites](ece-networking-prereq.md) and [Google Cloud Platform (GCP)](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-prereqs.html) guidelines for a list of ports that need to be open. The technical configuration highly depends on the underlying infrastructure. +Verify that required traffic is allowed. Check the [Networking prerequisites](ece-networking-prereq.md) and [Google Cloud Platform (GCP)](/deploy-manage/deploy/cloud-enterprise/prepare-environment.md) guidelines for a list of ports that need to be open. The technical configuration highly depends on the underlying infrastructure. **Example:** For AWS, allowing traffic between hosts is implemented using security groups. @@ -283,7 +283,7 @@ Verify that required traffic is allowed. Check the [Networking prerequisites](ec # enable forwarding so the Docker networking works as expected net.ipv4.ip_forward=1 # Decrease the maximum number of TCP retransmissions to 5 as recommended for Elasticsearch TCP retransmission timeout. - # See https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config-tcpretries.html + # See /deploy-manage/deploy/self-managed/system-config-tcpretries.md net.ipv4.tcp_retries2=5 # Make sure the host doesn't swap too early vm.swappiness=1 diff --git a/deploy-manage/deploy/cloud-enterprise/deployment-templates.md b/deploy-manage/deploy/cloud-enterprise/deployment-templates.md index 3e93f71a3..917f5309f 100644 --- a/deploy-manage/deploy/cloud-enterprise/deployment-templates.md +++ b/deploy-manage/deploy/cloud-enterprise/deployment-templates.md @@ -32,7 +32,7 @@ The deployment templates available are: * **Cross-cluster search template** - This template manages remote connections for running Elasticsearch queries across multiple deployments and indices. These federated searches make it possible to break up large deployments into smaller, more resilient Elasticsearch clusters. You can organize deployments by departments or projects for example, but still have the ability to aggregate query results and get visibility into your Elastic Cloud Enterprise infrastructure. You can add remote connections either when you create your deployment or when you customize it. To know more about cross-cluster search, check [Enable cross-cluster search](https://www.elastic.co/guide/en/cloud/current/ec-enable-ccs.html). + This template manages remote connections for running Elasticsearch queries across multiple deployments and indices. These federated searches make it possible to break up large deployments into smaller, more resilient Elasticsearch clusters. You can organize deployments by departments or projects for example, but still have the ability to aggregate query results and get visibility into your Elastic Cloud Enterprise infrastructure. You can add remote connections either when you create your deployment or when you customize it. To know more about cross-cluster search, check [Enable cross-cluster search](/deploy-manage/remote-clusters/ec-enable-ccs.md). * **Elastic Security template** diff --git a/deploy-manage/deploy/cloud-enterprise/ece-configure-templates-index-management.md b/deploy-manage/deploy/cloud-enterprise/ece-configure-templates-index-management.md index 74563c918..bf00eb5bf 100644 --- a/deploy-manage/deploy/cloud-enterprise/ece-configure-templates-index-management.md +++ b/deploy-manage/deploy/cloud-enterprise/ece-configure-templates-index-management.md @@ -39,7 +39,7 @@ To configure index management when you create a deployment template: Index curation : Creates new indices on hot nodes first and moves them to warm nodes later on, based on the data views (formerly *index patterns*) you specify. Also manages replica counts for you, so that all shards of an index can fit on the right data nodes. Compared to index lifecycle management, index curation for time-based indices supports only one action, to move indices from nodes on one data configuration to another, but it is more straightforward to set up initially and all setup can be done directly from the Cloud UI. - If your user need to delete indices once they are no longer useful to them, they can run [Curator](https://www.elastic.co/guide/en/elasticsearch/client/curator/current/index.html) on-premise to manage indices for Elasticsearch clusters hosted on Elastic Cloud Enterprise. + If your user need to delete indices once they are no longer useful to them, they can run [Curator](asciidocalypse://docs/curator/docs/reference/elasticsearch/elasticsearch-client-curator/index.md) on-premise to manage indices for Elasticsearch clusters hosted on Elastic Cloud Enterprise. To configure index curation: diff --git a/deploy-manage/deploy/cloud-enterprise/ece-ha.md b/deploy-manage/deploy/cloud-enterprise/ece-ha.md index f6766b75a..2d57c6f76 100644 --- a/deploy-manage/deploy/cloud-enterprise/ece-ha.md +++ b/deploy-manage/deploy/cloud-enterprise/ece-ha.md @@ -19,7 +19,7 @@ The main difference between Elastic Cloud Enterprise installations that include We recommend that for each deployment you use at least two availability zones for production and three for mission-critical systems. Using more than three availability zones for a deployment is not required nor supported. Availability zones are intended for high availability, not scalability. ::::{warning} -{{es}} clusters that are set up to use only one availability zone are not [highly available](https://www.elastic.co/guide/en/elasticsearch/reference/current/high-availability-cluster-design.html) and are at risk of data loss. To safeguard against data loss, you must use at least two {{ece}} availability zones. +{{es}} clusters that are set up to use only one availability zone are not [highly available](/deploy-manage/production-guidance/availability-and-resilience.md) and are at risk of data loss. To safeguard against data loss, you must use at least two {{ece}} availability zones. :::: @@ -31,14 +31,14 @@ Increasing the number of zones should not be used to add more resources. The con ## Master nodes [ece-ece-ha-2-master-nodes] -$$$ece-ha-tiebreaker$$$Tiebreakers are used in distributed clusters to avoid cases of [split brain](https://en.wikipedia.org/wiki/Split-brain_(computing)), where an {{es}} cluster splits into multiple, autonomous parts that continue to handle requests independently of each other, at the risk of affecting cluster consistency and data loss. A split-brain scenario is avoided by making sure that a minimum number of [master-eligible nodes](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#master-node) must be present in order for any part of the cluster to elect a master node and accept user requests. To prevent multiple parts of a cluster from being eligible, there must be a [quorum-based majority](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-quorums.html) of `(n/2)+1` nodes, where `n` is the number of master-eligible nodes in the cluster. The minimum number of master nodes to reach quorum in a two-node cluster is the same as for a three-node cluster: two nodes must be available. +$$$ece-ha-tiebreaker$$$Tiebreakers are used in distributed clusters to avoid cases of [split brain](https://en.wikipedia.org/wiki/Split-brain_(computing)), where an {{es}} cluster splits into multiple, autonomous parts that continue to handle requests independently of each other, at the risk of affecting cluster consistency and data loss. A split-brain scenario is avoided by making sure that a minimum number of [master-eligible nodes](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md#master-node) must be present in order for any part of the cluster to elect a master node and accept user requests. To prevent multiple parts of a cluster from being eligible, there must be a [quorum-based majority](/deploy-manage/distributed-architecture/discovery-cluster-formation/modules-discovery-quorums.md) of `(n/2)+1` nodes, where `n` is the number of master-eligible nodes in the cluster. The minimum number of master nodes to reach quorum in a two-node cluster is the same as for a three-node cluster: two nodes must be available. When you create a cluster with nodes in two availability zones when a third zone is available, Elastic Cloud Enterprise can create a tiebreaker in the third availability zone to help establish quorum in case of loss of an availability zone. The extra tiebreaker node that helps to provide quorum does not have to be a full-fledged and expensive node, as it does not hold data. For example: By tagging allocators hosts in Elastic Cloud Enterprise, can you create a cluster with eight nodes each in zones `ece-1a` and `ece-1b`, for a total of 16 nodes, and one tiebreaker node in zone `ece-1c`. This cluster can lose any of the three availability zones whilst maintaining quorum, which means that the cluster can continue to process user requests, provided that there is sufficient capacity available when an availability zone goes down. -By default, each node in an {{es}} cluster is a master-eligible node and a data node. In larger clusters, such as production clusters, it’s a good practice to split the roles, so that master nodes are not handling search or indexing work. When you create a cluster, you can specify to use dedicated [master-eligible nodes](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#master-node), one per availability zone. +By default, each node in an {{es}} cluster is a master-eligible node and a data node. In larger clusters, such as production clusters, it’s a good practice to split the roles, so that master nodes are not handling search or indexing work. When you create a cluster, you can specify to use dedicated [master-eligible nodes](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md#master-node), one per availability zone. ::::{warning} -Clusters that only have two or fewer master-eligible node are not [highly available](https://www.elastic.co/guide/en/elasticsearch/reference/current/high-availability-cluster-design.html) and are at risk of data loss. You must have [at least three master-eligible nodes](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-quorums.html). +Clusters that only have two or fewer master-eligible node are not [highly available](/deploy-manage/production-guidance/availability-and-resilience.md) and are at risk of data loss. You must have [at least three master-eligible nodes](/deploy-manage/distributed-architecture/discovery-cluster-formation/modules-discovery-quorums.md). :::: @@ -52,14 +52,14 @@ GET _all/_settings/index.number_of_replicas ``` ::::{warning} -Indices with no replica, except for [searchable snapshot indices](https://www.elastic.co/guide/en/elasticsearch/reference/current/searchable-snapshots.html), are not highly available. You should use replicas to mitigate against possible data loss. +Indices with no replica, except for [searchable snapshot indices](/deploy-manage/tools/snapshot-and-restore/searchable-snapshots.md), are not highly available. You should use replicas to mitigate against possible data loss. :::: ## Snapshot backups [ece-ece-ha-4-snapshot] -You should configure and use [{{es}} snapshots](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-restore.html). Snapshots provide a way to backup and restore your {{es}} indices. They can be used to copy indices for testing, to recover from failures or accidental deletions, or to migrate data to other deployments. We recommend configuring an [{{ece}}-level repository](../../tools/snapshot-and-restore/cloud-enterprise.md) to apply across all deployments. See [Work with snapshots](../../tools/snapshot-and-restore.md) for more guidance. +You should configure and use [{{es}} snapshots](/deploy-manage/tools/snapshot-and-restore.md). Snapshots provide a way to backup and restore your {{es}} indices. They can be used to copy indices for testing, to recover from failures or accidental deletions, or to migrate data to other deployments. We recommend configuring an [{{ece}}-level repository](../../tools/snapshot-and-restore/cloud-enterprise.md) to apply across all deployments. See [Work with snapshots](../../tools/snapshot-and-restore.md) for more guidance. ## Furthermore considerations [ece-ece-ha-5-other] diff --git a/deploy-manage/deploy/cloud-enterprise/ece-manage-capacity.md b/deploy-manage/deploy/cloud-enterprise/ece-manage-capacity.md index 5daf15cd3..d7db12cfb 100644 --- a/deploy-manage/deploy/cloud-enterprise/ece-manage-capacity.md +++ b/deploy-manage/deploy/cloud-enterprise/ece-manage-capacity.md @@ -36,7 +36,7 @@ curl -X PUT \ -d '{"capacity":}' ``` -For more information on how to use API keys for authentication, check the section [Access the API from the Command Line](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-api-command-line.html). +For more information on how to use API keys for authentication, check the section [Access the API from the Command Line](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-enterprise/ece-api-command-line.md). ::::{important} Prior to ECE 3.5.0, regardless of the use of this API, the [CPU quota](#ece-alloc-cpu) used the memory specified at installation time. @@ -88,15 +88,15 @@ Those percentages represent the upper limit of the % of the total CPU resources In addition to the [CPU quotas](#ece-alloc-cpu), the `processors` setting also plays a relevant role. -The allocated `processors` setting originates from Elasticsearch and is responsible for calculating your [thread pools](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-threadpool.html#node.processors). While the CPU quota defines the percentage of the total CPU resources of an allocator that are assigned to an instance, the allocated `processors` define how the thread pools are calculated in Elasticsearch, and therefore how many concurrent search and indexing requests an instance can process. In other words, the CPU ratio defines how fast a single task can be completed, while the `processors` setting defines how many different tasks can be completed at the same time. +The allocated `processors` setting originates from Elasticsearch and is responsible for calculating your [thread pools](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/thread-pool-settings.md#node.processors). While the CPU quota defines the percentage of the total CPU resources of an allocator that are assigned to an instance, the allocated `processors` define how the thread pools are calculated in Elasticsearch, and therefore how many concurrent search and indexing requests an instance can process. In other words, the CPU ratio defines how fast a single task can be completed, while the `processors` setting defines how many different tasks can be completed at the same time. We rely on Elasticsearch and the `-XX:ActiveProcessorCount` JVM setting to automatically detect the allocated `processors`. -In earlier versions of ECE and Elasticsearch, the [Elasticsearch processors](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-threadpool.html#node.processors) setting was used to configure the allocated `processors` according to the following formula: +In earlier versions of ECE and Elasticsearch, the [Elasticsearch processors](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/thread-pool-settings.md#node.processors) setting was used to configure the allocated `processors` according to the following formula: `Math.min(16,Math.max(2,(16*instanceCapacity*1.0/1024/64).toInt))` -The following table gives an overview of the allocated `processors` that are used to calculate the Elasticsearch [thread pools](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-threadpool.html) based on the preceding formula: +The following table gives an overview of the allocated `processors` that are used to calculate the Elasticsearch [thread pools](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/thread-pool-settings.md) based on the preceding formula: | instance size | vCPU | | --- | --- | diff --git a/deploy-manage/deploy/cloud-enterprise/find-cloud-id.md b/deploy-manage/deploy/cloud-enterprise/find-cloud-id.md index 9fbae64b5..08e8d264f 100644 --- a/deploy-manage/deploy/cloud-enterprise/find-cloud-id.md +++ b/deploy-manage/deploy/cloud-enterprise/find-cloud-id.md @@ -39,7 +39,7 @@ To use the Cloud ID, you need: * The unique Cloud ID for your deployment, available from the deployment overview page. * A user ID and password that has permission to send data to your cluster. - In our examples, we use the `elastic` superuser that every Elasticsearch cluster comes with. The password for the `elastic` user is provided when you create a deployment (and can also be [reset](../../users-roles/cluster-or-deployment-auth/built-in-users.md) if you forget it). On a production system, you should adapt these examples by creating a user that can write to and access only the minimally required indices. For each Beat, review the specific feature and role table, similar to the one in [Metricbeat](https://www.elastic.co/guide/en/beats/metricbeat/current/feature-roles.html) documentation. + In our examples, we use the `elastic` superuser that every Elasticsearch cluster comes with. The password for the `elastic` user is provided when you create a deployment (and can also be [reset](../../users-roles/cluster-or-deployment-auth/built-in-users.md) if you forget it). On a production system, you should adapt these examples by creating a user that can write to and access only the minimally required indices. For each Beat, review the specific feature and role table, similar to the one in [Metricbeat](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/feature-roles.md) documentation. @@ -48,7 +48,7 @@ To use the Cloud ID, you need: The following example shows how you can send operational data from Metricbeat to Elastic Cloud Enterprise by using the Cloud ID. Any of the available Beats will work, but we had to pick one for this example. ::::{tip} -For others, you can learn more about [getting started](https://www.elastic.co/guide/en/beats/libbeat/current/getting-started.html) with each Beat. +For others, you can learn more about [getting started](asciidocalypse://docs/beats/docs/reference/ingestion-tools/index.md) with each Beat. :::: @@ -57,8 +57,8 @@ To get started with Metricbeat and Elastic Cloud Enterprise: 1. [Log into the Cloud UI](log-into-cloud-ui.md). 2. [Create a new deployment](create-deployment.md) and copy down the password for the `elastic` user. 3. On the deployment overview page, copy down the Cloud ID. -4. Set up the Beat of your choice, such as [Metricbeat](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-installation-configuration.html). -5. [Configure the Beat output to send to Elastic Cloud](https://www.elastic.co/guide/en/beats/metricbeat/current/configure-cloud-id.html). +4. Set up the Beat of your choice, such as [Metricbeat](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/metricbeat-installation-configuration.md). +5. [Configure the Beat output to send to Elastic Cloud](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/configure-cloud-id.md). ::::{note} Make sure you replace the values for `cloud.id` and `cloud.auth` with your own information. diff --git a/deploy-manage/deploy/cloud-enterprise/migrate-ece-to-podman-hosts.md b/deploy-manage/deploy/cloud-enterprise/migrate-ece-to-podman-hosts.md index 5efe1a8a7..8867cc8f5 100644 --- a/deploy-manage/deploy/cloud-enterprise/migrate-ece-to-podman-hosts.md +++ b/deploy-manage/deploy/cloud-enterprise/migrate-ece-to-podman-hosts.md @@ -42,7 +42,7 @@ Otherwise, when the file content changes, the corresponding user is mentioned as 1. Make sure you are running a healthy x-node ECE environment ready to be upgraded. All nodes use the Docker container runtime. 2. Upgrade to ECE 3.3.0+ following the [Upgrade your installation](../../upgrade/orchestrator/upgrade-cloud-enterprise.md) guideline. Skip this step if your existing ECE installation already runs ECE >= 3.3.0. 3. Follow your internal guidelines to add an additional vanilla RHEL (Note that the version must be >= 8.5, but <9), or Rocky Linux 8 or 9 VM to your environment. -4. Verify that required traffic from the host added in step 3 is allowed to the primary ECE VM(s). Check the [Networking prerequisites](ece-networking-prereq.md) and [Google Cloud Platform (GCP)](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-prereqs.html) guidelines for a list of ports that need to be open. The technical configuration highly depends on the underlying infrastructure. +4. Verify that required traffic from the host added in step 3 is allowed to the primary ECE VM(s). Check the [Networking prerequisites](ece-networking-prereq.md) and [Google Cloud Platform (GCP)](/deploy-manage/deploy/cloud-enterprise/prepare-environment.md) guidelines for a list of ports that need to be open. The technical configuration highly depends on the underlying infrastructure. **Example** For AWS, allowing traffic between hosts is implemented using security groups. @@ -322,7 +322,7 @@ Otherwise, when the file content changes, the corresponding user is mentioned as # enable forwarding so the Docker networking works as expected net.ipv4.ip_forward=1 # Decrease the maximum number of TCP retransmissions to 5 as recommended for Elasticsearch TCP retransmission timeout. - # See https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config-tcpretries.html + # See /deploy-manage/deploy/self-managed/system-config-tcpretries.md net.ipv4.tcp_retries2=5 # Make sure the host doesn't swap too early vm.swappiness=1 diff --git a/deploy-manage/deploy/cloud-enterprise/post-installation-steps.md b/deploy-manage/deploy/cloud-enterprise/post-installation-steps.md index d276bcbc5..ee7bafd32 100644 --- a/deploy-manage/deploy/cloud-enterprise/post-installation-steps.md +++ b/deploy-manage/deploy/cloud-enterprise/post-installation-steps.md @@ -8,7 +8,7 @@ mapped_pages: After your Elastic Cloud Enterprise installation is up, some additional steps might be required: * Add your own load balancer. Load balancers are user supplied and we do not currently provide configuration steps for you. -* [Add more capacity](../../maintenance/ece/scale-out-installation.md) to your Elastic Cloud Enterprise installation, [resize your deployment](resize-deployment.md), [upgrade to a newer Elasticsearch version](../../upgrade/deployment-or-cluster.md), and [add some plugins](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-add-plugins.html). +* [Add more capacity](../../maintenance/ece/scale-out-installation.md) to your Elastic Cloud Enterprise installation, [resize your deployment](resize-deployment.md), [upgrade to a newer Elasticsearch version](../../upgrade/deployment-or-cluster.md), and [add some plugins](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch-plugins/cloud-enterprise/ece-add-plugins.md). * [Configure ECE system deployments](system-deployments-configuration.md) to ensure a highly available and resilient setup. * [Configure ECE for deployment templates](configure-deployment-templates.md) to indicate what kind of hardware you have available for Elastic Stack deployments. * [Install your security certificates](../../security/secure-your-elastic-cloud-enterprise-installation/manage-security-certificates.md) to enable TLS/SSL authentication for secure connections over HTTPS. diff --git a/deploy-manage/deploy/cloud-on-k8s/advanced-configuration-logstash.md b/deploy-manage/deploy/cloud-on-k8s/advanced-configuration-logstash.md index 2d0183b1c..037676cab 100644 --- a/deploy-manage/deploy/cloud-on-k8s/advanced-configuration-logstash.md +++ b/deploy-manage/deploy/cloud-on-k8s/advanced-configuration-logstash.md @@ -36,7 +36,7 @@ spec: You can specify sensitive settings with Kubernetes secrets. ECK automatically injects these settings into the keystore before it starts Logstash. The ECK operator continues to watch the secrets for changes and will restart Logstash Pods when it detects a change. -The Logstash Keystore can be password protected by setting an environment variable called `LOGSTASH_KEYSTORE_PASS`. Check out [Logstash Keystore](https://www.elastic.co/guide/en/logstash/current/keystore.html#keystore-password) documentation for details. +The Logstash Keystore can be password protected by setting an environment variable called `LOGSTASH_KEYSTORE_PASS`. Check out [Logstash Keystore](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/keystore.md#keystore-password) documentation for details. ```yaml apiVersion: v1 diff --git a/deploy-manage/deploy/cloud-on-k8s/advanced-configuration-maps-server.md b/deploy-manage/deploy/cloud-on-k8s/advanced-configuration-maps-server.md index f789eaee8..b17813f2f 100644 --- a/deploy-manage/deploy/cloud-on-k8s/advanced-configuration-maps-server.md +++ b/deploy-manage/deploy/cloud-on-k8s/advanced-configuration-maps-server.md @@ -20,7 +20,7 @@ If you already looked at the [Elasticsearch on ECK](elasticsearch-configuration. ## Elastic Maps Server configuration [k8s-maps-configuration] -You can add any valid Elastic Maps Server setting as documented on the [product](https://www.elastic.co/guide/en/kibana/current/maps-connect-to-ems.html#elastic-maps-server-configuration) page to the `spec.config` section. +You can add any valid Elastic Maps Server setting as documented on the [product](/explore-analyze/visualize/maps/maps-connect-to-ems.md#elastic-maps-server-configuration) page to the `spec.config` section. The following example demonstrates how to set the log level to `debug`: diff --git a/deploy-manage/deploy/cloud-on-k8s/advanced-configuration.md b/deploy-manage/deploy/cloud-on-k8s/advanced-configuration.md index 3390f9e23..302fcb396 100644 --- a/deploy-manage/deploy/cloud-on-k8s/advanced-configuration.md +++ b/deploy-manage/deploy/cloud-on-k8s/advanced-configuration.md @@ -16,7 +16,7 @@ This section covers the following topics: ## Use APM Agent central configuration [k8s-apm-agent-central-configuration] -[APM Agent configuration management](https://www.elastic.co/guide/en/observability/current/apm-agent-configuration.html) [7.5.1] allows you to configure your APM Agents centrally from the Kibana APM app. To use this feature, the APM Server needs to be configured with connection details of the Kibana instance. If Kibana is managed by ECK, you can simply add a `kibanaRef` attribute to the APM Server specification: +[APM Agent configuration management](/solutions/observability/apps/apm-agent-central-configuration.md) [7.5.1] allows you to configure your APM Agents centrally from the Kibana APM app. To use this feature, the APM Server needs to be configured with connection details of the Kibana instance. If Kibana is managed by ECK, you can simply add a `kibanaRef` attribute to the APM Server specification: ```yaml cat < 9200/TCP 34m ``` -In order to make requests to the [{{es}} API](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html): +In order to make requests to the [{{es}} API](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/index.md): 1. Get the credentials. diff --git a/deploy-manage/deploy/cloud-on-k8s/fleet-managed-elastic-agent.md b/deploy-manage/deploy/cloud-on-k8s/fleet-managed-elastic-agent.md index af36fc171..b3fb75721 100644 --- a/deploy-manage/deploy/cloud-on-k8s/fleet-managed-elastic-agent.md +++ b/deploy-manage/deploy/cloud-on-k8s/fleet-managed-elastic-agent.md @@ -7,7 +7,7 @@ mapped_pages: # Fleet-managed Elastic Agent [k8s-elastic-agent-fleet] -This section describes how to configure and deploy {{agent}} in [{{fleet}}-managed](https://www.elastic.co/guide/en/fleet/current/elastic-agent-installation.html) mode with ECK. Check the [Standalone section](standalone-elastic-agent.md) if you want to run {{agent}} in the [standalone mode](https://www.elastic.co/guide/en/fleet/current/install-standalone-elastic-agent.html). +This section describes how to configure and deploy {{agent}} in [{{fleet}}-managed](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/install-elastic-agents.md) mode with ECK. Check the [Standalone section](standalone-elastic-agent.md) if you want to run {{agent}} in the [standalone mode](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/install-standalone-elastic-agent.md). * [Quickstart](quickstart-fleet.md) * [Configuration](configuration-fleet.md) diff --git a/deploy-manage/deploy/cloud-on-k8s/http-configuration.md b/deploy-manage/deploy/cloud-on-k8s/http-configuration.md index 8ab1de6f8..6974660fe 100644 --- a/deploy-manage/deploy/cloud-on-k8s/http-configuration.md +++ b/deploy-manage/deploy/cloud-on-k8s/http-configuration.md @@ -30,7 +30,7 @@ You can disable the generation of the self-signed certificate and hence disable ### Ingress and Kibana configuration [k8s-maps-ingress] -To use Elastic Maps Server from your Kibana instances, you need to configure Kibana to fetch maps from your Elastic Maps Server instance by using the [`map.emsUrl`](https://www.elastic.co/guide/en/kibana/current/maps-connect-to-ems.html#elastic-maps-server-kibana) configuration key. The value of this setting needs to be the URL where the Elastic Maps Server instance is reachable from your browser. The certificates presented by Elastic Maps Server need to be trusted by the browser, and the URL must have the same origin as the URL where your Kibana is hosted to avoid cross origin resource issues. Check the [recipe section](https://github.com/elastic/cloud-on-k8s/tree/2.16/config/recipes/) for an example on how to set this up using an Ingress resource. +To use Elastic Maps Server from your Kibana instances, you need to configure Kibana to fetch maps from your Elastic Maps Server instance by using the [`map.emsUrl`](/explore-analyze/visualize/maps/maps-connect-to-ems.md#elastic-maps-server-kibana) configuration key. The value of this setting needs to be the URL where the Elastic Maps Server instance is reachable from your browser. The certificates presented by Elastic Maps Server need to be trusted by the browser, and the URL must have the same origin as the URL where your Kibana is hosted to avoid cross origin resource issues. Check the [recipe section](https://github.com/elastic/cloud-on-k8s/tree/2.16/config/recipes/) for an example on how to set this up using an Ingress resource. diff --git a/deploy-manage/deploy/cloud-on-k8s/k8s-kibana-advanced-configuration.md b/deploy-manage/deploy/cloud-on-k8s/k8s-kibana-advanced-configuration.md index b4ae4b565..a495a73ab 100644 --- a/deploy-manage/deploy/cloud-on-k8s/k8s-kibana-advanced-configuration.md +++ b/deploy-manage/deploy/cloud-on-k8s/k8s-kibana-advanced-configuration.md @@ -58,7 +58,7 @@ Check [Set compute resources for Kibana, Elastic Maps Server, APM Server and Log You can add your own {{kib}} settings to the `spec.config` section. -The following example demonstrates how to set the [`elasticsearch.requestHeadersWhitelist`](https://www.elastic.co/guide/en/kibana/current/settings.html#elasticsearch-requestHeadersWhitelist) configuration option. +The following example demonstrates how to set the [`elasticsearch.requestHeadersWhitelist`](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md#elasticsearch-requestHeadersWhitelist) configuration option. ```yaml apiVersion: kibana.k8s.elastic.co/v1 @@ -80,9 +80,9 @@ spec: To deploy more than one instance of {{kib}}, the instances must share a matching set of encryption keys. The following keys are automatically generated by the operator: -* [`xpack.security.encryptionKey`](https://www.elastic.co/guide/en/kibana/current/security-settings-kb.html#xpack-security-encryptionKey) -* [`xpack.reporting.encryptionKey`](https://www.elastic.co/guide/en/kibana/current/reporting-settings-kb.html#encryption-keys) -* [`xpack.encryptedSavedObjects.encryptionKey`](https://www.elastic.co/guide/en/kibana/current/xpack-security-secure-saved-objects.html) +* [`xpack.security.encryptionKey`](asciidocalypse://docs/kibana/docs/reference/configuration-reference/security-settings.md#xpack-security-encryptionKey) +* [`xpack.reporting.encryptionKey`](asciidocalypse://docs/kibana/docs/reference/configuration-reference/reporting-settings.md#encryption-keys) +* [`xpack.encryptedSavedObjects.encryptionKey`](/deploy-manage/security/secure-saved-objects.md) ::::{tip} If you need to access these encryption keys, you can find them using the `kubectl get secrets` command. @@ -99,7 +99,7 @@ kubectl get secret my-kibana-kb-config -o jsonpath='{ .data.kibana\.yml }' | bas You can provide your own encryption keys using a secure setting, as described in [Secure settings](k8s-kibana-secure-settings.md). ::::{note} -While most reconfigurations of your {{kib}} instances are carried out in rolling upgrade fashion, all version upgrades will cause {{kib}} downtime. This happens because you can only run a single version of {{kib}} at any given time. For more information, check [Upgrade {{kib}}](https://www.elastic.co/guide/en/kibana/current/upgrade.html). +While most reconfigurations of your {{kib}} instances are carried out in rolling upgrade fashion, all version upgrades will cause {{kib}} downtime. This happens because you can only run a single version of {{kib}} at any given time. For more information, check [Upgrade {{kib}}](/deploy-manage/upgrade/deployment-or-cluster.md). :::: diff --git a/deploy-manage/deploy/cloud-on-k8s/k8s-kibana-http-configuration.md b/deploy-manage/deploy/cloud-on-k8s/k8s-kibana-http-configuration.md index 273faa491..c7e629c97 100644 --- a/deploy-manage/deploy/cloud-on-k8s/k8s-kibana-http-configuration.md +++ b/deploy-manage/deploy/cloud-on-k8s/k8s-kibana-http-configuration.md @@ -40,7 +40,7 @@ If you want to use your own certificate, the required configuration is identical ## Disable TLS [k8s-kibana-http-disable-tls] -You can disable the generation of the self-signed certificate and hence [disable TLS](https://www.elastic.co/guide/en/kibana/current/using-kibana-with-security.html). This is not recommended outside of testing clusters. +You can disable the generation of the self-signed certificate and hence [disable TLS](/deploy-manage/security/secure-your-cluster-deployment.md). This is not recommended outside of testing clusters. ```yaml apiVersion: kibana.k8s.elastic.co/v1 diff --git a/deploy-manage/deploy/cloud-on-k8s/k8s-service-mesh-istio.md b/deploy-manage/deploy/cloud-on-k8s/k8s-service-mesh-istio.md index 3b6c441f8..34813dc22 100644 --- a/deploy-manage/deploy/cloud-on-k8s/k8s-service-mesh-istio.md +++ b/deploy-manage/deploy/cloud-on-k8s/k8s-service-mesh-istio.md @@ -12,7 +12,7 @@ The instructions in this section describe how to connect the operator and manage These instructions have been tested with Istio 1.6.1. Older or newer versions of Istio might require additional configuration steps not documented here. ::::{warning} -Some Elastic Stack features such as [Kibana alerting and actions](https://www.elastic.co/guide/en/kibana/current/alerting-getting-started.html#alerting-getting-started) rely on the Elasticsearch API keys feature which requires TLS to be enabled at the application level. If you want to use these features, you should not disable the self-signed certificate on the Elasticsearch resource and enable `PERMISSIVE` mode for the Elasticsearch service through a `DestinationRule` or `PeerAuthentication` resource. Strict mTLS mode is currently not compatible with Elastic Stack features requiring TLS to be enabled for the Elasticsearch HTTP layer. +Some Elastic Stack features such as [Kibana alerting and actions](/explore-analyze/alerts-cases.md) rely on the Elasticsearch API keys feature which requires TLS to be enabled at the application level. If you want to use these features, you should not disable the self-signed certificate on the Elasticsearch resource and enable `PERMISSIVE` mode for the Elasticsearch service through a `DestinationRule` or `PeerAuthentication` resource. Strict mTLS mode is currently not compatible with Elastic Stack features requiring TLS to be enabled for the Elasticsearch HTTP layer. :::: diff --git a/deploy-manage/deploy/cloud-on-k8s/k8s-service-mesh-linkerd.md b/deploy-manage/deploy/cloud-on-k8s/k8s-service-mesh-linkerd.md index 2349d0dc3..7a19e6762 100644 --- a/deploy-manage/deploy/cloud-on-k8s/k8s-service-mesh-linkerd.md +++ b/deploy-manage/deploy/cloud-on-k8s/k8s-service-mesh-linkerd.md @@ -42,7 +42,7 @@ kubectl annotate namespace elastic-stack linkerd.io/inject=enabled Any Elasticsearch, Kibana, or APM Server resources deployed to a namespace with the above annotation will automatically join the mesh. -Alternatively, if you only want specific resources to join the mesh, add the `linkerd.io/inject: enabled` annotation to the `podTemplate` (check [API documentation](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-api-reference.html)) of the resource as follows: +Alternatively, if you only want specific resources to join the mesh, add the `linkerd.io/inject: enabled` annotation to the `podTemplate` (check [API documentation](asciidocalypse://docs/cloud-on-k8s/docs/reference/cloud/cloud-on-k8s/k8s-api-reference.md)) of the resource as follows: ```yaml podTemplate: diff --git a/deploy-manage/deploy/cloud-on-k8s/kibana-instance-quickstart.md b/deploy-manage/deploy/cloud-on-k8s/kibana-instance-quickstart.md index 57a8238fb..43393b7a9 100644 --- a/deploy-manage/deploy/cloud-on-k8s/kibana-instance-quickstart.md +++ b/deploy-manage/deploy/cloud-on-k8s/kibana-instance-quickstart.md @@ -8,7 +8,7 @@ mapped_pages: # Deploy a Kibana instance [k8s-deploy-kibana] -To deploy a simple [{{kib}}](https://www.elastic.co/guide/en/kibana/current/introduction.html#introduction) specification, with one {{kib}} instance: +To deploy a simple [{{kib}}](/get-started/the-stack.md#stack-components-kibana) specification, with one {{kib}} instance: 1. Specify a {{kib}} instance and associate it with your {{es}} `quickstart` cluster created previously under [Deploying an {{es}} cluster](elasticsearch-deployment-quickstart.md): @@ -65,7 +65,7 @@ To deploy a simple [{{kib}}](https://www.elastic.co/guide/en/kibana/current/intr ``` -For a full description of each `CustomResourceDefinition` (CRD), refer to the [*API Reference*](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-api-reference.html) or view the CRD files in the [project repository](https://github.com/elastic/cloud-on-k8s/tree/2.16/config/crds). You can also retrieve information about a CRD from the instance. For example, describe the {{kib}} CRD specification with [`describe`](https://kubernetes.io/docs/reference/kubectl/generated/kubectl_describe/): +For a full description of each `CustomResourceDefinition` (CRD), refer to the [*API Reference*](asciidocalypse://docs/cloud-on-k8s/docs/reference/cloud/cloud-on-k8s/k8s-api-reference.md) or view the CRD files in the [project repository](https://github.com/elastic/cloud-on-k8s/tree/2.16/config/crds). You can also retrieve information about a CRD from the instance. For example, describe the {{kib}} CRD specification with [`describe`](https://kubernetes.io/docs/reference/kubectl/generated/kubectl_describe/): ```sh kubectl describe crd kibana diff --git a/deploy-manage/deploy/cloud-on-k8s/known-limitations.md b/deploy-manage/deploy/cloud-on-k8s/known-limitations.md index f4cc067a1..d1acac522 100644 --- a/deploy-manage/deploy/cloud-on-k8s/known-limitations.md +++ b/deploy-manage/deploy/cloud-on-k8s/known-limitations.md @@ -23,7 +23,7 @@ As of ECK version 2.11.0, {{agent}}, {{fleet-server}} and {{es}} can all be depl ## Running {{endpoint-sec}} integration [k8s_running_endpoint_sec_integration] -Running {{endpoint-sec}} [integration](https://www.elastic.co/guide/en/security/current/install-endpoint.html) is not yet supported in containerized environments, like {{k8s}}. This is not an ECK limitation, but the limitation of the integration itself. Note that you can use ECK to deploy {{es}}, {{kib}} and {{fleet-server}}, and add {{endpoint-sec}} integration to your policies if {{agents}} running those policies are deployed in non-containerized environments. +Running {{endpoint-sec}} [integration](/solutions/security/configure-elastic-defend/install-elastic-defend.md) is not yet supported in containerized environments, like {{k8s}}. This is not an ECK limitation, but the limitation of the integration itself. Note that you can use ECK to deploy {{es}}, {{kib}} and {{fleet-server}}, and add {{endpoint-sec}} integration to your policies if {{agents}} running those policies are deployed in non-containerized environments. ## {{fleet-server}} initialization fails on minikube when CNI is disabled [k8s_fleet_server_initialization_fails_on_minikube_when_cni_is_disabled] diff --git a/deploy-manage/deploy/cloud-on-k8s/logstash-plugins.md b/deploy-manage/deploy/cloud-on-k8s/logstash-plugins.md index 5354c4e05..28aa0c985 100644 --- a/deploy-manage/deploy/cloud-on-k8s/logstash-plugins.md +++ b/deploy-manage/deploy/cloud-on-k8s/logstash-plugins.md @@ -7,7 +7,7 @@ mapped_pages: # Logstash plugins [k8s-logstash-plugins] -The power of {{ls}} is in the plugins--[inputs](https://www.elastic.co/guide/en/logstash/current/input-plugins.html), [outputs](https://www.elastic.co/guide/en/logstash/current/output-plugins.html), [filters,](https://www.elastic.co/guide/en/logstash/current/filter-plugins.html) and [codecs](https://www.elastic.co/guide/en/logstash/current/codec-plugins.html). +The power of {{ls}} is in the plugins--[inputs](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/input-plugins.md), [outputs](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/output-plugins.md), [filters,]((asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/filter-plugins.md) and [codecs](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/codec-plugins.md). In {{ls}} on ECK, you can use the same plugins that you use for other {{ls}} instances—​including Elastic-supported, community-supported, and custom plugins. However, you may have other factors to consider, such as how you configure your {{k8s}} resources, how you specify additional resources, and how you scale your {{ls}} installation. @@ -89,7 +89,7 @@ spec: **Static read-only files** -Some plugins require or allow access to small static read-only files. You can use these for a variety of reasons. Examples include adding custom `grok` patterns for [`logstash-filter-grok`](https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html) to use for lookup, source code for [`logstash-filter-ruby`], a dictionary for [`logstash-filter-translate`](https://www.elastic.co/guide/en/logstash/current/plugins-filters-translate.html) or the location of a SQL statement for [`logstash-input-jdbc`](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html). Make these files available to the {{ls}} resource in your manifest. +Some plugins require or allow access to small static read-only files. You can use these for a variety of reasons. Examples include adding custom `grok` patterns for [`logstash-filter-grok`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-filters-grok.md) to use for lookup, source code for [`logstash-filter-ruby`], a dictionary for [`logstash-filter-translate`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-filters-translate.md) or the location of a SQL statement for [`logstash-input-jdbc`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-jdbc.md). Make these files available to the {{ls}} resource in your manifest. ::::{tip} In the plugin documentation, these plugin settings are typically identified by `path` or an `array` of `paths`. @@ -98,7 +98,7 @@ In the plugin documentation, these plugin settings are typically identified by ` To use these in your manifest, create a ConfigMap or Secret representing the asset, a Volume in your `podTemplate.spec` containing the ConfigMap or Secret, and mount that Volume with a VolumeMount in your `podTemplateSpec.container` section of your {{ls}} resource. -This example illustrates configuring a ConfigMap from a ruby source file, and including it in a [`logstash-filter-ruby`](https://www.elastic.co/guide/en/logstash/current/plugins-filters-ruby.html) plugin. +This example illustrates configuring a ConfigMap from a ruby source file, and including it in a [`logstash-filter-ruby`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-filters-ruby.md) plugin. First, create the ConfigMap. @@ -142,7 +142,7 @@ spec: ### Larger read-only assets (1 MiB+) [k8s-logstash-working-with-plugins-large-ro] -Some plugins require or allow access to static read-only files that exceed the 1 MiB (mebibyte) limit imposed by ConfigMap and Secret. For example, you may need JAR files to load drivers when using a JDBC or JMS plugin, or a large [`logstash-filter-translate`](https://www.elastic.co/guide/en/logstash/current/plugins-filters-translate.html) dictionary. +Some plugins require or allow access to static read-only files that exceed the 1 MiB (mebibyte) limit imposed by ConfigMap and Secret. For example, you may need JAR files to load drivers when using a JDBC or JMS plugin, or a large [`logstash-filter-translate`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-filters-translate.md) dictionary. You can add files using: @@ -238,7 +238,7 @@ After you build and deploy the custom image, include it in the {{ls}} manifest. ### Writable storage [k8s-logstash-working-with-plugins-writable] -Some {{ls}} plugins need access to writable storage. This could be for checkpointing to keep track of events already processed, a place to temporarily write events before sending a batch of events, or just to actually write events to disk in the case of [`logstash-output-file`](https://www.elastic.co/guide/en/logstash/current/plugins-outputs-file.html). +Some {{ls}} plugins need access to writable storage. This could be for checkpointing to keep track of events already processed, a place to temporarily write events before sending a batch of events, or just to actually write events to disk in the case of [`logstash-output-file`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-outputs-file.md). {{ls}} on ECK by default supplies a small 1.5 GiB (gibibyte) default persistent volume to each pod. This volume is called `logstash-data` and is located at `/usr/logstash/data`, and is typically the default location for most plugin use cases. This volume is stable across restarts of {{ls}} pods and is suitable for many use cases. @@ -332,7 +332,7 @@ spec: ::::{admonition} Horizontal scaling for {{ls}} plugins * Not all {{ls}} deployments can be scaled horizontally by increasing the number of {{ls}} Pods defined in the {{ls}} resource. Depending on the types of plugins in a {{ls}} installation, increasing the number of pods may cause data duplication, data loss, incorrect data, or may waste resources with pods unable to be utilized correctly. -* The ability of a {{ls}} installation to scale horizontally is bound by its most restrictive plugin(s). Even if all pipelines are using [`logstash-input-elastic_agent`](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-elastic_agent.html) or [`logstash-input-beats`](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-beats.html) which should enable full horizontal scaling, introducing a more restrictive input or filter plugin forces the restrictions for pod scaling associated with that plugin. +* The ability of a {{ls}} installation to scale horizontally is bound by its most restrictive plugin(s). Even if all pipelines are using [`logstash-input-elastic_agent`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-elastic_agent.md) or [`logstash-input-beats`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-beats.md) which should enable full horizontal scaling, introducing a more restrictive input or filter plugin forces the restrictions for pod scaling associated with that plugin. :::: @@ -344,12 +344,12 @@ spec: * They **must** specify `pipeline.workers=1` for any pipelines that use them. * The number of pods cannot be scaled above 1. -Examples of aggregating filters include [`logstash-filter-aggregate`](https://www.elastic.co/guide/en/logstash/current/plugins-filters-aggregate.html), [`logstash-filter-csv`](https://www.elastic.co/guide/en/logstash/current/plugins-filters-csv.html) when `autodetect_column_names` set to `true`, and any [`logstash-filter-ruby`](https://www.elastic.co/guide/en/logstash/current/plugins-filters-ruby.html) implementations that perform aggregations. +Examples of aggregating filters include [`logstash-filter-aggregate`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-filters-aggregate.md), [`logstash-filter-csv`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-filters-csv.md) when `autodetect_column_names` set to `true`, and any [`logstash-filter-ruby`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-filters-ruby.md) implementations that perform aggregations. ### Input plugins: events pushed to {{ls}} [k8s-logstash-inputs-data-pushed] -{{ls}} installations with inputs that enable {{ls}} to receive data should be able to scale freely and have load spread across them horizontally. These plugins include [`logstash-input-beats`](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-beats.html), [`logstash-input-elastic_agent`](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-elastic_agent.html), [`logstash-input-tcp`](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-tcp.html), and [`logstash-input-http`](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-http.html). +{{ls}} installations with inputs that enable {{ls}} to receive data should be able to scale freely and have load spread across them horizontally. These plugins include [`logstash-input-beats`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-beats.md), [`logstash-input-elastic_agent`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-elastic_agent.md), [`logstash-input-tcp`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-tcp.md), and [`logstash-input-http`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-http.md). ### Input plugins: {{ls}} maintains state [k8s-logstash-inputs-local-checkpoints] @@ -360,16 +360,16 @@ Note that plugins that retrieve data from external sources, and require some lev Input plugins that include configuration settings such as `sincedb`, `checkpoint` or `sql_last_run_metadata` may fall into this category. -Examples of these plugins include [`logstash-input-jdbc`](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html) (which has no automatic way to split queries across {{ls}} instances), [`logstash-input-s3`](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-s3.html) (which has no way to split which buckets to read across {{ls}} instances), or [`logstash-input-file`](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-file.html). +Examples of these plugins include [`logstash-input-jdbc`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-jdbc.md) (which has no automatic way to split queries across {{ls}} instances), [`logstash-input-s3`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-s3.md) (which has no way to split which buckets to read across {{ls}} instances), or [`logstash-input-file`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-file.md). ### Input plugins: external source stores state [k8s-logstash-inputs-external-state] {{ls}} installations that use input plugins that retrieve data from an external source, and **rely on the external source to store state** can scale based on the parameters of the external source. -For example, a {{ls}} installation that uses a [`logstash-input-kafka`](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-kafka.html) plugin to retrieve data can scale the number of pods up to the number of partitions used, as a partition can have at most one consumer belonging to the same consumer group. Any pods created beyond that threshold cannot be scheduled to receive data. +For example, a {{ls}} installation that uses a [`logstash-input-kafka`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-kafka.md) plugin to retrieve data can scale the number of pods up to the number of partitions used, as a partition can have at most one consumer belonging to the same consumer group. Any pods created beyond that threshold cannot be scheduled to receive data. -Examples of these plugins include [`logstash-input-kafka`](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-kafka.html), [`logstash-input-azure_event_hubs`](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-azure_event_hubs.html), and [`logstash-input-kinesis`](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-kinesis.html). +Examples of these plugins include [`logstash-input-kafka`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-kafka.md), [`logstash-input-azure_event_hubs`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-azure_event_hubs.md), and [`logstash-input-kinesis`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-kinesis.md). @@ -389,12 +389,12 @@ Use these guidelines *in addition* to the general guidelines provided in [Scalin ### {{ls}} integration plugin [k8s-logstash-plugin-considerations-ls-integration] -When your pipeline uses the [`Logstash integration`](https://www.elastic.co/guide/en/logstash/current/plugins-integrations-logstash.html) plugin, add `keepalive=>false` to the [logstash-output](https://www.elastic.co/guide/en/logstash/current/plugins-outputs-logstash.html) definition to ensure that load balancing works correctly rather than keeping affinity to the same pod. +When your pipeline uses the [`Logstash integration`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-integrations-logstash.md) plugin, add `keepalive=>false` to the [logstash-output](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-outputs-logstash.md) definition to ensure that load balancing works correctly rather than keeping affinity to the same pod. ### Elasticsearch output plugin [k8s-logstash-plugin-considerations-es-output] -The [`elasticsearch output`](https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html) plugin requires certain roles to be configured in order to enable {{ls}} to communicate with {{es}}. +The [`elasticsearch output`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-outputs-elasticsearch.md) plugin requires certain roles to be configured in order to enable {{ls}} to communicate with {{es}}. You can customize roles in {{es}}. Check out [creating custom roles](../../users-roles/cluster-or-deployment-auth/native.md) @@ -418,7 +418,7 @@ stringData: ### Elastic_integration filter plugin [k8s-logstash-plugin-considerations-integration-filter] -The [`elastic_integration filter`](https://www.elastic.co/guide/en/logstash/current/plugins-filters-elastic_integration.html) plugin allows the use of [`ElasticsearchRef`](configuration-logstash.md#k8s-logstash-esref) and environment variables. +The [`elastic_integration filter`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-filters-elastic_integration.md) plugin allows the use of [`ElasticsearchRef`](configuration-logstash.md#k8s-logstash-esref) and environment variables. ```json elastic_integration { @@ -447,7 +447,7 @@ stringData: ### Elastic Agent input and Beats input plugins [k8s-logstash-plugin-considerations-agent-beats] -When you use the [Elastic Agent input](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-elastic_agent.html) or the [Beats input](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-beats.html), set the [`ttl`](https://www.elastic.co/guide/en/beats/filebeat/current/logstash-output.html#_ttl) value on the Agent or Beat to ensure that load is distributed appropriately. +When you use the [Elastic Agent input](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-elastic_agent.md) or the [Beats input](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-beats.md), set the [`ttl`](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/logstash-output.md#_ttl) value on the Agent or Beat to ensure that load is distributed appropriately. @@ -455,7 +455,7 @@ When you use the [Elastic Agent input](https://www.elastic.co/guide/en/logstash/ If you need plugins in addition to those included in the standard {{ls}} distribution, you can add them. Create a custom Docker image that includes the installed plugins, using the `bin/logstash-plugin install` utility to add more plugins to the image so that they can be used by {{ls}} pods. -This sample Dockerfile installs the [`logstash-filter-tld`](https://www.elastic.co/guide/en/logstash/current/plugins-filters-tld.html) plugin to the official {{ls}} Docker image: +This sample Dockerfile installs the [`logstash-filter-tld`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-filters-tld.md) plugin to the official {{ls}} Docker image: ```shell FROM docker.elastic.co/logstash/logstash:8.16.1 diff --git a/deploy-manage/deploy/cloud-on-k8s/map-data.md b/deploy-manage/deploy/cloud-on-k8s/map-data.md index 7e22059b3..2915a9a8c 100644 --- a/deploy-manage/deploy/cloud-on-k8s/map-data.md +++ b/deploy-manage/deploy/cloud-on-k8s/map-data.md @@ -16,7 +16,7 @@ The Elastic Maps Server Docker image contains only a few zoom levels of data. To ## Basemap download [k8s-maps-basemap-download] -You have to download the basemap ahead of time on a machine that is not air-gapped and populate a volume that can be mounted into the Elastic Maps Server Pods. Check also the [Elastic Maps Server documentation.](https://www.elastic.co/guide/en/kibana/current/maps-connect-to-ems.html#elastic-maps-server) +You have to download the basemap ahead of time on a machine that is not air-gapped and populate a volume that can be mounted into the Elastic Maps Server Pods. Check also the [Elastic Maps Server documentation.](/explore-analyze/visualize/maps/maps-connect-to-ems.md#elastic-maps-server) The procedure on how to get a Kubernetes volume populated with that data is outside the scope of this document, as it depends on your specific Kubernetes setup and choice of volume provisioner. This is a possible approach that works for most setups: diff --git a/deploy-manage/deploy/cloud-on-k8s/node-configuration.md b/deploy-manage/deploy/cloud-on-k8s/node-configuration.md index 68d572bed..49fa301aa 100644 --- a/deploy-manage/deploy/cloud-on-k8s/node-configuration.md +++ b/deploy-manage/deploy/cloud-on-k8s/node-configuration.md @@ -33,5 +33,5 @@ spec: node.roles: ["data", "ingest", "ml", "transform"] ``` -For more information on Elasticsearch settings, check [Configuring Elasticsearch](https://www.elastic.co/guide/en/elasticsearch/reference/current/settings.html). +For more information on Elasticsearch settings, check [Configuring Elasticsearch](/deploy-manage/deploy/self-managed/configure-elasticsearch.md). diff --git a/deploy-manage/deploy/cloud-on-k8s/nodes-orchestration.md b/deploy-manage/deploy/cloud-on-k8s/nodes-orchestration.md index def6e10a8..75250f6cd 100644 --- a/deploy-manage/deploy/cloud-on-k8s/nodes-orchestration.md +++ b/deploy-manage/deploy/cloud-on-k8s/nodes-orchestration.md @@ -127,7 +127,7 @@ Depending on how the NodeSets are updated, ECK handles the Kubernetes resource r * The specification of an existing NodeSet is updated. For example, the Elasticsearch configuration, or the PodTemplate resources requirements. - ECK performs a rolling upgrade of the corresponding Elasticsearch nodes. It follows the [Elasticsearch rolling upgrade best practices](https://www.elastic.co/guide/en/elastic-stack/current/upgrading-elasticsearch.html) to update the underlying Pods while maintaining the availability of the Elasticsearch cluster where possible. In most cases, the process simply involves restarting Elasticsearch nodes one-by-one. Note that some cluster topologies may be impossible to deploy without making the cluster unavailable (check [Limitations](#k8s-orchestration-limitations) ). + ECK performs a rolling upgrade of the corresponding Elasticsearch nodes. It follows the [Elasticsearch rolling upgrade best practices](/deploy-manage/upgrade/deployment-or-cluster.md) to update the underlying Pods while maintaining the availability of the Elasticsearch cluster where possible. In most cases, the process simply involves restarting Elasticsearch nodes one-by-one. Note that some cluster topologies may be impossible to deploy without making the cluster unavailable (check [Limitations](#k8s-orchestration-limitations) ). * An existing NodeSet is renamed. @@ -152,7 +152,7 @@ Due to relying on Kubernetes primitives such as StatefulSets, the ECK orchestrat * Clusters containing indices with no replicas -If an {{es}} node holds the only copy of a shard, this shard becomes unavailable while the node is upgraded. To ensure [high availability](https://www.elastic.co/guide/en/elasticsearch/reference/current/high-availability-cluster-design.html) it is recommended to configure clusters with three master nodes, more than one node per [data tier](https://www.elastic.co/guide/en/elasticsearch/reference/current/data-tiers.html) and at least one replica per index. +If an {{es}} node holds the only copy of a shard, this shard becomes unavailable while the node is upgraded. To ensure [high availability](/deploy-manage/production-guidance/availability-and-resilience.md) it is recommended to configure clusters with three master nodes, more than one node per [data tier](/manage-data/lifecycle/data-tiers.md) and at least one replica per index. * Elasticsearch Pods may stay `Pending` during a rolling upgrade if the Kubernetes scheduler cannot re-schedule them back. This is especially important when using local PersistentVolumes. If the Kubernetes node bound to a local PersistentVolume does not have enough capacity to host an upgraded Pod which was temporarily removed, that Pod will stay `Pending`. * Rolling upgrades can only make progress if the Elasticsearch cluster health is green. There are exceptions to this rule if the cluster health is yellow and if the following conditions are satisfied: @@ -176,7 +176,7 @@ Advanced users may force an upgrade by manually deleting Pods themselves. The de Operations that reduce the number of nodes in the cluster cannot make progress without user intervention, if the Elasticsearch index replica settings are incompatible with the intended downscale. Specifically, if the Elasticsearch index settings demand a higher number of shard copies than data nodes in the cluster after the downscale operation, ECK cannot migrate the data away from the node about to be removed. You can address this in the following ways: * Adjust the Elasticsearch [index settings](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-put-settings) to a number of replicas that allow the desired node removal. -* Use [`auto_expand_replicas`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#dynamic-index-settings) to automatically adjust the replicas to the number of data nodes in the cluster. +* Use [`auto_expand_replicas`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#dynamic-index-settings) to automatically adjust the replicas to the number of data nodes in the cluster. ## Advanced control during rolling upgrades [k8s-advanced-upgrade-control] diff --git a/deploy-manage/deploy/cloud-on-k8s/quickstart-fleet.md b/deploy-manage/deploy/cloud-on-k8s/quickstart-fleet.md index 26b4423ee..4d64c41a6 100644 --- a/deploy-manage/deploy/cloud-on-k8s/quickstart-fleet.md +++ b/deploy-manage/deploy/cloud-on-k8s/quickstart-fleet.md @@ -213,5 +213,5 @@ ECK automatically configures secure connections between all components. {{fleet} kubectl logs -f elastic-agent-quickstart-agent-xbcxr ``` -4. Configure the policy used by {{agents}}. Check [{{agent}} policies](https://www.elastic.co/guide/en/fleet/current/agent-policy.html) for more details. +4. Configure the policy used by {{agents}}. Check [{{agent}} policies](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/agent-policy.md) for more details. diff --git a/deploy-manage/deploy/cloud-on-k8s/readiness-probe.md b/deploy-manage/deploy/cloud-on-k8s/readiness-probe.md index ec7ef13f5..760f12c06 100644 --- a/deploy-manage/deploy/cloud-on-k8s/readiness-probe.md +++ b/deploy-manage/deploy/cloud-on-k8s/readiness-probe.md @@ -45,6 +45,6 @@ Note that this requires restarting the Pods. % this feature might have disappeared, we will need to investigate this a bit more, as the link below doesn't work anymore but it does for 8.15 for example. -We do not recommend overriding the default readiness probe on Elasticsearch 8.2.0 and later. ECK configures a socket based readiness probe using the Elasticsearch [readiness port feature](https://www.elastic.co/guide/en/elasticsearch/reference/current/advanced-configuration.html#readiness-tcp-port) which is not influenced by the load on the Elasticsearch cluster. +We do not recommend overriding the default readiness probe on Elasticsearch 8.2.0 and later. ECK configures a socket based readiness probe using the Elasticsearch [readiness port feature](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/jvm-settings.md#readiness-tcp-port) which is not influenced by the load on the Elasticsearch cluster. diff --git a/deploy-manage/deploy/cloud-on-k8s/recipes.md b/deploy-manage/deploy/cloud-on-k8s/recipes.md index 6d546cab1..d4fb87b4b 100644 --- a/deploy-manage/deploy/cloud-on-k8s/recipes.md +++ b/deploy-manage/deploy/cloud-on-k8s/recipes.md @@ -18,7 +18,7 @@ This section includes recipes that provide configuration examples for some commo * [Deploy Elasticsearch, Kibana, Elastic Fleet Server and Elastic Agent within GKE Autopilot](https://github.com/elastic/cloud-on-k8s/tree/main/config/recipes/autopilot) ::::{warning} -Compared to other configuration examples that are consistently tested, like [fleet-managed Elastic Agent on ECK](configuration-examples-fleet.md), [standalone Elastic Agent on ECK](configuration-examples-standalone.md), or [Beats on ECK](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-beat-configuration-examples.html), the recipes in this section are not regularly tested by our automation system, and therefore should not be considered to be production-ready. +Compared to other configuration examples that are consistently tested, like [fleet-managed Elastic Agent on ECK](configuration-examples-fleet.md), [standalone Elastic Agent on ECK](configuration-examples-standalone.md), or [Beats on ECK](/deploy-manage/deploy/cloud-on-k8s/configuration-examples-beats.md), the recipes in this section are not regularly tested by our automation system, and therefore should not be considered to be production-ready. :::: diff --git a/deploy-manage/deploy/cloud-on-k8s/requests-routing-to-elasticsearch-nodes.md b/deploy-manage/deploy/cloud-on-k8s/requests-routing-to-elasticsearch-nodes.md index 79cc20359..8a1e6becd 100644 --- a/deploy-manage/deploy/cloud-on-k8s/requests-routing-to-elasticsearch-nodes.md +++ b/deploy-manage/deploy/cloud-on-k8s/requests-routing-to-elasticsearch-nodes.md @@ -7,7 +7,7 @@ mapped_pages: # Requests routing to Elasticsearch nodes [k8s-traffic-splitting] -The default Kubernetes service created by ECK, named `-es-http`, is configured to include all the Elasticsearch nodes in that cluster. This configuration is good to get started and is adequate for most use cases. However, if you are operating an Elasticsearch cluster with [different node types](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html) and want control over which nodes handle which types of traffic, you should create additional Kubernetes services yourself. +The default Kubernetes service created by ECK, named `-es-http`, is configured to include all the Elasticsearch nodes in that cluster. This configuration is good to get started and is adequate for most use cases. However, if you are operating an Elasticsearch cluster with [different node types](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md) and want control over which nodes handle which types of traffic, you should create additional Kubernetes services yourself. As an alternative, you can use features provided by third-party software such as service meshes and ingress controllers to achieve more advanced traffic management configurations. Check the [recipes directory](https://github.com/elastic/cloud-on-k8s/tree/2.16/config/recipes) in the ECK source repository for a few examples. diff --git a/deploy-manage/deploy/cloud-on-k8s/required-rbac-permissions.md b/deploy-manage/deploy/cloud-on-k8s/required-rbac-permissions.md index 6ff4dceb6..d13ec1070 100644 --- a/deploy-manage/deploy/cloud-on-k8s/required-rbac-permissions.md +++ b/deploy-manage/deploy/cloud-on-k8s/required-rbac-permissions.md @@ -36,7 +36,7 @@ These permissions are required to install the ECK operator in a Kubernetes clust | `RoleBinding or ClusterRoleBinding` | `rbac.authorization.k8s.io` | no | Binding between the operators role and the operators service account. Depending on the installation type (global/restricted), either global (ClusterRoleBinding) or namespaced (RoleBinding) resource is needed. | | `ConfigMap` | `core` | yes | Configuration parameters of the Operator. They can be specified directly in the StatefulSet (or Deployment) resource instead. | | `Namespace` | `core` | yes | Namespace where the operator will run. It can be a pre-existing namespace as well. | -| `ValidatingWebhookConfiguration` | `admissionregistration.k8s.io` | yes | Validating webhook installation. It provides fast feedback for the user directly as a APIServer response. A subset of these validations is also run by the operator itself, but the results are only available through operator logs and Kubernetes events. Check [docs](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-webhook.html) for more. | +| `ValidatingWebhookConfiguration` | `admissionregistration.k8s.io` | yes | Validating webhook installation. It provides fast feedback for the user directly as a APIServer response. A subset of these validations is also run by the operator itself, but the results are only available through operator logs and Kubernetes events. Check [docs](/deploy-manage/deploy/cloud-on-k8s/configure-validating-webhook.md) for more. | | `Secret` | `core` | yes | Secret containing the validating webhook’s endpoint CA certificate. | | `Service` | `core` | yes | Service for validating webhook endpoint. | @@ -59,9 +59,9 @@ These permissions are needed by the Service Account that ECK operator runs as. | `StatefulSet` | `apps` | no | Deploying Elasticsearch | | `Deployment` | `apps` | no | Deploying Kibana, APM Server, EnterpriseSearch, Maps, Beats or Elastic Agent. | | `DaemonSet` | `apps` | no | Deploying Beats or Elastic Agent. | -| `PodDisruptionBudget` | `policy` | no | Ensuring update safety for Elasticsearch. Check [docs](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-pod-disruption-budget.html) to learn more. | +| `PodDisruptionBudget` | `policy` | no | Ensuring update safety for Elasticsearch. Check [docs](/deploy-manage/deploy/cloud-on-k8s/pod-disruption-budget.md) to learn more. | | `StorageClass` | `storage.k8s.io` | yes | Validating storage expansion support. Check [docs](volume-claim-templates.md#k8s-volume-claim-templates-update) to learn more. | -| `coreauthorization.k8s.io` | `SubjectAccessReview` | yes | Controlling access between referenced resources. Check [docs](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-restrict-cross-namespace-associations.html) to learn more. | +| `coreauthorization.k8s.io` | `SubjectAccessReview` | yes | Controlling access between referenced resources. Check [docs](/deploy-manage/deploy/cloud-on-k8s/restrict-cross-namespace-resource-associations.md) to learn more. | And all permissions that the [Using ECK-managed resources](#k8s-eck-permissions-using) chapter specifies. diff --git a/deploy-manage/deploy/cloud-on-k8s/securing-logstash-api.md b/deploy-manage/deploy/cloud-on-k8s/securing-logstash-api.md index 2de0724b6..37e462c38 100644 --- a/deploy-manage/deploy/cloud-on-k8s/securing-logstash-api.md +++ b/deploy-manage/deploy/cloud-on-k8s/securing-logstash-api.md @@ -44,7 +44,7 @@ spec: 1. Store the username and password in a Secret. 2. Map the username and password to the environment variables of the Pod. -3. At Logstash startup, `${API_USERNAME}` and `${API_PASSWORD}` are replaced by the value of environment variables. Check [using environment variables](https://www.elastic.co/guide/en/logstash/current/environment-variables.html) for more details. +3. At Logstash startup, `${API_USERNAME}` and `${API_PASSWORD}` are replaced by the value of environment variables. Check [using environment variables](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/environment-variables.md) for more details. An alternative is to set up [keystore](advanced-configuration-logstash.md#k8s-logstash-keystore) to resolve `${API_USERNAME}` and `${API_PASSWORD}` diff --git a/deploy-manage/deploy/cloud-on-k8s/standalone-elastic-agent.md b/deploy-manage/deploy/cloud-on-k8s/standalone-elastic-agent.md index dfccd861e..7806e6469 100644 --- a/deploy-manage/deploy/cloud-on-k8s/standalone-elastic-agent.md +++ b/deploy-manage/deploy/cloud-on-k8s/standalone-elastic-agent.md @@ -7,7 +7,7 @@ mapped_pages: # Standalone Elastic Agent [k8s-elastic-agent] -This section describes how to configure and deploy Elastic Agent in [standalone mode](https://www.elastic.co/guide/en/fleet/current/install-standalone-elastic-agent.html) with ECK. Check the [Fleet section](fleet-managed-elastic-agent.md) if you want to manage your Elastic Agents with [Fleet](https://www.elastic.co/guide/en/fleet/current/elastic-agent-installation.html). +This section describes how to configure and deploy Elastic Agent in [standalone mode](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/install-standalone-elastic-agent.md) with ECK. Check the [Fleet section](fleet-managed-elastic-agent.md) if you want to manage your Elastic Agents with [Fleet](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/install-elastic-agents.md). * [Quickstart](quickstart-standalone.md) * [Configuration](configuration-standalone.md) diff --git a/deploy-manage/deploy/cloud-on-k8s/transport-settings.md b/deploy-manage/deploy/cloud-on-k8s/transport-settings.md index 37ff1f3ba..28db6b0bd 100644 --- a/deploy-manage/deploy/cloud-on-k8s/transport-settings.md +++ b/deploy-manage/deploy/cloud-on-k8s/transport-settings.md @@ -7,7 +7,7 @@ mapped_pages: # Transport settings [k8s-transport-settings] -The transport module in Elasticsearch is used for internal communication between nodes within the cluster as well as communication between remote clusters. Check the [Elasticsearch documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html) for details. For customization options of the HTTP layer, check [Services](accessing-services.md) and [TLS certificates](/deploy-manage/security/secure-http-communications.md). +The transport module in Elasticsearch is used for internal communication between nodes within the cluster as well as communication between remote clusters. Check the [Elasticsearch documentation](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md) for details. For customization options of the HTTP layer, check [Services](accessing-services.md) and [TLS certificates](/deploy-manage/security/secure-http-communications.md). ## Customize the Transport Service [k8s_customize_the_transport_service] @@ -33,7 +33,7 @@ When you change the `clusterIP` setting of the service, ECK deletes and re-creat ## Configure a custom Certificate Authority [k8s-transport-ca] -Elasticsearch uses X.509 certificates to establish encrypted and authenticated connections across nodes in the cluster. By default, ECK creates a self-signed CA certificate to issue a certificate [for each node in the cluster](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-basic-setup.html#encrypt-internode-communication). +Elasticsearch uses X.509 certificates to establish encrypted and authenticated connections across nodes in the cluster. By default, ECK creates a self-signed CA certificate to issue a certificate [for each node in the cluster](/deploy-manage/security/set-up-basic-security.md#encrypt-internode-communication). You can use a Kubernetes secret to provide your own CA instead of the self-signed certificate that ECK will then use to create node certificates for transport connections. The CA certificate must be stored in the secret under `ca.crt` and the private key must be stored under `ca.key`. diff --git a/deploy-manage/deploy/cloud-on-k8s/troubleshooting-beats.md b/deploy-manage/deploy/cloud-on-k8s/troubleshooting-beats.md index b395f520e..3380fd1ea 100644 --- a/deploy-manage/deploy/cloud-on-k8s/troubleshooting-beats.md +++ b/deploy-manage/deploy/cloud-on-k8s/troubleshooting-beats.md @@ -14,7 +14,7 @@ When `kibanaRef` is specified, Beat tries to connect to the Kibana instance. If ## Configuration containing key: null is malformed [k8s-beat-configuration-containing-key-null-is-malformed] -When `kubectl` is used to modify a resource, it calculates the diff between the user applied and the existing configuration. This diff has special [semantics](https://tools.ietf.org/html/rfc7396#section-1) that forces the removal of keys if they have special values. For example, if the user-applied configuration contains `some_key: null` (or equivalent `some_key: ~`), this is interpreted as an instruction to remove `some_key`. In Beats configurations, this is often a problem when it comes to defining things like [processors](https://www.elastic.co/guide/en/beats/filebeat/current/add-cloud-metadata.html). To avoid this problem: +When `kubectl` is used to modify a resource, it calculates the diff between the user applied and the existing configuration. This diff has special [semantics](https://tools.ietf.org/html/rfc7396#section-1) that forces the removal of keys if they have special values. For example, if the user-applied configuration contains `some_key: null` (or equivalent `some_key: ~`), this is interpreted as an instruction to remove `some_key`. In Beats configurations, this is often a problem when it comes to defining things like [processors](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/add-cloud-metadata.md). To avoid this problem: * Use `some_key: {}` (empty map) or `some_key: []` (empty array) instead of `some_key: null` if doing so does not affect the behaviour. This might not be possible in all cases as some applications distinguish between null values and empty values and behave differently. * Instead of using `config` to define configuration inline, use `configRef` and store the configuration in a Secret. @@ -28,6 +28,6 @@ If you have configured a Beat to run as a `Deployment` and you are using a `host ERROR instance/beat.go:958 Exiting: data path already locked by another beat. Please make sure that multiple beats are not sharing the same data path (path.data). ``` -This can happen if the new Pod is scheduled on the same Kubernetes node as the old Pod and is now trying to use the same data directory. Use a [`Recreate`](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-beat-configuration.html#k8s-beat-chose-the-deployment-model) deployment strategy to avoid this problem. +This can happen if the new Pod is scheduled on the same Kubernetes node as the old Pod and is now trying to use the same data directory. Use a [`Recreate`](/deploy-manage/deploy/cloud-on-k8s/configuration-beats.md#k8s-beat-chose-the-deployment-model) deployment strategy to avoid this problem. diff --git a/deploy-manage/deploy/cloud-on-k8s/virtual-memory.md b/deploy-manage/deploy/cloud-on-k8s/virtual-memory.md index b8b11dffb..83206c8c0 100644 --- a/deploy-manage/deploy/cloud-on-k8s/virtual-memory.md +++ b/deploy-manage/deploy/cloud-on-k8s/virtual-memory.md @@ -11,9 +11,9 @@ By default, Elasticsearch uses memory mapping (`mmap`) to efficiently access ind The kernel setting `vm.max_map_count=262144` can be set on the host directly, by a dedicated init container which must be privileged, or a dedicated Daemonset. -For more information, check the Elasticsearch documentation on [Virtual memory](https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html). +For more information, check the Elasticsearch documentation on [Virtual memory](/deploy-manage/deploy/self-managed/vm-max-map-count.md). -Optionally, you can select a different type of file system implementation for the storage. For possible options, check the [store module documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-store.html). +Optionally, you can select a different type of file system implementation for the storage. For possible options, check the [store module documentation](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index-store-settings.md). ```yaml spec: diff --git a/deploy-manage/deploy/cloud-on-k8s/volume-claim-templates.md b/deploy-manage/deploy/cloud-on-k8s/volume-claim-templates.md index fa1819228..635452c03 100644 --- a/deploy-manage/deploy/cloud-on-k8s/volume-claim-templates.md +++ b/deploy-manage/deploy/cloud-on-k8s/volume-claim-templates.md @@ -13,7 +13,7 @@ mapped_pages: By default, the operator creates a [`PersistentVolumeClaim`](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) with a capacity of 1Gi for each pod in an Elasticsearch cluster to prevent data loss in case of accidental pod deletion. For production workloads, you should define your own volume claim template with the desired storage capacity and (optionally) the Kubernetes [storage class](https://kubernetes.io/docs/concepts/storage/storage-classes/) to associate with the persistent volume. ::::{important} -The name of the volume claim must always be `elasticsearch-data`. If you chose a different name you have to set up a corresponding volume mount matching the [data.path](https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html#path-settings) yourself ( `/usr/share/elasticsearch/data` by default). +The name of the volume claim must always be `elasticsearch-data`. If you chose a different name you have to set up a corresponding volume mount matching the [data.path](/deploy-manage/deploy/self-managed/important-settings-configuration.md#path-settings) yourself ( `/usr/share/elasticsearch/data` by default). :::: diff --git a/deploy-manage/deploy/elastic-cloud.md b/deploy-manage/deploy/elastic-cloud.md index f84e351fb..3b2ceab15 100644 --- a/deploy-manage/deploy/elastic-cloud.md +++ b/deploy-manage/deploy/elastic-cloud.md @@ -13,10 +13,10 @@ Serverless projects use the core components of the {{stack}}, such as {{es}} and Elastic provides three serverless solutions available on {{ecloud}}: -* **https://www.elastic.co/guide/en/serverless/current/what-is-elasticsearch-serverless.html[{{es-serverless}}]**: Build powerful applications and search experiences using a rich ecosystem of vector search capabilities, APIs, and libraries. +* **/solutions/search.md[{{es-serverless}}]**: Build powerful applications and search experiences using a rich ecosystem of vector search capabilities, APIs, and libraries. % See solutions/search/serverless-elasticsearch-get-started.md -* **https://www.elastic.co/guide/en/serverless/current/what-is-observability-serverless.html[{{obs-serverless}}]**: Monitor your own platforms and services using powerful machine learning and analytics tools with your logs, metrics, traces, and APM data. -* **https://www.elastic.co/guide/en/serverless/current/what-is-security-serverless.html[{{sec-serverless}}]**: Detect, investigate, and respond to threats with SIEM, endpoint protection, and AI-powered analytics capabilities. +* **/solutions/observability.md[{{obs-serverless}}]**: Monitor your own platforms and services using powerful machine learning and analytics tools with your logs, metrics, traces, and APM data. +* **/solutions/security/elastic-security-serverless.md[{{sec-serverless}}]**: Detect, investigate, and respond to threats with SIEM, endpoint protection, and AI-powered analytics capabilities. [Learn more about {{serverless-full}} in our blog](https://www.elastic.co/blog/elastic-cloud-serverless). @@ -38,7 +38,7 @@ Elastic provides three serverless solutions available on {{ecloud}}: ## Differences between serverless projects and hosted deployments on {{ecloud}} [general-what-is-serverless-elastic-differences-between-serverless-projects-and-hosted-deployments-on-ecloud] -You can run [hosted deployments](https://www.elastic.co/guide/en/cloud/current/ec-getting-started.html) of the {{stack}} on {{ecloud}}. These hosted deployments provide more provisioning and advanced configuration options. +You can run [hosted deployments](/deploy-manage/deploy/elastic-cloud/cloud-hosted.md) of the {{stack}} on {{ecloud}}. These hosted deployments provide more provisioning and advanced configuration options. | | | | | --- | --- | --- | @@ -63,7 +63,7 @@ Migration paths between hosted deployments and serverless projects are currently **How can I move data to or from serverless projects?** -We are working on data migration tools! In the interim, [use Logstash](https://www.elastic.co/guide/en/serverless/current/elasticsearch-ingest-data-through-logstash.html) with Elasticsearch input and output plugins to move data to and from serverless projects. +We are working on data migration tools! In the interim, [use Logstash](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/index.md) with Elasticsearch input and output plugins to move data to and from serverless projects. **How does serverless ensure compatibility between software versions?** diff --git a/deploy-manage/deploy/elastic-cloud/add-plugins-extensions.md b/deploy-manage/deploy/elastic-cloud/add-plugins-extensions.md index 4845bc8fc..e4e1857c1 100644 --- a/deploy-manage/deploy/elastic-cloud/add-plugins-extensions.md +++ b/deploy-manage/deploy/elastic-cloud/add-plugins-extensions.md @@ -11,14 +11,14 @@ Plugins extend the core functionality of {{es}}. There are many suitable plugins * Analysis plugins, to provide analyzers targeted at languages other than English. * Scripting plugins, to provide additional scripting languages. -Plugins can come from different sources: the official ones created or at least maintained by Elastic, community-sourced plugins from other users, and plugins that you provide. Some of the official plugins are always provided with our service, and can be [enabled per deployment](https://www.elastic.co/guide/en/cloud/current/ec-adding-elastic-plugins.html). +Plugins can come from different sources: the official ones created or at least maintained by Elastic, community-sourced plugins from other users, and plugins that you provide. Some of the official plugins are always provided with our service, and can be [enabled per deployment](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch-plugins/cloud/ec-adding-elastic-plugins.md). There are two ways to add plugins to a deployment in Elasticsearch Service: -* [Enable one of the official plugins already available in Elasticsearch Service](https://www.elastic.co/guide/en/cloud/current/ec-adding-elastic-plugins.html). +* [Enable one of the official plugins already available in Elasticsearch Service](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch-plugins/cloud/ec-adding-elastic-plugins.md). * [Upload a custom plugin and then enable it per deployment](upload-custom-plugins-bundles.md). -Custom plugins can include the official {{es}} plugins not provided with Elasticsearch Service, any of the community-sourced plugins, or [plugins that you write yourself](https://www.elastic.co/guide/en/elasticsearch/plugins/current/plugin-authors.html). Uploading custom plugins is available only to Gold, Platinum, and Enterprise subscriptions. For more information, check [Upload custom plugins and bundles](upload-custom-plugins-bundles.md). +Custom plugins can include the official {{es}} plugins not provided with Elasticsearch Service, any of the community-sourced plugins, or [plugins that you write yourself](asciidocalypse://docs/elasticsearch/docs/extend/create-elasticsearch-plugins/index.md). Uploading custom plugins is available only to Gold, Platinum, and Enterprise subscriptions. For more information, check [Upload custom plugins and bundles](upload-custom-plugins-bundles.md). To learn more about the official and community-sourced plugins, refer to [{{es}} Plugins and Integrations](https://www.elastic.co/guide/en/elasticsearch/plugins/current/index.html). diff --git a/deploy-manage/deploy/elastic-cloud/available-stack-versions.md b/deploy-manage/deploy/elastic-cloud/available-stack-versions.md index 570978c89..d8126081e 100644 --- a/deploy-manage/deploy/elastic-cloud/available-stack-versions.md +++ b/deploy-manage/deploy/elastic-cloud/available-stack-versions.md @@ -25,7 +25,7 @@ You might sometimes notice additional versions listed in the user interface beyo Whenever a new Elastic Stack version is released, we do our best to provide the new version on our hosted service at the same time. We send you an email and add a notice to the console, recommending an upgrade. You’ll need to decide whether to upgrade to the new version with new features and bug fixes or to stay with a version you know works for you a while longer. -There can be [breaking changes](https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes.html) in some new versions of Elasticsearch that break what used to work in older versions. Before upgrading, you’ll want to check if the new version introduces any changes that might affect your applications. A breaking change might be a function that was previously deprecated and that has been removed in the latest version, for example. If you have an application that depends on the removed function, the application will need to be updated to continue working with the new version of Elasticsearch. +There can be [breaking changes](asciidocalypse://docs/elasticsearch/docs/release-notes/breaking-changes/elasticsearch.md) in some new versions of Elasticsearch that break what used to work in older versions. Before upgrading, you’ll want to check if the new version introduces any changes that might affect your applications. A breaking change might be a function that was previously deprecated and that has been removed in the latest version, for example. If you have an application that depends on the removed function, the application will need to be updated to continue working with the new version of Elasticsearch. To learn more about upgrading to newer versions of the Elastic Stack on our hosted service, check [Upgrade Versions](../../upgrade/deployment-or-cluster.md). diff --git a/deploy-manage/deploy/elastic-cloud/azure-native-isv-service.md b/deploy-manage/deploy/elastic-cloud/azure-native-isv-service.md index d9a5d6f2b..c215be569 100644 --- a/deploy-manage/deploy/elastic-cloud/azure-native-isv-service.md +++ b/deploy-manage/deploy/elastic-cloud/azure-native-isv-service.md @@ -139,7 +139,7 @@ $$$azure-integration-pricing$$$What is the pricing for this offer? $$$azure-integration-regions$$$Which Azure regions are supported? -: Here is the [list of available Azure regions](https://www.elastic.co/guide/en/cloud/current/ec-regions-templates-instances.html#ec-azure_regions) supported in {{ecloud}}. +: Here is the [list of available Azure regions](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-regions-templates-instances.md#ec-azure_regions) supported in {{ecloud}}. $$$azure-integration-subscription-levels$$$Which {{ecloud}} subscription levels are available? : The subscription defaults to the Enterprise subscription, granting immediate access to advanced {{stack}} features like machine learning, and premium support response time SLAs. {{ecloud}} offers a number of different [subscription levels](https://elastic.co/pricing). @@ -235,8 +235,8 @@ $$$azure-integration-cli-api$$$What other methods are available to deploy {{es}} * **Deploy using {{ecloud}}** * The {{ecloud}} [console](https://cloud.elastic.co?page=docs&placement=docs-body) - * The {{ecloud}} [REST API](https://www.elastic.co/guide/en/cloud/current/ec-restful-api.html) - * The {{ecloud}} [command line tool](https://www.elastic.co/guide/en/ecctl/current/index.html) + * The {{ecloud}} [REST API](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-api-restful.md) + * The {{ecloud}} [command line tool](asciidocalypse://docs/ecctl/docs/reference/cloud/ecctl/index.md) * The {{ecloud}} [Terraform provider](https://registry.terraform.io/providers/elastic/ec/latest/docs) Note that when you use any of the {{ecloud}} methods, the {{es}} deployment will not be available in Azure. @@ -323,7 +323,7 @@ $$$azure-integration-modify-deployment$$$How can I modify my {{ecloud}} deployme * [Add or remove custom plugins](add-plugins-extensions.md). * [Configure IP filtering](../../security/traffic-filtering.md). * [Monitor your {{ecloud}} deployment](../../monitor/stack-monitoring/elastic-cloud-stack-monitoring.md) to ensure it remains healthy. - * Add or remove API keys to use the [REST API](https://www.elastic.co/guide/en/cloud/current/ec-restful-api.html). + * Add or remove API keys to use the [REST API](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-api-restful.md). * [And more](cloud-hosted.md) @@ -380,7 +380,7 @@ Note that following restrictions for logging: * Only logs from non-compute Azure services are ingested as part of the configuration detailed in this document. Logs from compute services, such as Virtual Machines, into the {{stack}} will be added in a future release. -* The Azure services must be in one of the [supported regions](https://www.elastic.co/guide/en/cloud/current/ec-regions-templates-instances.html#ec-azure_regions). All regions will be supported in the future. +* The Azure services must be in one of the [supported regions](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-regions-templates-instances.md#ec-azure_regions). All regions will be supported in the future. :::: @@ -426,7 +426,7 @@ $$$azure-integration-vm-extensions$$$How can I monitor my Azure virtual machines **Managing the Elastic Agent VM extension** - Once installed on the virtual machine, you can manage Elastic Agent either from Fleet or locally on the host where it’s installed. We recommend managing the VM extension through Fleet, because it makes handling and upgrading the agents considerably easier. For more information on the Elastic Agent, check [Manage your Elastic Agents](https://www.elastic.co/guide/en/fleet/current/elastic-agent-installation.html). + Once installed on the virtual machine, you can manage Elastic Agent either from Fleet or locally on the host where it’s installed. We recommend managing the VM extension through Fleet, because it makes handling and upgrading the agents considerably easier. For more information on the Elastic Agent, check [Manage your Elastic Agents](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/install-elastic-agents.md). **Operating system compatibility matrix** @@ -497,7 +497,7 @@ $$$azure-integration-failed-sso$$$I can’t SSO into my {{ecloud}} deployment. $$$azure-integration-cant-see-deployment$$$I see some deployments in the {{ecloud}} console but not in the Azure Portal. -: Elastic Deployments created using the [Elasticsearch Service Console](https://cloud.elastic.co?page=docs&placement=docs-body), the [{{es}} Service API](https://www.elastic.co/guide/en/cloud/current/ec-restful-api.html), or the [{{ecloud}} Terraform provider](https://registry.terraform.io/providers/elastic/ec/latest/docs) are only visible through the {{ecloud}} Console. To have the necessary metadata to be visible in the Azure Portal, {{ecloud}} deployments need to be created in Microsoft Azure. +: Elastic Deployments created using the [Elasticsearch Service Console](https://cloud.elastic.co?page=docs&placement=docs-body), the [{{es}} Service API](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-api-restful.md), or the [{{ecloud}} Terraform provider](https://registry.terraform.io/providers/elastic/ec/latest/docs) are only visible through the {{ecloud}} Console. To have the necessary metadata to be visible in the Azure Portal, {{ecloud}} deployments need to be created in Microsoft Azure. ::::{note} Mimicking this metadata by manually adding tags to an {{ecloud}} deployment will not work around this limitation. Instead, it will prevent you from being able to delete the deployment using the [Elasticsearch Service Console](https://cloud.elastic.co?page=docs&placement=docs-body). diff --git a/deploy-manage/deploy/elastic-cloud/change-hardware.md b/deploy-manage/deploy/elastic-cloud/change-hardware.md index 85ed6fb9f..8df62da98 100644 --- a/deploy-manage/deploy/elastic-cloud/change-hardware.md +++ b/deploy-manage/deploy/elastic-cloud/change-hardware.md @@ -5,7 +5,7 @@ mapped_pages: # Change hardware [ec-change-hardware-for-a-specific-resource] -The virtual hardware on which Elastic stack deployments run is defined by instance configurations. To learn more about what an instance configuration is, refer to [Instance configurations](https://www.elastic.co/guide/en/cloud/current/ec-reference-hardware.html#ec-getting-started-configurations). +The virtual hardware on which Elastic stack deployments run is defined by instance configurations. To learn more about what an instance configuration is, refer to [Instance configurations](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/hardware.md#ec-getting-started-configurations). When a deployment is created, each Elasticsearch tier and stateless resource (e.g., Kibana) gets an instance configuration assigned to it, based on the hardware profile used. The combination of instance configurations defined within each hardware profile is designed to provide the best possible outcome for each use case. Therefore, it is not advisable to use instance configurations that are not specified on the hardware profile, except in specific situations in which we may need to migrate an Elasticsearch tier or stateless resource to a different hardware type. An example of such a scenario is when a cloud provider stops supporting a hardware type in a specific region. @@ -20,7 +20,7 @@ Prerequisites: Follow these steps to migrate to a different instance configuration, replacing the default `$EC_API_KEY` value with your actual API key: -1. From the [list of instance configurations available for each region](https://www.elastic.co/guide/en/cloud/current/ec-regions-templates-instances.html), select the target instance configuration you want to migrate to. +1. From the [list of instance configurations available for each region](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-regions-templates-instances.md), select the target instance configuration you want to migrate to. 2. Get the deployment update payload from the [Elasticsearch Service Console](https://cloud.elastic.co?page=docs&placement=docs-body) **Edit** page, by selecting **Equivalent API request**, and store it in a file called `migrate_instance_configuration.json`. Example payload containing relevant data for migrating the hot Elasticsearch tier: @@ -78,6 +78,6 @@ Having an instance configuration mismatch between the deployment and the hardwar ## Deprecated instance configurations (ICs) and deployment templates (DTs) [ec-deprecated-icdt] -A list of deprecated and valid ICs/DTs can be found on the [Available regions, deployment templates and instance configurations](https://www.elastic.co/guide/en/cloud/current/ec-regions-templates-instances.html) page, as well as through the API, using `hide_deprecated` to return valid ICs/DTs. For example, to return valid ICs/DTs the following request can be used: `https://api.elastic-cloud.com/api/v1/deployments/templates?region=us-west-2&hide_deprecated=true`. To list only the deprecated ones, this can be used: `https://api.elastic-cloud.com/api/v1/deployments/templates?region=us-west-2&metadata=legacy:true`. +A list of deprecated and valid ICs/DTs can be found on the [Available regions, deployment templates and instance configurations](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-regions-templates-instances.md) page, as well as through the API, using `hide_deprecated` to return valid ICs/DTs. For example, to return valid ICs/DTs the following request can be used: `https://api.elastic-cloud.com/api/v1/deployments/templates?region=us-west-2&hide_deprecated=true`. To list only the deprecated ones, this can be used: `https://api.elastic-cloud.com/api/v1/deployments/templates?region=us-west-2&metadata=legacy:true`. If a deprecated IC/DT is already in use, it can continue to be used. However, creating or migrating to a deprecated IC/DT is no longer possible and will result in a plan failing. In order to migrate to a valid IC/DT, navigate to the **Edit hardware profile** option in the Cloud UI or use the [Deployment API](https://www.elastic.co/docs/api/doc/cloud/operation/operation-migrate-deployment-template). diff --git a/deploy-manage/deploy/elastic-cloud/create-an-elastic-cloud-hosted-deployment.md b/deploy-manage/deploy/elastic-cloud/create-an-elastic-cloud-hosted-deployment.md index 189e45bff..700e29d2c 100644 --- a/deploy-manage/deploy/elastic-cloud/create-an-elastic-cloud-hosted-deployment.md +++ b/deploy-manage/deploy/elastic-cloud/create-an-elastic-cloud-hosted-deployment.md @@ -33,10 +33,10 @@ Once you are on the **Create deployment** page, you can create the deployment wi : The cloud platform where you’ll deploy your deployment. We support: Amazon Web Services (AWS), Google Cloud Platform (GCP), and Microsoft Azure. You do not need to provide your own keys. Region - : The cloud platform’s region your deployment will live. If you have compliance or latency requirements, you can create your deployment in any of our [supported regions](https://www.elastic.co/guide/en/cloud/current/ec-reference-regions.html). The region should be as close as possible to the location of your data. + : The cloud platform’s region your deployment will live. If you have compliance or latency requirements, you can create your deployment in any of our [supported regions](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/regions.md). The region should be as close as possible to the location of your data. Hardware profile - : This allows you to configure the underlying virtual hardware that you’ll deploy your Elastic Stack on. Each hardware profile provides a unique blend of storage, RAM and vCPU sizes. You can select a hardware profile that’s best suited for your use case. For example CPU Optimized if you have a search-heavy use case that’s bound by compute resources. For more details, check the [hardware profiles](ec-configure-deployment-settings.md#ec-hardware-profiles) section. You can also view the [virtual hardware details](https://www.elastic.co/guide/en/cloud/current/ec-reference-hardware.html) which powers hardware profiles. With the **Advanced settings** option, you can configure the underlying virtual hardware associated with each profile. + : This allows you to configure the underlying virtual hardware that you’ll deploy your Elastic Stack on. Each hardware profile provides a unique blend of storage, RAM and vCPU sizes. You can select a hardware profile that’s best suited for your use case. For example CPU Optimized if you have a search-heavy use case that’s bound by compute resources. For more details, check the [hardware profiles](ec-configure-deployment-settings.md#ec-hardware-profiles) section. You can also view the [virtual hardware details](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/hardware.md) which powers hardware profiles. With the **Advanced settings** option, you can configure the underlying virtual hardware associated with each profile. Version : The Elastic Stack version that will get deployed. Defaults to the latest version. Our [version policy](available-stack-versions.md) describes which versions are available to deploy. diff --git a/deploy-manage/deploy/elastic-cloud/differences-from-other-elasticsearch-offerings.md b/deploy-manage/deploy/elastic-cloud/differences-from-other-elasticsearch-offerings.md index 830efce08..f6cd65335 100644 --- a/deploy-manage/deploy/elastic-cloud/differences-from-other-elasticsearch-offerings.md +++ b/deploy-manage/deploy/elastic-cloud/differences-from-other-elasticsearch-offerings.md @@ -40,7 +40,7 @@ To ensure optimal performance, follow these recommendations for sizing individua For large datasets that exceed the recommended maximum size for a single index, consider splitting your data across smaller indices and using an alias to search them collectively. -These recommendations do not apply to indices using better binary quantization (BBQ). Refer to [vector quantization](https://www.elastic.co/guide/en/elasticsearch/reference/current/dense-vector.html#dense-vector-quantization) in the core {{es}} docs for more information. +These recommendations do not apply to indices using better binary quantization (BBQ). Refer to [vector quantization](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/dense-vector.md#dense-vector-quantization) in the core {{es}} docs for more information. ## API availability [elasticsearch-differences-serverless-apis-availability] @@ -92,7 +92,7 @@ When attempting to use an unavailable API, you’ll receive a clear error messag ## Settings availability [elasticsearch-differences-serverless-settings-availability] -In {{es-serverless}}, you can only configure [index-level settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-modules-settings). Cluster-level settings and node-level settings are not required by end users and the `elasticsearch.yml` file is fully managed by Elastic. +In {{es-serverless}}, you can only configure [index-level settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#index-modules-settings). Cluster-level settings and node-level settings are not required by end users and the `elasticsearch.yml` file is fully managed by Elastic. Available settings : **Index-level settings**: Settings that control how {{es}} documents are processed, stored, and searched are available to end users. These include: @@ -156,7 +156,7 @@ The following {{es-serverless}} project-specific features are planned for future * Managed Search connectors - You can use [self-managed Search connectors](https://www.elastic.co/guide/en/elasticsearch/reference/current/es-build-connector.html) in the meantime. + You can use [self-managed Search connectors](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/search-connectors/self-managed-connectors.md) in the meantime. @@ -164,6 +164,6 @@ The following {{es-serverless}} project-specific features are planned for future The following features are not available in {{es-serverless}} and are not planned for future support: -* [Custom plugins and bundles](https://www.elastic.co/guide/en/cloud/current/ec-custom-bundles.html) -* [{{es}} for Apache Hadoop](https://www.elastic.co/guide/en/elasticsearch/hadoop/current/reference.html) -* [Scripted metric aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-scripted-metric-aggregation.html) +* [Custom plugins and bundles](/deploy-manage/deploy/elastic-cloud/upload-custom-plugins-bundles.md) +* [{{es}} for Apache Hadoop](asciidocalypse://docs/elasticsearch-hadoop/docs/reference/ingestion-tools/elasticsearch-hadoop/elasticsearch-for-apache-hadoop.md) +* [Scripted metric aggregations](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-scripted-metric-aggregation.md) diff --git a/deploy-manage/deploy/elastic-cloud/ec-change-hardware-profile.md b/deploy-manage/deploy/elastic-cloud/ec-change-hardware-profile.md index 28e198d3d..7eca1f53f 100644 --- a/deploy-manage/deploy/elastic-cloud/ec-change-hardware-profile.md +++ b/deploy-manage/deploy/elastic-cloud/ec-change-hardware-profile.md @@ -115,7 +115,7 @@ Replace those values with your actual API key and deployment ID in the following "region":"gcp-us-central1", ``` -3. Check the [hardware profiles available](https://www.elastic.co/guide/en/cloud/current/ec-regions-templates-instances.html) for the region that your deployment is in and find the template ID of the deployment hardware profile you’d like to use. +3. Check the [hardware profiles available](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-regions-templates-instances.md) for the region that your deployment is in and find the template ID of the deployment hardware profile you’d like to use. ::::{tip} If you wish to update your hardware profile to the latest version available for that same profile, locate the template ID corresponding to the `deployment_template` you retrieved at step 2, but without the version information. For example, if your deployment’s current hardware profile is `gcp-cpu-optimized-v5`, use `gcp-cpu-optimized` as a template ID to update your deployment. @@ -143,7 +143,7 @@ Replace those values with your actual API key and deployment ID in the following ### Storage optimized [ec-profiles-storage] -Your Elasticsearch data nodes are optimized for high I/O throughput. Use this profile if you are new to Elasticsearch or don’t need to run a more specialized workload. You can find the exact storage, memory, and vCPU allotment on the [hardware details page](https://www.elastic.co/guide/en/cloud/current/ec-reference-hardware.html#ec-getting-started-configurations) for each cloud provider. +Your Elasticsearch data nodes are optimized for high I/O throughput. Use this profile if you are new to Elasticsearch or don’t need to run a more specialized workload. You can find the exact storage, memory, and vCPU allotment on the [hardware details page](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/hardware.md#ec-getting-started-configurations) for each cloud provider. **Ideal use case** @@ -152,7 +152,7 @@ Good for most ingestion use cases with 7-10 days of data available for fast acce ### Storage optimized (dense) [ec-profiles-storage-dense] -Your Elasticsearch data nodes are optimized for high I/O throughput. You can find the exact storage, memory, and vCPU allotment on the [hardware details page](https://www.elastic.co/guide/en/cloud/current/ec-reference-hardware.html#ec-getting-started-configurations) for each cloud provider. +Your Elasticsearch data nodes are optimized for high I/O throughput. You can find the exact storage, memory, and vCPU allotment on the [hardware details page](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/hardware.md#ec-getting-started-configurations) for each cloud provider. **Ideal use case** @@ -161,7 +161,7 @@ Ideal for ingestion use cases with more than 10 days of data available for fast ### CPU optimized [ec-profiles-compute-optimized] -This profile runs CPU-intensive workloads faster. You can find the exact storage, memory, and vCPU allotment on the [hardware details page](https://www.elastic.co/guide/en/cloud/current/ec-reference-hardware.html#ec-getting-started-configurations) for each cloud provider. +This profile runs CPU-intensive workloads faster. You can find the exact storage, memory, and vCPU allotment on the [hardware details page](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/hardware.md#ec-getting-started-configurations) for each cloud provider. **Ideal use case** @@ -170,7 +170,7 @@ Consider this configuration for ingestion use cases with 1-4 days of data availa ### CPU optimized (ARM) [ec-profiles-compute-optimized-arm] -This profile is similar to CPU optimized profile but is powered by AWS Graviton2 instances. You can find the exact storage, memory, and vCPU allotment on the [hardware details page](https://www.elastic.co/guide/en/cloud/current/ec-reference-hardware.html#ec-getting-started-configurations) for each cloud provider. +This profile is similar to CPU optimized profile but is powered by AWS Graviton2 instances. You can find the exact storage, memory, and vCPU allotment on the [hardware details page](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/hardware.md#ec-getting-started-configurations) for each cloud provider. **Ideal use case** @@ -179,7 +179,7 @@ Consider this configuration for ingestion use cases with 1-4 days of data availa ### Vector search optimized (ARM) [ec-profiles-vector-search] -This profile is suited for Vector search, Generative AI and Semantic search optimized workloads. You can find the exact storage, memory, and vCPU allotment on the [hardware details page](https://www.elastic.co/guide/en/cloud/current/ec-reference-hardware.html#ec-getting-started-configurations) for each cloud provider. +This profile is suited for Vector search, Generative AI and Semantic search optimized workloads. You can find the exact storage, memory, and vCPU allotment on the [hardware details page](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/hardware.md#ec-getting-started-configurations) for each cloud provider. **Ideal use case** @@ -188,7 +188,7 @@ Optimized for applications that leverage Vector Search and/or Generative AI. Als ### General purpose [ec-profiles-general-purpose] -This profile runs CPU-intensive workloads faster . You can find the exact storage, memory, and vCPU allotment on the [hardware details page](https://www.elastic.co/guide/en/cloud/current/ec-reference-hardware.html#ec-getting-started-configurations) for each cloud provider. +This profile runs CPU-intensive workloads faster . You can find the exact storage, memory, and vCPU allotment on the [hardware details page](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/hardware.md#ec-getting-started-configurations) for each cloud provider. **Ideal use case** @@ -197,7 +197,7 @@ Suitable for ingestion use cases with 5-7 days of data available for fast access ### General purpose (ARM) [ec-profiles-general-purpose-arm] -This profile is similar to the General purpose profile but is powered by AWS Graviton2 instances. You can find the exact storage, memory, and vCPU allotment on the [hardware details page](https://www.elastic.co/guide/en/cloud/current/ec-reference-hardware.html#ec-getting-started-configurations) for each cloud provider. +This profile is similar to the General purpose profile but is powered by AWS Graviton2 instances. You can find the exact storage, memory, and vCPU allotment on the [hardware details page](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/hardware.md#ec-getting-started-configurations) for each cloud provider. **Ideal use case** diff --git a/deploy-manage/deploy/elastic-cloud/ec-configure-deployment-settings.md b/deploy-manage/deploy/elastic-cloud/ec-configure-deployment-settings.md index 6675c4e49..362f782d1 100644 --- a/deploy-manage/deploy/elastic-cloud/ec-configure-deployment-settings.md +++ b/deploy-manage/deploy/elastic-cloud/ec-configure-deployment-settings.md @@ -27,7 +27,7 @@ You can select your cloud platform and region only when you create a new deploym Elastic Cloud deploys Elastic Stack components into a *hardware profile* which provides a unique blend of storage, memory and vCPU. This gives you more flexibility to choose the hardware profile that best fits for your use case. For example, *Compute Optimized* deploys Elasticsearch on virtual hardware that provides high [vCPU](../../monitor/monitoring-data/ec-vcpu-boost-instance.md) which can help search-heavy use cases return queries quickly. -Under the covers, hardware profiles leverage virtualized instances from a cloud provider, such as Amazon Web Services, Google Compute Platform, and Microsoft Azure. You don’t interact with the cloud provider directly, but we do document what we use for your reference. To learn more, check [Elasticsearch Service Hardware](https://www.elastic.co/guide/en/cloud/current/ec-reference-hardware.html). +Under the covers, hardware profiles leverage virtualized instances from a cloud provider, such as Amazon Web Services, Google Compute Platform, and Microsoft Azure. You don’t interact with the cloud provider directly, but we do document what we use for your reference. To learn more, check [Elasticsearch Service Hardware](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/hardware.md). The components of the Elastic Stack that we support as part of a deployment are called *instances* and include: diff --git a/deploy-manage/deploy/elastic-cloud/ec-customize-deployment-components.md b/deploy-manage/deploy/elastic-cloud/ec-customize-deployment-components.md index 74ef2a810..2293a464c 100644 --- a/deploy-manage/deploy/elastic-cloud/ec-customize-deployment-components.md +++ b/deploy-manage/deploy/elastic-cloud/ec-customize-deployment-components.md @@ -53,7 +53,7 @@ High availability is achieved by running a cluster with replicas in multiple dat Running in two data centers or availability zones is our default high availability configuration. It provides reasonably high protection against infrastructure failures and intermittent network problems. You might want three data centers if you need even higher fault tolerance. Just one zone might be sufficient, if the cluster is mainly used for testing or development. ::::{important} -Some [regions](https://www.elastic.co/guide/en/cloud/current/ec-reference-regions.html) might have only two availability zones. +Some [regions](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/regions.md) might have only two availability zones. :::: diff --git a/deploy-manage/deploy/elastic-cloud/ech-aws-instance-configuration.md b/deploy-manage/deploy/elastic-cloud/ech-aws-instance-configuration.md index 558752080..cf00dca29 100644 --- a/deploy-manage/deploy/elastic-cloud/ech-aws-instance-configuration.md +++ b/deploy-manage/deploy/elastic-cloud/ech-aws-instance-configuration.md @@ -7,7 +7,7 @@ mapped_pages: Amazon EC2 (AWS) C6gd, M6gd & R6gd instances, powered by AWS Graviton2, are now available for Elastic Cloud deployments. C6gd, M6gd & R6gd VMs use the [Graviton2, ARM neoverse N1 cores](https://aws.amazon.com/about-aws/whats-new/2020/07/announcing-new-amazon-ec2-instances-powered-aws-graviton2-processors/) and provide high compute coupled with fast NVMe storage, which makes them a good fit to power Elastic workloads. In addition, Graviton2 VMs also offer more than a 20% improvement in price-performance over comparable Intel chipsets. -In addition to AWS Graviton2 instances, Amazon EC2 (AWS) C5d, M5d, I3, I3en, and D2/D3 instances are now available for Elastic Cloud deployments in all supported [AWS Cloud Regions](https://www.elastic.co/guide/en/cloud/current/ec-regions-templates-instances.html#ec-aws_regions). +In addition to AWS Graviton2 instances, Amazon EC2 (AWS) C5d, M5d, I3, I3en, and D2/D3 instances are now available for Elastic Cloud deployments in all supported [AWS Cloud Regions](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-regions-templates-instances.md#ec-aws_regions). For specific AWS hardware and availability details, check the [Regional availability of instances per AWS region](ech-default-aws-configurations.md#aws-list-region) and the [AWS default provider instance configurations](ech-default-aws-configurations.md). @@ -25,7 +25,7 @@ For example, Instance ID / SKU: `aws.es.datahot.i3` | `\*.es.datahot.*` | Denotes that this configuration is an Elasticsearch (`es`) cluster component that serves as a data node for hot content. Other options may be `datawarm`, `datacold`, `datafrozen` for data nodes, and `kibana`, `master`, and so on for other components. | | `*.i3` | Denotes that this configuration is running on the AWS i3 instance family. | -The new configuration naming convention aligns with the [data tiers](https://www.elastic.co/guide/en/elasticsearch/reference/current/data-tiers.html) intended for each configuration type, replacing prior naming conventions of “highio”, “highcpu”, and so on. The following table details the new configurations for data nodes and compares them with prior naming conventions where applicable. +The new configuration naming convention aligns with the [data tiers](/manage-data/lifecycle/data-tiers.md) intended for each configuration type, replacing prior naming conventions of “highio”, “highcpu”, and so on. The following table details the new configurations for data nodes and compares them with prior naming conventions where applicable. | New config name | Notes | | --- | --- | diff --git a/deploy-manage/deploy/elastic-cloud/ech-azure-instance-configuration.md b/deploy-manage/deploy/elastic-cloud/ech-azure-instance-configuration.md index 01602c7b2..e39341a96 100644 --- a/deploy-manage/deploy/elastic-cloud/ech-azure-instance-configuration.md +++ b/deploy-manage/deploy/elastic-cloud/ech-azure-instance-configuration.md @@ -5,7 +5,7 @@ mapped_pages: # Elasticsearch Add-On for Heroku Azure instance configurations [ech-azure-instance-configuration] -Azure [Ddv4](https://docs.microsoft.com/en-us/azure/virtual-machines/ddv4-ddsv4-series/), [Edsv4](https://docs.microsoft.com/en-us/azure/virtual-machines/edv4-edsv4-series/), [Fsv2](https://docs.microsoft.com/en-us/azure/virtual-machines/fsv2-series/), and [Lsv3](https://docs.microsoft.com/en-us/azure/virtual-machines/lsv3-series/) virtual machines (VM) are now available for Elastic Cloud deployments in all supported [Azure Cloud regions](https://www.elastic.co/guide/en/cloud/current/ec-regions-templates-instances.html#ec-azure_regions). These VMs provide additional combinations of compute, memory, and disk configurations to better fit your use-cases to optimize performance and cost. +Azure [Ddv4](https://docs.microsoft.com/en-us/azure/virtual-machines/ddv4-ddsv4-series/), [Edsv4](https://docs.microsoft.com/en-us/azure/virtual-machines/edv4-edsv4-series/), [Fsv2](https://docs.microsoft.com/en-us/azure/virtual-machines/fsv2-series/), and [Lsv3](https://docs.microsoft.com/en-us/azure/virtual-machines/lsv3-series/) virtual machines (VM) are now available for Elastic Cloud deployments in all supported [Azure Cloud regions](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-regions-templates-instances.md#ec-azure_regions). These VMs provide additional combinations of compute, memory, and disk configurations to better fit your use-cases to optimize performance and cost. To learn about the Azure specific configurations, check: @@ -26,7 +26,7 @@ For example, Instance ID / SKU: `azure.es.datahot.ddv4` | `\*.es.datahot.*` | Denotes that this configuration is an Elasticsearch (`es`) cluster component that serves as a data node for hot content. Other options may be `datawarm`, `datacold`, `datafrozen` for data nodes, and `kibana`, `master`, and so on for other components. | | `*.ddv4` | Denotes that this configuration is running on the Azure Ddv4 VM series. | -The new configuration naming convention aligns with the [data tiers](https://www.elastic.co/guide/en/elasticsearch/reference/current/data-tiers.html) intended for each configuration type, replacing prior naming conventions of “highio”, “highcpu”, and so on. The following table details the new configurations for data nodes and compares them with prior naming conventions where applicable. +The new configuration naming convention aligns with the [data tiers](/manage-data/lifecycle/data-tiers.md) intended for each configuration type, replacing prior naming conventions of “highio”, “highcpu”, and so on. The following table details the new configurations for data nodes and compares them with prior naming conventions where applicable. | New config name | Notes | | --- | --- | diff --git a/deploy-manage/deploy/elastic-cloud/ech-gcp-instance-configuration.md b/deploy-manage/deploy/elastic-cloud/ech-gcp-instance-configuration.md index 732721ef5..71d37d5ab 100644 --- a/deploy-manage/deploy/elastic-cloud/ech-gcp-instance-configuration.md +++ b/deploy-manage/deploy/elastic-cloud/ech-gcp-instance-configuration.md @@ -5,7 +5,7 @@ mapped_pages: # Elasticsearch Add-On for Heroku GCP instance configurations [ech-gcp-instance-configuration] -Google Compute Engine (GCE) N2 general purpose VM types are now available for Elastic Cloud deployments in all supported [Google Cloud regions](https://www.elastic.co/guide/en/cloud/current/ec-regions-templates-instances.html#ec-gcp_regions). [N2](https://cloud.google.com/compute/docs/machine-types) VMs have a better mix of vCPU, RAM, and internal disk, and are up to 50% more cost effective when compared to N1 VM types. In addition to N2, we also provide N2D VMs across the Google Cloud regions. +Google Compute Engine (GCE) N2 general purpose VM types are now available for Elastic Cloud deployments in all supported [Google Cloud regions](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-regions-templates-instances.md#ec-gcp_regions). [N2](https://cloud.google.com/compute/docs/machine-types) VMs have a better mix of vCPU, RAM, and internal disk, and are up to 50% more cost effective when compared to N1 VM types. In addition to N2, we also provide N2D VMs across the Google Cloud regions. To learn about the GCE specific configurations, check: @@ -27,7 +27,7 @@ For example, Instance ID / SKU: `gcp.es.datahot.n2.68x10x45` | `\*.n2.*` | Denotes that this configuration is running on the GCP N2 family. | | `*.68x10x45` | Denotes the resource configuration, delimited by “x”.
* The first argument (`68`) denotes the total gross RAM capacity of the instance. Normally we use 4GB of that for utilities and therefore this configuration has a “usable RAM” of 64GB.
* The second argument (`10`) denotes the number of vCPUs allocated to the entire machine.
* The third argument denotes the ratio of RAM to storage capacity as in 1:X. In this case, for each 1GB of RAM, you will have 45 GB of disk to store Elasticsearch data. | -The new configuration naming convention aligns with the [data tiers](https://www.elastic.co/guide/en/elasticsearch/reference/current/data-tiers.html) intended for each configuration type, replacing prior naming conventions of “highio”, “highcpu”, and so on. The following table details the new configurations for data nodes and compares them with prior naming conventions where applicable. +The new configuration naming convention aligns with the [data tiers](/manage-data/lifecycle/data-tiers.md) intended for each configuration type, replacing prior naming conventions of “highio”, “highcpu”, and so on. The following table details the new configurations for data nodes and compares them with prior naming conventions where applicable. | New config name | Notes | | --- | --- | diff --git a/deploy-manage/deploy/elastic-cloud/ech-getting-started.md b/deploy-manage/deploy/elastic-cloud/ech-getting-started.md index 0ee816c33..6a0061207 100644 --- a/deploy-manage/deploy/elastic-cloud/ech-getting-started.md +++ b/deploy-manage/deploy/elastic-cloud/ech-getting-started.md @@ -9,7 +9,7 @@ This documentation applies to Heroku users who want to make use of the Elasticse The add-on runs on the Elasticsearch Service and provides access to [Elasticsearch](https://www.elastic.co/products/elasticsearch), the open source, distributed, RESTful search engine. Many other features of the Elastic Stack are also readily available to Heroku users through the [Elasticsearch Add-On for Heroku console](https://cloud.elastic.co?page=docs&placement=docs-body) after you install the add-on. For example, you can use Kibana to visualize your Elasticsearch data. -[Elasticsearch Machine Learning](https://www.elastic.co/guide/en/machine-learning/current/index.html), [Elastic APM](/solutions/observability/apps/application-performance-monitoring-apm.md) and [Elastic Fleet Server](https://www.elastic.co/guide/en/fleet/current/fleet-overview.html) are not supported by the Elasticsearch Add-On for Heroku. +[Elasticsearch Machine Learning](/explore-analyze/machine-learning.md), [Elastic APM](/solutions/observability/apps/application-performance-monitoring-apm.md) and [Elastic Fleet Server](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/index.md) are not supported by the Elasticsearch Add-On for Heroku. To learn more about what plans are available for Heroku users and their cost, check the [Elasticsearch add-on](https://elements.heroku.com/addons/foundelasticsearch) in the Elements Marketplace. diff --git a/deploy-manage/deploy/elastic-cloud/ech-migrate-data2.md b/deploy-manage/deploy/elastic-cloud/ech-migrate-data2.md index d1900c2d5..713aa72c7 100644 --- a/deploy-manage/deploy/elastic-cloud/ech-migrate-data2.md +++ b/deploy-manage/deploy/elastic-cloud/ech-migrate-data2.md @@ -25,7 +25,7 @@ Reindex from a remote cluster : The new cluster must be the same size as your old one, or larger, to accommodate the data. Depending on your security settings for your old cluster, you might need to temporarily allow TCP traffic on port 9243 for this procedure. Restore from a snapshot -: The new cluster must be the same size as your old one, or larger, to accommodate the data. The new cluster must also be an Elasticsearch version that is compatible with the old cluster (check [Elasticsearch snapshot version compatibility](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-restore.html#snapshot-restore-version-compatibility) for details). If you have not already done so, you will need to [set up snapshots for your old cluster](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshots-register-repository.html) using a repository that can be accessed from the new cluster. +: The new cluster must be the same size as your old one, or larger, to accommodate the data. The new cluster must also be an Elasticsearch version that is compatible with the old cluster (check [Elasticsearch snapshot version compatibility](/deploy-manage/tools/snapshot-and-restore.md#snapshot-restore-version-compatibility) for details). If you have not already done so, you will need to [set up snapshots for your old cluster](/deploy-manage/tools/snapshot-and-restore/self-managed.md) using a repository that can be accessed from the new cluster. Migrating internal Elasticsearch indices : If you are migrating internal Elasticsearch indices from another cluster, specifically the `.kibana` index or the `.security` index, there are two options: @@ -35,7 +35,7 @@ Migrating internal Elasticsearch indices ::::{warning} -Before you migrate your Elasticsearch data, [define your index mappings](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html) on the new cluster. Index mappings are unable to migrate during reindex operations. +Before you migrate your Elasticsearch data, [define your index mappings](/manage-data/data-store/mapping.md) on the new cluster. Index mappings are unable to migrate during reindex operations. :::: diff --git a/deploy-manage/deploy/elastic-cloud/ech-restrictions.md b/deploy-manage/deploy/elastic-cloud/ech-restrictions.md index 480b776d8..c2b2be609 100644 --- a/deploy-manage/deploy/elastic-cloud/ech-restrictions.md +++ b/deploy-manage/deploy/elastic-cloud/ech-restrictions.md @@ -70,14 +70,14 @@ Currently you can’t use SSO to login directly from {{ecloud}} into Kibana endp ## Kibana [ech-restrictions-kibana] * The maximum size of a single {{kib}} instance is 8GB. This means, {{kib}} instances can be scaled up to 8GB before they are scaled out. For example, when creating a deployment with a {{kib}} instance of size 16GB, then 2x8GB instances are created. If you face performance issues with {{kib}} PNG or PDF reports, the recommendations are to create multiple, smaller dashboards to export the data, or to use a third party browser extension for exporting the dashboard in the format you need. -* Running an external Kibana in parallel to Elasticsearch Add-On for Heroku’s Kibana instances may cause errors, for example [`Unable to decrypt attribute`](../../../explore-analyze/alerts-cases/alerts/alerting-common-issues.md#rule-cannot-decrypt-api-key), due to a mismatched [`xpack.encryptedSavedObjects.encryptionKey`](https://www.elastic.co/guide/en/kibana/current/security-settings-kb.html#security-encrypted-saved-objects-settings) as Elasticsearch Add-On for Heroku does not [allow users to set](edit-stack-settings.md) nor expose this value. While workarounds are possible, this is not officially supported nor generally recommended. +* Running an external Kibana in parallel to Elasticsearch Add-On for Heroku’s Kibana instances may cause errors, for example [`Unable to decrypt attribute`](../../../explore-analyze/alerts-cases/alerts/alerting-common-issues.md#rule-cannot-decrypt-api-key), due to a mismatched [`xpack.encryptedSavedObjects.encryptionKey`](asciidocalypse://docs/kibana/docs/reference/configuration-reference/security-settings.md#security-encrypted-saved-objects-settings) as Elasticsearch Add-On for Heroku does not [allow users to set](edit-stack-settings.md) nor expose this value. While workarounds are possible, this is not officially supported nor generally recommended. ## APM Agent central configuration with PrivateLink or traffic filters [ech-restrictions-apm-traffic-filters] If you are using APM 7.9.0 or older: -* You cannot use [APM Agent central configuration](https://www.elastic.co/guide/en/observability/current/apm-agent-configuration.html) if your deployment is secured by [traffic filters](../../security/traffic-filtering.md). +* You cannot use [APM Agent central configuration](/solutions/observability/apps/apm-agent-central-configuration.md) if your deployment is secured by [traffic filters](../../security/traffic-filtering.md). * If you access your APM deployment over [PrivateLink](../../security/aws-privatelink-traffic-filters.md), to use APM Agent central configuration you need to allow access to the APM deployment over public internet. @@ -100,7 +100,7 @@ Enterprise Search’s management interface in Kibana does not work with traffic Kibana and Enterprise Search do not currently support restoring a snapshot of their indices across Elastic Cloud deployments. -* [Kibana uses encryption keys](https://www.elastic.co/guide/en/kibana/current/using-kibana-with-security.html#security-configure-settings) in various places, ranging from encrypting data in some areas of reporting, alerts, actions, connector tokens, ingest outputs used in Fleet and Synthetics monitoring to user sessions. +* [Kibana uses encryption keys](/deploy-manage/security/secure-your-cluster-deployment.md#security-configure-settings) in various places, ranging from encrypting data in some areas of reporting, alerts, actions, connector tokens, ingest outputs used in Fleet and Synthetics monitoring to user sessions. * [Enterprise Search uses encryption keys](https://www.elastic.co/guide/en/enterprise-search/current/encryption-keys.html) when storing content source synchronization credentials, API tokens and other sensitive information. * Currently, there is not a way to retrieve the values of Kibana and Enterprise Search encryption keys, or set them in the target deployment before restoring a snapshot. As a result, once a snapshot is restored, Kibana and Enterprise Search will not be able to decrypt the data required for some Kibana and Enterprise Search features to function properly in the target deployment. * If you have already restored a snapshot across deployments and now have broken Kibana saved objects or Enterprise Search features in the target deployment, you will have to recreate all broken configurations and objects, or create a new setup in the target deployment instead of using snapshot restore. @@ -116,7 +116,7 @@ There are situations where you may need or want to move your installed {{agents} In {{ecloud}}, you can migrate your {{agents}} by taking a snapshot of your source deployment, and restoring it on a target deployment. -To make a seamless migration, after restoring from a snapshot there are some additional steps required, such as updating settings and resetting the agent policy. Check [Migrate Elastic Agents](https://www.elastic.co/guide/en/fleet/current/migrate-elastic-agent.html) for details. +To make a seamless migration, after restoring from a snapshot there are some additional steps required, such as updating settings and resetting the agent policy. Check [Migrate Elastic Agents](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/migrate-elastic-agent.md) for details. ## Regions and Availability Zones [ech-regions-and-availability-zone] diff --git a/deploy-manage/deploy/elastic-cloud/ech-version-policy.md b/deploy-manage/deploy/elastic-cloud/ech-version-policy.md index 2ee4d36e7..b32e57de2 100644 --- a/deploy-manage/deploy/elastic-cloud/ech-version-policy.md +++ b/deploy-manage/deploy/elastic-cloud/ech-version-policy.md @@ -25,7 +25,7 @@ You might sometimes notice additional versions listed in the user interface beyo Whenever a new Elastic Stack version is released, we do our best to provide the new version on our hosted service at the same time. We send you an email and add a notice to the console, recommending an upgrade. You’ll need to decide whether to upgrade to the new version with new features and bug fixes or to stay with a version you know works for you a while longer. -There can be [breaking changes](https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes.html) in some new versions of Elasticsearch that break what used to work in older versions. Before upgrading, you’ll want to check if the new version introduces any changes that might affect your applications. A breaking change might be a function that was previously deprecated and that has been removed in the latest version, for example. If you have an application that depends on the removed function, the application will need to be updated to continue working with the new version of Elasticsearch. +There can be [breaking changes](asciidocalypse://docs/elasticsearch/docs/release-notes/breaking-changes/elasticsearch.md) in some new versions of Elasticsearch that break what used to work in older versions. Before upgrading, you’ll want to check if the new version introduces any changes that might affect your applications. A breaking change might be a function that was previously deprecated and that has been removed in the latest version, for example. If you have an application that depends on the removed function, the application will need to be updated to continue working with the new version of Elasticsearch. To learn more about upgrading to newer versions of the Elastic Stack on our hosted service, check [Upgrade Versions](../../upgrade/deployment-or-cluster.md). diff --git a/deploy-manage/deploy/elastic-cloud/ech-whats-new.md b/deploy-manage/deploy/elastic-cloud/ech-whats-new.md index 1b10635f2..4a578c21b 100644 --- a/deploy-manage/deploy/elastic-cloud/ech-whats-new.md +++ b/deploy-manage/deploy/elastic-cloud/ech-whats-new.md @@ -15,14 +15,14 @@ Check the Release Notes to get the recent updates for each product. Elasticsearch -* [Elasticsearch 8.x Release Notes](https://www.elastic.co/guide/en/elasticsearch/reference/current/es-release-notes.html) +* [Elasticsearch 8.x Release Notes](asciidocalypse://docs/elasticsearch/docs/release-notes/elasticsearch.md) * [Elasticsearch 7.x Release Notes](https://www.elastic.co/guide/en/elasticsearch/reference/7.17/es-release-notes.html) * [Elasticsearch 6.x Release Notes](https://www.elastic.co/guide/en/elasticsearch/reference/6.8/es-release-notes.html) * [Elasticsearch 5.x Release Notes](https://www.elastic.co/guide/en/elasticsearch/reference/5.6/es-release-notes.html) Kibana -* [Kibana 8.x Release Notes](https://www.elastic.co/guide/en/kibana/current/release-notes.html) +* [Kibana 8.x Release Notes](asciidocalypse://docs/kibana/docs/release-notes/kibana.md) * [Kibana 7.x Release Notes](https://www.elastic.co/guide/en/kibana/7.17/release-notes.html) * [Kibana 6.x Release Notes](https://www.elastic.co/guide/en/kibana/6.8/release-notes.html) * [Kibana 5.x Release Notes](https://www.elastic.co/guide/en/kibana/5.6/release-notes.html) diff --git a/deploy-manage/deploy/elastic-cloud/find-cloud-id.md b/deploy-manage/deploy/elastic-cloud/find-cloud-id.md index 1dceab74e..f3ecd0f93 100644 --- a/deploy-manage/deploy/elastic-cloud/find-cloud-id.md +++ b/deploy-manage/deploy/elastic-cloud/find-cloud-id.md @@ -39,7 +39,7 @@ To use the Cloud ID, you need: * The unique Cloud ID for your deployment, available from the deployment overview page. * A user ID and password that has permission to send data to your cluster. - In our examples, we use the `elastic` superuser that every Elasticsearch cluster comes with. The password for the `elastic` user is provided when you create a deployment (and can also be [reset](../../users-roles/cluster-or-deployment-auth/built-in-users.md) if you forget it). On a production system, you should adapt these examples by creating a user that can write to and access only the minimally required indices. For each Beat, review the specific feature and role table, similar to the one in [Metricbeat](https://www.elastic.co/guide/en/beats/metricbeat/current/feature-roles.html) documentation. + In our examples, we use the `elastic` superuser that every Elasticsearch cluster comes with. The password for the `elastic` user is provided when you create a deployment (and can also be [reset](../../users-roles/cluster-or-deployment-auth/built-in-users.md) if you forget it). On a production system, you should adapt these examples by creating a user that can write to and access only the minimally required indices. For each Beat, review the specific feature and role table, similar to the one in [Metricbeat](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/feature-roles.md) documentation. @@ -48,7 +48,7 @@ To use the Cloud ID, you need: The following example shows how you can send operational data from Metricbeat to Elasticsearch Service by using the Cloud ID. Any of the available Beats will work, but we had to pick one for this example. ::::{tip} -For others, you can learn more about [getting started](https://www.elastic.co/guide/en/beats/libbeat/current/getting-started.html) with each Beat. +For others, you can learn more about [getting started](asciidocalypse://docs/beats/docs/reference/ingestion-tools/index.md) with each Beat. :::: @@ -57,8 +57,8 @@ To get started with Metricbeat and Elasticsearch Service: 1. Log in to the [Elasticsearch Service Console](https://cloud.elastic.co?page=docs&placement=docs-body). 2. [Create a new deployment](create-an-elastic-cloud-hosted-deployment.md) and copy down the password for the `elastic` user. 3. On the deployment overview page, copy down the Cloud ID. -4. Set up the Beat of your choice, such as [Metricbeat version 7.17](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-installation-configuration.html). -5. [Configure the Beat output to send to Elastic Cloud](https://www.elastic.co/guide/en/beats/metricbeat/current/configure-cloud-id.html). +4. Set up the Beat of your choice, such as [Metricbeat version 7.17](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/metricbeat-installation-configuration.md). +5. [Configure the Beat output to send to Elastic Cloud](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/configure-cloud-id.md). ::::{note} Make sure you replace the values for `cloud.id` and `cloud.auth` with your own information. diff --git a/deploy-manage/deploy/elastic-cloud/manage-deployments-using-elastic-cloud-api.md b/deploy-manage/deploy/elastic-cloud/manage-deployments-using-elastic-cloud-api.md index 1de40f136..63081e06a 100644 --- a/deploy-manage/deploy/elastic-cloud/manage-deployments-using-elastic-cloud-api.md +++ b/deploy-manage/deploy/elastic-cloud/manage-deployments-using-elastic-cloud-api.md @@ -40,7 +40,7 @@ When you create a new deployment through the API, you have two options: ### Create a deployment using default values [ec-api-examples-deployment-simple] -This example requires minimal information in the API payload, and creates a deployment with default settings and a default name. You just need to specify one of the [available deployment templates](https://www.elastic.co/guide/en/cloud/current/ec-regions-templates-instances.html) in your API request header and the deployment is created using default settings from that template. +This example requires minimal information in the API payload, and creates a deployment with default settings and a default name. You just need to specify one of the [available deployment templates](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-regions-templates-instances.md) in your API request header and the deployment is created using default settings from that template. ```sh curl -XPOST \ @@ -56,7 +56,7 @@ curl -XPOST \ ``` 1. Optional: You can specify a version for the deployment. If this field is omitted a default version is used. -2. Required: One of the [available regions](https://www.elastic.co/guide/en/cloud/current/ec-regions-templates-instances.html) must be provided in the request. +2. Required: One of the [available regions](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-regions-templates-instances.md) must be provided in the request. A `resource` field can be included in this request (check the following, manual example for the field details). When a `resource` is present, the content of the request is used instead of any default values provided by the the deployment template. @@ -259,11 +259,11 @@ curl -XPOST \ ' ``` -1. [Available Regions](https://www.elastic.co/guide/en/cloud/current/ec-regions-templates-instances.html) +1. [Available Regions](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-regions-templates-instances.md) 2. Availability zones for the Elasticsearch cluster -3. [Available instance configurations](https://www.elastic.co/guide/en/cloud/current/ec-regions-templates-instances.html) +3. [Available instance configurations](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-regions-templates-instances.md) 4. Memory allocated for each Elasticsearch node -5. [Available templates](https://www.elastic.co/guide/en/cloud/current/ec-regions-templates-instances.html) +5. [Available templates](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-regions-templates-instances.md) 6. Availability zones for Kibana 7. Memory allocated for Kibana 8. Availability zones for Integrations Server diff --git a/deploy-manage/deploy/elastic-cloud/manage-integrations-server.md b/deploy-manage/deploy/elastic-cloud/manage-integrations-server.md index de17eb57e..065e01c4e 100644 --- a/deploy-manage/deploy/elastic-cloud/manage-integrations-server.md +++ b/deploy-manage/deploy/elastic-cloud/manage-integrations-server.md @@ -5,7 +5,7 @@ mapped_pages: # Manage your Integrations server [ec-manage-integrations-server] -For deployments that are version 8.0 and later, you have the option to add a combined [Application Performance Monitoring (APM) Server](/solutions/observability/apps/application-performance-monitoring-apm.md) and [Fleet Server](https://www.elastic.co/guide/en/fleet/current/fleet-overview.html) to your deployment. APM allows you to monitor software services and applications in real time, turning that data into documents stored in the Elasticsearch cluster. Fleet allows you to centrally manage Elastic Agents on many hosts. +For deployments that are version 8.0 and later, you have the option to add a combined [Application Performance Monitoring (APM) Server](/solutions/observability/apps/application-performance-monitoring-apm.md) and [Fleet Server](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/index.md) to your deployment. APM allows you to monitor software services and applications in real time, turning that data into documents stored in the Elasticsearch cluster. Fleet allows you to centrally manage Elastic Agents on many hosts. As part of provisioning, the APM Server and Fleet Server are already configured to work with Elasticsearch and Kibana. At the end of provisioning, you are shown the secret token to configure communication between the APM Server and the backend [APM Agents](https://www.elastic.co/guide/en/apm/agent/index.html). The APM Agents get deployed within your services and applications. diff --git a/deploy-manage/deploy/elastic-cloud/manage-plugins-extensions-through-api.md b/deploy-manage/deploy/elastic-cloud/manage-plugins-extensions-through-api.md index 53b3e72a4..43eb0faa4 100644 --- a/deploy-manage/deploy/elastic-cloud/manage-plugins-extensions-through-api.md +++ b/deploy-manage/deploy/elastic-cloud/manage-plugins-extensions-through-api.md @@ -33,7 +33,7 @@ For plugins larger than 200MB the download URL option **must** be used. Plugins These two examples are for the `plugin` extension type. For bundles, change `extension_type` to `bundle`. -For plugins, `version` must match (exactly) the `elasticsearch.version` field defined in the plugin’s `plugin-descriptor.properties` file. Check [Help for plugin authors](https://www.elastic.co/guide/en/elasticsearch/plugins/current/plugin-authors.html#plugin-authors) for details. For plugins larger than 5GB, the `plugin-descriptor.properties` file needs to be at the top of the archive. This ensures that the our verification process is able to detect that it is an Elasticsearch plugin; otherwise the plugin will be rejected by the API. This order can be achieved by specifying at time of creating the ZIP file: `zip -r name-of-plugin.zip plugin-descriptor.properties *`. +For plugins, `version` must match (exactly) the `elasticsearch.version` field defined in the plugin’s `plugin-descriptor.properties` file. Check [Help for plugin authors](asciidocalypse://docs/elasticsearch/docs/extend/create-elasticsearch-plugins/index.md#plugin-authors) for details. For plugins larger than 5GB, the `plugin-descriptor.properties` file needs to be at the top of the archive. This ensures that the our verification process is able to detect that it is an Elasticsearch plugin; otherwise the plugin will be rejected by the API. This order can be achieved by specifying at time of creating the ZIP file: `zip -r name-of-plugin.zip plugin-descriptor.properties *`. For bundles, we recommend setting `version` using wildcard notation that matches the major version of the Elasticsearch deployment. For example, if Elasticsearch is on version 8.4.3, simply set `8.*` as the version. The value `8.*` means that the bundle is compatible with all 8.x versions of Elasticsearch. @@ -303,7 +303,7 @@ Updating the name of an existing extension does not change its `EXTENSION_ID`. ## Update the version of an existing plugin [ec-extension-guide-update-version-plugin] -For plugins, `version` must match (exactly) the `elasticsearch.version` field defined in the plugin’s `plugin-descriptor.properties` file. Check [Help for plugin authors](https://www.elastic.co/guide/en/elasticsearch/plugins/current/plugin-authors.html#plugin-authors) for details. If you change the version, the associated plugin file *must* also be updated accordingly. +For plugins, `version` must match (exactly) the `elasticsearch.version` field defined in the plugin’s `plugin-descriptor.properties` file. Check [Help for plugin authors](asciidocalypse://docs/elasticsearch/docs/extend/create-elasticsearch-plugins/index.md#plugin-authors) for details. If you change the version, the associated plugin file *must* also be updated accordingly. ## Update the file associated to an existing extension [ec-extension-guide-update-file] diff --git a/deploy-manage/deploy/elastic-cloud/restrictions-known-problems.md b/deploy-manage/deploy/elastic-cloud/restrictions-known-problems.md index 0547b1e9a..1d8fa8e6a 100644 --- a/deploy-manage/deploy/elastic-cloud/restrictions-known-problems.md +++ b/deploy-manage/deploy/elastic-cloud/restrictions-known-problems.md @@ -39,12 +39,12 @@ To learn more about the features that are supported by Elasticsearch Service, ch The following restrictions apply when using APIs in Elasticsearch Service: Elasticsearch Service API -: The Elasticsearch Service API is subject to a restriction on the volume of API requests that can be submitted per user, per second. Check [Rate limiting](https://www.elastic.co/guide/en/cloud/current/ec-api-rate-limiting.html) for details. +: The Elasticsearch Service API is subject to a restriction on the volume of API requests that can be submitted per user, per second. Check [Rate limiting](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-api-rate-limiting.md) for details. $$$ec-restrictions-apis-elasticsearch$$$ Elasticsearch APIs -: The Elasticsearch APIs do not natively enforce rate limiting. However, all requests to the Elasticsearch cluster are subject to Elasticsearch configuration settings, such as the [network HTTP setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#http-settings) `http:max_content_length` which restricts the maximum size of an HTTP request body. This setting has a default value of 100MB, hence restricting API request payloads to that size. This setting is not currently configurable in Elasticsearch Service. For a list of which Elasticsearch settings are supported on Cloud, check [Add Elasticsearch user settings](edit-stack-settings.md). To learn about using the Elasticsearch APIs in Elasticsearch Service, check [Access the Elasticsearch API console](https://www.elastic.co/guide/en/cloud/current/ec-api-console.html). And, for full details about the Elasticsearch APIs and their endpoints, check the [Elasticsearch API reference documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html). +: The Elasticsearch APIs do not natively enforce rate limiting. However, all requests to the Elasticsearch cluster are subject to Elasticsearch configuration settings, such as the [network HTTP setting](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#http-settings) `http:max_content_length` which restricts the maximum size of an HTTP request body. This setting has a default value of 100MB, hence restricting API request payloads to that size. This setting is not currently configurable in Elasticsearch Service. For a list of which Elasticsearch settings are supported on Cloud, check [Add Elasticsearch user settings](edit-stack-settings.md). To learn about using the Elasticsearch APIs in Elasticsearch Service, check [Access the Elasticsearch API console](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-api-console.md). And, for full details about the Elasticsearch APIs and their endpoints, check the [Elasticsearch API reference documentation](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/index.md). $$$ec-restrictions-apis-kibana$$$ @@ -93,14 +93,14 @@ Currently you can’t use SSO to login directly from {{ecloud}} into Kibana endp ## Kibana [ec-restrictions-kibana] * The maximum size of a single {{kib}} instance is 8GB. This means, {{kib}} instances can be scaled up to 8GB before they are scaled out. For example, when creating a deployment with a {{kib}} instance of size 16GB, then 2x8GB instances are created. If you face performance issues with {{kib}} PNG or PDF reports, the recommendations are to create multiple, smaller dashboards to export the data, or to use a third party browser extension for exporting the dashboard in the format you need. -* Running an external Kibana in parallel to Elasticsearch Service’s Kibana instances may cause errors, for example [`Unable to decrypt attribute`](../../../explore-analyze/alerts-cases/alerts/alerting-common-issues.md#rule-cannot-decrypt-api-key), due to a mismatched [`xpack.encryptedSavedObjects.encryptionKey`](https://www.elastic.co/guide/en/kibana/current/security-settings-kb.html#security-encrypted-saved-objects-settings) as Elasticsearch Service does not [allow users to set](edit-stack-settings.md) nor expose this value. While workarounds are possible, this is not officially supported nor generally recommended. +* Running an external Kibana in parallel to Elasticsearch Service’s Kibana instances may cause errors, for example [`Unable to decrypt attribute`](../../../explore-analyze/alerts-cases/alerts/alerting-common-issues.md#rule-cannot-decrypt-api-key), due to a mismatched [`xpack.encryptedSavedObjects.encryptionKey`](asciidocalypse://docs/kibana/docs/reference/configuration-reference/security-settings.md#security-encrypted-saved-objects-settings) as Elasticsearch Service does not [allow users to set](edit-stack-settings.md) nor expose this value. While workarounds are possible, this is not officially supported nor generally recommended. ## APM Agent central configuration with PrivateLink or traffic filters [ec-restrictions-apm-traffic-filters] If you are using APM 7.9.0 or older: -* You cannot use [APM Agent central configuration](https://www.elastic.co/guide/en/observability/current/apm-agent-configuration.html) if your deployment is secured by [traffic filters](../../security/traffic-filtering.md). +* You cannot use [APM Agent central configuration](/solutions/observability/apps/apm-agent-central-configuration.md) if your deployment is secured by [traffic filters](../../security/traffic-filtering.md). * If you access your APM deployment over [PrivateLink](../../security/aws-privatelink-traffic-filters.md), to use APM Agent central configuration you need to allow access to the APM deployment over public internet. @@ -113,7 +113,7 @@ If you are using APM 7.9.0 or older: Kibana does not currently support restoring a snapshot of their indices across Elastic Cloud deployments. -* [Kibana uses encryption keys](https://www.elastic.co/guide/en/kibana/current/using-kibana-with-security.html#security-configure-settings) in various places, ranging from encrypting data in some areas of reporting, alerts, actions, connector tokens, ingest outputs used in Fleet and Synthetics monitoring to user sessions. +* [Kibana uses encryption keys](/deploy-manage/security/secure-your-cluster-deployment.md#security-configure-settings) in various places, ranging from encrypting data in some areas of reporting, alerts, actions, connector tokens, ingest outputs used in Fleet and Synthetics monitoring to user sessions. * Currently, there is not a way to retrieve the values of Kibana encryption keys, or set them in the target deployment before restoring a snapshot. As a result, once a snapshot is restored, Kibana will not be able to decrypt the data required for some features to function properly in the target deployment. * If you have already restored a snapshot across deployments and now have broken Kibana saved objects in the target deployment, you will have to recreate all broken configurations and objects, or create a new setup in the target deployment instead of using snapshot restore. @@ -128,7 +128,7 @@ There are situations where you may need or want to move your installed {{agents} In {{ecloud}}, you can migrate your {{agents}} by taking a snapshot of your source deployment, and restoring it on a target deployment. -To make a seamless migration, after restoring from a snapshot there are some additional steps required, such as updating settings and resetting the agent policy. Check [Migrate Elastic Agents](https://www.elastic.co/guide/en/fleet/current/migrate-elastic-agent.html) for details. +To make a seamless migration, after restoring from a snapshot there are some additional steps required, such as updating settings and resetting the agent policy. Check [Migrate Elastic Agents](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/migrate-elastic-agent.md) for details. ## Regions and Availability Zones [ec-regions-and-availability-zone] diff --git a/deploy-manage/deploy/elastic-cloud/switch-from-apm-to-integrations-server-payload.md b/deploy-manage/deploy/elastic-cloud/switch-from-apm-to-integrations-server-payload.md index 04ff45f43..698fccd79 100644 --- a/deploy-manage/deploy/elastic-cloud/switch-from-apm-to-integrations-server-payload.md +++ b/deploy-manage/deploy/elastic-cloud/switch-from-apm-to-integrations-server-payload.md @@ -376,7 +376,7 @@ Beginning with Elastic Stack version 8.0, [Integrations Server](manage-integrati :::: -You have the option to add a combined [Application Performance Monitoring (APM) Server](/solutions/observability/apps/application-performance-monitoring-apm.md) and [Fleet Server](https://www.elastic.co/guide/en/fleet/current/fleet-overview.html) to your deployment. APM allows you to monitor software services and applications in real time, turning that data into documents stored in the Elasticsearch cluster. Fleet allows you to centrally manage Elastic Agents on many hosts. +You have the option to add a combined [Application Performance Monitoring (APM) Server](/solutions/observability/apps/application-performance-monitoring-apm.md) and [Fleet Server](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/index.md) to your deployment. APM allows you to monitor software services and applications in real time, turning that data into documents stored in the Elasticsearch cluster. Fleet allows you to centrally manage Elastic Agents on many hosts. As part of provisioning, the APM Server and Fleet Server are already configured to work with Elasticsearch and Kibana. At the end of provisioning, you are shown the secret token to configure communication between the APM Server and the backend [APM Agents](https://www.elastic.co/guide/en/apm/agent/index.html). The APM Agents get deployed within your services and applications. diff --git a/deploy-manage/deploy/self-managed/bootstrap-checks-heap-size.md b/deploy-manage/deploy/self-managed/bootstrap-checks-heap-size.md index 17265c22b..36abba2ff 100644 --- a/deploy-manage/deploy/self-managed/bootstrap-checks-heap-size.md +++ b/deploy-manage/deploy/self-managed/bootstrap-checks-heap-size.md @@ -5,5 +5,5 @@ mapped_pages: # Heap size check [bootstrap-checks-heap-size] -By default, {{es}} automatically sizes JVM heap based on a node’s [roles](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#node-roles) and total memory. If you manually override the default sizing and start the JVM with different initial and max heap sizes, the JVM may pause as it resizes the heap during system usage. If you enable [`bootstrap.memory_lock`](setup-configuration-memory.md#bootstrap-memory_lock), the JVM locks the initial heap size on startup. If the initial heap size is not equal to the maximum heap size, some JVM heap may not be locked after a resize. To avoid these issues, start the JVM with an initial heap size equal to the maximum heap size. +By default, {{es}} automatically sizes JVM heap based on a node’s [roles](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md#node-roles) and total memory. If you manually override the default sizing and start the JVM with different initial and max heap sizes, the JVM may pause as it resizes the heap during system usage. If you enable [`bootstrap.memory_lock`](setup-configuration-memory.md#bootstrap-memory_lock), the JVM locks the initial heap size on startup. If the initial heap size is not equal to the maximum heap size, some JVM heap may not be locked after a resize. To avoid these issues, start the JVM with an initial heap size equal to the maximum heap size. diff --git a/deploy-manage/deploy/self-managed/bootstrap-checks-max-map-count.md b/deploy-manage/deploy/self-managed/bootstrap-checks-max-map-count.md index d7a3af443..2e0808a41 100644 --- a/deploy-manage/deploy/self-managed/bootstrap-checks-max-map-count.md +++ b/deploy-manage/deploy/self-managed/bootstrap-checks-max-map-count.md @@ -7,5 +7,5 @@ mapped_pages: Continuing from the previous [point](max-size-virtual-memory-check.md), to use `mmap` effectively, Elasticsearch also requires the ability to create many memory-mapped areas. The maximum map count check checks that the kernel allows a process to have at least 262,144 memory-mapped areas and is enforced on Linux only. To pass the maximum map count check, you must configure `vm.max_map_count` via `sysctl` to be at least `262144`. -Alternatively, the maximum map count check is only needed if you are using `mmapfs` or `hybridfs` as the [store type](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-store.html) for your indices. If you [do not allow](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-store.html#allow-mmap) the use of `mmap` then this bootstrap check will not be enforced. +Alternatively, the maximum map count check is only needed if you are using `mmapfs` or `hybridfs` as the [store type](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index-store-settings.md) for your indices. If you [do not allow](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index-store-settings.md#allow-mmap) the use of `mmap` then this bootstrap check will not be enforced. diff --git a/deploy-manage/deploy/self-managed/configure.md b/deploy-manage/deploy/self-managed/configure.md index 54ef1b25e..18b639d83 100644 --- a/deploy-manage/deploy/self-managed/configure.md +++ b/deploy-manage/deploy/self-managed/configure.md @@ -185,7 +185,7 @@ $$$elasticsearch-service-account-token$$$ `elasticsearch.serviceAccountToken` : Maximum number of documents loaded by each shard to generate autocomplete suggestions. This value must be a whole number greater than zero. **Default: `"100000"`** ::::{note} - To reload the [logging settings](https://www.elastic.co/guide/en/kibana/current/logging-settings.html), send a SIGHUP signal to {{kib}}. For more logging configuration options, see the [Configure Logging in {{kib}}](../../monitor/logging-configuration/kibana-logging.md) guide. + To reload the [logging settings](asciidocalypse://docs/kibana/docs/reference/configuration-reference/logging-settings.md), send a SIGHUP signal to {{kib}}. For more logging configuration options, see the [Configure Logging in {{kib}}](../../monitor/logging-configuration/kibana-logging.md) guide. :::: @@ -262,7 +262,7 @@ $$$tilemap-url$$$ `map.tilemap.url` ![logo cloud](https://doc-icons.s3.us-east-2 : [preview] Indicates which roles to configure the {{kib}} process with, which will effectively run {{kib}} in different modes. Valid options are `background_tasks` and `ui`, or `*` to select all roles. **Default: `*`** `notifications.connectors.default.email` -: Choose the default email connector for user notifications. As of `8.6.0`, {{kib}} is shipping with a new notification mechanism that will send email notifications for various user actions, e.g. assigning a *Case* to a user. To enable notifications, an email connector must be [preconfigured](https://www.elastic.co/guide/en/kibana/current/pre-configured-connectors.html) in the system via `kibana.yml`, and the notifications plugin must be configured to point to the ID of that connector. +: Choose the default email connector for user notifications. As of `8.6.0`, {{kib}} is shipping with a new notification mechanism that will send email notifications for various user actions, e.g. assigning a *Case* to a user. To enable notifications, an email connector must be [preconfigured](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/pre-configured-connectors.md) in the system via `kibana.yml`, and the notifications plugin must be configured to point to the ID of that connector. $$$path-data$$$ `path.data` : The path where {{kib}} stores persistent data not saved in {{es}}. **Default: `data`** @@ -472,12 +472,12 @@ $$$settings-xsrf-disableProtection$$$ `server.xsrf.disableProtection` : If authentication is enabled, setting this to `true` enables unauthenticated users to access the {{kib}} server status API and status page. **Default: `false`** $$$telemetry-allowChangingOptInStatus$$$ `telemetry.allowChangingOptInStatus` -: When `false`, users cannot change the opt-in status through [Advanced Settings](https://www.elastic.co/guide/en/kibana/current/advanced-options.html), and {{kib}} only looks at the value of [`telemetry.optIn`](#settings-telemetry-optIn) to determine whether to send telemetry data or not. **Default: `true`**. +: When `false`, users cannot change the opt-in status through [Advanced Settings](asciidocalypse://docs/kibana/docs/reference/advanced-settings.md), and {{kib}} only looks at the value of [`telemetry.optIn`](#settings-telemetry-optIn) to determine whether to send telemetry data or not. **Default: `true`**. $$$settings-telemetry-optIn$$$ `telemetry.optIn` : Set to `false` to stop sending any telemetry data to Elastic. Reporting your cluster statistics helps us improve your user experience. When `false`, the telemetry data is never sent to Elastic.
- This setting can be changed at any time in [Advanced Settings](https://www.elastic.co/guide/en/kibana/current/advanced-options.html). To prevent users from changing it, set [`telemetry.allowChangingOptInStatus`](#telemetry-allowChangingOptInStatus) to `false`. **Default: `true`** + This setting can be changed at any time in [Advanced Settings](asciidocalypse://docs/kibana/docs/reference/advanced-settings.md). To prevent users from changing it, set [`telemetry.allowChangingOptInStatus`](#telemetry-allowChangingOptInStatus) to `false`. **Default: `true`** `vis_type_vega.enableExternalUrls` ![logo cloud](https://doc-icons.s3.us-east-2.amazonaws.com/logo_cloud.svg "Supported on {{ess}}") diff --git a/deploy-manage/deploy/self-managed/executable-jna-tmpdir.md b/deploy-manage/deploy/self-managed/executable-jna-tmpdir.md index cd4f8f7e5..40847b987 100644 --- a/deploy-manage/deploy/self-managed/executable-jna-tmpdir.md +++ b/deploy-manage/deploy/self-managed/executable-jna-tmpdir.md @@ -30,7 +30,7 @@ To resolve these problems, either remove the `noexec` option from your `/tmp` fi ``` -If you need finer control over the location of these temporary files, you can also configure the path that JNA uses with the [JVM flag](https://www.elastic.co/guide/en/elasticsearch/reference/current/advanced-configuration.html#set-jvm-options) `-Djna.tmpdir=` and you can configure the path that `libffi` uses for its temporary files by setting the `LIBFFI_TMPDIR` environment variable. Future versions of {{es}} may need additional configuration, so you should prefer to set `ES_TMPDIR` wherever possible. +If you need finer control over the location of these temporary files, you can also configure the path that JNA uses with the [JVM flag](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/jvm-settings.md#set-jvm-options) `-Djna.tmpdir=` and you can configure the path that `libffi` uses for its temporary files by setting the `LIBFFI_TMPDIR` environment variable. Future versions of {{es}} may need additional configuration, so you should prefer to set `ES_TMPDIR` wherever possible. ::::{note} {{es}} does not remove its temporary directory. You should remove leftover temporary directories while {{es}} is not running. It is best to do this automatically, for instance on each reboot. If you are running on Linux, you can achieve this by using the [tmpfs](https://www.kernel.org/doc/html/latest/filesystems/tmpfs.md) file system. diff --git a/deploy-manage/deploy/self-managed/important-settings-configuration.md b/deploy-manage/deploy/self-managed/important-settings-configuration.md index 8f824593c..e3a877408 100644 --- a/deploy-manage/deploy/self-managed/important-settings-configuration.md +++ b/deploy-manage/deploy/self-managed/important-settings-configuration.md @@ -8,15 +8,15 @@ mapped_pages: {{es}} requires very little configuration to get started, but there are a number of items which **must** be considered before using your cluster in production: * [Path settings](#path-settings) -* [Cluster name setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/misc-cluster-settings.html#cluster-name) +* [Cluster name setting](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/miscellaneous-cluster-settings.md#cluster-name) * [Node name setting](#node-name) * [Network host settings](#network.host) * [Discovery settings](#discovery-settings) * [Heap size settings](#heap-size-settings) * [JVM heap dump path setting](#heap-dump-path) -* [GC logging settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/advanced-configuration.html#gc-logging) +* [GC logging settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/jvm-settings.md#gc-logging) * [Temporary directory settings](#es-tmpdir) -* [JVM fatal error log setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/advanced-configuration.html#error-file-path) +* [JVM fatal error log setting](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/jvm-settings.md#error-file-path) * [Cluster backups](#important-settings-backups) Our [{{ecloud}}](https://cloud.elastic.co/registration?page=docs&placement=docs-body) service configures these items automatically, making your cluster production-ready by default. @@ -60,7 +60,7 @@ Don’t modify anything within the data directory or run processes that might in :::: -Elasticsearch offers a deprecated setting that allows you to specify multiple paths in `path.data`. To learn about this setting, and how to migrate away from it, refer to [Multiple data paths](https://www.elastic.co/guide/en/elasticsearch/reference/current/path-settings-overview.html#multiple-data-paths). +Elasticsearch offers a deprecated setting that allows you to specify multiple paths in `path.data`. To learn about this setting, and how to migrate away from it, refer to [Multiple data paths](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/path-settings.md#multiple-data-paths). ## Cluster name setting [_cluster_name_setting] @@ -93,7 +93,7 @@ node.name: prod-data-2 ## Network host setting [network.host] -By default, {{es}} only binds to loopback addresses such as `127.0.0.1` and `[::1]`. This is sufficient to run a cluster of one or more nodes on a single server for development and testing, but a [resilient production cluster](../../production-guidance/availability-and-resilience.md) must involve nodes on other servers. There are many [network settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html) but usually all you need to configure is `network.host`: +By default, {{es}} only binds to loopback addresses such as `127.0.0.1` and `[::1]`. This is sufficient to run a cluster of one or more nodes on a single server for development and testing, but a [resilient production cluster](../../production-guidance/availability-and-resilience.md) must involve nodes on other servers. There are many [network settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md) but usually all you need to configure is `network.host`: ```yaml network.host: 192.168.1.10 @@ -158,21 +158,21 @@ cluster.initial_master_nodes: <1> 1. Identify the initial master nodes by their [`node.name`](#node-name), which defaults to their hostname. Ensure that the value in `cluster.initial_master_nodes` matches the `node.name` exactly. If you use a fully-qualified domain name (FQDN) such as `master-node-a.example.com` for your node names, then you must use the FQDN in this list. Conversely, if `node.name` is a bare hostname without any trailing qualifiers, you must also omit the trailing qualifiers in `cluster.initial_master_nodes`. -See [bootstrapping a cluster](../../distributed-architecture/discovery-cluster-formation/modules-discovery-bootstrap-cluster.md) and [discovery and cluster formation settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-settings.html). +See [bootstrapping a cluster](../../distributed-architecture/discovery-cluster-formation/modules-discovery-bootstrap-cluster.md) and [discovery and cluster formation settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/discovery-cluster-formation-settings.md). ## Heap size settings [heap-size-settings] -By default, {{es}} automatically sets the JVM heap size based on a node’s [roles](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#node-roles) and total memory. We recommend the default sizing for most production environments. +By default, {{es}} automatically sets the JVM heap size based on a node’s [roles](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md#node-roles) and total memory. We recommend the default sizing for most production environments. -If needed, you can override the default sizing by manually [setting the JVM heap size](https://www.elastic.co/guide/en/elasticsearch/reference/current/advanced-configuration.html#set-jvm-heap-size). +If needed, you can override the default sizing by manually [setting the JVM heap size](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/jvm-settings.md#set-jvm-heap-size). ## JVM heap dump path setting [heap-dump-path] By default, {{es}} configures the JVM to dump the heap on out of memory exceptions to the default data directory. On [RPM](install-elasticsearch-with-rpm.md) and [Debian](install-elasticsearch-with-debian-package.md) packages, the data directory is `/var/lib/elasticsearch`. On [Linux and MacOS](install-elasticsearch-from-archive-on-linux-macos.md) and [Windows](install-elasticsearch-with-zip-on-windows.md) distributions, the `data` directory is located under the root of the {{es}} installation. -If this path is not suitable for receiving heap dumps, modify the `-XX:HeapDumpPath=...` entry in [`jvm.options`](https://www.elastic.co/guide/en/elasticsearch/reference/current/advanced-configuration.html#set-jvm-options): +If this path is not suitable for receiving heap dumps, modify the `-XX:HeapDumpPath=...` entry in [`jvm.options`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/jvm-settings.md#set-jvm-options): * If you specify a directory, the JVM will generate a filename for the heap dump based on the PID of the running instance. * If you specify a fixed filename instead of a directory, the file must not exist when the JVM needs to perform a heap dump on an out of memory exception. Otherwise, the heap dump will fail. @@ -180,7 +180,7 @@ If this path is not suitable for receiving heap dumps, modify the `-XX:HeapDumpP ## GC logging settings [_gc_logging_settings] -By default, {{es}} enables garbage collection (GC) logs. These are configured in [`jvm.options`](https://www.elastic.co/guide/en/elasticsearch/reference/current/advanced-configuration.html#set-jvm-options) and output to the same default location as the {{es}} logs. The default configuration rotates the logs every 64 MB and can consume up to 2 GB of disk space. +By default, {{es}} enables garbage collection (GC) logs. These are configured in [`jvm.options`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/jvm-settings.md#set-jvm-options) and output to the same default location as the {{es}} logs. The default configuration rotates the logs every 64 MB and can consume up to 2 GB of disk space. You can reconfigure JVM logging using the command line options described in [JEP 158: Unified JVM Logging](https://openjdk.java.net/jeps/158). Unless you change the default `jvm.options` file directly, the {{es}} default configuration is applied in addition to your own settings. To disable the default configuration, first disable logging by supplying the `-Xlog:disable` option, then supply your own command line options. This disables *all* JVM logging, so be sure to review the available options and enable everything that you require. @@ -225,7 +225,7 @@ If you intend to run the `.tar.gz` distribution on Linux or MacOS for an extende By default, {{es}} configures the JVM to write fatal error logs to the default logging directory. On [RPM](install-elasticsearch-with-rpm.md) and [Debian](install-elasticsearch-with-debian-package.md) packages, this directory is `/var/log/elasticsearch`. On [Linux and MacOS](install-elasticsearch-from-archive-on-linux-macos.md) and [Windows](install-elasticsearch-with-zip-on-windows.md) distributions, the `logs` directory is located under the root of the {{es}} installation. -These are logs produced by the JVM when it encounters a fatal error, such as a segmentation fault. If this path is not suitable for receiving logs, modify the `-XX:ErrorFile=...` entry in [`jvm.options`](https://www.elastic.co/guide/en/elasticsearch/reference/current/advanced-configuration.html#set-jvm-options). +These are logs produced by the JVM when it encounters a fatal error, such as a segmentation fault. If this path is not suitable for receiving logs, modify the `-XX:ErrorFile=...` entry in [`jvm.options`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/jvm-settings.md#set-jvm-options). ## Cluster backups [important-settings-backups] diff --git a/deploy-manage/deploy/self-managed/install-elasticsearch-from-archive-on-linux-macos.md b/deploy-manage/deploy/self-managed/install-elasticsearch-from-archive-on-linux-macos.md index d239d7fb9..55c1c4f0f 100644 --- a/deploy-manage/deploy/self-managed/install-elasticsearch-from-archive-on-linux-macos.md +++ b/deploy-manage/deploy/self-managed/install-elasticsearch-from-archive-on-linux-macos.md @@ -7,7 +7,7 @@ mapped_pages: {{es}} is available as a `.tar.gz` archive for Linux and MacOS. -This package contains both free and subscription features. [Start a 30-day trial](https://www.elastic.co/guide/en/elasticsearch/reference/current/license-settings.html) to try out all of the features. +This package contains both free and subscription features. [Start a 30-day trial](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/license-settings.md) to try out all of the features. The latest stable version of {{es}} can be found on the [Download {{es}}](https://elastic.co/downloads/elasticsearch) page. Other versions can be found on the [Past Releases page](https://elastic.co/downloads/past-releases). @@ -130,11 +130,11 @@ When {{es}} starts for the first time, the security auto-configuration process b Before enrolling a new node, additional actions such as binding to an address other than `localhost` or satisfying bootstrap checks are typically necessary in production clusters. During that time, an auto-generated enrollment token could expire, which is why enrollment tokens aren’t generated automatically. -Additionally, only nodes on the same host can join the cluster without additional configuration. If you want nodes from another host to join your cluster, you need to set `transport.host` to a [supported value](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#network-interface-values) (such as uncommenting the suggested value of `0.0.0.0`), or an IP address that’s bound to an interface where other hosts can reach it. Refer to [transport settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#transport-settings) for more information. +Additionally, only nodes on the same host can join the cluster without additional configuration. If you want nodes from another host to join your cluster, you need to set `transport.host` to a [supported value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#network-interface-values) (such as uncommenting the suggested value of `0.0.0.0`), or an IP address that’s bound to an interface where other hosts can reach it. Refer to [transport settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#transport-settings) for more information. To enroll new nodes in your cluster, create an enrollment token with the `elasticsearch-create-enrollment-token` tool on any existing node in your cluster. You can then start a new node with the `--enrollment-token` parameter so that it joins an existing cluster. -1. In a separate terminal from where {{es}} is running, navigate to the directory where you installed {{es}} and run the [`elasticsearch-create-enrollment-token`](https://www.elastic.co/guide/en/elasticsearch/reference/current/create-enrollment-token.html) tool to generate an enrollment token for your new nodes. +1. In a separate terminal from where {{es}} is running, navigate to the directory where you installed {{es}} and run the [`elasticsearch-create-enrollment-token`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/create-enrollment-token.md) tool to generate an enrollment token for your new nodes. ```sh bin/elasticsearch-create-enrollment-token -s node @@ -307,7 +307,7 @@ When you install {{es}}, the following certificates and keys are generated in th `transport.p12` : Keystore that contains the key and certificate for the transport layer for all the nodes in your cluster. -`http.p12` and `transport.p12` are password-protected PKCS#12 keystores. {{es}} stores the passwords for these keystores as [secure settings](../../security/secure-settings.md). To retrieve the passwords so that you can inspect or change the keystore contents, use the [`bin/elasticsearch-keystore`](https://www.elastic.co/guide/en/elasticsearch/reference/current/elasticsearch-keystore.html) tool. +`http.p12` and `transport.p12` are password-protected PKCS#12 keystores. {{es}} stores the passwords for these keystores as [secure settings](../../security/secure-settings.md). To retrieve the passwords so that you can inspect or change the keystore contents, use the [`bin/elasticsearch-keystore`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/elasticsearch-keystore.md) tool. Use the following command to retrieve the password for `http.p12`: diff --git a/deploy-manage/deploy/self-managed/install-elasticsearch-with-debian-package.md b/deploy-manage/deploy/self-managed/install-elasticsearch-with-debian-package.md index 70e5c548b..dab8ea2e5 100644 --- a/deploy-manage/deploy/self-managed/install-elasticsearch-with-debian-package.md +++ b/deploy-manage/deploy/self-managed/install-elasticsearch-with-debian-package.md @@ -7,7 +7,7 @@ mapped_pages: The Debian package for Elasticsearch can be [downloaded from our website](#install-deb) or from our [APT repository](#deb-repo). It can be used to install Elasticsearch on any Debian-based system such as Debian and Ubuntu. -This package contains both free and subscription features. [Start a 30-day trial](https://www.elastic.co/guide/en/elasticsearch/reference/current/license-settings.html) to try out all of the features. +This package contains both free and subscription features. [Start a 30-day trial](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/license-settings.md) to try out all of the features. The latest stable version of Elasticsearch can be found on the [Download Elasticsearch](https://elastic.co/downloads/elasticsearch) page. Other versions can be found on the [Past Releases page](https://elastic.co/downloads/past-releases). @@ -78,7 +78,7 @@ When installing {{es}}, security features are enabled and configured by default. * Authentication and authorization are enabled, and a password is generated for the `elastic` built-in superuser. * Certificates and keys for TLS are generated for the transport and HTTP layer, and TLS is enabled and configured with these keys and certificates. -The password and certificate and keys are output to your terminal. You can reset the password for the `elastic` user with the [`elasticsearch-reset-password`](https://www.elastic.co/guide/en/elasticsearch/reference/current/reset-password.html) command. +The password and certificate and keys are output to your terminal. You can reset the password for the `elastic` user with the [`elasticsearch-reset-password`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/reset-password.md) command. We recommend storing the `elastic` password as an environment variable in your shell. For example: @@ -340,7 +340,7 @@ When you install {{es}}, the following certificates and keys are generated in th `transport.p12` : Keystore that contains the key and certificate for the transport layer for all the nodes in your cluster. -`http.p12` and `transport.p12` are password-protected PKCS#12 keystores. {{es}} stores the passwords for these keystores as [secure settings](../../security/secure-settings.md). To retrieve the passwords so that you can inspect or change the keystore contents, use the [`bin/elasticsearch-keystore`](https://www.elastic.co/guide/en/elasticsearch/reference/current/elasticsearch-keystore.html) tool. +`http.p12` and `transport.p12` are password-protected PKCS#12 keystores. {{es}} stores the passwords for these keystores as [secure settings](../../security/secure-settings.md). To retrieve the passwords so that you can inspect or change the keystore contents, use the [`bin/elasticsearch-keystore`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/elasticsearch-keystore.md) tool. Use the following command to retrieve the password for `http.p12`: diff --git a/deploy-manage/deploy/self-managed/install-elasticsearch-with-docker.md b/deploy-manage/deploy/self-managed/install-elasticsearch-with-docker.md index 055030956..4d53003d0 100644 --- a/deploy-manage/deploy/self-managed/install-elasticsearch-with-docker.md +++ b/deploy-manage/deploy/self-managed/install-elasticsearch-with-docker.md @@ -7,7 +7,7 @@ mapped_pages: Docker images for {{es}} are available from the Elastic Docker registry. A list of all published Docker images and tags is available at [www.docker.elastic.co](https://www.docker.elastic.co). The source code is in [GitHub](https://github.com/elastic/elasticsearch/blob/master/distribution/docker). -This package contains both free and subscription features. [Start a 30-day trial](https://www.elastic.co/guide/en/elasticsearch/reference/current/license-settings.html) to try out all of the features. +This package contains both free and subscription features. [Start a 30-day trial](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/license-settings.md) to try out all of the features. ::::{tip} If you just want to test {{es}} in local development, refer to [Run {{es}} locally](../../../solutions/search/get-started.md). Please note that this setup is not suitable for production environments. @@ -452,9 +452,9 @@ The image [exposes](https://docs.docker.com/engine/reference/builder/#/expose) T ### Manually set the heap size [docker-set-heap-size] -By default, {{es}} automatically sizes JVM heap based on a nodes’s [roles](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#node-roles) and the total memory available to the node’s container. We recommend this default sizing for most production environments. If needed, you can override default sizing by manually setting JVM heap size. +By default, {{es}} automatically sizes JVM heap based on a nodes’s [roles](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md#node-roles) and the total memory available to the node’s container. We recommend this default sizing for most production environments. If needed, you can override default sizing by manually setting JVM heap size. -To manually set the heap size in production, bind mount a [JVM options](https://www.elastic.co/guide/en/elasticsearch/reference/current/advanced-configuration.html#set-jvm-options) file under `/usr/share/elasticsearch/config/jvm.options.d` that includes your desired [heap size](https://www.elastic.co/guide/en/elasticsearch/reference/current/advanced-configuration.html#set-jvm-heap-size) settings. +To manually set the heap size in production, bind mount a [JVM options](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/jvm-settings.md#set-jvm-options) file under `/usr/share/elasticsearch/config/jvm.options.d` that includes your desired [heap size](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/jvm-settings.md#set-jvm-heap-size) settings. For testing, you can also manually set the heap size using the `ES_JAVA_OPTS` environment variable. For example, to use 1GB, use the following command. @@ -595,7 +595,7 @@ Some plugins require additional security permissions. You must explicitly accept * Attaching a `tty` when you run the Docker image and allowing the permissions when prompted. * Inspecting the security permissions and accepting them (if appropriate) by adding the `--batch` flag to the plugin install command. -See [Plugin management](https://www.elastic.co/guide/en/elasticsearch/plugins/current/_other_command_line_parameters.html) for more information. +See [Plugin management](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch-plugins/_other_command_line_parameters.md) for more information. ### Troubleshoot Docker errors for {{es}} [troubleshoot-docker-errors] diff --git a/deploy-manage/deploy/self-managed/install-elasticsearch-with-rpm.md b/deploy-manage/deploy/self-managed/install-elasticsearch-with-rpm.md index 7c7667912..47010a425 100644 --- a/deploy-manage/deploy/self-managed/install-elasticsearch-with-rpm.md +++ b/deploy-manage/deploy/self-managed/install-elasticsearch-with-rpm.md @@ -12,7 +12,7 @@ RPM install is not supported on distributions with old versions of RPM, such as :::: -This package contains both free and subscription features. [Start a 30-day trial](https://www.elastic.co/guide/en/elasticsearch/reference/current/license-settings.html) to try out all of the features. +This package contains both free and subscription features. [Start a 30-day trial](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/license-settings.md) to try out all of the features. The latest stable version of Elasticsearch can be found on the [Download Elasticsearch](https://elastic.co/downloads/elasticsearch) page. Other versions can be found on the [Past Releases page](https://elastic.co/downloads/past-releases). @@ -82,7 +82,7 @@ When installing {{es}}, security features are enabled and configured by default. * Authentication and authorization are enabled, and a password is generated for the `elastic` built-in superuser. * Certificates and keys for TLS are generated for the transport and HTTP layer, and TLS is enabled and configured with these keys and certificates. -The password and certificate and keys are output to your terminal. You can reset the password for the `elastic` user with the [`elasticsearch-reset-password`](https://www.elastic.co/guide/en/elasticsearch/reference/current/reset-password.html) command. +The password and certificate and keys are output to your terminal. You can reset the password for the `elastic` user with the [`elasticsearch-reset-password`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/reset-password.md) command. We recommend storing the `elastic` password as an environment variable in your shell. For example: @@ -344,7 +344,7 @@ When you install {{es}}, the following certificates and keys are generated in th `transport.p12` : Keystore that contains the key and certificate for the transport layer for all the nodes in your cluster. -`http.p12` and `transport.p12` are password-protected PKCS#12 keystores. {{es}} stores the passwords for these keystores as [secure settings](../../security/secure-settings.md). To retrieve the passwords so that you can inspect or change the keystore contents, use the [`bin/elasticsearch-keystore`](https://www.elastic.co/guide/en/elasticsearch/reference/current/elasticsearch-keystore.html) tool. +`http.p12` and `transport.p12` are password-protected PKCS#12 keystores. {{es}} stores the passwords for these keystores as [secure settings](../../security/secure-settings.md). To retrieve the passwords so that you can inspect or change the keystore contents, use the [`bin/elasticsearch-keystore`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/elasticsearch-keystore.md) tool. Use the following command to retrieve the password for `http.p12`: diff --git a/deploy-manage/deploy/self-managed/install-elasticsearch-with-zip-on-windows.md b/deploy-manage/deploy/self-managed/install-elasticsearch-with-zip-on-windows.md index 066b87baa..4cdbe53c5 100644 --- a/deploy-manage/deploy/self-managed/install-elasticsearch-with-zip-on-windows.md +++ b/deploy-manage/deploy/self-managed/install-elasticsearch-with-zip-on-windows.md @@ -7,7 +7,7 @@ mapped_pages: {{es}} can be installed on Windows using the Windows `.zip` archive. This comes with a `elasticsearch-service.bat` command which will setup {{es}} to run as a service. -This package contains both free and subscription features. [Start a 30-day trial](https://www.elastic.co/guide/en/elasticsearch/reference/current/license-settings.html) to try out all of the features. +This package contains both free and subscription features. [Start a 30-day trial](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/license-settings.md) to try out all of the features. ::::{note} On Windows the {{es}} {{ml}} feature requires the Microsoft Universal C Runtime library. This is built into Windows 10, Windows Server 2016 and more recent versions of Windows. For older versions of Windows it can be installed via Windows Update, or from a [separate download](https://support.microsoft.com/en-us/help/2999226/update-for-universal-c-runtime-in-windows). If you cannot install the Microsoft Universal C Runtime library you can still use the rest of {{es}} if you disable the {{ml}} feature. @@ -87,11 +87,11 @@ When {{es}} starts for the first time, the security auto-configuration process b Before enrolling a new node, additional actions such as binding to an address other than `localhost` or satisfying bootstrap checks are typically necessary in production clusters. During that time, an auto-generated enrollment token could expire, which is why enrollment tokens aren’t generated automatically. -Additionally, only nodes on the same host can join the cluster without additional configuration. If you want nodes from another host to join your cluster, you need to set `transport.host` to a [supported value](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#network-interface-values) (such as uncommenting the suggested value of `0.0.0.0`), or an IP address that’s bound to an interface where other hosts can reach it. Refer to [transport settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#transport-settings) for more information. +Additionally, only nodes on the same host can join the cluster without additional configuration. If you want nodes from another host to join your cluster, you need to set `transport.host` to a [supported value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#network-interface-values) (such as uncommenting the suggested value of `0.0.0.0`), or an IP address that’s bound to an interface where other hosts can reach it. Refer to [transport settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#transport-settings) for more information. To enroll new nodes in your cluster, create an enrollment token with the `elasticsearch-create-enrollment-token` tool on any existing node in your cluster. You can then start a new node with the `--enrollment-token` parameter so that it joins an existing cluster. -1. In a separate terminal from where {{es}} is running, navigate to the directory where you installed {{es}} and run the [`elasticsearch-create-enrollment-token`](https://www.elastic.co/guide/en/elasticsearch/reference/current/create-enrollment-token.html) tool to generate an enrollment token for your new nodes. +1. In a separate terminal from where {{es}} is running, navigate to the directory where you installed {{es}} and run the [`elasticsearch-create-enrollment-token`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/create-enrollment-token.md) tool to generate an enrollment token for your new nodes. ```sh bin\elasticsearch-create-enrollment-token -s node @@ -194,7 +194,7 @@ You can install {{es}} as a service that runs in the background or starts automa TLS is not enabled or configured when you start {{es}} as a service. :::: -3. Generate a password for the `elastic` user with the [`elasticsearch-reset-password`](https://www.elastic.co/guide/en/elasticsearch/reference/current/reset-password.html) tool. The password is output to the command line. +3. Generate a password for the `elastic` user with the [`elasticsearch-reset-password`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/reset-password.md) tool. The password is output to the command line. ```sh C:\Program Files\elasticsearch-9.0.0-beta1\bin>\bin\elasticsearch-reset-password -u elastic @@ -284,9 +284,9 @@ At its core, `elasticsearch-service.bat` relies on [Apache Commons Daemon](https ::::{note} -By default, {{es}} automatically sizes JVM heap based on a node’s [roles](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#node-roles) and total memory. We recommend this default sizing for most production environments. If needed, you can override default sizing by manually setting the heap size. +By default, {{es}} automatically sizes JVM heap based on a node’s [roles](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md#node-roles) and total memory. We recommend this default sizing for most production environments. If needed, you can override default sizing by manually setting the heap size. -When installing {{es}} on Windows as a service for the first time or running {{es}} from the command line, you can manually [Set the JVM heap size](https://www.elastic.co/guide/en/elasticsearch/reference/current/advanced-configuration.html#set-jvm-heap-size). To resize the heap for an already installed service, use the service manager: `bin\elasticsearch-service.bat manager`. +When installing {{es}} on Windows as a service for the first time or running {{es}} from the command line, you can manually [Set the JVM heap size](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/jvm-settings.md#set-jvm-heap-size). To resize the heap for an already installed service, use the service manager: `bin\elasticsearch-service.bat manager`. :::: diff --git a/deploy-manage/deploy/self-managed/install-from-archive-on-linux-macos.md b/deploy-manage/deploy/self-managed/install-from-archive-on-linux-macos.md index a05a8bc0a..dc8991e99 100644 --- a/deploy-manage/deploy/self-managed/install-from-archive-on-linux-macos.md +++ b/deploy-manage/deploy/self-managed/install-from-archive-on-linux-macos.md @@ -77,7 +77,7 @@ If this is the first time you’re starting {{kib}}, this command generates a un 3. Log in to {{kib}} as the `elastic` user with the password that was generated when you started {{es}}. ::::{note} -If you need to reset the password for the `elastic` user or other built-in users, run the [`elasticsearch-reset-password`](https://www.elastic.co/guide/en/elasticsearch/reference/current/reset-password.html) tool. To generate new enrollment tokens for {{kib}} or {{es}} nodes, run the [`elasticsearch-create-enrollment-token`](https://www.elastic.co/guide/en/elasticsearch/reference/current/create-enrollment-token.html) tool. These tools are available in the {{es}} `bin` directory. +If you need to reset the password for the `elastic` user or other built-in users, run the [`elasticsearch-reset-password`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/reset-password.md) tool. To generate new enrollment tokens for {{kib}} or {{es}} nodes, run the [`elasticsearch-create-enrollment-token`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/create-enrollment-token.md) tool. These tools are available in the {{es}} `bin` directory. :::: diff --git a/deploy-manage/deploy/self-managed/install-on-windows.md b/deploy-manage/deploy/self-managed/install-on-windows.md index baf906355..cd2e52e71 100644 --- a/deploy-manage/deploy/self-managed/install-on-windows.md +++ b/deploy-manage/deploy/self-managed/install-on-windows.md @@ -50,7 +50,7 @@ If this is the first time you’re starting {{kib}}, this command generates a un 3. Log in to {{kib}} as the `elastic` user with the password that was generated when you started {{es}}. ::::{note} -If you need to reset the password for the `elastic` user or other built-in users, run the [`elasticsearch-reset-password`](https://www.elastic.co/guide/en/elasticsearch/reference/current/reset-password.html) tool. To generate new enrollment tokens for {{kib}} or {{es}} nodes, run the [`elasticsearch-create-enrollment-token`](https://www.elastic.co/guide/en/elasticsearch/reference/current/create-enrollment-token.html) tool. These tools are available in the {{es}} `bin` directory. +If you need to reset the password for the `elastic` user or other built-in users, run the [`elasticsearch-reset-password`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/reset-password.md) tool. To generate new enrollment tokens for {{kib}} or {{es}} nodes, run the [`elasticsearch-create-enrollment-token`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/create-enrollment-token.md) tool. These tools are available in the {{es}} `bin` directory. :::: diff --git a/deploy-manage/deploy/self-managed/install-with-debian-package.md b/deploy-manage/deploy/self-managed/install-with-debian-package.md index c594547e3..0316337fa 100644 --- a/deploy-manage/deploy/self-managed/install-with-debian-package.md +++ b/deploy-manage/deploy/self-managed/install-with-debian-package.md @@ -49,7 +49,7 @@ When you start {{es}} for the first time, the following security configuration o The password and certificate and keys are output to your terminal. -You can then generate an enrollment token for {{kib}} with the [`elasticsearch-create-enrollment-token`](https://www.elastic.co/guide/en/elasticsearch/reference/current/create-enrollment-token.html) tool: +You can then generate an enrollment token for {{kib}} with the [`elasticsearch-create-enrollment-token`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/create-enrollment-token.md) tool: ```sh bin/elasticsearch-create-enrollment-token -s kibana diff --git a/deploy-manage/deploy/self-managed/install-with-rpm.md b/deploy-manage/deploy/self-managed/install-with-rpm.md index 277d94412..ce62ded7e 100644 --- a/deploy-manage/deploy/self-managed/install-with-rpm.md +++ b/deploy-manage/deploy/self-managed/install-with-rpm.md @@ -59,7 +59,7 @@ When you start {{es}} for the first time, the following security configuration o The password and certificate and keys are output to your terminal. -You can then generate an enrollment token for {{kib}} with the [`elasticsearch-create-enrollment-token`](https://www.elastic.co/guide/en/elasticsearch/reference/current/create-enrollment-token.html) tool: +You can then generate an enrollment token for {{kib}} with the [`elasticsearch-create-enrollment-token`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/create-enrollment-token.md) tool: ```sh bin/elasticsearch-create-enrollment-token -s kibana diff --git a/deploy-manage/deploy/self-managed/max-number-threads-check.md b/deploy-manage/deploy/self-managed/max-number-threads-check.md index 13f84ff37..121251822 100644 --- a/deploy-manage/deploy/self-managed/max-number-threads-check.md +++ b/deploy-manage/deploy/self-managed/max-number-threads-check.md @@ -5,5 +5,5 @@ mapped_pages: # Maximum number of threads check [max-number-threads-check] -Elasticsearch executes requests by breaking the request down into stages and handing those stages off to different thread pool executors. There are different [thread pool executors](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-threadpool.html) for a variety of tasks within Elasticsearch. Thus, Elasticsearch needs the ability to create a lot of threads. The maximum number of threads check ensures that the Elasticsearch process has the rights to create enough threads under normal use. This check is enforced only on Linux. If you are on Linux, to pass the maximum number of threads check, you must configure your system to allow the Elasticsearch process the ability to create at least 4096 threads. This can be done via `/etc/security/limits.conf` using the `nproc` setting (note that you might have to increase the limits for the `root` user too). +Elasticsearch executes requests by breaking the request down into stages and handing those stages off to different thread pool executors. There are different [thread pool executors](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/thread-pool-settings.md) for a variety of tasks within Elasticsearch. Thus, Elasticsearch needs the ability to create a lot of threads. The maximum number of threads check ensures that the Elasticsearch process has the rights to create enough threads under normal use. This check is enforced only on Linux. If you are on Linux, to pass the maximum number of threads check, you must configure your system to allow the Elasticsearch process the ability to create at least 4096 threads. This can be done via `/etc/security/limits.conf` using the `nproc` setting (note that you might have to increase the limits for the `root` user too). diff --git a/deploy-manage/deploy/self-managed/networkaddress-cache-ttl.md b/deploy-manage/deploy/self-managed/networkaddress-cache-ttl.md index 4c792228a..c554d7a34 100644 --- a/deploy-manage/deploy/self-managed/networkaddress-cache-ttl.md +++ b/deploy-manage/deploy/self-managed/networkaddress-cache-ttl.md @@ -5,5 +5,5 @@ mapped_pages: # DNS cache settings [networkaddress-cache-ttl] -Elasticsearch runs with a security manager in place. With a security manager in place, the JVM defaults to caching positive hostname resolutions indefinitely and defaults to caching negative hostname resolutions for ten seconds. Elasticsearch overrides this behavior with default values to cache positive lookups for sixty seconds, and to cache negative lookups for ten seconds. These values should be suitable for most environments, including environments where DNS resolutions vary with time. If not, you can edit the values `es.networkaddress.cache.ttl` and `es.networkaddress.cache.negative.ttl` in the [JVM options](https://www.elastic.co/guide/en/elasticsearch/reference/current/advanced-configuration.html#set-jvm-options). Note that the values [`networkaddress.cache.ttl=`](https://docs.oracle.com/javase/8/docs/technotes/guides/net/properties.md) and [`networkaddress.cache.negative.ttl=`](https://docs.oracle.com/javase/8/docs/technotes/guides/net/properties.md) in the [Java security policy](https://docs.oracle.com/javase/8/docs/technotes/guides/security/PolicyFiles.md) are ignored by Elasticsearch unless you remove the settings for `es.networkaddress.cache.ttl` and `es.networkaddress.cache.negative.ttl`. +Elasticsearch runs with a security manager in place. With a security manager in place, the JVM defaults to caching positive hostname resolutions indefinitely and defaults to caching negative hostname resolutions for ten seconds. Elasticsearch overrides this behavior with default values to cache positive lookups for sixty seconds, and to cache negative lookups for ten seconds. These values should be suitable for most environments, including environments where DNS resolutions vary with time. If not, you can edit the values `es.networkaddress.cache.ttl` and `es.networkaddress.cache.negative.ttl` in the [JVM options](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/jvm-settings.md#set-jvm-options). Note that the values [`networkaddress.cache.ttl=`](https://docs.oracle.com/javase/8/docs/technotes/guides/net/properties.md) and [`networkaddress.cache.negative.ttl=`](https://docs.oracle.com/javase/8/docs/technotes/guides/net/properties.md) in the [Java security policy](https://docs.oracle.com/javase/8/docs/technotes/guides/security/PolicyFiles.md) are ignored by Elasticsearch unless you remove the settings for `es.networkaddress.cache.ttl` and `es.networkaddress.cache.negative.ttl`. diff --git a/deploy-manage/deploy/self-managed/plugins.md b/deploy-manage/deploy/self-managed/plugins.md index 4e294e857..856188b50 100644 --- a/deploy-manage/deploy/self-managed/plugins.md +++ b/deploy-manage/deploy/self-managed/plugins.md @@ -9,5 +9,5 @@ Plugins are a way to enhance the basic Elasticsearch functionality in a custom m For information about selecting and installing plugins, see [{{es}} Plugins and Integrations](https://www.elastic.co/guide/en/elasticsearch/plugins/current/index.html). -For information about developing your own plugin, see [Help for plugin authors](https://www.elastic.co/guide/en/elasticsearch/plugins/current/plugin-authors.html). +For information about developing your own plugin, see [Help for plugin authors](asciidocalypse://docs/elasticsearch/docs/extend/create-elasticsearch-plugins/index.md). diff --git a/deploy-manage/deploy/self-managed/system-config-tcpretries.md b/deploy-manage/deploy/self-managed/system-config-tcpretries.md index c57074af1..91a3e83e4 100644 --- a/deploy-manage/deploy/self-managed/system-config-tcpretries.md +++ b/deploy-manage/deploy/self-managed/system-config-tcpretries.md @@ -5,7 +5,7 @@ mapped_pages: # TCP retransmission timeout [system-config-tcpretries] -Each pair of {{es}} nodes communicates via a number of TCP connections which [remain open](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#long-lived-connections) until one of the nodes shuts down or communication between the nodes is disrupted by a failure in the underlying infrastructure. +Each pair of {{es}} nodes communicates via a number of TCP connections which [remain open](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#long-lived-connections) until one of the nodes shuts down or communication between the nodes is disrupted by a failure in the underlying infrastructure. TCP provides reliable communication over occasionally unreliable networks by hiding temporary network disruptions from the communicating applications. Your operating system will retransmit any lost messages a number of times before informing the sender of any problem. {{es}} must wait while the retransmissions are happening and can only react once the operating system decides to give up. Users must therefore also wait for a sequence of retransmissions to complete. @@ -30,6 +30,6 @@ This setting applies to all TCP connections and will affect the reliability of c {{es}} also implements its own internal health checks with timeouts that are much shorter than the default retransmission timeout on Linux. Since these are application-level health checks their timeouts must allow for application-level effects such as garbage collection pauses. You should not reduce any timeouts related to these application-level health checks. -You must also ensure your network infrastructure does not interfere with the long-lived connections between nodes, [even if those connections appear to be idle](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#long-lived-connections). Devices which drop connections when they reach a certain age are a common source of problems to {{es}} clusters, and must not be used. +You must also ensure your network infrastructure does not interfere with the long-lived connections between nodes, [even if those connections appear to be idle](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#long-lived-connections). Devices which drop connections when they reach a certain age are a common source of problems to {{es}} clusters, and must not be used. diff --git a/deploy-manage/deploy/self-managed/vm-max-map-count.md b/deploy-manage/deploy/self-managed/vm-max-map-count.md index 29c8964e7..bc5e64637 100644 --- a/deploy-manage/deploy/self-managed/vm-max-map-count.md +++ b/deploy-manage/deploy/self-managed/vm-max-map-count.md @@ -5,7 +5,7 @@ mapped_pages: # Virtual memory [vm-max-map-count] -Elasticsearch uses a [`mmapfs`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-store.html#mmapfs) directory by default to store its indices. The default operating system limits on mmap counts is likely to be too low, which may result in out of memory exceptions. +Elasticsearch uses a [`mmapfs`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index-store-settings.md#mmapfs) directory by default to store its indices. The default operating system limits on mmap counts is likely to be too low, which may result in out of memory exceptions. On Linux, you can increase the limits by running the following command as `root`: diff --git a/deploy-manage/distributed-architecture.md b/deploy-manage/distributed-architecture.md index 0800fda4d..a26c9a6de 100644 --- a/deploy-manage/distributed-architecture.md +++ b/deploy-manage/distributed-architecture.md @@ -16,5 +16,5 @@ The topics in this section provides information about the architecture of {{es}} * [Shard allocation awareness](distributed-architecture/shard-allocation-relocation-recovery/shard-allocation-awareness.md): Learn how to use custom node attributes to distribute shards across different racks or availability zones. -* [Shard request cache](https://www.elastic.co/guide/en/elasticsearch/reference/current/shard-request-cache.html): Learn how {{es}} caches search requests to improve performance. +* [Shard request cache](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/shard-request-cache-settings.md): Learn how {{es}} caches search requests to improve performance. diff --git a/deploy-manage/distributed-architecture/clusters-nodes-shards/node-roles.md b/deploy-manage/distributed-architecture/clusters-nodes-shards/node-roles.md index 9b2722ad2..3b601a7d7 100644 --- a/deploy-manage/distributed-architecture/clusters-nodes-shards/node-roles.md +++ b/deploy-manage/distributed-architecture/clusters-nodes-shards/node-roles.md @@ -5,7 +5,7 @@ mapped_pages: # Node roles [node-roles-overview] -Any time that you start an instance of {{es}}, you are starting a *node*. A collection of connected nodes is called a [cluster](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html). If you are running a single node of {{es}}, then you have a cluster of one node. All nodes know about all the other nodes in the cluster and can forward client requests to the appropriate node. +Any time that you start an instance of {{es}}, you are starting a *node*. A collection of connected nodes is called a [cluster](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md). If you are running a single node of {{es}}, then you have a cluster of one node. All nodes know about all the other nodes in the cluster and can forward client requests to the appropriate node. Each node performs one or more roles. Roles control the behavior of the node in the cluster. @@ -61,14 +61,14 @@ Similarly, each master-eligible node maintains the following data on disk: * the index metadata for every index in the cluster, and * the cluster-wide metadata, such as settings and index templates. -Each node checks the contents of its data path at startup. If it discovers unexpected data then it will refuse to start. This is to avoid importing unwanted [dangling indices](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-gateway.html#dangling-indices) which can lead to a red cluster health. To be more precise, nodes without the `data` role will refuse to start if they find any shard data on disk at startup, and nodes without both the `master` and `data` roles will refuse to start if they have any index metadata on disk at startup. +Each node checks the contents of its data path at startup. If it discovers unexpected data then it will refuse to start. This is to avoid importing unwanted [dangling indices](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/local-gateway.md#dangling-indices) which can lead to a red cluster health. To be more precise, nodes without the `data` role will refuse to start if they find any shard data on disk at startup, and nodes without both the `master` and `data` roles will refuse to start if they have any index metadata on disk at startup. It is possible to change the roles of a node by adjusting its `elasticsearch.yml` file and restarting it. This is known as *repurposing* a node. In order to satisfy the checks for unexpected data described above, you must perform some extra steps to prepare a node for repurposing when starting the node without the `data` or `master` roles. -* If you want to repurpose a data node by removing the `data` role then you should first use an [allocation filter](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html#cluster-shard-allocation-filtering) to safely migrate all the shard data onto other nodes in the cluster. -* If you want to repurpose a node to have neither the `data` nor `master` roles then it is simplest to start a brand-new node with an empty data path and the desired roles. You may find it safest to use an [allocation filter](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html#cluster-shard-allocation-filtering) to migrate the shard data elsewhere in the cluster first. +* If you want to repurpose a data node by removing the `data` role then you should first use an [allocation filter](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md#cluster-shard-allocation-filtering) to safely migrate all the shard data onto other nodes in the cluster. +* If you want to repurpose a node to have neither the `data` nor `master` roles then it is simplest to start a brand-new node with an empty data path and the desired roles. You may find it safest to use an [allocation filter](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md#cluster-shard-allocation-filtering) to migrate the shard data elsewhere in the cluster first. -If it is not possible to follow these extra steps then you may be able to use the [`elasticsearch-node repurpose`](https://www.elastic.co/guide/en/elasticsearch/reference/current/node-tool.html#node-tool-repurpose) tool to delete any excess data that prevents a node from starting. +If it is not possible to follow these extra steps then you may be able to use the [`elasticsearch-node repurpose`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/node-tool.md#node-tool-repurpose) tool to delete any excess data that prevents a node from starting. ## Available node roles [node-roles-list] @@ -79,7 +79,7 @@ The following is a list of the roles that a node can perform in a cluster. A nod * [Data node](#data-node-role) (`data`, `data_content`, `data_hot`, `data_warm`, `data_cold`, `data_frozen`): A node that has one of several data roles. Data nodes hold data and perform data related operations such as CRUD, search, and aggregations. You might use multiple data roles in a cluster so you can implement [data tiers](../../../manage-data/lifecycle/data-tiers.md). * [Ingest node](#node-ingest-node) (`ingest`): Ingest nodes are able to apply an [ingest pipeline](../../../manage-data/ingest/transform-enrich/ingest-pipelines.md) to a document in order to transform and enrich the document before indexing. With a heavy ingest load, it makes sense to use dedicated ingest nodes and to not include the `ingest` role from nodes that have the `master` or `data` roles. * [Remote-eligible node](#remote-node) (`remote_cluster_client`): A node that is eligible to act as a remote client. -* [Machine learning node](#ml-node-role) (`ml`): A node that can run {{ml-features}}. If you want to use {{ml-features}}, there must be at least one {{ml}} node in your cluster. For more information, see [Machine learning settings](../../deploy/self-managed/configure-elasticsearch.md) and [Machine learning in the {{stack}}](https://www.elastic.co/guide/en/machine-learning/current/index.html). +* [Machine learning node](#ml-node-role) (`ml`): A node that can run {{ml-features}}. If you want to use {{ml-features}}, there must be at least one {{ml}} node in your cluster. For more information, see [Machine learning settings](../../deploy/self-managed/configure-elasticsearch.md) and [Machine learning in the {{stack}}](/explore-analyze/machine-learning.md). * [{{transform-cap}} node](#transform-node-role) (`transform`): A node that can perform {{transforms}}. If you want to use {{transforms}}, there must be at least one {{transform}} node in your cluster. For more information, see [{{transforms-cap}} settings](../../deploy/self-managed/configure-elasticsearch.md) and [*Transforming data*](../../../explore-analyze/transforms.md). ::::{admonition} Coordinating node @@ -222,7 +222,7 @@ node.roles: [ data_warm ] Cold data nodes are part of the cold tier. When you no longer need to search time series data regularly, it can move from the warm tier to the cold tier. While still searchable, this tier is typically optimized for lower storage costs rather than search speed. -For better storage savings, you can keep [fully mounted indices](../../tools/snapshot-and-restore/searchable-snapshots.md#fully-mounted) of [{{search-snaps}}](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-searchable-snapshot.html) on the cold tier. Unlike regular indices, these fully mounted indices don’t require replicas for reliability. In the event of a failure, they can recover data from the underlying snapshot instead. This potentially halves the local storage needed for the data. A snapshot repository is required to use fully mounted indices in the cold tier. Fully mounted indices are read-only. +For better storage savings, you can keep [fully mounted indices](../../tools/snapshot-and-restore/searchable-snapshots.md#fully-mounted) of [{{search-snaps}}](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-searchable-snapshot.md) on the cold tier. Unlike regular indices, these fully mounted indices don’t require replicas for reliability. In the event of a failure, they can recover data from the underlying snapshot instead. This potentially halves the local storage needed for the data. A snapshot repository is required to use fully mounted indices in the cold tier. Fully mounted indices are read-only. Alternatively, you can use the cold tier to store regular indices with replicas instead of using {{search-snaps}}. This lets you store older data on less expensive hardware but doesn’t reduce required disk space compared to the warm tier. diff --git a/deploy-manage/distributed-architecture/discovery-cluster-formation.md b/deploy-manage/distributed-architecture/discovery-cluster-formation.md index 417923af1..ef0a74999 100644 --- a/deploy-manage/distributed-architecture/discovery-cluster-formation.md +++ b/deploy-manage/distributed-architecture/discovery-cluster-formation.md @@ -30,7 +30,7 @@ The following processes and settings are part of discovery and cluster formation [Cluster fault detection](discovery-cluster-formation/cluster-fault-detection.md) : {{es}} performs health checks to detect and remove faulty nodes. -[Settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-settings.html) +[Settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/discovery-cluster-formation-settings.md) : There are settings that enable users to influence the discovery, cluster formation, master election and fault detection processes. diff --git a/deploy-manage/distributed-architecture/discovery-cluster-formation/cluster-fault-detection.md b/deploy-manage/distributed-architecture/discovery-cluster-formation/cluster-fault-detection.md index 433695a4d..4428525e6 100644 --- a/deploy-manage/distributed-architecture/discovery-cluster-formation/cluster-fault-detection.md +++ b/deploy-manage/distributed-architecture/discovery-cluster-formation/cluster-fault-detection.md @@ -7,12 +7,12 @@ mapped_pages: The elected master periodically checks each of the nodes in the cluster to ensure that they are still connected and healthy. Each node in the cluster also periodically checks the health of the elected master. These checks are known respectively as *follower checks* and *leader checks*. -Elasticsearch allows these checks to occasionally fail or timeout without taking any action. It considers a node to be faulty only after a number of consecutive checks have failed. You can control fault detection behavior with [`cluster.fault_detection.*` settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-settings.html). +Elasticsearch allows these checks to occasionally fail or timeout without taking any action. It considers a node to be faulty only after a number of consecutive checks have failed. You can control fault detection behavior with [`cluster.fault_detection.*` settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/discovery-cluster-formation-settings.md). If the elected master detects that a node has disconnected, however, this situation is treated as an immediate failure. The master bypasses the timeout and retry setting values and attempts to remove the node from the cluster. Similarly, if a node detects that the elected master has disconnected, this situation is treated as an immediate failure. The node bypasses the timeout and retry settings and restarts its discovery phase to try and find or elect a new master. $$$cluster-fault-detection-filesystem-health$$$ -Additionally, each node periodically verifies that its data path is healthy by writing a small file to disk and then deleting it again. If a node discovers its data path is unhealthy then it is removed from the cluster until the data path recovers. You can control this behavior with the [`monitor.fs.health` settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-settings.html). +Additionally, each node periodically verifies that its data path is healthy by writing a small file to disk and then deleting it again. If a node discovers its data path is unhealthy then it is removed from the cluster until the data path recovers. You can control this behavior with the [`monitor.fs.health` settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/discovery-cluster-formation-settings.md). $$$cluster-fault-detection-cluster-state-publishing$$$ The elected master node will also remove nodes from the cluster if nodes are unable to apply an updated cluster state within a reasonable time. The timeout defaults to 2 minutes starting from the beginning of the cluster state update. Refer to [Publishing the cluster state](cluster-state-overview.md#cluster-state-publishing) for a more detailed description. diff --git a/deploy-manage/distributed-architecture/discovery-cluster-formation/discovery-hosts-providers.md b/deploy-manage/distributed-architecture/discovery-cluster-formation/discovery-hosts-providers.md index d85653b6a..2316afa77 100644 --- a/deploy-manage/distributed-architecture/discovery-cluster-formation/discovery-hosts-providers.md +++ b/deploy-manage/distributed-architecture/discovery-cluster-formation/discovery-hosts-providers.md @@ -19,7 +19,7 @@ Refer to [Troubleshooting discovery](../../../troubleshoot/elasticsearch/discove ## Seed hosts providers [built-in-hosts-providers] -By default the cluster formation module offers two seed hosts providers to configure the list of seed nodes: a *settings*-based and a *file*-based seed hosts provider. It can be extended to support cloud environments and other forms of seed hosts providers via [discovery plugins](https://www.elastic.co/guide/en/elasticsearch/plugins/current/discovery.html). Seed hosts providers are configured using the `discovery.seed_providers` setting, which defaults to the *settings*-based hosts provider. This setting accepts a list of different providers, allowing you to make use of multiple ways to find the seed hosts for your cluster. +By default the cluster formation module offers two seed hosts providers to configure the list of seed nodes: a *settings*-based and a *file*-based seed hosts provider. It can be extended to support cloud environments and other forms of seed hosts providers via [discovery plugins](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch-plugins/discovery-plugins.md). Seed hosts providers are configured using the `discovery.seed_providers` setting, which defaults to the *settings*-based hosts provider. This setting accepts a list of different providers, allowing you to make use of multiple ways to find the seed hosts for your cluster. Each seed hosts provider yields the IP addresses or hostnames of the seed nodes. If it returns any hostnames then these are resolved to IP addresses using a DNS lookup. If a hostname resolves to multiple IP addresses then {{es}} tries to find a seed node at all of these addresses. If the hosts provider does not explicitly give the TCP port of the node by then, it will implicitly use the first port in the port range given by `transport.profiles.default.port`, or by `transport.port` if `transport.profiles.default.port` is not set. The number of concurrent lookups is controlled by `discovery.seed_resolver.max_concurrent_resolvers` which defaults to `10`, and the timeout for each lookup is controlled by `discovery.seed_resolver.timeout` which defaults to `5s`. Note that DNS lookups are subject to [JVM DNS caching](../../deploy/self-managed/networkaddress-cache-ttl.md). @@ -75,16 +75,16 @@ You can also add comments to this file. All comments must appear on their lines #### EC2 hosts provider [ec2-hosts-provider] -The [EC2 discovery plugin](https://www.elastic.co/guide/en/elasticsearch/plugins/current/discovery-ec2.html) adds a hosts provider that uses the [AWS API](https://github.com/aws/aws-sdk-java) to find a list of seed nodes. +The [EC2 discovery plugin](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch-plugins/discovery-ec2.md) adds a hosts provider that uses the [AWS API](https://github.com/aws/aws-sdk-java) to find a list of seed nodes. #### Azure Classic hosts provider [azure-classic-hosts-provider] -The [Azure Classic discovery plugin](https://www.elastic.co/guide/en/elasticsearch/plugins/current/discovery-azure-classic.html) adds a hosts provider that uses the Azure Classic API find a list of seed nodes. +The [Azure Classic discovery plugin](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch-plugins/discovery-azure-classic.md) adds a hosts provider that uses the Azure Classic API find a list of seed nodes. #### Google Compute Engine hosts provider [gce-hosts-provider] -The [GCE discovery plugin](https://www.elastic.co/guide/en/elasticsearch/plugins/current/discovery-gce.html) adds a hosts provider that uses the GCE API find a list of seed nodes. +The [GCE discovery plugin](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch-plugins/discovery-gce.md) adds a hosts provider that uses the GCE API find a list of seed nodes. diff --git a/deploy-manage/distributed-architecture/discovery-cluster-formation/modules-discovery-bootstrap-cluster.md b/deploy-manage/distributed-architecture/discovery-cluster-formation/modules-discovery-bootstrap-cluster.md index bce31843f..dd579557b 100644 --- a/deploy-manage/distributed-architecture/discovery-cluster-formation/modules-discovery-bootstrap-cluster.md +++ b/deploy-manage/distributed-architecture/discovery-cluster-formation/modules-discovery-bootstrap-cluster.md @@ -11,7 +11,7 @@ The initial set of master-eligible nodes is defined in the [`cluster.initial_mas * The [node name](../../deploy/self-managed/important-settings-configuration.md#node-name) of the node. * The node’s hostname if `node.name` is not set, because `node.name` defaults to the node’s hostname. You must use either the fully-qualified hostname or the bare hostname [depending on your system configuration](#modules-discovery-bootstrap-cluster-fqdns). -* The IP address of the node’s [transport publish address](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#modules-network-binding-publishing), if it is not possible to use the `node.name` of the node. This is normally the IP address to which [`network.host`](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#common-network-settings) resolves but [this can be overridden](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#advanced-network-settings). +* The IP address of the node’s [transport publish address](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#modules-network-binding-publishing), if it is not possible to use the `node.name` of the node. This is normally the IP address to which [`network.host`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#common-network-settings) resolves but [this can be overridden](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#advanced-network-settings). * The IP address and port of the node’s publish address, in the form `IP:PORT`, if it is not possible to use the `node.name` of the node and there are multiple nodes sharing a single IP address. Do not set `cluster.initial_master_nodes` on master-ineligible nodes. @@ -63,7 +63,7 @@ This message shows the node names `master-a.example.com` and `master-b.example.c ## Choosing a cluster name [bootstrap-cluster-name] -The [`cluster.name`](https://www.elastic.co/guide/en/elasticsearch/reference/current/misc-cluster-settings.html#cluster-name) setting enables you to create multiple clusters which are separated from each other. Nodes verify that they agree on their cluster name when they first connect to each other, and Elasticsearch will only form a cluster from nodes that all have the same cluster name. The default value for the cluster name is `elasticsearch`, but it is recommended to change this to reflect the logical name of the cluster. +The [`cluster.name`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/miscellaneous-cluster-settings.md#cluster-name) setting enables you to create multiple clusters which are separated from each other. Nodes verify that they agree on their cluster name when they first connect to each other, and Elasticsearch will only form a cluster from nodes that all have the same cluster name. The default value for the cluster name is `elasticsearch`, but it is recommended to change this to reflect the logical name of the cluster. ## Auto-bootstrapping in development mode [bootstrap-auto-bootstrap] @@ -84,14 +84,14 @@ Once an {{es}} node has joined an existing cluster, or bootstrapped a new cluste If you intended to add a node into an existing cluster but instead bootstrapped a separate single-node cluster then you must start again: 1. Shut down the node. -2. Completely wipe the node by deleting the contents of its [data folder](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#data-path). +2. Completely wipe the node by deleting the contents of its [data folder](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md#data-path). 3. Configure `discovery.seed_hosts` or `discovery.seed_providers` and other relevant discovery settings. Ensure `cluster.initial_master_nodes` is not set on any node. 4. Restart the node and verify that it joins the existing cluster rather than forming its own one-node cluster. If you intended to form a new multi-node cluster but instead bootstrapped a collection of single-node clusters then you must start again: 1. Shut down all the nodes. -2. Completely wipe each node by deleting the contents of their [data folders](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#data-path). +2. Completely wipe each node by deleting the contents of their [data folders](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md#data-path). 3. Configure `cluster.initial_master_nodes` as described above. 4. Configure `discovery.seed_hosts` or `discovery.seed_providers` and other relevant discovery settings. 5. Restart all the nodes and verify that they have formed a single cluster. diff --git a/deploy-manage/distributed-architecture/discovery-cluster-formation/modules-discovery-quorums.md b/deploy-manage/distributed-architecture/discovery-cluster-formation/modules-discovery-quorums.md index 268d45786..4481774ef 100644 --- a/deploy-manage/distributed-architecture/discovery-cluster-formation/modules-discovery-quorums.md +++ b/deploy-manage/distributed-architecture/discovery-cluster-formation/modules-discovery-quorums.md @@ -24,7 +24,7 @@ After a master-eligible node has joined or left the cluster the elected master m ## Master elections [_master_elections] -Elasticsearch uses an election process to agree on an elected master node, both at startup and if the existing elected master fails. Any master-eligible node can start an election, and normally the first election that takes place will succeed. Elections only usually fail when two nodes both happen to start their elections at about the same time, so elections are scheduled randomly on each node to reduce the probability of this happening. Nodes will retry elections until a master is elected, backing off on failure, so that eventually an election will succeed (with arbitrarily high probability). The scheduling of master elections are controlled by the [master election settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-settings.html#master-election-settings). +Elasticsearch uses an election process to agree on an elected master node, both at startup and if the existing elected master fails. Any master-eligible node can start an election, and normally the first election that takes place will succeed. Elections only usually fail when two nodes both happen to start their elections at about the same time, so elections are scheduled randomly on each node to reduce the probability of this happening. Nodes will retry elections until a master is elected, backing off on failure, so that eventually an election will succeed (with arbitrarily high probability). The scheduling of master elections are controlled by the [master election settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/discovery-cluster-formation-settings.md#master-election-settings). ## Cluster maintenance, rolling restarts and migrations [_cluster_maintenance_rolling_restarts_and_migrations] diff --git a/deploy-manage/distributed-architecture/discovery-cluster-formation/modules-discovery-voting.md b/deploy-manage/distributed-architecture/discovery-cluster-formation/modules-discovery-voting.md index cfa8d155a..9c0c9229e 100644 --- a/deploy-manage/distributed-architecture/discovery-cluster-formation/modules-discovery-voting.md +++ b/deploy-manage/distributed-architecture/discovery-cluster-formation/modules-discovery-voting.md @@ -32,7 +32,7 @@ The current voting configuration is not necessarily the same as the set of all a Larger voting configurations are usually more resilient, so Elasticsearch normally prefers to add master-eligible nodes to the voting configuration after they join the cluster. Similarly, if a node in the voting configuration leaves the cluster and there is another master-eligible node in the cluster that is not in the voting configuration then it is preferable to swap these two nodes over. The size of the voting configuration is thus unchanged but its resilience increases. -It is not so straightforward to automatically remove nodes from the voting configuration after they have left the cluster. Different strategies have different benefits and drawbacks, so the right choice depends on how the cluster will be used. You can control whether the voting configuration automatically shrinks by using the [`cluster.auto_shrink_voting_configuration` setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-settings.html). +It is not so straightforward to automatically remove nodes from the voting configuration after they have left the cluster. Different strategies have different benefits and drawbacks, so the right choice depends on how the cluster will be used. You can control whether the voting configuration automatically shrinks by using the [`cluster.auto_shrink_voting_configuration` setting](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/discovery-cluster-formation-settings.md). ::::{note} If `cluster.auto_shrink_voting_configuration` is set to `true` (which is the default and recommended value) and there are at least three master-eligible nodes in the cluster, Elasticsearch remains capable of processing cluster state updates as long as all but one of its master-eligible nodes are healthy. diff --git a/deploy-manage/distributed-architecture/kibana-tasks-management.md b/deploy-manage/distributed-architecture/kibana-tasks-management.md index 9090653c0..624348b24 100644 --- a/deploy-manage/distributed-architecture/kibana-tasks-management.md +++ b/deploy-manage/distributed-architecture/kibana-tasks-management.md @@ -26,7 +26,7 @@ If you lose this index, all scheduled alerts and actions are lost. {{kib}} background tasks are managed as follows: -* An {{es}} task index is polled for overdue tasks at 3-second intervals. You can change this interval using the [`xpack.task_manager.poll_interval`](https://www.elastic.co/guide/en/kibana/current/task-manager-settings-kb.html#task-manager-settings) setting. +* An {{es}} task index is polled for overdue tasks at 3-second intervals. You can change this interval using the [`xpack.task_manager.poll_interval`](asciidocalypse://docs/kibana/docs/reference/configuration-reference/task-manager-settings.md#task-manager-settings) setting. * Tasks are claimed by updating them in the {{es}} index, using optimistic concurrency control to prevent conflicts. Each {{kib}} instance can run a maximum of 10 concurrent tasks, so a maximum of 10 tasks are claimed each interval. * Tasks are run on the {{kib}} server. * Task Manager ensures that tasks: @@ -43,7 +43,7 @@ This is usually a symptom of the specific usage or scaling strategy of the clust To address these issues, tweak the {{kib}} Task Manager settings or the cluster scaling strategy to better suit the unique use case. -For details on the settings that can influence the performance and throughput of Task Manager, see [Task Manager Settings](https://www.elastic.co/guide/en/kibana/current/task-manager-settings-kb.html). +For details on the settings that can influence the performance and throughput of Task Manager, see [Task Manager Settings](asciidocalypse://docs/kibana/docs/reference/configuration-reference/task-manager-settings.md). For detailed troubleshooting guidance, see [Troubleshooting](../../troubleshoot/kibana/task-manager.md). @@ -83,9 +83,9 @@ At times, the sustainable approach might be to expand the throughput of your clu Other times it, might be preferable to increase the throughput of individual {{kib}} instances. -Tweak the capacity with the [`xpack.task_manager.capacity`](https://www.elastic.co/guide/en/kibana/current/task-manager-settings-kb.html#task-manager-settings) setting, which enables each {{kib}} instance to pull a higher number of tasks per interval. This setting can impact the performance of each instance as the workload will be higher. +Tweak the capacity with the [`xpack.task_manager.capacity`](asciidocalypse://docs/kibana/docs/reference/configuration-reference/task-manager-settings.md#task-manager-settings) setting, which enables each {{kib}} instance to pull a higher number of tasks per interval. This setting can impact the performance of each instance as the workload will be higher. -Tweak the poll interval with the [`xpack.task_manager.poll_interval`](https://www.elastic.co/guide/en/kibana/current/task-manager-settings-kb.html#task-manager-settings) setting, which enables each {{kib}} instance to pull scheduled tasks at a higher rate. This setting can impact the performance of the {{es}} cluster as the workload will be higher. +Tweak the poll interval with the [`xpack.task_manager.poll_interval`](asciidocalypse://docs/kibana/docs/reference/configuration-reference/task-manager-settings.md#task-manager-settings) setting, which enables each {{kib}} instance to pull scheduled tasks at a higher rate. This setting can impact the performance of the {{es}} cluster as the workload will be higher. ### Choosing a scaling strategy [task-manager-choosing-scaling-strategy] diff --git a/deploy-manage/distributed-architecture/reading-and-writing-documents.md b/deploy-manage/distributed-architecture/reading-and-writing-documents.md index 248aa7b3a..fc4a2409c 100644 --- a/deploy-manage/distributed-architecture/reading-and-writing-documents.md +++ b/deploy-manage/distributed-architecture/reading-and-writing-documents.md @@ -41,7 +41,7 @@ These indexing stages (coordinating, primary, and replica) are sequential. To en Many things can go wrong during indexing — disks can get corrupted, nodes can be disconnected from each other, or some configuration mistake could cause an operation to fail on a replica despite it being successful on the primary. These are infrequent but the primary has to respond to them. -In the case that the primary itself fails, the node hosting the primary will send a message to the master about it. The indexing operation will wait (up to 1 minute, by [default](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#dynamic-index-settings)) for the master to promote one of the replicas to be a new primary. The operation will then be forwarded to the new primary for processing. Note that the master also monitors the health of the nodes and may decide to proactively demote a primary. This typically happens when the node holding the primary is isolated from the cluster by a networking issue. See [here](#demoted-primary) for more details. +In the case that the primary itself fails, the node hosting the primary will send a message to the master about it. The indexing operation will wait (up to 1 minute, by [default](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#dynamic-index-settings)) for the master to promote one of the replicas to be a new primary. The operation will then be forwarded to the new primary for processing. Note that the master also monitors the health of the nodes and may decide to proactively demote a primary. This typically happens when the node holding the primary is isolated from the cluster by a networking issue. See [here](#demoted-primary) for more details. Once the operation has been successfully performed on the primary, the primary has to deal with potential failures when executing it on the replica shards. This may be caused by an actual failure on the replica or due to a network issue preventing the operation from reaching the replica (or preventing the replica from responding). All of these share the same end result: a replica which is part of the in-sync replica set misses an operation that is about to be acknowledged. In order to avoid violating the invariant, the primary sends a message to the master requesting that the problematic shard be removed from the in-sync replica set. Only once removal of the shard has been acknowledged by the master does the primary acknowledge the operation. Note that the master will also instruct another node to start building a new shard copy in order to restore the system to a healthy state. @@ -62,7 +62,7 @@ Reads in Elasticsearch can be very lightweight lookups by ID or a heavy search r When a read request is received by a node, that node is responsible for forwarding it to the nodes that hold the relevant shards, collating the responses, and responding to the client. We call that node the *coordinating node* for that request. The basic flow is as follows: 1. Resolve the read requests to the relevant shards. Note that since most searches will be sent to one or more indices, they typically need to read from multiple shards, each representing a different subset of the data. -2. Select an active copy of each relevant shard, from the shard replication group. This can be either the primary or a replica. By default, {{es}} uses [adaptive replica selection](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-shard-routing.html#search-adaptive-replica) to select the shard copies. +2. Select an active copy of each relevant shard, from the shard replication group. This can be either the primary or a replica. By default, {{es}} uses [adaptive replica selection](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/search-shard-routing.md#search-adaptive-replica) to select the shard copies. 3. Send shard level read requests to the selected copies. 4. Combine the results and respond. Note that in the case of get by ID look up, only one shard is relevant and this step can be skipped. diff --git a/deploy-manage/distributed-architecture/shard-allocation-relocation-recovery.md b/deploy-manage/distributed-architecture/shard-allocation-relocation-recovery.md index c7bd4171d..6fe8da97b 100644 --- a/deploy-manage/distributed-architecture/shard-allocation-relocation-recovery.md +++ b/deploy-manage/distributed-architecture/shard-allocation-relocation-recovery.md @@ -9,7 +9,7 @@ Each [index](../../manage-data/data-store/index-basics.md) in Elasticsearch is d A cluster can contain multiple copies of a shard. Each shard has one distinguished shard copy called the *primary*, and zero or more non-primary copies called *replicas*. The primary shard copy serves as the main entry point for all indexing operations. The operations on the primary shard copy are then forwarded to its replicas. -Replicas maintain redundant copies of your data across the [nodes](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html) in your cluster, protecting against hardware failure and increasing capacity to serve read requests like searching or retrieving a document. If the primary shard copy fails, then a replica is promoted to primary and takes over the primary’s responsibilities. +Replicas maintain redundant copies of your data across the [nodes](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md) in your cluster, protecting against hardware failure and increasing capacity to serve read requests like searching or retrieving a document. If the primary shard copy fails, then a replica is promoted to primary and takes over the primary’s responsibilities. Over the course of normal operation, Elasticsearch allocates shard copies to nodes, relocates shard copies across nodes to balance the cluster or satisfy new allocation constraints, and recovers shards to initialize new copies. In this topic, you’ll learn how these operations work and how you can control them. @@ -30,7 +30,7 @@ By default, the primary and replica shard copies for an index can be allocated t You can control how shard copies are allocated using the following settings: -* [Cluster-level shard allocation settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html): Use these settings to control how shard copies are allocated and balanced across the entire cluster. For example, you might want to [allocate nodes availability zones](shard-allocation-relocation-recovery/shard-allocation-awareness.md), or prevent certain nodes from being used so you can perform maintenance. +* [Cluster-level shard allocation settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md): Use these settings to control how shard copies are allocated and balanced across the entire cluster. For example, you might want to [allocate nodes availability zones](shard-allocation-relocation-recovery/shard-allocation-awareness.md), or prevent certain nodes from being used so you can perform maintenance. * [Index-level shard allocation settings](shard-allocation-relocation-recovery/index-level-shard-allocation.md): Use these settings to control how the shard copies for a specific index are allocated. For example, you might want to allocate an index to a node in a specific data tier, or to an node with specific attributes. @@ -67,8 +67,8 @@ You can determine the cause of a shard recovery using the [recovery](https://www To control how shards are recovered, for example the resources that can be used by recovery operations, and which indices should be prioritized for recovery, you can adjust the following settings: -* [Index recovery settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html) -* [Cluster-level shard allocation settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html) +* [Index recovery settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-recovery-settings.md) +* [Cluster-level shard allocation settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md) * [Index-level shard allocation settings](shard-allocation-relocation-recovery/index-level-shard-allocation.md), including [delayed allocation](shard-allocation-relocation-recovery/delaying-allocation-when-node-leaves.md) and [index recovery prioritization](shard-allocation-relocation-recovery/index-level-shard-allocation.md) Shard recovery operations also respect general shard allocation settings. @@ -91,7 +91,7 @@ When a shard copy is relocated, it is created as a new shard copy on the target ### Adjust shard relocation settings [_adjust_shard_relocation_settings] -You can control how and when shard copies are relocated. For example, you can adjust the rebalancing settings that control when shard copies are relocated to balance the cluster, or the high watermark for disk-based shard allocation that can trigger relocation. These settings are part of the [cluster-level shard allocation settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html). +You can control how and when shard copies are relocated. For example, you can adjust the rebalancing settings that control when shard copies are relocated to balance the cluster, or the high watermark for disk-based shard allocation that can trigger relocation. These settings are part of the [cluster-level shard allocation settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md). Shard relocation operations also respect shard allocation and recovery settings. diff --git a/deploy-manage/distributed-architecture/shard-allocation-relocation-recovery/delaying-allocation-when-node-leaves.md b/deploy-manage/distributed-architecture/shard-allocation-relocation-recovery/delaying-allocation-when-node-leaves.md index 64a81b3f8..29e21ced5 100644 --- a/deploy-manage/distributed-architecture/shard-allocation-relocation-recovery/delaying-allocation-when-node-leaves.md +++ b/deploy-manage/distributed-architecture/shard-allocation-relocation-recovery/delaying-allocation-when-node-leaves.md @@ -13,7 +13,7 @@ When a node leaves the cluster for whatever reason, intentional or otherwise, th These actions are intended to protect the cluster against data loss by ensuring that every shard is fully replicated as soon as possible. -Even though we throttle concurrent recoveries both at the [node level](https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html) and at the [cluster level](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html#cluster-shard-allocation-settings), this shard-shuffle can still put a lot of extra load on the cluster which may not be necessary if the missing node is likely to return soon. Imagine this scenario: +Even though we throttle concurrent recoveries both at the [node level](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-recovery-settings.md) and at the [cluster level](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md#cluster-shard-allocation-settings), this shard-shuffle can still put a lot of extra load on the cluster which may not be necessary if the missing node is likely to return soon. Imagine this scenario: * Node 5 loses network connectivity. * The master promotes a replica shard to primary for each primary that was on Node 5. diff --git a/deploy-manage/distributed-architecture/shard-allocation-relocation-recovery/shard-allocation-awareness.md b/deploy-manage/distributed-architecture/shard-allocation-relocation-recovery/shard-allocation-awareness.md index 9476c2441..495199f72 100644 --- a/deploy-manage/distributed-architecture/shard-allocation-relocation-recovery/shard-allocation-awareness.md +++ b/deploy-manage/distributed-architecture/shard-allocation-relocation-recovery/shard-allocation-awareness.md @@ -23,7 +23,7 @@ Learn more about [designing resilient clusters](../../production-guidance/availa To enable shard allocation awareness: -1. Specify the location of each node with a [custom node attribute](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#custom-node-attributes). For example, if you want Elasticsearch to distribute shards across different racks, you might use an awareness attribute called `rack_id`. +1. Specify the location of each node with a [custom node attribute](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md#custom-node-attributes). For example, if you want Elasticsearch to distribute shards across different racks, you might use an awareness attribute called `rack_id`. You can set custom attributes in two ways: diff --git a/deploy-manage/maintenance/add-and-remove-elasticsearch-nodes.md b/deploy-manage/maintenance/add-and-remove-elasticsearch-nodes.md index e0abf7667..e71a68179 100644 --- a/deploy-manage/maintenance/add-and-remove-elasticsearch-nodes.md +++ b/deploy-manage/maintenance/add-and-remove-elasticsearch-nodes.md @@ -16,7 +16,7 @@ If you are running a single instance of {{es}}, you have a cluster of one node. :alt: A cluster with one node and three primary shards ::: -You add nodes to a cluster to increase its capacity and reliability. By default, a node is both a data node and eligible to be elected as the master node that controls the cluster. You can also configure a new node for a specific purpose, such as handling ingest requests. For more information, see [Nodes](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html). +You add nodes to a cluster to increase its capacity and reliability. By default, a node is both a data node and eligible to be elected as the master node that controls the cluster. You can also configure a new node for a specific purpose, such as handling ingest requests. For more information, see [Nodes](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md). When you add more nodes to a cluster, it automatically allocates replica shards. When all primary and replica shards are active, the cluster state changes to green. @@ -47,11 +47,11 @@ When {{es}} starts for the first time, the security auto-configuration process b Before enrolling a new node, additional actions such as binding to an address other than `localhost` or satisfying bootstrap checks are typically necessary in production clusters. During that time, an auto-generated enrollment token could expire, which is why enrollment tokens aren’t generated automatically. -Additionally, only nodes on the same host can join the cluster without additional configuration. If you want nodes from another host to join your cluster, you need to set `transport.host` to a [supported value](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#network-interface-values) (such as uncommenting the suggested value of `0.0.0.0`), or an IP address that’s bound to an interface where other hosts can reach it. Refer to [transport settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#transport-settings) for more information. +Additionally, only nodes on the same host can join the cluster without additional configuration. If you want nodes from another host to join your cluster, you need to set `transport.host` to a [supported value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#network-interface-values) (such as uncommenting the suggested value of `0.0.0.0`), or an IP address that’s bound to an interface where other hosts can reach it. Refer to [transport settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#transport-settings) for more information. To enroll new nodes in your cluster, create an enrollment token with the `elasticsearch-create-enrollment-token` tool on any existing node in your cluster. You can then start a new node with the `--enrollment-token` parameter so that it joins an existing cluster. -1. In a separate terminal from where {{es}} is running, navigate to the directory where you installed {{es}} and run the [`elasticsearch-create-enrollment-token`](https://www.elastic.co/guide/en/elasticsearch/reference/current/create-enrollment-token.html) tool to generate an enrollment token for your new nodes. +1. In a separate terminal from where {{es}} is running, navigate to the directory where you installed {{es}} and run the [`elasticsearch-create-enrollment-token`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/create-enrollment-token.md) tool to generate an enrollment token for your new nodes. ```sh bin\elasticsearch-create-enrollment-token -s node @@ -73,7 +73,7 @@ To enroll new nodes in your cluster, create an enrollment token with the `elasti 3. Repeat the previous step for any new nodes that you want to enroll. -For more information about discovery and shard allocation, refer to [*Discovery and cluster formation*](../distributed-architecture/discovery-cluster-formation.md) and [Cluster-level shard allocation and routing settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html). +For more information about discovery and shard allocation, refer to [*Discovery and cluster formation*](../distributed-architecture/discovery-cluster-formation.md) and [Cluster-level shard allocation and routing settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md). ## Master-eligible nodes [add-elasticsearch-nodes-master-eligible] @@ -122,7 +122,7 @@ Adding an exclusion for a node creates an entry for that node in the voting conf GET /_cluster/state?filter_path=metadata.cluster_coordination.voting_config_exclusions ``` -This list is limited in size by the `cluster.max_voting_config_exclusions` setting, which defaults to `10`. See [Discovery and cluster formation settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-settings.html). Since voting configuration exclusions are persistent and limited in number, they must be cleaned up. Normally an exclusion is added when performing some maintenance on the cluster, and the exclusions should be cleaned up when the maintenance is complete. Clusters should have no voting configuration exclusions in normal operation. +This list is limited in size by the `cluster.max_voting_config_exclusions` setting, which defaults to `10`. See [Discovery and cluster formation settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/discovery-cluster-formation-settings.md). Since voting configuration exclusions are persistent and limited in number, they must be cleaned up. Normally an exclusion is added when performing some maintenance on the cluster, and the exclusions should be cleaned up when the maintenance is complete. Clusters should have no voting configuration exclusions in normal operation. If a node is excluded from the voting configuration because it is to be shut down permanently, its exclusion can be removed after it is shut down and removed from the cluster. Exclusions can also be cleared if they were created in error or were only required temporarily by specifying `?wait_for_removal=false`. diff --git a/deploy-manage/maintenance/ece/start-stop-routing-requests.md b/deploy-manage/maintenance/ece/start-stop-routing-requests.md index 1b78959ac..c4c0367d4 100644 --- a/deploy-manage/maintenance/ece/start-stop-routing-requests.md +++ b/deploy-manage/maintenance/ece/start-stop-routing-requests.md @@ -16,7 +16,7 @@ The {{ecloud}} proxy routes HTTP requests to its deployment’s individual produ It might be helpful to temporarily block upstream requests in order to protect some or all instances or products within your deployment. For example, you might stop request routing in the following cases: * If another team within your company starts streaming new data into your production {{integrations-server}} without previous load testing, both it and {{es}} might experience performance issues. You might consider stopping routing requests on all {{integrations-server}} instances in order to protect your downstream {{es}} instance. -* If {{es}} is being overwhelmed by upstream requests, it might experience increased response times or even become unresponsive. This might impact your ability to resize components in your deployment and increase the duration of pending plans or increase the chance of plan changes failing. Because every {{es}} node is an [implicit coordinating node](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html), you should stop routing requests across all {{es}} nodes to completely block upstream traffic. +* If {{es}} is being overwhelmed by upstream requests, it might experience increased response times or even become unresponsive. This might impact your ability to resize components in your deployment and increase the duration of pending plans or increase the chance of plan changes failing. Because every {{es}} node is an [implicit coordinating node](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md), you should stop routing requests across all {{es}} nodes to completely block upstream traffic. ## Considerations [request-routing-considerations] diff --git a/deploy-manage/maintenance/start-stop-services/full-cluster-restart-rolling-restart-procedures.md b/deploy-manage/maintenance/start-stop-services/full-cluster-restart-rolling-restart-procedures.md index 147b0ba4c..a4674e858 100644 --- a/deploy-manage/maintenance/start-stop-services/full-cluster-restart-rolling-restart-procedures.md +++ b/deploy-manage/maintenance/start-stop-services/full-cluster-restart-rolling-restart-procedures.md @@ -11,14 +11,14 @@ applies_to: There may be [situations where you want to perform a full-cluster restart](../../security/secure-cluster-communications.md) or a rolling restart. In the case of [full-cluster restart](#restart-cluster-full), you shut down and restart all the nodes in the cluster while in the case of [rolling restart](#restart-cluster-rolling), you shut down only one node at a time, so the service remains uninterrupted. ::::{warning} -Nodes exceeding the low watermark threshold will be slow to restart. Reduce the disk usage below the [low watermark](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html#cluster-routing-watermark-low) before restarting nodes. +Nodes exceeding the low watermark threshold will be slow to restart. Reduce the disk usage below the [low watermark](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md#cluster-routing-watermark-low) before restarting nodes. :::: ## Full-cluster restart [restart-cluster-full] 1. **Disable shard allocation.** - When you shut down a data node, the allocation process waits for `index.unassigned.node_left.delayed_timeout` (by default, one minute) before starting to replicate the shards on that node to other nodes in the cluster, which can involve a lot of I/O. Since the node is shortly going to be restarted, this I/O is unnecessary. You can avoid racing the clock by [disabling allocation](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html#cluster-routing-allocation-enable) of replicas before shutting down [data nodes](../../distributed-architecture/clusters-nodes-shards/node-roles.md#data-node-role): + When you shut down a data node, the allocation process waits for `index.unassigned.node_left.delayed_timeout` (by default, one minute) before starting to replicate the shards on that node to other nodes in the cluster, which can involve a lot of I/O. Since the node is shortly going to be restarted, this I/O is unnecessary. You can avoid racing the clock by [disabling allocation](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md#cluster-routing-allocation-enable) of replicas before shutting down [data nodes](../../distributed-architecture/clusters-nodes-shards/node-roles.md#data-node-role): ```console PUT _cluster/settings @@ -29,7 +29,7 @@ Nodes exceeding the low watermark threshold will be slow to restart. Reduce the } ``` - You can also consider [gateway settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-gateway.html) when restarting large clusters to reduce initial strain while nodes are processing [through discovery](../../distributed-architecture/discovery-cluster-formation.md). + You can also consider [gateway settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/local-gateway.md) when restarting large clusters to reduce initial strain while nodes are processing [through discovery](../../distributed-architecture/discovery-cluster-formation.md). 2. **Stop indexing and perform a flush.** Performing a [flush](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-flush) speeds up shard recovery. @@ -52,7 +52,7 @@ Nodes exceeding the low watermark threshold will be slow to restart. Reduce the When you disable upgrade mode, the jobs resume using the last model state that was automatically saved. This option avoids the overhead of managing active jobs during the shutdown and is faster than explicitly stopping {{dfeeds}} and closing jobs. - * [Stop all {{dfeeds}} and close all jobs](https://www.elastic.co/guide/en/machine-learning/current/ml-ad-run-jobs.html#ml-ad-close-job). This option saves the model state at the time of closure. When you reopen the jobs after the cluster restart, they use the exact same model. However, saving the latest model state takes longer than using upgrade mode, especially if you have a lot of jobs or jobs with large model states. + * [Stop all {{dfeeds}} and close all jobs](/explore-analyze/machine-learning/anomaly-detection/ml-ad-run-jobs.md#ml-ad-close-job). This option saves the model state at the time of closure. When you reopen the jobs after the cluster restart, they use the exact same model. However, saving the latest model state takes longer than using upgrade mode, especially if you have a lot of jobs or jobs with large model states. 4. **Shut down all nodes.** @@ -124,7 +124,7 @@ Nodes exceeding the low watermark threshold will be slow to restart. Reduce the ## Rolling restart [restart-cluster-rolling] 1. **Disable shard allocation.** - When you shut down a data node, the allocation process waits for `index.unassigned.node_left.delayed_timeout` (by default, one minute) before starting to replicate the shards on that node to other nodes in the cluster, which can involve a lot of I/O. Since the node is shortly going to be restarted, this I/O is unnecessary. You can avoid racing the clock by [disabling allocation](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html#cluster-routing-allocation-enable) of replicas before shutting down [data nodes](../../distributed-architecture/clusters-nodes-shards/node-roles.md#data-node-role): + When you shut down a data node, the allocation process waits for `index.unassigned.node_left.delayed_timeout` (by default, one minute) before starting to replicate the shards on that node to other nodes in the cluster, which can involve a lot of I/O. Since the node is shortly going to be restarted, this I/O is unnecessary. You can avoid racing the clock by [disabling allocation](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md#cluster-routing-allocation-enable) of replicas before shutting down [data nodes](../../distributed-architecture/clusters-nodes-shards/node-roles.md#data-node-role): ```console PUT _cluster/settings @@ -135,7 +135,7 @@ Nodes exceeding the low watermark threshold will be slow to restart. Reduce the } ``` - You can also consider [gateway settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-gateway.html) when restarting large clusters to reduce initial strain while nodes are processing [through discovery](../../distributed-architecture/discovery-cluster-formation.md). + You can also consider [gateway settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/local-gateway.md) when restarting large clusters to reduce initial strain while nodes are processing [through discovery](../../distributed-architecture/discovery-cluster-formation.md). 2. **Stop non-essential indexing and perform a flush.** (Optional) While you can continue indexing during the rolling restart, shard recovery can be faster if you temporarily stop non-essential indexing and perform a [flush](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-flush). @@ -155,7 +155,7 @@ Nodes exceeding the low watermark threshold will be slow to restart. Reduce the When you disable upgrade mode, the jobs resume using the last model state that was automatically saved. This option avoids the overhead of managing active jobs during the shutdown and is faster than explicitly stopping {{dfeeds}} and closing jobs. - * [Stop all {{dfeeds}} and close all jobs](https://www.elastic.co/guide/en/machine-learning/current/ml-ad-run-jobs.html#ml-ad-close-job). This option saves the model state at the time of closure. When you reopen the jobs after the cluster restart, they use the exact same model. However, saving the latest model state takes longer than using upgrade mode, especially if you have a lot of jobs or jobs with large model states. + * [Stop all {{dfeeds}} and close all jobs](/explore-analyze/machine-learning/anomaly-detection/ml-ad-run-jobs.md#ml-ad-close-job). This option saves the model state at the time of closure. When you reopen the jobs after the cluster restart, they use the exact same model. However, saving the latest model state takes longer than using upgrade mode, especially if you have a lot of jobs or jobs with large model states. * If you perform a rolling restart, you can also leave your machine learning jobs running. When you shut down a machine learning node, its jobs automatically move to another node and restore the model states. This option enables your jobs to continue running during the shutdown but it puts increased load on the cluster. diff --git a/deploy-manage/maintenance/start-stop-services/start-stop-kibana.md b/deploy-manage/maintenance/start-stop-services/start-stop-kibana.md index a55e4e8d2..b92b57f5f 100644 --- a/deploy-manage/maintenance/start-stop-services/start-stop-kibana.md +++ b/deploy-manage/maintenance/start-stop-services/start-stop-kibana.md @@ -31,7 +31,7 @@ If this is the first time you’re starting {{kib}}, this command generates a un 3. Log in to {{kib}} as the `elastic` user with the password that was generated when you started {{es}}. ::::{note} -If you need to reset the password for the `elastic` user or other built-in users, run the [`elasticsearch-reset-password`](https://www.elastic.co/guide/en/elasticsearch/reference/current/reset-password.html) tool. To generate new enrollment tokens for {{kib}} or {{es}} nodes, run the [`elasticsearch-create-enrollment-token`](https://www.elastic.co/guide/en/elasticsearch/reference/current/create-enrollment-token.html) tool. These tools are available in the {{es}} `bin` directory. +If you need to reset the password for the `elastic` user or other built-in users, run the [`elasticsearch-reset-password`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/reset-password.md) tool. To generate new enrollment tokens for {{kib}} or {{es}} nodes, run the [`elasticsearch-create-enrollment-token`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/create-enrollment-token.md) tool. These tools are available in the {{es}} `bin` directory. :::: @@ -56,7 +56,7 @@ If this is the first time you’re starting {{kib}}, this command generates a un 3. Log in to {{kib}} as the `elastic` user with the password that was generated when you started {{es}}. ::::{note} -If you need to reset the password for the `elastic` user or other built-in users, run the [`elasticsearch-reset-password`](https://www.elastic.co/guide/en/elasticsearch/reference/current/reset-password.html) tool. To generate new enrollment tokens for {{kib}} or {{es}} nodes, run the [`elasticsearch-create-enrollment-token`](https://www.elastic.co/guide/en/elasticsearch/reference/current/create-enrollment-token.html) tool. These tools are available in the {{es}} `bin` directory. +If you need to reset the password for the `elastic` user or other built-in users, run the [`elasticsearch-reset-password`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/reset-password.md) tool. To generate new enrollment tokens for {{kib}} or {{es}} nodes, run the [`elasticsearch-create-enrollment-token`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/create-enrollment-token.md) tool. These tools are available in the {{es}} `bin` directory. :::: diff --git a/deploy-manage/manage-connectors.md b/deploy-manage/manage-connectors.md index f85d84be1..085c1f30a 100644 --- a/deploy-manage/manage-connectors.md +++ b/deploy-manage/manage-connectors.md @@ -12,7 +12,7 @@ applies_to: Connectors serve as a central place to store connection information for both Elastic and third-party systems. They enable the linking of actions to rules, which execute as background tasks on the {{kib}} server when rule conditions are met. This allows rules to route actions to various destinations such as log files, ticketing systems, and messaging tools. Different {{kib}} apps may have their own rule types, but they typically share connectors. The **{{stack-manage-app}} > {{connectors-ui}}** provides a central location to view and manage all connectors in the current space. ::::{note} -This page is about {{kib}} connectors that integrate with services like generative AI model providers. If you’re looking for Search connectors that synchronize third-party data into {{es}}, refer to [Connector clients](https://www.elastic.co/guide/en/serverless/current/elasticsearch-ingest-data-through-integrations-connector-client.html). +This page is about {{kib}} connectors that integrate with services like generative AI model providers. If you’re looking for Search connectors that synchronize third-party data into {{es}}, refer to [Connector clients](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/search-connectors/index.md). :::: @@ -26,7 +26,7 @@ Access to connectors is granted based on your privileges to alerting-enabled fea stack: ``` -If you're using {{stack}}, use the [action configuration settings](https://www.elastic.co/guide/en/kibana/current/alert-action-settings-kb.html#action-settings) to customize connector networking configurations, such as proxies, certificates, or TLS settings. You can set configurations that apply to all your connectors or use `xpack.actions.customHostSettings` to set per-host configurations. +If you're using {{stack}}, use the [action configuration settings](asciidocalypse://docs/kibana/docs/reference/configuration-reference/alerting-settings.md#action-settings) to customize connector networking configurations, such as proxies, certificates, or TLS settings. You can set configurations that apply to all your connectors or use `xpack.actions.customHostSettings` to set per-host configurations. ## Connector list [connectors-list] @@ -66,7 +66,7 @@ Some connector types are paid commercial features, while others are free. For a After you create a connector, it is available for use any time you set up an action in the current space. ::::{tip} -For out-of-the-box and standardized connectors, refer to [preconfigured connectors](https://www.elastic.co/guide/en/kibana/current/pre-configured-connectors.html). +For out-of-the-box and standardized connectors, refer to [preconfigured connectors](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/pre-configured-connectors.md). You can also manage connectors as resources with the [Elasticstack provider](https://registry.terraform.io/providers/elastic/elasticstack/latest) for Terraform. For more details, refer to the [elasticstack_kibana_action_connector](https://registry.terraform.io/providers/elastic/elasticstack/latest/docs/resources/kibana_action_connector) resource. diff --git a/deploy-manage/manage-spaces.md b/deploy-manage/manage-spaces.md index a39994eb6..1cb6b9ef6 100644 --- a/deploy-manage/manage-spaces.md +++ b/deploy-manage/manage-spaces.md @@ -55,7 +55,7 @@ To go to **Spaces**, find **Stack Management** in the navigation menu or use the The maximum number of spaces that you can have differs by deployment type: * **Serverless projects:** Maximum of 100 spaces. -* **{{stack}} deployments:** Controlled by the `xpack.spaces.maxSpaces` setting. Default is 1000. View the full list of Space settings in [this document](https://www.elastic.co/guide/en/kibana/current/spaces-settings-kb.html). +* **{{stack}} deployments:** Controlled by the `xpack.spaces.maxSpaces` setting. Default is 1000. View the full list of Space settings in [this document](asciidocalypse://docs/kibana/docs/reference/configuration-reference/spaces-settings.md). To create a space: @@ -147,7 +147,7 @@ serverless: unavailable You can create a custom experience for users by configuring the {{kib}} landing page on a per-space basis. The landing page can route users to a specific dashboard, application, or saved object as they enter each space. -To configure the landing page, use the default route setting in [Stack Management > {{kib}} > Advanced settings](https://www.elastic.co/guide/en/kibana/current/advanced-options.html#kibana-general-settings). For example, you might set the default route to `/app/dashboards`. +To configure the landing page, use the default route setting in [Stack Management > {{kib}} > Advanced settings](asciidocalypse://docs/kibana/docs/reference/advanced-settings.md#kibana-general-settings). For example, you might set the default route to `/app/dashboards`. :::{image} ../images/kibana-spaces-configure-landing-page.png :alt: Configure space-level landing page diff --git a/deploy-manage/monitor/kibana-task-manager-health-monitoring.md b/deploy-manage/monitor/kibana-task-manager-health-monitoring.md index 1151b591f..90aaf301a 100644 --- a/deploy-manage/monitor/kibana-task-manager-health-monitoring.md +++ b/deploy-manage/monitor/kibana-task-manager-health-monitoring.md @@ -33,7 +33,7 @@ Monitoring the `_health` endpoint of each {{kib}} instance in the cluster is the The health monitoring API monitors the performance of Task Manager out of the box. However, certain performance considerations are deployment specific and you can configure them. -A health threshold is the threshold for failed task executions. Once a task exceeds this threshold, a status of `warn` or `error` is set on the task type execution. To configure a health threshold, use the [`xpack.task_manager.monitored_task_execution_thresholds`](https://www.elastic.co/guide/en/kibana/current/task-manager-settings-kb.html#task-manager-health-settings) setting. You can apply this this setting to all task types in the system, or to a custom task type. +A health threshold is the threshold for failed task executions. Once a task exceeds this threshold, a status of `warn` or `error` is set on the task type execution. To configure a health threshold, use the [`xpack.task_manager.monitored_task_execution_thresholds`](asciidocalypse://docs/kibana/docs/reference/configuration-reference/task-manager-settings.md#task-manager-health-settings) setting. You can apply this this setting to all task types in the system, or to a custom task type. By default, this setting marks the health of every task type as `warning` when it exceeds 80% failed executions, and as `error` at 90%. Set this value to a number between 0 to 100. The threshold is hit when the value **exceeds** this number. To avoid a status of `error`, set the threshold at 100. To hit `error` the moment any task fails, set the threshold to 0. @@ -73,11 +73,11 @@ logging: level: debug ``` -These stats are logged based on the number of milliseconds set in your [`xpack.task_manager.poll_interval`](https://www.elastic.co/guide/en/kibana/current/task-manager-settings-kb.html#task-manager-settings) setting, which could add substantial noise to your logs. Only enable this level of logging temporarily. +These stats are logged based on the number of milliseconds set in your [`xpack.task_manager.poll_interval`](asciidocalypse://docs/kibana/docs/reference/configuration-reference/task-manager-settings.md#task-manager-settings) setting, which could add substantial noise to your logs. Only enable this level of logging temporarily. **Automatic logging** -By default, the health API runs at a regular cadence, and each time it runs, it attempts to self evaluate its performance. If this self evaluation yields a potential problem, a message will log to the {{kib}} server log. In addition, the health API will look at how long tasks have waited to start (from when they were scheduled to start). If this number exceeds a configurable threshold ([`xpack.task_manager.monitored_stats_health_verbose_log.warn_delayed_task_start_in_seconds`](https://www.elastic.co/guide/en/kibana/current/task-manager-settings-kb.html#task-manager-settings)), the same message as above will log to the {{kib}} server log. +By default, the health API runs at a regular cadence, and each time it runs, it attempts to self evaluate its performance. If this self evaluation yields a potential problem, a message will log to the {{kib}} server log. In addition, the health API will look at how long tasks have waited to start (from when they were scheduled to start). If this number exceeds a configurable threshold ([`xpack.task_manager.monitored_stats_health_verbose_log.warn_delayed_task_start_in_seconds`](asciidocalypse://docs/kibana/docs/reference/configuration-reference/task-manager-settings.md#task-manager-settings)), the same message as above will log to the {{kib}} server log. This message looks like: @@ -85,7 +85,7 @@ This message looks like: Detected potential performance issue with Task Manager. Set 'xpack.task_manager.monitored_stats_health_verbose_log.enabled: true' in your Kibana.yml to enable debug logging` ``` -If this message appears, set [`xpack.task_manager.monitored_stats_health_verbose_log.enabled`](https://www.elastic.co/guide/en/kibana/current/task-manager-settings-kb.html#task-manager-settings) to `true` in your `kibana.yml`. This will start logging the health metrics at either a `warn` or `error` log level, depending on the detected severity of the potential problem. +If this message appears, set [`xpack.task_manager.monitored_stats_health_verbose_log.enabled`](asciidocalypse://docs/kibana/docs/reference/configuration-reference/task-manager-settings.md#task-manager-settings) to `true` in your `kibana.yml`. This will start logging the health metrics at either a `warn` or `error` log level, depending on the detected severity of the potential problem. ## Making sense of Task Manager health stats [making-sense-of-task-manager-health-stats] diff --git a/deploy-manage/monitor/logging-configuration/auditing-search-queries.md b/deploy-manage/monitor/logging-configuration/auditing-search-queries.md index edca7c555..1daef5b44 100644 --- a/deploy-manage/monitor/logging-configuration/auditing-search-queries.md +++ b/deploy-manage/monitor/logging-configuration/auditing-search-queries.md @@ -38,7 +38,7 @@ Not all events contain the `request.body` attribute, even when the above setting * `run_as_denied` * `anonymous_access_denied` -The `request.body` attribute is printed on the coordinating node only (the node that handles the REST request). Most of these event types are [not included by default](https://www.elastic.co/guide/en/elasticsearch/reference/current/auditing-settings.html#xpack-sa-lf-events-include). +The `request.body` attribute is printed on the coordinating node only (the node that handles the REST request). Most of these event types are [not included by default](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/auding-settings.md#xpack-sa-lf-events-include). A good practical piece of advice is to add `authentication_success` to the event types that are audited (add it to the list in the `xpack.security.audit.logfile.events.include`), as this event type is not audited by default. diff --git a/deploy-manage/monitor/logging-configuration/configuring-audit-logs.md b/deploy-manage/monitor/logging-configuration/configuring-audit-logs.md index 0e85b237f..2931a7854 100644 --- a/deploy-manage/monitor/logging-configuration/configuring-audit-logs.md +++ b/deploy-manage/monitor/logging-configuration/configuring-audit-logs.md @@ -15,9 +15,9 @@ When auditing security events, a single client request might generate multiple a {{es}} configuration options include: - * [{{es}} audited events settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/auditing-settings.html#event-audit-settings): Use include and exclude filters to control the types of events that get logged. - * [{{es}} node information settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/auditing-settings.html#node-audit-settings): Control whether to add or hide node information such as hostname or IP address in the audited events. - * [{{es}} ignore policies settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/auditing-settings.html#audit-event-ignore-policies): Use ignore policies for fine-grained control over which audit events are printed to the log file. + * [{{es}} audited events settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/auding-settings.md#event-audit-settings): Use include and exclude filters to control the types of events that get logged. + * [{{es}} node information settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/auding-settings.md#node-audit-settings): Control whether to add or hide node information such as hostname or IP address in the audited events. + * [{{es}} ignore policies settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/auding-settings.md#audit-event-ignore-policies): Use ignore policies for fine-grained control over which audit events are printed to the log file. ::::{tip} In {{es}}, all auditing settings except `xpack.security.audit.enabled` are dynamic. This means you can configure them using the [cluster update settings API](https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-update-settings.html), allowing changes to take effect immediately without requiring a restart. This approach is faster and more convenient than modifying `elasticsearch.yml`. @@ -29,9 +29,9 @@ For a complete description of event details and format, refer to the following r ### Kibana auditing configuration -To control the logs that are outputted by Kibana, you can use [{{kib}} ignore filters](https://www.elastic.co/guide/en/kibana/current/security-settings-kb.html#audit-logging-ignore-filters). These are a list of filters that determine which events should be excluded from the audit log. +To control the logs that are outputted by Kibana, you can use [{{kib}} ignore filters](asciidocalypse://docs/kibana/docs/reference/configuration-reference/security-settings.md#audit-logging-ignore-filters). These are a list of filters that determine which events should be excluded from the audit log. -In self-managed systems, you can optionally configure audit logs location, and file/rolling file using [{{kib}} audit logging settings](https://www.elastic.co/guide/en/kibana/current/security-settings-kb.html#audit-logging-settings). +In self-managed systems, you can optionally configure audit logs location, and file/rolling file using [{{kib}} audit logging settings](asciidocalypse://docs/kibana/docs/reference/configuration-reference/security-settings.md#audit-logging-settings). ::::{tip} @@ -42,7 +42,7 @@ For a complete description of auditing event details, such as `category`, `type` ### General recommendations -* Consider starting with {{es}} [`xpack.security.audit.logfile.events.include`](https://www.elastic.co/guide/en/elasticsearch/reference/current/auditing-settings.html#xpack-sa-lf-events-include) and [{{kib}} ignore filters](https://www.elastic.co/guide/en/kibana/current/security-settings-kb.html#audit-logging-ignore-filters) settings to specify the type of events you want to include or exclude in the auditing output. +* Consider starting with {{es}} [`xpack.security.audit.logfile.events.include`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/auding-settings.md#xpack-sa-lf-events-include) and [{{kib}} ignore filters](asciidocalypse://docs/kibana/docs/reference/configuration-reference/security-settings.md#audit-logging-ignore-filters) settings to specify the type of events you want to include or exclude in the auditing output. * If you need a more granular control, refer to [{{es}} audit events ignore policies](./logfile-audit-events-ignore-policies.md) for a better understanding how ignore policies work and when they are beneficial. diff --git a/deploy-manage/monitor/logging-configuration/kibana-log-settings-examples.md b/deploy-manage/monitor/logging-configuration/kibana-log-settings-examples.md index 226346121..e00568f38 100644 --- a/deploy-manage/monitor/logging-configuration/kibana-log-settings-examples.md +++ b/deploy-manage/monitor/logging-configuration/kibana-log-settings-examples.md @@ -29,7 +29,7 @@ logging: ## Log in JSON format [log-in-json-ECS-example] -Log the default log format to JSON layout instead of pattern (the default). With `json` layout, log messages will be formatted as JSON strings in [ECS format](https://www.elastic.co/guide/en/ecs/current/ecs-reference.html) that includes a timestamp, log level, logger, message text and any other metadata that may be associated with the log message itself. +Log the default log format to JSON layout instead of pattern (the default). With `json` layout, log messages will be formatted as JSON strings in [ECS format](asciidocalypse://docs/ecs/docs/reference/ecs/index.md) that includes a timestamp, log level, logger, message text and any other metadata that may be associated with the log message itself. ```yaml logging: diff --git a/deploy-manage/monitor/logging-configuration/kibana-logging.md b/deploy-manage/monitor/logging-configuration/kibana-logging.md index 8118fcab5..76fcddc6a 100644 --- a/deploy-manage/monitor/logging-configuration/kibana-logging.md +++ b/deploy-manage/monitor/logging-configuration/kibana-logging.md @@ -98,7 +98,7 @@ The pattern layout also offers a `highlight` option that allows you to highlight ### JSON layout [json-layout] -With `json` layout log messages will be formatted as JSON strings in [ECS format](https://www.elastic.co/guide/en/ecs/current/ecs-reference.html) that includes a timestamp, log level, logger, message text and any other metadata that may be associated with the log message itself. +With `json` layout log messages will be formatted as JSON strings in [ECS format](asciidocalypse://docs/ecs/docs/reference/ecs/index.md) that includes a timestamp, log level, logger, message text and any other metadata that may be associated with the log message itself. ## Logger hierarchy [logger-hierarchy] diff --git a/deploy-manage/monitor/logging-configuration/logfile-audit-events-ignore-policies.md b/deploy-manage/monitor/logging-configuration/logfile-audit-events-ignore-policies.md index 538425174..7383838c4 100644 --- a/deploy-manage/monitor/logging-configuration/logfile-audit-events-ignore-policies.md +++ b/deploy-manage/monitor/logging-configuration/logfile-audit-events-ignore-policies.md @@ -14,7 +14,7 @@ applies: The comprehensive audit trail is necessary to ensure accountability. It offers tremendous value during incident response and can even be required for demonstrating compliance. -The drawback of an audited system is represented by the inevitable performance penalty incurred. In all truth, the audit trail spends *I/O ops* that are not available anymore for the user’s queries. Sometimes the verbosity of the audit trail may become a problem that the event type restrictions, [defined by `include` and `exclude`](https://www.elastic.co/guide/en/elasticsearch/reference/current/auditing-settings.html#event-audit-settings), will not alleviate. +The drawback of an audited system is represented by the inevitable performance penalty incurred. In all truth, the audit trail spends *I/O ops* that are not available anymore for the user’s queries. Sometimes the verbosity of the audit trail may become a problem that the event type restrictions, [defined by `include` and `exclude`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/auding-settings.md#event-audit-settings), will not alleviate. **Audit events ignore policies** are a finer way to tune the verbosity of the audit trail. These policies define rules that match audit events which will be *ignored* (read as: not printed). Rules match on the values of attributes of audit events and complement the `include` or `exclude` method. Imagine the corpus of audit events and the policies chopping off unwanted events. With a sole exception, all audit events are subject to the ignore policies. The exception are events of type `security_config_change`, which cannot be filtered out, unless excluded altogether. @@ -22,7 +22,7 @@ The drawback of an audited system is represented by the inevitable performance p When utilizing audit events ignore policies you are acknowledging potential accountability gaps that could render illegitimate actions undetectable. Please take time to review these policies whenever your system architecture changes. :::: -A policy is a named set of filter rules. Each filter rule applies to a single event attribute, one of the `users`, `realms`, `actions`, `roles` or `indices` attributes. The filter rule defines a list of [Lucene regexp](https://www.elastic.co/guide/en/elasticsearch/reference/current/regexp-syntax.html), **any** of which has to match the value of the audit event attribute for the rule to match. A policy matches an event if **all** the rules comprising it match the event. An audit event is ignored, therefore not printed, if it matches **any** policy. All other non-matching events are printed as usual. +A policy is a named set of filter rules. Each filter rule applies to a single event attribute, one of the `users`, `realms`, `actions`, `roles` or `indices` attributes. The filter rule defines a list of [Lucene regexp](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/regexp-syntax.md), **any** of which has to match the value of the audit event attribute for the rule to match. A policy matches an event if **all** the rules comprising it match the event. An audit event is ignored, therefore not printed, if it matches **any** policy. All other non-matching events are printed as usual. All policies are defined under the `xpack.security.audit.logfile.events.ignore_filters` settings namespace. For example, the following policy named *example1* matches events from the *kibana_system* or *admin_user* principals that operate over indices of the wildcard form *app-logs**: diff --git a/deploy-manage/monitor/monitoring-data/config-monitoring-indices-metricbeat-7-internal-collection.md b/deploy-manage/monitor/monitoring-data/config-monitoring-indices-metricbeat-7-internal-collection.md index d914a9535..1f090f1f9 100644 --- a/deploy-manage/monitor/monitoring-data/config-monitoring-indices-metricbeat-7-internal-collection.md +++ b/deploy-manage/monitor/monitoring-data/config-monitoring-indices-metricbeat-7-internal-collection.md @@ -10,7 +10,7 @@ applies: # Configuring indices created by Metricbeat 7 or internal collection [config-monitoring-indices-metricbeat-7-internal-collection] -When monitoring [using {{metricbeat}} 7](../stack-monitoring/collecting-monitoring-data-with-metricbeat.md) or [internal collection](https://www.elastic.co/guide/en/beats/filebeat/current/monitoring-internal-collection.html), data is stored in a set of indices called either: +When monitoring [using {{metricbeat}} 7](../stack-monitoring/collecting-monitoring-data-with-metricbeat.md) or [internal collection](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/monitoring-internal-collection.md), data is stored in a set of indices called either: * `.monitoring-{{product}}-7-mb-{{date}}`, when using {{metricbeat}} 7. * `.monitoring-{{product}}-7-{{date}}`, when using internal collection. diff --git a/deploy-manage/monitor/monitoring-data/configure-stack-monitoring-alerts.md b/deploy-manage/monitor/monitoring-data/configure-stack-monitoring-alerts.md index 1709caff0..28872c2a0 100644 --- a/deploy-manage/monitor/monitoring-data/configure-stack-monitoring-alerts.md +++ b/deploy-manage/monitor/monitoring-data/configure-stack-monitoring-alerts.md @@ -13,7 +13,7 @@ applies: You can configure Stack monitoring alerts to be sent to you by email when health related events occur in your deployments. To set up email notifications: 1. [Enable logging and monitoring](../stack-monitoring/elastic-cloud-stack-monitoring.md) on deployments for which you want to receive notifications. You need to enable only metrics data being shipped for the notifications to work. -2. In Kibana, configure the email connector to [send email from Elastic Cloud](https://www.elastic.co/guide/en/kibana/current/email-action-type.html#elasticcloud). If you want to use the preconfigured `Elastic-Cloud-SMTP` connector in Elastic Cloud, then you can skip this step. +2. In Kibana, configure the email connector to [send email from Elastic Cloud](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/email-action-type.md#elasticcloud). If you want to use the preconfigured `Elastic-Cloud-SMTP` connector in Elastic Cloud, then you can skip this step. 3. From the Kibana main menu, go to **Stack Monitoring**. On this page you can find a summary of monitoring metrics for your deployment as well as any alerts. 4. Select **Enter setup mode**. 5. On any card showing available alerts, select the **alerts** indicator. Use the menu to select the type of alert for which you’d like to be notified. There are many alert types, including: diff --git a/deploy-manage/monitor/monitoring-data/ec-memory-pressure.md b/deploy-manage/monitor/monitoring-data/ec-memory-pressure.md index 5e3d94bf0..21b6a69d7 100644 --- a/deploy-manage/monitor/monitoring-data/ec-memory-pressure.md +++ b/deploy-manage/monitor/monitoring-data/ec-memory-pressure.md @@ -22,7 +22,7 @@ The percentage number used in the JVM memory pressure indicator is actually the When the JVM memory pressure reaches 75%, the indicator turns red. At this level, garbage collection becomes more frequent as the memory usage increases, potentially impacting the performance of your cluster. As long as the cluster performance suits your needs, JVM memory pressure above 75% is not a problem in itself, but there is not much spare memory capacity. Review the [common causes of high JVM memory usage](#ec-memory-pressure-causes) to determine your best course of action. -When the JVM memory pressure indicator rises above 95%, {{es}}'s [real memory circuit breaker](https://www.elastic.co/guide/en/elasticsearch/reference/current/circuit-breaker.html#parent-circuit-breaker) triggers to prevent your instance from running out of memory. This situation can reduce the stability of your cluster and the integrity of your data. Unless you expect the load to drop soon, we recommend that you resize to a larger cluster before you reach this level of memory pressure. Even if you’re planning to optimize your memory usage, it is best to resize the cluster first. Resizing the cluster to increase capacity can give you more time to apply other changes, and also provides the cluster with more resource for when those changes are applied. +When the JVM memory pressure indicator rises above 95%, {{es}}'s [real memory circuit breaker](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/circuit-breaker-settings.md#parent-circuit-breaker) triggers to prevent your instance from running out of memory. This situation can reduce the stability of your cluster and the integrity of your data. Unless you expect the load to drop soon, we recommend that you resize to a larger cluster before you reach this level of memory pressure. Even if you’re planning to optimize your memory usage, it is best to resize the cluster first. Resizing the cluster to increase capacity can give you more time to apply other changes, and also provides the cluster with more resource for when those changes are applied. ## Common causes of high JVM memory usage [ec-memory-pressure-causes] @@ -31,7 +31,7 @@ The two most common reasons for a high JVM memory pressure reading are: **1. Having too many shards per node** -If JVM memory pressure above 75% is a frequent occurrence, the cause is often having too many shards per node relative to the amount of available memory. You can lower the JVM memory pressure by reducing the number of shards or upgrading to a larger cluster. For guidelines, check [How to size your shards](https://www.elastic.co/guide/en/elasticsearch/reference/current/size-your-shards.html). +If JVM memory pressure above 75% is a frequent occurrence, the cause is often having too many shards per node relative to the amount of available memory. You can lower the JVM memory pressure by reducing the number of shards or upgrading to a larger cluster. For guidelines, check [How to size your shards](/deploy-manage/production-guidance/optimize-performance/size-shards.md). **2. Running expensive queries** diff --git a/deploy-manage/monitor/monitoring-data/ec-vcpu-boost-instance.md b/deploy-manage/monitor/monitoring-data/ec-vcpu-boost-instance.md index b72326108..4b408f5c2 100644 --- a/deploy-manage/monitor/monitoring-data/ec-vcpu-boost-instance.md +++ b/deploy-manage/monitor/monitoring-data/ec-vcpu-boost-instance.md @@ -15,13 +15,13 @@ Elastic Cloud allows smaller instance sizes to get temporarily boosted vCPU when Based on the instance size, the vCPU resources assigned to your instance can be boosted to improve performance temporarily, by using vCPU credits. If credits are available, Elastic Cloud will automatically boost your instance when under heavy load. Boosting is available depending on the instance size: -* Instance sizes up to and including 12 GB of RAM get boosted. The boosted vCPU value is `16 * vCPU ratio`, the vCPU ratios are dependent on the [hardware profile](https://www.elastic.co/guide/en/cloud/current/ec-reference-hardware.html#ec-getting-started-configurations) selected. If an instance is eligible for boosting, the Elastic Cloud console will display **Up to 2.5 vCPU**, depending on the hardware profile selected. The baseline, or unboosted, vCPU value is calculated as: `RAM size * vCPU ratio`. +* Instance sizes up to and including 12 GB of RAM get boosted. The boosted vCPU value is `16 * vCPU ratio`, the vCPU ratios are dependent on the [hardware profile](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/hardware.md#ec-getting-started-configurations) selected. If an instance is eligible for boosting, the Elastic Cloud console will display **Up to 2.5 vCPU**, depending on the hardware profile selected. The baseline, or unboosted, vCPU value is calculated as: `RAM size * vCPU ratio`. * Instance sizes bigger than 12 GB of RAM do not get boosted. The vCPU value is displayed in the Elastic Cloud console and calculated as follows: `RAM size * vCPU ratio`. ## What are vCPU credits? [ec_what_are_vcpu_credits] -[vCPU](https://www.elastic.co/guide/en/elastic-stack-glossary/current/terms.html#glossary-vcpu) credits enable a smaller instance to perform as if it were assigned the vCPU resources of a larger instance, but only for a limited time. vCPU credits are available only on smaller instances up to and including 8 GB of RAM. +[vCPU](asciidocalypse://docs/docs-content/docs/reference/glossary/index.md#glossary-vcpu) credits enable a smaller instance to perform as if it were assigned the vCPU resources of a larger instance, but only for a limited time. vCPU credits are available only on smaller instances up to and including 8 GB of RAM. vCPU credits persist through cluster restarts, but they are tied to your existing instance nodes. Operations that create new instance nodes will lose existing vCPU credits. This happens when you resize your instance, or if Elastic performs system maintenance on your nodes. @@ -34,7 +34,7 @@ For example: An instance with 4 GB of RAM, can at most accumulate four hours wor If you observe declining performance on a smaller instance over time, you might have depleted your vCPU credits. In this case, increase the size of your cluster to handle the workload with consistent performance. -For more information, check [Elasticsearch Service default provider instance configurations](https://www.elastic.co/guide/en/cloud/current/ec-reference-hardware.html#ec-getting-started-configurations). +For more information, check [Elasticsearch Service default provider instance configurations](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/hardware.md#ec-getting-started-configurations). ## Where to check vCPU credits status? [ec_where_to_check_vcpu_credits_status] diff --git a/deploy-manage/monitor/monitoring-data/elasticsearch-metrics.md b/deploy-manage/monitor/monitoring-data/elasticsearch-metrics.md index 14f6b1487..c0a8741e2 100644 --- a/deploy-manage/monitor/monitoring-data/elasticsearch-metrics.md +++ b/deploy-manage/monitor/monitoring-data/elasticsearch-metrics.md @@ -119,5 +119,5 @@ If you use {{filebeat}} to collect log data from your cluster, you can see its r If you click **Logs**, you can see the most recent logs for the cluster. ::::{tip} -By default, up to 10 log entries are shown. You can show up to 50 log entries by changing the [`monitoring.ui.elasticsearch.logFetchCount` setting](https://www.elastic.co/guide/en/kibana/current/monitoring-settings-kb.html#monitoring-ui-settings). If you changed the default name of filebeat indices, you also need to update `monitoring.ui.logs.index` accordingly. +By default, up to 10 log entries are shown. You can show up to 50 log entries by changing the [`monitoring.ui.elasticsearch.logFetchCount` setting](asciidocalypse://docs/kibana/docs/reference/configuration-reference/monitoring-settings.md#monitoring-ui-settings). If you changed the default name of filebeat indices, you also need to update `monitoring.ui.logs.index` accordingly. :::: diff --git a/deploy-manage/monitor/monitoring-data/logstash-page.md b/deploy-manage/monitor/monitoring-data/logstash-page.md index 440228333..c188ac0fe 100644 --- a/deploy-manage/monitor/monitoring-data/logstash-page.md +++ b/deploy-manage/monitor/monitoring-data/logstash-page.md @@ -24,4 +24,4 @@ If you are monitoring Logstash nodes, click **Overview** in the Logstash section 1. To view Logstash node metrics, click **Nodes**. The Nodes section shows the status of each Logstash node. 2. Click the name of a node to view its statistics over time. -For more information, refer to [Monitoring Logstash](https://www.elastic.co/guide/en/logstash/current/configuring-logstash.html). +For more information, refer to [Monitoring Logstash](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/monitoring-logstash-legacy.md). diff --git a/deploy-manage/monitor/monitoring-data/monitor-troubleshooting.md b/deploy-manage/monitor/monitoring-data/monitor-troubleshooting.md index c6576df07..fece15767 100644 --- a/deploy-manage/monitor/monitoring-data/monitor-troubleshooting.md +++ b/deploy-manage/monitor/monitoring-data/monitor-troubleshooting.md @@ -47,7 +47,7 @@ The **Stack Monitoring** page in {{kib}} is empty. **Resolution:** -1. Confirm that {{kib}} is seeking monitoring data from the appropriate {{es}} URL. By default, data is retrieved from the cluster specified in the `elasticsearch.hosts` setting in the `kibana.yml` file. If you want to retrieve it from a different monitoring cluster, set `monitoring.ui.elasticsearch.hosts`. See [Monitoring settings](https://www.elastic.co/guide/en/kibana/current/monitoring-settings-kb.html). +1. Confirm that {{kib}} is seeking monitoring data from the appropriate {{es}} URL. By default, data is retrieved from the cluster specified in the `elasticsearch.hosts` setting in the `kibana.yml` file. If you want to retrieve it from a different monitoring cluster, set `monitoring.ui.elasticsearch.hosts`. See [Monitoring settings](asciidocalypse://docs/kibana/docs/reference/configuration-reference/monitoring-settings.md). 2. Confirm that there is monitoring data available at that URL. It is stored in indices such as `.monitoring-kibana-*` and `.monitoring-es-*` or `metrics-kibana.stack_monitoring.*`, depending on which method is used to collect monitoring data. At a minimum, you must have monitoring data for the {{es}} production cluster. Once that data exists, {{kib}} can display monitoring data for other products in the cluster. 3. Set the time filter to “Last 1 hour”. When monitoring data appears in your cluster, the page automatically refreshes with the monitoring summary. 4. If using {{agent}}, ensure that all integration assets have been installed in the monitoring cluster. diff --git a/deploy-manage/monitor/monitoring-data/visualizing-monitoring-data.md b/deploy-manage/monitor/monitoring-data/visualizing-monitoring-data.md index 4b45cbdf9..69311a09e 100644 --- a/deploy-manage/monitor/monitoring-data/visualizing-monitoring-data.md +++ b/deploy-manage/monitor/monitoring-data/visualizing-monitoring-data.md @@ -19,5 +19,5 @@ If you enable monitoring across the {{stack}}, each monitored component is consi For more information, see [Configure monitoring](../stack-monitoring/kibana-monitoring-self-managed.md) and [Monitor a cluster](../../monitor.md). -Want to monitor your fleet of {{agent}}s, too? Use {{fleet}} instead of the Stack Monitoring UI. To learn more, refer to [Monitor {{agent}}s](https://www.elastic.co/guide/en/fleet/current/monitor-elastic-agent.html). +Want to monitor your fleet of {{agent}}s, too? Use {{fleet}} instead of the Stack Monitoring UI. To learn more, refer to [Monitor {{agent}}s](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/monitor-elastic-agent.md). diff --git a/deploy-manage/monitor/stack-monitoring/collecting-log-data-with-filebeat.md b/deploy-manage/monitor/stack-monitoring/collecting-log-data-with-filebeat.md index 95d163919..0f6c1f8a3 100644 --- a/deploy-manage/monitor/stack-monitoring/collecting-log-data-with-filebeat.md +++ b/deploy-manage/monitor/stack-monitoring/collecting-log-data-with-filebeat.md @@ -26,13 +26,13 @@ If you’re using {{agent}}, do not deploy {{filebeat}} for log collection. Inst 2. Identify which logs you want to monitor. - The {{filebeat}} {{es}} module can handle [audit logs](../logging-configuration/logfile-audit-output.md), [deprecation logs](../logging-configuration/elasticsearch-log4j-configuration-self-managed.md#deprecation-logging), [gc logs](https://www.elastic.co/guide/en/elasticsearch/reference/current/advanced-configuration.html#gc-logging), [server logs](../logging-configuration/elasticsearch-log4j-configuration-self-managed.md), and [slow logs](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-slowlog.html). For more information about the location of your {{es}} logs, see the [path.logs](../../deploy/self-managed/important-settings-configuration.md#path-settings) setting. + The {{filebeat}} {{es}} module can handle [audit logs](../logging-configuration/logfile-audit-output.md), [deprecation logs](../logging-configuration/elasticsearch-log4j-configuration-self-managed.md#deprecation-logging), [gc logs](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/jvm-settings.md#gc-logging), [server logs](../logging-configuration/elasticsearch-log4j-configuration-self-managed.md), and [slow logs](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/slow-log-settings.md). For more information about the location of your {{es}} logs, see the [path.logs](../../deploy/self-managed/important-settings-configuration.md#path-settings) setting. ::::{important} If there are both structured (`*.json`) and unstructured (plain text) versions of the logs, you must use the structured logs. Otherwise, they might not appear in the appropriate context in {{kib}}. :::: -3. [Install {{filebeat}}](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation-configuration.html) on the {{es}} nodes that contain logs that you want to monitor. +3. [Install {{filebeat}}](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-installation-configuration.md) on the {{es}} nodes that contain logs that you want to monitor. 4. Identify where to send the log data. For example, specify {{es}} output information for your monitoring cluster in the {{filebeat}} configuration file (`filebeat.yml`): @@ -60,7 +60,7 @@ If you’re using {{agent}}, do not deploy {{filebeat}} for log collection. Inst If {{es}} {{security-features}} are enabled on the monitoring cluster, you must provide a valid user ID and password so that {{filebeat}} can send metrics successfully. - For more information about these configuration options, see [Configure the {{es}} output](https://www.elastic.co/guide/en/beats/filebeat/current/elasticsearch-output.html). + For more information about these configuration options, see [Configure the {{es}} output](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/elasticsearch-output.md). 5. Optional: Identify where to visualize the data. @@ -81,9 +81,9 @@ If you’re using {{agent}}, do not deploy {{filebeat}} for log collection. Inst If {{security-features}} are enabled, you must provide a valid user ID and password so that {{filebeat}} can connect to {{kib}}: 1. Create a user on the monitoring cluster that has the [`kibana_admin` built-in role](../../users-roles/cluster-or-deployment-auth/built-in-roles.md) or equivalent privileges. - 2. Add the `username` and `password` settings to the {{es}} output information in the {{filebeat}} configuration file. The example shows a hard-coded password, but you should store sensitive values in the [secrets keystore](https://www.elastic.co/guide/en/beats/filebeat/current/keystore.html). + 2. Add the `username` and `password` settings to the {{es}} output information in the {{filebeat}} configuration file. The example shows a hard-coded password, but you should store sensitive values in the [secrets keystore](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/keystore.md). - See [Configure the {{kib}} endpoint](https://www.elastic.co/guide/en/beats/filebeat/current/setup-kibana-endpoint.html). + See [Configure the {{kib}} endpoint](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/setup-kibana-endpoint.md). 6. Enable the {{es}} module and set up the initial {{filebeat}} environment on each node. @@ -94,20 +94,20 @@ If you’re using {{agent}}, do not deploy {{filebeat}} for log collection. Inst filebeat setup -e ``` - For more information, see [{{es}} module](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-elasticsearch.html). + For more information, see [{{es}} module](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-module-elasticsearch.md). 7. Configure the {{es}} module in {{filebeat}} on each node. - If the logs that you want to monitor aren’t in the default location, set the appropriate path variables in the `modules.d/elasticsearch.yml` file. See [Configure the {{es}} module](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-elasticsearch.html#configuring-elasticsearch-module). + If the logs that you want to monitor aren’t in the default location, set the appropriate path variables in the `modules.d/elasticsearch.yml` file. See [Configure the {{es}} module](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-module-elasticsearch.md#configuring-elasticsearch-module). ::::{important} If there are JSON logs, configure the `var.paths` settings to point to them instead of the plain text logs. :::: -8. [Start {{filebeat}}](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-starting.html) on each node. +8. [Start {{filebeat}}](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-starting.md) on each node. ::::{note} - Depending on how you’ve installed {{filebeat}}, you might see errors related to file ownership or permissions when you try to run {{filebeat}} modules. See [Config file ownership and permissions](https://www.elastic.co/guide/en/beats/libbeat/current/config-file-permissions.html). + Depending on how you’ve installed {{filebeat}}, you might see errors related to file ownership or permissions when you try to run {{filebeat}} modules. See [Config file ownership and permissions](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-libbeat/config-file-permissions.md). :::: 9. Check whether the appropriate indices exist on the monitoring cluster. diff --git a/deploy-manage/monitor/stack-monitoring/collecting-monitoring-data-with-metricbeat.md b/deploy-manage/monitor/stack-monitoring/collecting-monitoring-data-with-metricbeat.md index 7e609801f..7b1348462 100644 --- a/deploy-manage/monitor/stack-monitoring/collecting-monitoring-data-with-metricbeat.md +++ b/deploy-manage/monitor/stack-monitoring/collecting-monitoring-data-with-metricbeat.md @@ -19,7 +19,7 @@ Want to use {{agent}} instead? Refer to [Collecting monitoring data with {{agent :alt: Example monitoring architecture ::: -1. [Install {{metricbeat}}](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-installation-configuration.html). Ideally install a single {{metricbeat}} instance configured with `scope: cluster` and configure `hosts` to point to an endpoint (e.g. a load-balancing proxy) which directs requests to the master-ineligible nodes in the cluster. If this is not possible then install one {{metricbeat}} instance for each {{es}} node in the production cluster and use the default `scope: node`. When {{metricbeat}} is monitoring {{es}} with `scope: node` then you must install a {{metricbeat}} instance for each {{es}} node. If you don’t, some metrics will not be collected. {{metricbeat}} with `scope: node` collects most of the metrics from the elected master of the cluster, so you must scale up all your master-eligible nodes to account for this extra load and you should not use this mode if you have dedicated master nodes. +1. [Install {{metricbeat}}](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/metricbeat-installation-configuration.md). Ideally install a single {{metricbeat}} instance configured with `scope: cluster` and configure `hosts` to point to an endpoint (e.g. a load-balancing proxy) which directs requests to the master-ineligible nodes in the cluster. If this is not possible then install one {{metricbeat}} instance for each {{es}} node in the production cluster and use the default `scope: node`. When {{metricbeat}} is monitoring {{es}} with `scope: node` then you must install a {{metricbeat}} instance for each {{es}} node. If you don’t, some metrics will not be collected. {{metricbeat}} with `scope: node` collects most of the metrics from the elected master of the cluster, so you must scale up all your master-eligible nodes to account for this extra load and you should not use this mode if you have dedicated master nodes. 2. Enable the {{es}} module in {{metricbeat}} on each {{es}} node. For example, to enable the default configuration for the {{stack-monitor-features}} in the `modules.d` directory, run the following command: @@ -28,7 +28,7 @@ Want to use {{agent}} instead? Refer to [Collecting monitoring data with {{agent metricbeat modules enable elasticsearch-xpack ``` - For more information, refer to [{{es}} module](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-module-elasticsearch.html). + For more information, refer to [{{es}} module](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/metricbeat-module-elasticsearch.md). 3. Configure the {{es}} module in {{metricbeat}} on each {{es}} node. @@ -57,11 +57,11 @@ Want to use {{agent}} instead? Refer to [Collecting monitoring data with {{agent 1. Create a user on the production cluster that has the [`remote_monitoring_collector` built-in role](../../users-roles/cluster-or-deployment-auth/built-in-roles.md). Alternatively, use the [`remote_monitoring_user` built-in user](../../users-roles/cluster-or-deployment-auth/built-in-users.md). 2. Add the `username` and `password` settings to the {{es}} module configuration file. - 3. If TLS is enabled on the HTTP layer of your {{es}} cluster, you must either use https as the URL scheme in the `hosts` setting or add the `ssl.enabled: true` setting. Depending on the TLS configuration of your {{es}} cluster, you might also need to specify [additional ssl.*](https://www.elastic.co/guide/en/beats/metricbeat/current/configuration-ssl.html) settings. + 3. If TLS is enabled on the HTTP layer of your {{es}} cluster, you must either use https as the URL scheme in the `hosts` setting or add the `ssl.enabled: true` setting. Depending on the TLS configuration of your {{es}} cluster, you might also need to specify [additional ssl.*](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/configuration-ssl.md) settings. 4. Optional: Disable the system module in {{metricbeat}}. - By default, the [system module](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-module-system.html) is enabled. The information it collects, however, is not shown on the **Monitoring** page in {{kib}}. Unless you want to use that information for other purposes, run the following command: + By default, the [system module](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/metricbeat-module-system.md) is enabled. The information it collects, however, is not shown on the **Monitoring** page in {{kib}}. Unless you want to use that information for other purposes, run the following command: ```sh metricbeat modules disable system @@ -102,8 +102,8 @@ Want to use {{agent}} instead? Refer to [Collecting monitoring data with {{agent 1. Create a user on the monitoring cluster that has the [`remote_monitoring_agent` built-in role](../../users-roles/cluster-or-deployment-auth/built-in-roles.md). Alternatively, use the [`remote_monitoring_user` built-in user](../../users-roles/cluster-or-deployment-auth/built-in-users.md). 2. Add the `username` and `password` settings to the {{es}} output information in the {{metricbeat}} configuration file. - For more information about these configuration options, see [Configure the {{es}} output](https://www.elastic.co/guide/en/beats/metricbeat/current/elasticsearch-output.html). + For more information about these configuration options, see [Configure the {{es}} output](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/elasticsearch-output.md). -6. [Start {{metricbeat}}](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-starting.html) on each node. +6. [Start {{metricbeat}}](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/metricbeat-starting.md) on each node. 7. [View the monitoring data in {{kib}}](kibana-monitoring-data.md). diff --git a/deploy-manage/monitor/stack-monitoring/ece-stack-monitoring.md b/deploy-manage/monitor/stack-monitoring/ece-stack-monitoring.md index 4f1be782c..1da4335e2 100644 --- a/deploy-manage/monitor/stack-monitoring/ece-stack-monitoring.md +++ b/deploy-manage/monitor/stack-monitoring/ece-stack-monitoring.md @@ -181,7 +181,7 @@ When shipping logs to a monitoring deployment there are more logging features av #### For {{es}}: [ece-extra-logging-features-elasticsearch] * [Audit logging](../logging-configuration/enabling-audit-logs.md) - logs security-related events on your deployment -* [Slow query and index logging](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-slowlog.html) - helps find and debug slow queries and indexing +* [Slow query and index logging](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/slow-log-settings.md) - helps find and debug slow queries and indexing * Verbose logging - helps debug stack issues by increasing component logs After you’ve enabled log delivery on your deployment, you can [add the Elasticsearch user settings](../../deploy/cloud-enterprise/edit-stack-settings.md) to enable these features. diff --git a/deploy-manage/monitor/stack-monitoring/eck-stack-monitoring.md b/deploy-manage/monitor/stack-monitoring/eck-stack-monitoring.md index 5bbeafacd..1032c2c7e 100644 --- a/deploy-manage/monitor/stack-monitoring/eck-stack-monitoring.md +++ b/deploy-manage/monitor/stack-monitoring/eck-stack-monitoring.md @@ -8,7 +8,7 @@ applies: # Enable stack monitoring on ECK deployments [k8s-stack-monitoring] -You can enable [Stack Monitoring](https://www.elastic.co/guide/en/elasticsearch/reference/current/monitor-elasticsearch-cluster.html) on Elasticsearch, Kibana, Beats and Logstash to collect and ship their metrics and logs to a monitoring cluster. Although self-monitoring is possible, it is advised to use a [separate monitoring cluster](https://www.elastic.co/guide/en/elasticsearch/reference/current/monitoring-overview.html). +You can enable [Stack Monitoring](/deploy-manage/monitor.md) on Elasticsearch, Kibana, Beats and Logstash to collect and ship their metrics and logs to a monitoring cluster. Although self-monitoring is possible, it is advised to use a [separate monitoring cluster](/deploy-manage/monitor/stack-monitoring.md). To enable Stack Monitoring, simply reference the monitoring Elasticsearch cluster in the `spec.monitoring` section of their specification. @@ -80,7 +80,7 @@ If Logs Stack Monitoring is configured for a Beat, and custom container argument :::: -You can also enable Stack Monitoring on a single Stack component only. In case Elasticsearch is not monitored, other Stack components will not be available on the Stack Monitoring Kibana page (check [View monitoring data in Kibana](https://www.elastic.co/guide/en/kibana/current/monitoring-data.html#monitoring-data)). +You can also enable Stack Monitoring on a single Stack component only. In case Elasticsearch is not monitored, other Stack components will not be available on the Stack Monitoring Kibana page (check [View monitoring data in Kibana](/deploy-manage/monitor/stack-monitoring/kibana-monitoring-data.md)). diff --git a/deploy-manage/monitor/stack-monitoring/es-http-exporter.md b/deploy-manage/monitor/stack-monitoring/es-http-exporter.md index 6bf7dd4a8..74f9dd900 100644 --- a/deploy-manage/monitor/stack-monitoring/es-http-exporter.md +++ b/deploy-manage/monitor/stack-monitoring/es-http-exporter.md @@ -17,9 +17,9 @@ If you have previously configured legacy collection methods, you should migrate The `http` exporter is the preferred exporter in the {{es}} {{monitor-features}} because it enables the use of a separate monitoring cluster. As a secondary benefit, it avoids using a production cluster node as a coordinating node for indexing monitoring data because all requests are HTTP requests to the monitoring cluster. -The `http` exporter uses the low-level {{es}} REST Client, which enables it to send its data to any {{es}} cluster it can access through the network. Its requests make use of the [`filter_path`](https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#common-options-response-filtering) parameter to reduce bandwidth whenever possible, which helps to ensure that communications between the production and monitoring clusters are as lightweight as possible. +The `http` exporter uses the low-level {{es}} REST Client, which enables it to send its data to any {{es}} cluster it can access through the network. Its requests make use of the [`filter_path`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/common-options.md#common-options-response-filtering) parameter to reduce bandwidth whenever possible, which helps to ensure that communications between the production and monitoring clusters are as lightweight as possible. -The `http` exporter supports a number of settings that control how it communicates over HTTP to remote clusters. In most cases, it is not necessary to explicitly configure these settings. For detailed descriptions, see [Monitoring settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/monitoring-settings.html). +The `http` exporter supports a number of settings that control how it communicates over HTTP to remote clusters. In most cases, it is not necessary to explicitly configure these settings. For detailed descriptions, see [Monitoring settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/monitoring-settings.md). ```yaml xpack.monitoring.exporters: @@ -47,7 +47,7 @@ xpack.monitoring.exporters: 2. An `http` exporter defined whose arbitrary name is `my_remote`. This name uniquely defines the exporter but is otherwise unused. 3. `host` is a required setting for `http` exporters. It must specify the HTTP port rather than the transport port. The default port value is `9200`. 4. User authentication for those using {{stack}} {{security-features}} or some other form of user authentication protecting the cluster. -5. See [HTTP exporter settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/monitoring-settings.html#http-exporter-settings) for all TLS/SSL settings. If not supplied, the default node-level TLS/SSL settings are used. +5. See [HTTP exporter settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/monitoring-settings.md#http-exporter-settings) for all TLS/SSL settings. If not supplied, the default node-level TLS/SSL settings are used. 6. Optional base path to prefix any outgoing request with in order to work with proxies. 7. Arbitrary key/value pairs to define as headers to send with every request. The array-based key/value format sends one header per value. 8. A mechanism for changing the date suffix used by default. @@ -79,5 +79,5 @@ When discussing security relative to the `http` exporter, it is critical to reme :::: -For more information about the configuration options for the `http` exporter, see [HTTP exporter settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/monitoring-settings.html#http-exporter-settings). +For more information about the configuration options for the `http` exporter, see [HTTP exporter settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/monitoring-settings.md#http-exporter-settings). diff --git a/deploy-manage/monitor/stack-monitoring/es-legacy-collection-methods.md b/deploy-manage/monitor/stack-monitoring/es-legacy-collection-methods.md index 4c5f95426..d46605a97 100644 --- a/deploy-manage/monitor/stack-monitoring/es-legacy-collection-methods.md +++ b/deploy-manage/monitor/stack-monitoring/es-legacy-collection-methods.md @@ -33,7 +33,7 @@ To learn about monitoring in general, see [Monitor a cluster](../../monitor.md). :::: - For more information, see [Monitoring settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/monitoring-settings.html) and [Cluster update settings](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cluster-put-settings). + For more information, see [Monitoring settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/monitoring-settings.md) and [Cluster update settings](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cluster-put-settings). 2. Set the `xpack.monitoring.collection.enabled` setting to `true` on each node in the cluster. By default, it is disabled (`false`). @@ -59,7 +59,7 @@ To learn about monitoring in general, see [Monitor a cluster](../../monitor.md). Alternatively, you can enable this setting in {{kib}}. In the side navigation, click **Monitoring**. If data collection is disabled, you are prompted to turn it on. - For more information, see [Monitoring settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/monitoring-settings.html) and [Cluster update settings](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cluster-put-settings). + For more information, see [Monitoring settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/monitoring-settings.md) and [Cluster update settings](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cluster-put-settings). 3. Optional: Specify which indices you want to monitor. @@ -71,7 +71,7 @@ To learn about monitoring in general, see [Monitor a cluster](../../monitor.md). You can prepend `-` to explicitly exclude index names or patterns. For example, to include all indices that start with `test` except `test3`, you could specify `test*,-test3`. To include system indices such as .security and .kibana, add `.*` to the list of included names. For example `.*,test*,-test3` - 4. Optional: Specify how often to collect monitoring data. The default value for the `xpack.monitoring.collection.interval` setting 10 seconds. See [Monitoring settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/monitoring-settings.html). + 4. Optional: Specify how often to collect monitoring data. The default value for the `xpack.monitoring.collection.interval` setting 10 seconds. See [Monitoring settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/monitoring-settings.md). 2. Identify where to store monitoring data. @@ -146,7 +146,7 @@ To learn about monitoring in general, see [Monitor a cluster](../../monitor.md). 5. If you updated settings in the `elasticsearch.yml` files on your production cluster, restart {{es}}. See [*Stopping Elasticsearch*](../../maintenance/start-stop-services/start-stop-elasticsearch.md) and [*Starting Elasticsearch*](../../maintenance/start-stop-services/start-stop-elasticsearch.md). ::::{tip} - You may want to temporarily [disable shard allocation](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html) before you restart your nodes to avoid unnecessary shard reallocation during the install process. + You may want to temporarily [disable shard allocation](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md) before you restart your nodes to avoid unnecessary shard reallocation during the install process. :::: 6. Optional: [Configure the indices that store the monitoring data](../monitoring-data/configuring-data-streamsindices-for-monitoring.md). diff --git a/deploy-manage/monitor/stack-monitoring/es-local-exporter.md b/deploy-manage/monitor/stack-monitoring/es-local-exporter.md index 2e4c116b9..abaf5b96f 100644 --- a/deploy-manage/monitor/stack-monitoring/es-local-exporter.md +++ b/deploy-manage/monitor/stack-monitoring/es-local-exporter.md @@ -38,7 +38,7 @@ The elected master node is the only node to set up resources for the `local` exp One benefit of the `local` exporter is that it lives within the cluster and therefore no extra configuration is required when the cluster is secured with {{stack}} {{security-features}}. All operations, including indexing operations, that occur from a `local` exporter make use of the internal transport mechanisms within {{es}}. This behavior enables the exporter to be used without providing any user credentials when {{security-features}} are enabled. -For more information about the configuration options for the `local` exporter, see [Local exporter settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/monitoring-settings.html#local-exporter-settings). +For more information about the configuration options for the `local` exporter, see [Local exporter settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/monitoring-settings.md#local-exporter-settings). ## Cleaner service [local-exporter-cleaner] diff --git a/deploy-manage/monitor/stack-monitoring/es-monitoring-collectors.md b/deploy-manage/monitor/stack-monitoring/es-monitoring-collectors.md index a37d19268..72504e238 100644 --- a/deploy-manage/monitor/stack-monitoring/es-monitoring-collectors.md +++ b/deploy-manage/monitor/stack-monitoring/es-monitoring-collectors.md @@ -43,14 +43,14 @@ Collection is currently done serially, rather than in parallel, to avoid extra o :::: -For more information about the configuration options for the collectors, see [Monitoring collection settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/monitoring-settings.html#monitoring-collection-settings). +For more information about the configuration options for the collectors, see [Monitoring collection settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/monitoring-settings.md#monitoring-collection-settings). ## Collecting data from across the Elastic Stack [es-monitoring-stack] {{es}} {{monitor-features}} also receive monitoring data from other parts of the Elastic Stack. In this way, it serves as an unscheduled monitoring data collector for the stack. -By default, data collection is disabled. {{es}} monitoring data is not collected and all monitoring data from other sources such as {{kib}}, Beats, and Logstash is ignored. You must set `xpack.monitoring.collection.enabled` to `true` to enable the collection of monitoring data. See [Monitoring settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/monitoring-settings.html). +By default, data collection is disabled. {{es}} monitoring data is not collected and all monitoring data from other sources such as {{kib}}, Beats, and Logstash is ignored. You must set `xpack.monitoring.collection.enabled` to `true` to enable the collection of monitoring data. See [Monitoring settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/monitoring-settings.md). Once data is received, it is forwarded to the exporters to be routed to the monitoring cluster like all monitoring data. diff --git a/deploy-manage/monitor/stack-monitoring/es-monitoring-exporters.md b/deploy-manage/monitor/stack-monitoring/es-monitoring-exporters.md index 6c4ace277..f22994cba 100644 --- a/deploy-manage/monitor/stack-monitoring/es-monitoring-exporters.md +++ b/deploy-manage/monitor/stack-monitoring/es-monitoring-exporters.md @@ -39,11 +39,11 @@ When the exporters route monitoring data into the monitoring cluster, they use ` Routing monitoring data involves indexing it into the appropriate monitoring indices. Once the data is indexed, it exists in a monitoring index that, by default, is named with a daily index pattern. For {{es}} monitoring data, this is an index that matches `.monitoring-es-6-*`. From there, the data lives inside the monitoring cluster and must be curated or cleaned up as necessary. If you do not curate the monitoring data, it eventually fills up the nodes and the cluster might fail due to lack of disk space. ::::{tip} -You are strongly recommended to manage the curation of indices and particularly the monitoring indices. To do so, you can take advantage of the [cleaner service](es-local-exporter.md#local-exporter-cleaner) or [Elastic Curator](https://www.elastic.co/guide/en/elasticsearch/client/curator/current/index.html). +You are strongly recommended to manage the curation of indices and particularly the monitoring indices. To do so, you can take advantage of the [cleaner service](es-local-exporter.md#local-exporter-cleaner) or [Elastic Curator](asciidocalypse://docs/curator/docs/reference/elasticsearch/elasticsearch-client-curator/index.md). :::: -There is also a disk watermark (known as the flood stage watermark), which protects clusters from running out of disk space. When this feature is triggered, it makes all indices (including monitoring indices) read-only until the issue is fixed and a user manually makes the index writeable again. While an active monitoring index is read-only, it will naturally fail to write (index) new data and will continuously log errors that indicate the write failure. For more information, see [Disk-based shard allocation settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html#disk-based-shard-allocation). +There is also a disk watermark (known as the flood stage watermark), which protects clusters from running out of disk space. When this feature is triggered, it makes all indices (including monitoring indices) read-only until the issue is fixed and a user manually makes the index writeable again. While an active monitoring index is read-only, it will naturally fail to write (index) new data and will continuously log errors that indicate the write failure. For more information, see [Disk-based shard allocation settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md#disk-based-shard-allocation). ## Default exporters [es-monitoring-default-exporter] @@ -75,7 +75,7 @@ Before exporters can route monitoring data, they must set up certain {{es}} reso The templates are ordinary {{es}} templates that control the default settings and mappings for the monitoring indices. -By default, monitoring indices are created daily (for example, `.monitoring-es-6-2017.08.26`). You can change the default date suffix for monitoring indices with the `index.name.time_format` setting. You can use this setting to control how frequently monitoring indices are created by a specific `http` exporter. You cannot use this setting with `local` exporters. For more information, see [HTTP exporter settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/monitoring-settings.html#http-exporter-settings). +By default, monitoring indices are created daily (for example, `.monitoring-es-6-2017.08.26`). You can change the default date suffix for monitoring indices with the `index.name.time_format` setting. You can use this setting to control how frequently monitoring indices are created by a specific `http` exporter. You cannot use this setting with `local` exporters. For more information, see [HTTP exporter settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/monitoring-settings.md#http-exporter-settings). ::::{warning} Some users create their own templates that match *all* index patterns, which therefore impact the monitoring indices that get created. It is critical that you do not disable `_source` storage for the monitoring indices. If you do, {{kib}} {{monitor-features}} do not work and you cannot visualize monitoring data for your cluster. diff --git a/deploy-manage/monitor/stack-monitoring/k8s_when_to_use_it.md b/deploy-manage/monitor/stack-monitoring/k8s_when_to_use_it.md index 5f67296ac..01d44a46b 100644 --- a/deploy-manage/monitor/stack-monitoring/k8s_when_to_use_it.md +++ b/deploy-manage/monitor/stack-monitoring/k8s_when_to_use_it.md @@ -12,5 +12,5 @@ This feature is a good solution if you need to monitor your Elastic applications * to Metricbeat to allow queriying the k8s API * to Filebeat to deploy a privileged DaemonSet -However, for maximum efficiency and minimising resource consumption, or advanced use cases that require specific Beats configurations, you can deploy a standalone Metricbeat Deployment and a Filebeat Daemonset. Check the [Beats configuration Examples](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-beat-configuration-examples.html) for more information. +However, for maximum efficiency and minimising resource consumption, or advanced use cases that require specific Beats configurations, you can deploy a standalone Metricbeat Deployment and a Filebeat Daemonset. Check the [Beats configuration Examples](/deploy-manage/deploy/cloud-on-k8s/configuration-examples-beats.md) for more information. diff --git a/deploy-manage/monitor/stack-monitoring/kibana-monitoring-data.md b/deploy-manage/monitor/stack-monitoring/kibana-monitoring-data.md index c8761eb35..ab03af0df 100644 --- a/deploy-manage/monitor/stack-monitoring/kibana-monitoring-data.md +++ b/deploy-manage/monitor/stack-monitoring/kibana-monitoring-data.md @@ -32,7 +32,7 @@ If you use a separate monitoring cluster to store the monitoring data, it is str To learn more about typical monitoring architectures, see [How monitoring works](../stack-monitoring.md) and [Monitoring in a production environment](elasticsearch-monitoring-self-managed.md). -2. Verify that `monitoring.ui.enabled` is set to `true`, which is the default value, in the `kibana.yml` file. For more information, see [Monitoring settings](https://www.elastic.co/guide/en/kibana/current/monitoring-settings-kb.html). +2. Verify that `monitoring.ui.enabled` is set to `true`, which is the default value, in the `kibana.yml` file. For more information, see [Monitoring settings](asciidocalypse://docs/kibana/docs/reference/configuration-reference/monitoring-settings.md). 3. If the Elastic {{security-features}} are enabled on the monitoring cluster, you must provide a user ID and password so {{kib}} can retrieve the data. 1. Create a user that has the `monitoring_user` [built-in role](../../users-roles/cluster-or-deployment-auth/built-in-roles.md) on the monitoring cluster. @@ -43,7 +43,7 @@ If you use a separate monitoring cluster to store the monitoring data, it is str 2. Add the `monitoring.ui.elasticsearch.username` and `monitoring.ui.elasticsearch.password` settings in the `kibana.yml` file. If these settings are omitted, {{kib}} uses the `elasticsearch.username` and `elasticsearch.password` setting values. For more information, see [Configuring security in {{kib}}](../../security.md). -4. (Optional) Configure {{kib}} to encrypt communications between the {{kib}} server and the monitoring cluster. See [*Encrypt TLS communications in {{kib}}*](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-basic-setup-https.html#encrypt-kibana-http). +4. (Optional) Configure {{kib}} to encrypt communications between the {{kib}} server and the monitoring cluster. See [*Encrypt TLS communications in {{kib}}*](/deploy-manage/security/set-up-basic-security-plus-https.md#encrypt-kibana-http). 5. If the Elastic {{security-features}} are enabled on the {{kib}} server, only users that have the authority to access {{kib}} indices and to read the monitoring indices can use the monitoring dashboards. ::::{note} diff --git a/deploy-manage/monitor/stack-monitoring/kibana-monitoring-legacy.md b/deploy-manage/monitor/stack-monitoring/kibana-monitoring-legacy.md index 07c375569..833f55811 100644 --- a/deploy-manage/monitor/stack-monitoring/kibana-monitoring-legacy.md +++ b/deploy-manage/monitor/stack-monitoring/kibana-monitoring-legacy.md @@ -59,9 +59,9 @@ To learn about monitoring in general, see [Monitor a cluster](../../monitor.md). } ``` - For more information, see [Monitoring settings in {{es}}](https://www.elastic.co/guide/en/elasticsearch/reference/current/monitoring-settings.html) and [Cluster update settings](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cluster-put-settings). + For more information, see [Monitoring settings in {{es}}](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/monitoring-settings.md) and [Cluster update settings](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cluster-put-settings). -2. Verify that `monitoring.enabled` and `monitoring.kibana.collection.enabled` are set to `true` in the `kibana.yml` file. These are the default values. For more information, see [Monitoring settings in {{kib}}](https://www.elastic.co/guide/en/kibana/current/monitoring-settings-kb.html). +2. Verify that `monitoring.enabled` and `monitoring.kibana.collection.enabled` are set to `true` in the `kibana.yml` file. These are the default values. For more information, see [Monitoring settings in {{kib}}](asciidocalypse://docs/kibana/docs/reference/configuration-reference/monitoring-settings.md). 3. Identify where to send monitoring data. {{kib}} automatically sends metrics to the {{es}} cluster specified in the `elasticsearch.hosts` setting in the `kibana.yml` file. This property has a default value of `http://localhost:9200`.
::::{tip} @@ -74,7 +74,7 @@ To learn about monitoring in general, see [Monitor a cluster](../../monitor.md). 4. If {{security-features}} are enabled on the production cluster: 1. Verify that there is a valid user ID and password in the `elasticsearch.username` and `elasticsearch.password` settings in the `kibana.yml` file. These values are used when {{kib}} sends monitoring data to the production cluster. - 2. [Configure encryption for traffic between {{kib}} and {{es}}](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-basic-setup-https.html#encrypt-kibana-http). + 2. [Configure encryption for traffic between {{kib}} and {{es}}](/deploy-manage/security/set-up-basic-security-plus-https.md#encrypt-kibana-http). 5. [Start {{kib}}](../../maintenance/start-stop-services/start-stop-kibana.md). 6. [View the monitoring data in {{kib}}](kibana-monitoring-data.md). diff --git a/deploy-manage/monitor/stack-monitoring/kibana-monitoring-metricbeat.md b/deploy-manage/monitor/stack-monitoring/kibana-monitoring-metricbeat.md index f5aab0743..37b3e6645 100644 --- a/deploy-manage/monitor/stack-monitoring/kibana-monitoring-metricbeat.md +++ b/deploy-manage/monitor/stack-monitoring/kibana-monitoring-metricbeat.md @@ -27,7 +27,7 @@ To learn about monitoring in general, see [Monitor a cluster](../../monitor.md). monitoring.kibana.collection.enabled: false ``` - Leave the `monitoring.enabled` set to its default value (`true`). For more information, see [Monitoring settings in {{kib}}](https://www.elastic.co/guide/en/kibana/current/monitoring-settings-kb.html). + Leave the `monitoring.enabled` set to its default value (`true`). For more information, see [Monitoring settings in {{kib}}](asciidocalypse://docs/kibana/docs/reference/configuration-reference/monitoring-settings.md). 2. [Start {{kib}}](../../maintenance/start-stop-services/start-stop-kibana.md). 3. Set the `xpack.monitoring.collection.enabled` setting to `true` on each node in the production cluster. By default, it is disabled (`false`). @@ -62,9 +62,9 @@ To learn about monitoring in general, see [Monitor a cluster](../../monitor.md). } ``` - For more information, see [Monitoring settings in {{es}}](https://www.elastic.co/guide/en/elasticsearch/reference/current/monitoring-settings.html) and [Cluster update settings](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cluster-put-settings). + For more information, see [Monitoring settings in {{es}}](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/monitoring-settings.md) and [Cluster update settings](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cluster-put-settings). -4. [Install {{metricbeat}}](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-installation-configuration.html) on the same server as {{kib}}. +4. [Install {{metricbeat}}](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/metricbeat-installation-configuration.md) on the same server as {{kib}}. 5. Enable the {{kib}} {{xpack}} module in {{metricbeat}}.
For example, to enable the default configuration in the `modules.d` directory, run the following command: @@ -73,7 +73,7 @@ To learn about monitoring in general, see [Monitor a cluster](../../monitor.md). metricbeat modules enable kibana-xpack ``` - For more information, see [Specify which modules to run](https://www.elastic.co/guide/en/beats/metricbeat/current/configuration-metricbeat.html) and [{{kib}} module](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-module-kibana.html). + For more information, see [Specify which modules to run](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/configuration-metricbeat.md) and [{{kib}} module](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/metricbeat-module-kibana.md). 6. Configure the {{kib}} {{xpack}} module in {{metricbeat}}.
@@ -100,7 +100,7 @@ To learn about monitoring in general, see [Monitor a cluster](../../monitor.md). 7. Optional: Disable the system module in {{metricbeat}}. - By default, the [system module](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-module-system.html) is enabled. The information it collects, however, is not shown on the **Monitoring** page in {{kib}}. Unless you want to use that information for other purposes, run the following command: + By default, the [system module](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/metricbeat-module-system.md) is enabled. The information it collects, however, is not shown on the **Monitoring** page in {{kib}}. Unless you want to use that information for other purposes, run the following command: ```sh metricbeat modules disable system @@ -141,8 +141,8 @@ To learn about monitoring in general, see [Monitor a cluster](../../monitor.md). 1. Create a user on the monitoring cluster that has the `remote_monitoring_agent` [built-in role](../../users-roles/cluster-or-deployment-auth/built-in-roles.md). Alternatively, use the `remote_monitoring_user` [built-in user](../../users-roles/cluster-or-deployment-auth/built-in-users.md). 2. Add the `username` and `password` settings to the {{es}} output information in the {{metricbeat}} configuration file. - For more information about these configuration options, see [Configure the {{es}} output](https://www.elastic.co/guide/en/beats/metricbeat/current/elasticsearch-output.html). + For more information about these configuration options, see [Configure the {{es}} output](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/elasticsearch-output.md). -9. [Start {{metricbeat}}](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-starting.html). +9. [Start {{metricbeat}}](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/metricbeat-starting.md). 10. [View the monitoring data in {{kib}}](/deploy-manage/monitor/monitoring-data.md). diff --git a/deploy-manage/production-guidance.md b/deploy-manage/production-guidance.md index cdee26450..27e37ca0d 100644 --- a/deploy-manage/production-guidance.md +++ b/deploy-manage/production-guidance.md @@ -10,17 +10,17 @@ This section provides some best practices for managing your data to help you set ## Plan your data structure, availability, and formatting [ec_plan_your_data_structure_availability_and_formatting] -* Build a [data architecture](https://www.elastic.co/guide/en/elasticsearch/reference/current/data-tiers.html) that best fits your needs. Your Elasticsearch Service deployment comes with default hot tier {{es}} nodes that store your most frequently accessed data. Based on your own access and retention policies, you can add warm, cold, frozen data tiers, and automated deletion of old data. -* Make your data [highly available](https://www.elastic.co/guide/en/elasticsearch/reference/current/high-availability.html) for production environments or otherwise critical data stores, and take regular [backup snapshots](tools/snapshot-and-restore.md). -* Normalize event data to better analyze, visualize, and correlate your events by adopting the [Elastic Common Schema](https://www.elastic.co/guide/en/ecs/current/ecs-getting-started.html) (ECS). Elastic integrations use ECS out-of-the-box. If you are writing your own integrations, ECS is recommended. +* Build a [data architecture](/manage-data/lifecycle/data-tiers.md) that best fits your needs. Your Elasticsearch Service deployment comes with default hot tier {{es}} nodes that store your most frequently accessed data. Based on your own access and retention policies, you can add warm, cold, frozen data tiers, and automated deletion of old data. +* Make your data [highly available](/deploy-manage/tools.md) for production environments or otherwise critical data stores, and take regular [backup snapshots](tools/snapshot-and-restore.md). +* Normalize event data to better analyze, visualize, and correlate your events by adopting the [Elastic Common Schema](asciidocalypse://docs/ecs/docs/reference/ecs/ecs-getting-started.md) (ECS). Elastic integrations use ECS out-of-the-box. If you are writing your own integrations, ECS is recommended. ## Optimize data storage and retention [ec_optimize_data_storage_and_retention] -Once you have your data tiers deployed and you have data flowing, you can [manage the index lifecycle](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-lifecycle-management.html). +Once you have your data tiers deployed and you have data flowing, you can [manage the index lifecycle](/manage-data/lifecycle/index-lifecycle-management.md). ::::{tip} -[Elastic integrations](https://www.elastic.co/integrations) provide default index lifecycle policies, and you can [build your own policies for your custom integrations](https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started-index-lifecycle-management.html). +[Elastic integrations](https://www.elastic.co/integrations) provide default index lifecycle policies, and you can [build your own policies for your custom integrations](/manage-data/lifecycle/index-lifecycle-management/tutorial-automate-rollover.md). :::: diff --git a/deploy-manage/production-guidance/availability-and-resilience.md b/deploy-manage/production-guidance/availability-and-resilience.md index b4ce8f1bf..278b17e1d 100644 --- a/deploy-manage/production-guidance/availability-and-resilience.md +++ b/deploy-manage/production-guidance/availability-and-resilience.md @@ -10,7 +10,7 @@ Distributed systems like {{es}} are designed to keep working even if some of the There is a limit to how small a resilient cluster can be. All {{es}} clusters require the following components to function: * One [elected master node](../distributed-architecture/discovery-cluster-formation/modules-discovery-quorums.md) -* At least one node for each [role](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html) +* At least one node for each [role](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md) * At least one copy of every [shard](../../deploy-manage/index.md) A resilient cluster requires redundancy for every required cluster component. This means a resilient cluster must have the following components: diff --git a/deploy-manage/production-guidance/availability-and-resilience/resilience-in-larger-clusters.md b/deploy-manage/production-guidance/availability-and-resilience/resilience-in-larger-clusters.md index b212d0e94..529d3f5dd 100644 --- a/deploy-manage/production-guidance/availability-and-resilience/resilience-in-larger-clusters.md +++ b/deploy-manage/production-guidance/availability-and-resilience/resilience-in-larger-clusters.md @@ -9,7 +9,7 @@ It’s not unusual for nodes to share common infrastructure, such as network int {{es}} expects node-to-node connections to be reliable, have low latency, and have adequate bandwidth. Many {{es}} tasks require multiple round-trips between nodes. A slow or unreliable interconnect may have a significant effect on the performance and stability of your cluster. -For example, a few milliseconds of latency added to each round-trip can quickly accumulate into a noticeable performance penalty. An unreliable network may have frequent network partitions. {{es}} will automatically recover from a network partition as quickly as it can but your cluster may be partly unavailable during a partition and will need to spend time and resources to [resynchronize any missing data](../../distributed-architecture/shard-allocation-relocation-recovery.md#shard-recovery) and [rebalance](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html#shards-rebalancing-settings) itself once the partition heals. Recovering from a failure may involve copying a large amount of data between nodes so the recovery time is often determined by the available bandwidth. +For example, a few milliseconds of latency added to each round-trip can quickly accumulate into a noticeable performance penalty. An unreliable network may have frequent network partitions. {{es}} will automatically recover from a network partition as quickly as it can but your cluster may be partly unavailable during a partition and will need to spend time and resources to [resynchronize any missing data](../../distributed-architecture/shard-allocation-relocation-recovery.md#shard-recovery) and [rebalance](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md#shards-rebalancing-settings) itself once the partition heals. Recovering from a failure may involve copying a large amount of data between nodes so the recovery time is often determined by the available bandwidth. If you’ve divided your cluster into zones, the network connections within each zone are typically of higher quality than the connections between the zones. Ensure the network connections between zones are of sufficiently high quality. You will see the best results by locating all your zones within a single data center with each zone having its own independent power supply and other supporting infrastructure. You can also *stretch* your cluster across nearby data centers as long as the network interconnection between each pair of data centers is good enough. diff --git a/deploy-manage/production-guidance/availability-and-resilience/resilience-in-small-clusters.md b/deploy-manage/production-guidance/availability-and-resilience/resilience-in-small-clusters.md index 337e17ff2..b9bfe783b 100644 --- a/deploy-manage/production-guidance/availability-and-resilience/resilience-in-small-clusters.md +++ b/deploy-manage/production-guidance/availability-and-resilience/resilience-in-small-clusters.md @@ -11,7 +11,7 @@ In smaller clusters, it is most important to be resilient to single-node failure If your cluster consists of one node, that single node must do everything. To accommodate this, {{es}} assigns nodes every role by default. -A single node cluster is not resilient. If the node fails, the cluster will stop working. Because there are no replicas in a one-node cluster, you cannot store your data redundantly. However, by default at least one replica is required for a [`green` cluster health status](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cluster-health). To ensure your cluster can report a `green` status, override the default by setting [`index.number_of_replicas`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#dynamic-index-settings) to `0` on every index. +A single node cluster is not resilient. If the node fails, the cluster will stop working. Because there are no replicas in a one-node cluster, you cannot store your data redundantly. However, by default at least one replica is required for a [`green` cluster health status](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cluster-health). To ensure your cluster can report a `green` status, override the default by setting [`index.number_of_replicas`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#dynamic-index-settings) to `0` on every index. If the node fails, you may need to restore an older copy of any lost indices from a [snapshot](../../tools/snapshot-and-restore.md). @@ -20,7 +20,7 @@ Because they are not resilient to any failures, we do not recommend using one-no ## Two-node clusters [high-availability-cluster-design-two-nodes] -If you have two nodes, we recommend they both be data nodes. You should also ensure every shard is stored redundantly on both nodes by setting [`index.number_of_replicas`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#dynamic-index-settings) to `1` on every index that is not a [searchable snapshot index](../../tools/snapshot-and-restore/searchable-snapshots.md). This is the default behaviour but may be overridden by an [index template](../../../manage-data/data-store/templates.md). [Auto-expand replicas](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#dynamic-index-settings) can also achieve the same thing, but it’s not necessary to use this feature in such a small cluster. +If you have two nodes, we recommend they both be data nodes. You should also ensure every shard is stored redundantly on both nodes by setting [`index.number_of_replicas`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#dynamic-index-settings) to `1` on every index that is not a [searchable snapshot index](../../tools/snapshot-and-restore/searchable-snapshots.md). This is the default behaviour but may be overridden by an [index template](../../../manage-data/data-store/templates.md). [Auto-expand replicas](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#dynamic-index-settings) can also achieve the same thing, but it’s not necessary to use this feature in such a small cluster. We recommend you set only one of your two nodes to be [master-eligible](../../distributed-architecture/clusters-nodes-shards/node-roles.md#master-node-role). This means you can be certain which of your nodes is the elected master of the cluster. The cluster can tolerate the loss of the other master-ineligible node. If you set both nodes to master-eligible, two nodes are required for a master election. Since the election will fail if either node is unavailable, your cluster cannot reliably tolerate the loss of either node. diff --git a/deploy-manage/production-guidance/general-recommendations.md b/deploy-manage/production-guidance/general-recommendations.md index c29f420e5..d5f148aa5 100644 --- a/deploy-manage/production-guidance/general-recommendations.md +++ b/deploy-manage/production-guidance/general-recommendations.md @@ -8,14 +8,14 @@ mapped_pages: ## Don’t return large result sets [large-size] -Elasticsearch is designed as a search engine, which makes it very good at getting back the top documents that match a query. However, it is not as good for workloads that fall into the database domain, such as retrieving all documents that match a particular query. If you need to do this, make sure to use the [Scroll](https://www.elastic.co/guide/en/elasticsearch/reference/current/paginate-search-results.html#scroll-search-results) API. +Elasticsearch is designed as a search engine, which makes it very good at getting back the top documents that match a query. However, it is not as good for workloads that fall into the database domain, such as retrieving all documents that match a particular query. If you need to do this, make sure to use the [Scroll](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/paginate-search-results.md#scroll-search-results) API. ## Avoid large documents [maximum-document-size] -Given that the default [`http.max_content_length`](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#http-settings) is set to 100MB, Elasticsearch will refuse to index any document that is larger than that. You might decide to increase that particular setting, but Lucene still has a limit of about 2GB. +Given that the default [`http.max_content_length`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#http-settings) is set to 100MB, Elasticsearch will refuse to index any document that is larger than that. You might decide to increase that particular setting, but Lucene still has a limit of about 2GB. -Even without considering hard limits, large documents are usually not practical. Large documents put more stress on network, memory usage and disk, even for search requests that do not request the `_source` since Elasticsearch needs to fetch the `_id` of the document in all cases, and the cost of getting this field is bigger for large documents due to how the filesystem cache works. Indexing this document can use an amount of memory that is a multiplier of the original size of the document. Proximity search (phrase queries for instance) and [highlighting](https://www.elastic.co/guide/en/elasticsearch/reference/current/highlighting.html) also become more expensive since their cost directly depends on the size of the original document. +Even without considering hard limits, large documents are usually not practical. Large documents put more stress on network, memory usage and disk, even for search requests that do not request the `_source` since Elasticsearch needs to fetch the `_id` of the document in all cases, and the cost of getting this field is bigger for large documents due to how the filesystem cache works. Indexing this document can use an amount of memory that is a multiplier of the original size of the document. Proximity search (phrase queries for instance) and [highlighting](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/highlighting.md) also become more expensive since their cost directly depends on the size of the original document. It is sometimes useful to reconsider what the unit of information should be. For instance, the fact you want to make books searchable doesn’t necessarily mean that a document should consist of a whole book. It might be a better idea to use chapters or even paragraphs as documents, and then have a property in these documents that identifies which book they belong to. This does not only avoid the issues with large documents, it also makes the search experience better. For instance if a user searches for two words `foo` and `bar`, a match across different chapters is probably very poor, while a match within the same paragraph is likely good. diff --git a/deploy-manage/production-guidance/kibana-alerting-production-considerations.md b/deploy-manage/production-guidance/kibana-alerting-production-considerations.md index e79aa5f82..bece9d8e8 100644 --- a/deploy-manage/production-guidance/kibana-alerting-production-considerations.md +++ b/deploy-manage/production-guidance/kibana-alerting-production-considerations.md @@ -27,7 +27,7 @@ For more details on Task Manager, see [Running background tasks](../distributed- ::::{important} Rule and action tasks can run late or at an inconsistent schedule. This is typically a symptom of the specific usage of the cluster in question. -You can address such issues by tweaking the [Task Manager settings](https://www.elastic.co/guide/en/kibana/current/task-manager-settings-kb.html#task-manager-settings) or scaling the deployment to better suit your use case. +You can address such issues by tweaking the [Task Manager settings](asciidocalypse://docs/kibana/docs/reference/configuration-reference/task-manager-settings.md#task-manager-settings) or scaling the deployment to better suit your use case. For detailed guidance, see [Alerting Troubleshooting](../../explore-analyze/alerts-cases/alerts/alerting-troubleshooting.md). @@ -63,7 +63,7 @@ For more information on data stream lifecycle management, see: [Data stream life ## Circuit breakers [alerting-circuit-breakers] -There are several scenarios where running alerting rules and actions can start to negatively impact the overall health of a {{kib}} instance either by clogging up Task Manager throughput or by consuming so much CPU/memory that other operations cannot complete in a reasonable amount of time. There are several [configurable](https://www.elastic.co/guide/en/kibana/current/alert-action-settings-kb.html#alert-settings) circuit breakers to help minimize these effects. +There are several scenarios where running alerting rules and actions can start to negatively impact the overall health of a {{kib}} instance either by clogging up Task Manager throughput or by consuming so much CPU/memory that other operations cannot complete in a reasonable amount of time. There are several [configurable](asciidocalypse://docs/kibana/docs/reference/configuration-reference/alerting-settings.md#alert-settings) circuit breakers to help minimize these effects. ### Rules with very short intervals [_rules_with_very_short_intervals] diff --git a/deploy-manage/production-guidance/kibana-task-manager-scaling-considerations.md b/deploy-manage/production-guidance/kibana-task-manager-scaling-considerations.md index f933b065b..8ad4370e6 100644 --- a/deploy-manage/production-guidance/kibana-task-manager-scaling-considerations.md +++ b/deploy-manage/production-guidance/kibana-task-manager-scaling-considerations.md @@ -26,7 +26,7 @@ If you lose this index, all scheduled alerts and actions are lost. {{kib}} background tasks are managed as follows: -* An {{es}} task index is polled for overdue tasks at 3-second intervals. You can change this interval using the [`xpack.task_manager.poll_interval`](https://www.elastic.co/guide/en/kibana/current/task-manager-settings-kb.html#task-manager-settings) setting. +* An {{es}} task index is polled for overdue tasks at 3-second intervals. You can change this interval using the [`xpack.task_manager.poll_interval`](asciidocalypse://docs/kibana/docs/reference/configuration-reference/task-manager-settings.md#task-manager-settings) setting. * Tasks are claimed by updating them in the {{es}} index, using optimistic concurrency control to prevent conflicts. Each {{kib}} instance can run a maximum of 10 concurrent tasks, so a maximum of 10 tasks are claimed each interval. * Tasks are run on the {{kib}} server. * Task Manager ensures that tasks: @@ -43,7 +43,7 @@ This is usually a symptom of the specific usage or scaling strategy of the clust To address these issues, tweak the {{kib}} Task Manager settings or the cluster scaling strategy to better suit the unique use case. -For details on the settings that can influence the performance and throughput of Task Manager, see [Task Manager Settings](https://www.elastic.co/guide/en/kibana/current/task-manager-settings-kb.html). +For details on the settings that can influence the performance and throughput of Task Manager, see [Task Manager Settings](asciidocalypse://docs/kibana/docs/reference/configuration-reference/task-manager-settings.md). For detailed troubleshooting guidance, see [Troubleshooting](../../troubleshoot/kibana/task-manager.md). @@ -83,9 +83,9 @@ At times, the sustainable approach might be to expand the throughput of your clu Other times it, might be preferable to increase the throughput of individual {{kib}} instances. -Tweak the capacity with the [`xpack.task_manager.capacity`](https://www.elastic.co/guide/en/kibana/current/task-manager-settings-kb.html#task-manager-settings) setting, which enables each {{kib}} instance to pull a higher number of tasks per interval. This setting can impact the performance of each instance as the workload will be higher. +Tweak the capacity with the [`xpack.task_manager.capacity`](asciidocalypse://docs/kibana/docs/reference/configuration-reference/task-manager-settings.md#task-manager-settings) setting, which enables each {{kib}} instance to pull a higher number of tasks per interval. This setting can impact the performance of each instance as the workload will be higher. -Tweak the poll interval with the [`xpack.task_manager.poll_interval`](https://www.elastic.co/guide/en/kibana/current/task-manager-settings-kb.html#task-manager-settings) setting, which enables each {{kib}} instance to pull scheduled tasks at a higher rate. This setting can impact the performance of the {{es}} cluster as the workload will be higher. +Tweak the poll interval with the [`xpack.task_manager.poll_interval`](asciidocalypse://docs/kibana/docs/reference/configuration-reference/task-manager-settings.md#task-manager-settings) setting, which enables each {{kib}} instance to pull scheduled tasks at a higher rate. This setting can impact the performance of the {{es}} cluster as the workload will be higher. ### Choosing a scaling strategy [task-manager-choosing-scaling-strategy] diff --git a/deploy-manage/production-guidance/optimize-performance/approximate-knn-search.md b/deploy-manage/production-guidance/optimize-performance/approximate-knn-search.md index 94d308429..92bf030ab 100644 --- a/deploy-manage/production-guidance/optimize-performance/approximate-knn-search.md +++ b/deploy-manage/production-guidance/optimize-performance/approximate-knn-search.md @@ -12,9 +12,9 @@ Many of these recommendations help improve search speed. With approximate kNN, t ## Reduce vector memory foot-print [_reduce_vector_memory_foot_print] -The default [`element_type`](https://www.elastic.co/guide/en/elasticsearch/reference/current/dense-vector.html#dense-vector-element-type) is `float`. But this can be automatically quantized during index time through [`quantization`](https://www.elastic.co/guide/en/elasticsearch/reference/current/dense-vector.html#dense-vector-quantization). Quantization will reduce the required memory by 4x, 8x, or as much as 32x, but it will also reduce the precision of the vectors and increase disk usage for the field (by up to 25%, 12.5%, or 3.125%, respectively). Increased disk usage is a result of {{es}} storing both the quantized and the unquantized vectors. For example, when int8 quantizing 40GB of floating point vectors an extra 10GB of data will be stored for the quantized vectors. The total disk usage amounts to 50GB, but the memory usage for fast search will be reduced to 10GB. +The default [`element_type`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/dense-vector.md#dense-vector-element-type) is `float`. But this can be automatically quantized during index time through [`quantization`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/dense-vector.md#dense-vector-quantization). Quantization will reduce the required memory by 4x, 8x, or as much as 32x, but it will also reduce the precision of the vectors and increase disk usage for the field (by up to 25%, 12.5%, or 3.125%, respectively). Increased disk usage is a result of {{es}} storing both the quantized and the unquantized vectors. For example, when int8 quantizing 40GB of floating point vectors an extra 10GB of data will be stored for the quantized vectors. The total disk usage amounts to 50GB, but the memory usage for fast search will be reduced to 10GB. -For `float` vectors with `dim` greater than or equal to `384`, using a [`quantized`](https://www.elastic.co/guide/en/elasticsearch/reference/current/dense-vector.html#dense-vector-quantization) index is highly recommended. +For `float` vectors with `dim` greater than or equal to `384`, using a [`quantized`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/dense-vector.md#dense-vector-quantization) index is highly recommended. ## Reduce vector dimensionality [_reduce_vector_dimensionality] @@ -24,16 +24,16 @@ The speed of kNN search scales linearly with the number of vector dimensions, be ## Exclude vector fields from `_source` [_exclude_vector_fields_from_source] -{{es}} stores the original JSON document that was passed at index time in the [`_source` field](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html). By default, each hit in the search results contains the full document `_source`. When the documents contain high-dimensional `dense_vector` fields, the `_source` can be quite large and expensive to load. This could significantly slow down the speed of kNN search. +{{es}} stores the original JSON document that was passed at index time in the [`_source` field](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md). By default, each hit in the search results contains the full document `_source`. When the documents contain high-dimensional `dense_vector` fields, the `_source` can be quite large and expensive to load. This could significantly slow down the speed of kNN search. ::::{note} [reindex](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-reindex), [update](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-update), and [update by query](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-update-by-query) operations generally require the `_source` field. Disabling `_source` for a field might result in unexpected behavior for these operations. For example, reindex might not actually contain the `dense_vector` field in the new index. :::: -You can disable storing `dense_vector` fields in the `_source` through the [`excludes`](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#include-exclude) mapping parameter. This prevents loading and returning large vectors during search, and also cuts down on the index size. Vectors that have been omitted from `_source` can still be used in kNN search, since it relies on separate data structures to perform the search. Before using the [`excludes`](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#include-exclude) parameter, make sure to review the downsides of omitting fields from `_source`. +You can disable storing `dense_vector` fields in the `_source` through the [`excludes`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md#include-exclude) mapping parameter. This prevents loading and returning large vectors during search, and also cuts down on the index size. Vectors that have been omitted from `_source` can still be used in kNN search, since it relies on separate data structures to perform the search. Before using the [`excludes`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md#include-exclude) parameter, make sure to review the downsides of omitting fields from `_source`. -Another option is to use [synthetic `_source`](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#synthetic-source). +Another option is to use [synthetic `_source`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md#synthetic-source). ## Ensure data nodes have enough memory [_ensure_data_nodes_have_enough_memory] @@ -58,7 +58,7 @@ The data nodes should also leave a buffer for other ways that RAM is needed. For ## Warm up the filesystem cache [dense-vector-preloading] -If the machine running Elasticsearch is restarted, the filesystem cache will be empty, so it will take some time before the operating system loads hot regions of the index into memory so that search operations are fast. You can explicitly tell the operating system which files should be loaded into memory eagerly depending on the file extension using the [`index.store.preload`](https://www.elastic.co/guide/en/elasticsearch/reference/current/preload-data-to-file-system-cache.html) setting. +If the machine running Elasticsearch is restarted, the filesystem cache will be empty, so it will take some time before the operating system loads hot regions of the index into memory so that search operations are fast. You can explicitly tell the operating system which files should be loaded into memory eagerly depending on the file extension using the [`index.store.preload`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/preloading-data-into-file-system-cache.md) setting. ::::{warning} Loading data into the filesystem cache eagerly on too many indices or too many files will make search *slower* if the filesystem cache is not large enough to hold all the data. Use with caution. @@ -69,8 +69,8 @@ The following file extensions are used for the approximate kNN search: Each exte * `vex` for the HNSW graph * `vec` for all non-quantized vector values. This includes all element types: `float`, `byte`, and `bit`. -* `veq` for quantized vectors indexed with [`quantization`](https://www.elastic.co/guide/en/elasticsearch/reference/current/dense-vector.html#dense-vector-quantization): `int4` or `int8` -* `veb` for binary vectors indexed with [`quantization`](https://www.elastic.co/guide/en/elasticsearch/reference/current/dense-vector.html#dense-vector-quantization): `bbq` +* `veq` for quantized vectors indexed with [`quantization`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/dense-vector.md#dense-vector-quantization): `int4` or `int8` +* `veb` for binary vectors indexed with [`quantization`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/dense-vector.md#dense-vector-quantization): `bbq` * `vem`, `vemf`, `vemq`, and `vemb` for metadata, usually small and not a concern for preloading Generally, if you are using a quantized index, you should only preload the relevant quantized values and the HNSW graph. Preloading the raw vectors is not necessary and might be counterproductive. @@ -78,7 +78,7 @@ Generally, if you are using a quantized index, you should only preload the relev ## Reduce the number of index segments [_reduce_the_number_of_index_segments] -{{es}} shards are composed of segments, which are internal storage elements in the index. For approximate kNN search, {{es}} stores the vector values of each segment as a separate HNSW graph, so kNN search must check each segment. The recent parallelization of kNN search made it much faster to search across multiple segments, but still kNN search can be up to several times faster if there are fewer segments. By default, {{es}} periodically merges smaller segments into larger ones through a background [merge process](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-merge.html). If this isn’t sufficient, you can take explicit steps to reduce the number of index segments. +{{es}} shards are composed of segments, which are internal storage elements in the index. For approximate kNN search, {{es}} stores the vector values of each segment as a separate HNSW graph, so kNN search must check each segment. The recent parallelization of kNN search made it much faster to search across multiple segments, but still kNN search can be up to several times faster if there are fewer segments. By default, {{es}} periodically merges smaller segments into larger ones through a background [merge process](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/merge-scheduler-settings.md). If this isn’t sufficient, you can take explicit steps to reduce the number of index segments. ### Increase maximum segment size [_increase_maximum_segment_size] @@ -90,8 +90,8 @@ Generally, if you are using a quantized index, you should only preload the relev A common pattern is to first perform an initial bulk upload, then make an index available for searches. Instead of force merging, you can adjust the index settings to encourage {{es}} to create larger initial segments: -* Ensure there are no searches during the bulk upload and disable [`index.refresh_interval`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-refresh-interval-setting) by setting it to `-1`. This prevents refresh operations and avoids creating extra segments. -* Give {{es}} a large indexing buffer so it can accept more documents before flushing. By default, the [`indices.memory.index_buffer_size`](https://www.elastic.co/guide/en/elasticsearch/reference/current/indexing-buffer.html) is set to 10% of the heap size. With a substantial heap size like 32GB, this is often enough. To allow the full indexing buffer to be used, you should also increase the limit [`index.translog.flush_threshold_size`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-translog.html). +* Ensure there are no searches during the bulk upload and disable [`index.refresh_interval`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#index-refresh-interval-setting) by setting it to `-1`. This prevents refresh operations and avoids creating extra segments. +* Give {{es}} a large indexing buffer so it can accept more documents before flushing. By default, the [`indices.memory.index_buffer_size`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/indexing-buffer-settings.md) is set to 10% of the heap size. With a substantial heap size like 32GB, this is often enough. To allow the full indexing buffer to be used, you should also increase the limit [`index.translog.flush_threshold_size`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/translog-settings.md). ## Avoid heavy indexing during searches [_avoid_heavy_indexing_during_searches] @@ -103,7 +103,7 @@ When possible, it’s best to avoid heavy indexing during approximate kNN search ## Avoid page cache thrashing by using modest readahead values on Linux [_avoid_page_cache_thrashing_by_using_modest_readahead_values_on_linux_2] -Search can cause a lot of randomized read I/O. When the underlying block device has a high readahead value, there may be a lot of unnecessary read I/O done, especially when files are accessed using memory mapping (see [storage types](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-store.html#file-system)). +Search can cause a lot of randomized read I/O. When the underlying block device has a high readahead value, there may be a lot of unnecessary read I/O done, especially when files are accessed using memory mapping (see [storage types](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index-store-settings.md#file-system)). Most Linux distributions use a sensible readahead value of `128KiB` for a single plain device, however, when using software raid, LVM or dm-crypt the resulting block device (backing Elasticsearch [path.data](../../deploy/self-managed/important-settings-configuration.md#path-settings)) may end up having a very large readahead value (in the range of several MiB). This usually results in severe page (filesystem) cache thrashing adversely affecting search (or [update](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-document)) performance. diff --git a/deploy-manage/production-guidance/optimize-performance/disk-usage.md b/deploy-manage/production-guidance/optimize-performance/disk-usage.md index e27cfd708..eab2374df 100644 --- a/deploy-manage/production-guidance/optimize-performance/disk-usage.md +++ b/deploy-manage/production-guidance/optimize-performance/disk-usage.md @@ -24,12 +24,12 @@ PUT index } ``` -[`text`](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html) fields store normalization factors in the index to facilitate document scoring. If you only need matching capabilities on a `text` field but do not care about the produced scores, you can use the [`match_only_text`](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html#match-only-text-field-type) type instead. This field type saves significant space by dropping scoring and positional information. +[`text`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md) fields store normalization factors in the index to facilitate document scoring. If you only need matching capabilities on a `text` field but do not care about the produced scores, you can use the [`match_only_text`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md#match-only-text-field-type) type instead. This field type saves significant space by dropping scoring and positional information. ## Don’t use default dynamic string mappings [default-dynamic-string-mapping] -The default [dynamic string mappings](../../../manage-data/data-store/mapping/dynamic-mapping.md) will index string fields both as [`text`](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html) and [`keyword`](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html). This is wasteful if you only need one of them. Typically an `id` field will only need to be indexed as a `keyword` while a `body` field will only need to be indexed as a `text` field. +The default [dynamic string mappings](../../../manage-data/data-store/mapping/dynamic-mapping.md) will index string fields both as [`text`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md) and [`keyword`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md). This is wasteful if you only need one of them. Typically an `id` field will only need to be indexed as a `keyword` while a `body` field will only need to be indexed as a `text` field. This can be disabled by either configuring explicit mappings on string fields or setting up dynamic templates that will map string fields as either `text` or `keyword`. @@ -63,12 +63,12 @@ Keep in mind that large shard sizes come with drawbacks, such as long full recov ## Disable `_source` [disable-source] -The [`_source`](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html) field stores the original JSON body of the document. If you don’t need access to it you can disable it. However, APIs that needs access to `_source` such as update, highlight and reindex won’t work. +The [`_source`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md) field stores the original JSON body of the document. If you don’t need access to it you can disable it. However, APIs that needs access to `_source` such as update, highlight and reindex won’t work. ## Use `best_compression` [best-compression] -The `_source` and stored fields can easily take a non negligible amount of disk space. They can be compressed more aggressively by using the `best_compression` [codec](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-codec). +The `_source` and stored fields can easily take a non negligible amount of disk space. They can be compressed more aggressively by using the `best_compression` [codec](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#index-codec). ## Force merge [_force_merge] @@ -90,14 +90,14 @@ The [shrink API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/ope ## Use the smallest numeric type that is sufficient [_use_the_smallest_numeric_type_that_is_sufficient] -The type that you pick for [numeric data](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) can have a significant impact on disk usage. In particular, integers should be stored using an integer type (`byte`, `short`, `integer` or `long`) and floating points should either be stored in a `scaled_float` if appropriate or in the smallest type that fits the use-case: using `float` over `double`, or `half_float` over `float` will help save storage. +The type that you pick for [numeric data](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) can have a significant impact on disk usage. In particular, integers should be stored using an integer type (`byte`, `short`, `integer` or `long`) and floating points should either be stored in a `scaled_float` if appropriate or in the smallest type that fits the use-case: using `float` over `double`, or `half_float` over `float` will help save storage. ## Use index sorting to colocate similar documents [_use_index_sorting_to_colocate_similar_documents] When Elasticsearch stores `_source`, it compresses multiple documents at once in order to improve the overall compression ratio. For instance it is very common that documents share the same field names, and quite common that they share some field values, especially on fields that have a low cardinality or a [zipfian](https://en.wikipedia.org/wiki/Zipf%27s_law) distribution. -By default documents are compressed together in the order that they are added to the index. If you enabled [index sorting](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-index-sorting.html) then instead they are compressed in sorted order. Sorting documents with similar structure, fields, and values together should improve the compression ratio. +By default documents are compressed together in the order that they are added to the index. If you enabled [index sorting](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index-sorting-settings.md) then instead they are compressed in sorted order. Sorting documents with similar structure, fields, and values together should improve the compression ratio. ## Put fields in the same order in documents [_put_fields_in_the_same_order_in_documents] diff --git a/deploy-manage/production-guidance/optimize-performance/indexing-speed.md b/deploy-manage/production-guidance/optimize-performance/indexing-speed.md index 0f9114984..c1c42d653 100644 --- a/deploy-manage/production-guidance/optimize-performance/indexing-speed.md +++ b/deploy-manage/production-guidance/optimize-performance/indexing-speed.md @@ -28,7 +28,7 @@ By default, Elasticsearch periodically refreshes indices every second, but only This is the optimal configuration if you have no or very little search traffic (e.g. less than one search request every 5 minutes) and want to optimize for indexing speed. This behavior aims to automatically optimize bulk indexing in the default case when no searches are performed. In order to opt out of this behavior set the refresh interval explicitly. -On the other hand, if your index experiences regular search requests, this default behavior means that Elasticsearch will refresh your index every 1 second. If you can afford to increase the amount of time between when a document gets indexed and when it becomes visible, increasing the [`index.refresh_interval`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-refresh-interval-setting) to a larger value, e.g. `30s`, might help improve indexing speed. +On the other hand, if your index experiences regular search requests, this default behavior means that Elasticsearch will refresh your index every 1 second. If you can afford to increase the amount of time between when a document gets indexed and when it becomes visible, increasing the [`index.refresh_interval`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#index-refresh-interval-setting) to a larger value, e.g. `30s`, might help improve indexing speed. ## Disable replicas for initial loads [_disable_replicas_for_initial_loads] @@ -69,7 +69,7 @@ Some remote storage performs very poorly, especially under the kind of load that ## Indexing buffer size [_indexing_buffer_size] -If your node is doing only heavy indexing, be sure [`indices.memory.index_buffer_size`](https://www.elastic.co/guide/en/elasticsearch/reference/current/indexing-buffer.html) is large enough to give at most 512 MB indexing buffer per shard doing heavy indexing (beyond that indexing performance does not typically improve). Elasticsearch takes that setting (a percentage of the java heap or an absolute byte-size), and uses it as a shared buffer across all active shards. Very active shards will naturally use this buffer more than shards that are performing lightweight indexing. +If your node is doing only heavy indexing, be sure [`indices.memory.index_buffer_size`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/indexing-buffer-settings.md) is large enough to give at most 512 MB indexing buffer per shard doing heavy indexing (beyond that indexing performance does not typically improve). Elasticsearch takes that setting (a percentage of the java heap or an absolute byte-size), and uses it as a shared buffer across all active shards. Very active shards will naturally use this buffer more than shards that are performing lightweight indexing. The default is `10%` which is often plenty: for example, if you give the JVM 10GB of memory, it will give 1GB to the index buffer, which is enough to host two shards that are heavily indexing. diff --git a/deploy-manage/production-guidance/optimize-performance/search-speed.md b/deploy-manage/production-guidance/optimize-performance/search-speed.md index beeb332ef..5d5312696 100644 --- a/deploy-manage/production-guidance/optimize-performance/search-speed.md +++ b/deploy-manage/production-guidance/optimize-performance/search-speed.md @@ -13,7 +13,7 @@ Elasticsearch heavily relies on the filesystem cache in order to make search fas ## Avoid page cache thrashing by using modest readahead values on Linux [_avoid_page_cache_thrashing_by_using_modest_readahead_values_on_linux] -Search can cause a lot of randomized read I/O. When the underlying block device has a high readahead value, there may be a lot of unnecessary read I/O done, especially when files are accessed using memory mapping (see [storage types](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-store.html#file-system)). +Search can cause a lot of randomized read I/O. When the underlying block device has a high readahead value, there may be a lot of unnecessary read I/O done, especially when files are accessed using memory mapping (see [storage types](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index-store-settings.md#file-system)). Most Linux distributions use a sensible readahead value of `128KiB` for a single plain device, however, when using software raid, LVM or dm-crypt the resulting block device (backing Elasticsearch [path.data](../../deploy/self-managed/important-settings-configuration.md#path-settings)) may end up having a very large readahead value (in the range of several MiB). This usually results in severe page (filesystem) cache thrashing adversely affecting search (or [update](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-document)) performance. @@ -43,12 +43,12 @@ Some remote storage performs very poorly, especially under the kind of load that Documents should be modeled so that search-time operations are as cheap as possible. -In particular, joins should be avoided. [`nested`](https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html) can make queries several times slower and [parent-child](https://www.elastic.co/guide/en/elasticsearch/reference/current/parent-join.html) relations can make queries hundreds of times slower. So if the same questions can be answered without joins by denormalizing documents, significant speedups can be expected. +In particular, joins should be avoided. [`nested`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/nested.md) can make queries several times slower and [parent-child](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/parent-join.md) relations can make queries hundreds of times slower. So if the same questions can be answered without joins by denormalizing documents, significant speedups can be expected. ## Search as few fields as possible [search-as-few-fields-as-possible] -The more fields a [`query_string`](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html) or [`multi_match`](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html) query targets, the slower it is. A common technique to improve search speed over multiple fields is to copy their values into a single field at index time, and then use this field at search time. This can be automated with the [`copy-to`](https://www.elastic.co/guide/en/elasticsearch/reference/current/copy-to.html) directive of mappings without having to change the source of documents. Here is an example of an index containing movies that optimizes queries that search over both the name and the plot of the movie by indexing both values into the `name_and_plot` field. +The more fields a [`query_string`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-query-string-query.md) or [`multi_match`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-multi-match-query.md) query targets, the slower it is. A common technique to improve search speed over multiple fields is to copy their values into a single field at index time, and then use this field at search time. This can be automated with the [`copy-to`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/copy-to.md) directive of mappings without having to change the source of documents. Here is an example of an index containing movies that optimizes queries that search over both the name and the plot of the movie by indexing both values into the `name_and_plot` field. ```console PUT movies @@ -74,7 +74,7 @@ PUT movies ## Pre-index data [_pre_index_data] -You should leverage patterns in your queries to optimize the way data is indexed. For instance, if all your documents have a `price` field and most queries run [`range`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-range-aggregation.html) aggregations on a fixed list of ranges, you could make this aggregation faster by pre-indexing the ranges into the index and using a [`terms`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html) aggregations. +You should leverage patterns in your queries to optimize the way data is indexed. For instance, if all your documents have a `price` field and most queries run [`range`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-range-aggregation.md) aggregations on a fixed list of ranges, you could make this aggregation faster by pre-indexing the ranges into the index and using a [`terms`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-terms-aggregation.md) aggregations. For instance, if documents look like: @@ -106,7 +106,7 @@ GET index/_search } ``` -Then documents could be enriched by a `price_range` field at index time, which should be mapped as a [`keyword`](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html): +Then documents could be enriched by a `price_range` field at index time, which should be mapped as a [`keyword`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md): ```console PUT index @@ -146,21 +146,21 @@ GET index/_search ## Consider mapping identifiers as `keyword` [map-ids-as-keyword] -Not all numeric data should be mapped as a [numeric](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) field data type. {{es}} optimizes numeric fields, such as `integer` or `long`, for [`range`](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html) queries. However, [`keyword`](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html) fields are better for [`term`](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html) and other [term-level](https://www.elastic.co/guide/en/elasticsearch/reference/current/term-level-queries.html) queries. +Not all numeric data should be mapped as a [numeric](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) field data type. {{es}} optimizes numeric fields, such as `integer` or `long`, for [`range`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-range-query.md) queries. However, [`keyword`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md) fields are better for [`term`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-term-query.md) and other [term-level](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/term-level-queries.md) queries. Identifiers, such as an ISBN or a product ID, are rarely used in `range` queries. However, they are often retrieved using term-level queries. Consider mapping a numeric identifier as a `keyword` if: -* You don’t plan to search for the identifier data using [`range`](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html) queries. +* You don’t plan to search for the identifier data using [`range`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-range-query.md) queries. * Fast retrieval is important. `term` query searches on `keyword` fields are often faster than `term` searches on numeric fields. -If you’re unsure which to use, you can use a [multi-field](https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html) to map the data as both a `keyword` *and* a numeric data type. +If you’re unsure which to use, you can use a [multi-field](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/multi-fields.md) to map the data as both a `keyword` *and* a numeric data type. ## Avoid scripts [_avoid_scripts] -If possible, avoid using [script](../../../explore-analyze/scripting.md)-based sorting, scripts in aggregations, and the [`script_score`](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-script-score-query.html) query. See [Scripts, caching, and search speed](../../../explore-analyze/scripting/scripts-search-speed.md). +If possible, avoid using [script](../../../explore-analyze/scripting.md)-based sorting, scripts in aggregations, and the [`script_score`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-script-score-query.md) query. See [Scripts, caching, and search speed](../../../explore-analyze/scripting/scripts-search-speed.md). ## Search rounded dates [_search_rounded_dates] @@ -274,7 +274,7 @@ Do not force-merge indices to which you are still writing, or to which you will ## Warm up global ordinals [_warm_up_global_ordinals] -[Global ordinals](https://www.elastic.co/guide/en/elasticsearch/reference/current/eager-global-ordinals.html) are a data structure that is used to optimize the performance of aggregations. They are calculated lazily and stored in the JVM heap as part of the [field data cache](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-fielddata.html). For fields that are heavily used for bucketing aggregations, you can tell {{es}} to construct and cache the global ordinals before requests are received. This should be done carefully because it will increase heap usage and can make [refreshes](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-refresh) take longer. The option can be updated dynamically on an existing mapping by setting the [eager global ordinals](https://www.elastic.co/guide/en/elasticsearch/reference/current/eager-global-ordinals.html) mapping parameter: +[Global ordinals](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/eager-global-ordinals.md) are a data structure that is used to optimize the performance of aggregations. They are calculated lazily and stored in the JVM heap as part of the [field data cache](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/field-data-cache-settings.md). For fields that are heavily used for bucketing aggregations, you can tell {{es}} to construct and cache the global ordinals before requests are received. This should be done carefully because it will increase heap usage and can make [refreshes](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-refresh) take longer. The option can be updated dynamically on an existing mapping by setting the [eager global ordinals](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/eager-global-ordinals.md) mapping parameter: ```console PUT index @@ -293,7 +293,7 @@ PUT index ## Warm up the filesystem cache [_warm_up_the_filesystem_cache] -If the machine running Elasticsearch is restarted, the filesystem cache will be empty, so it will take some time before the operating system loads hot regions of the index into memory so that search operations are fast. You can explicitly tell the operating system which files should be loaded into memory eagerly depending on the file extension using the [`index.store.preload`](https://www.elastic.co/guide/en/elasticsearch/reference/current/preload-data-to-file-system-cache.html) setting. +If the machine running Elasticsearch is restarted, the filesystem cache will be empty, so it will take some time before the operating system loads hot regions of the index into memory so that search operations are fast. You can explicitly tell the operating system which files should be loaded into memory eagerly depending on the file extension using the [`index.store.preload`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/preloading-data-into-file-system-cache.md) setting. ::::{warning} Loading data into the filesystem cache eagerly on too many indices or too many files will make search *slower* if the filesystem cache is not large enough to hold all the data. Use with caution. @@ -303,12 +303,12 @@ Loading data into the filesystem cache eagerly on too many indices or too many f ## Use index sorting to speed up conjunctions [_use_index_sorting_to_speed_up_conjunctions] -[Index sorting](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-index-sorting.html) can be useful in order to make conjunctions faster at the cost of slightly slower indexing. Read more about it in the [index sorting documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-index-sorting-conjunctions.html). +[Index sorting](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index-sorting-settings.md) can be useful in order to make conjunctions faster at the cost of slightly slower indexing. Read more about it in the [index sorting documentation](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index-modules-index-sorting-conjunctions.md). ## Use `preference` to optimize cache utilization [preference-cache-optimization] -There are multiple caches that can help with search performance, such as the [filesystem cache](https://en.wikipedia.org/wiki/Page_cache), the [request cache](https://www.elastic.co/guide/en/elasticsearch/reference/current/shard-request-cache.html) or the [query cache](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-cache.html). Yet all these caches are maintained at the node level, meaning that if you run the same request twice in a row, have 1 replica or more and use [round-robin](https://en.wikipedia.org/wiki/Round-robin_DNS), the default routing algorithm, then those two requests will go to different shard copies, preventing node-level caches from helping. +There are multiple caches that can help with search performance, such as the [filesystem cache](https://en.wikipedia.org/wiki/Page_cache), the [request cache](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/shard-request-cache-settings.md) or the [query cache](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-query-cache-settings.md). Yet all these caches are maintained at the node level, meaning that if you run the same request twice in a row, have 1 replica or more and use [round-robin](https://en.wikipedia.org/wiki/Round-robin_DNS), the default routing algorithm, then those two requests will go to different shard copies, preventing node-level caches from helping. Since it is common for users of a search application to run similar requests one after another, for instance in order to analyze a narrower subset of the index, using a preference value that identifies the current user or session could help optimize usage of the caches. @@ -333,12 +333,12 @@ Because the Profile API itself adds significant overhead to the query, this info ## Faster phrase queries with `index_phrases` [faster-phrase-queries] -The [`text`](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html) field has an [`index_phrases`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-phrases.html) option that indexes 2-shingles and is automatically leveraged by query parsers to run phrase queries that don’t have a slop. If your use-case involves running lots of phrase queries, this can speed up queries significantly. +The [`text`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md) field has an [`index_phrases`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/index-phrases.md) option that indexes 2-shingles and is automatically leveraged by query parsers to run phrase queries that don’t have a slop. If your use-case involves running lots of phrase queries, this can speed up queries significantly. ## Faster prefix queries with `index_prefixes` [faster-prefix-queries] -The [`text`](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html) field has an [`index_prefixes`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-prefixes.html) option that indexes prefixes of all terms and is automatically leveraged by query parsers to run prefix queries. If your use-case involves running lots of prefix queries, this can speed up queries significantly. +The [`text`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md) field has an [`index_prefixes`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/index-prefixes.md) option that indexes prefixes of all terms and is automatically leveraged by query parsers to run prefix queries. If your use-case involves running lots of prefix queries, this can speed up queries significantly. ## Use `constant_keyword` to speed up filtering [faster-filtering-with-constant-keyword] diff --git a/deploy-manage/production-guidance/optimize-performance/size-shards.md b/deploy-manage/production-guidance/optimize-performance/size-shards.md index b7bebf2a7..4402b41c7 100644 --- a/deploy-manage/production-guidance/optimize-performance/size-shards.md +++ b/deploy-manage/production-guidance/optimize-performance/size-shards.md @@ -28,14 +28,14 @@ Keep the following things in mind when building your sharding strategy. ### Searches run on a single thread per shard [single-thread-per-shard] -Most searches hit multiple shards. Each shard runs the search on a single CPU thread. While a shard can run multiple concurrent searches, searches across a large number of shards can deplete a node’s [search thread pool](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-threadpool.html). This can result in low throughput and slow search speeds. +Most searches hit multiple shards. Each shard runs the search on a single CPU thread. While a shard can run multiple concurrent searches, searches across a large number of shards can deplete a node’s [search thread pool](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/thread-pool-settings.md). This can result in low throughput and slow search speeds. ### Each index, shard, segment and field has overhead [each-shard-has-overhead] Every index and every shard requires some memory and CPU resources. In most cases, a small set of large shards uses fewer resources than many small shards. -Segments play a big role in a shard’s resource usage. Most shards contain several segments, which store its index data. {{es}} keeps some segment metadata in heap memory so it can be quickly retrieved for searches. As a shard grows, its segments are [merged](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-merge.html) into fewer, larger segments. This decreases the number of segments, which means less metadata is kept in heap memory. +Segments play a big role in a shard’s resource usage. Most shards contain several segments, which store its index data. {{es}} keeps some segment metadata in heap memory so it can be quickly retrieved for searches. As a shard grows, its segments are [merged](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/merge-scheduler-settings.md) into fewer, larger segments. This decreases the number of segments, which means less metadata is kept in heap memory. Every mapped field also carries some overhead in terms of memory usage and disk space. By default {{es}} will automatically create a mapping for every field in every document it indexes, but you can switch off this behaviour to [take control of your mappings](../../../manage-data/data-store/mapping/explicit-mapping.md). @@ -54,7 +54,7 @@ Where applicable, use the following best practices as starting points for your s ### Delete indices, not documents [delete-indices-not-documents] -Deleted documents aren’t immediately removed from {{es}}'s file system. Instead, {{es}} marks the document as deleted on each related shard. The marked document will continue to use resources until it’s removed during a periodic [segment merge](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-merge.html). +Deleted documents aren’t immediately removed from {{es}}'s file system. Instead, {{es}} marks the document as deleted on each related shard. The marked document will continue to use resources until it’s removed during a periodic [segment merge](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/merge-scheduler-settings.md). When possible, delete entire indices instead. {{es}} can immediately remove deleted indices directly from the file system and free up resources. @@ -67,8 +67,8 @@ One advantage of this setup is [automatic rollover](../../../manage-data/lifecyc {{ilm-init}} also makes it easy to change your sharding strategy over time: -* **Want to decrease the shard count for new indices?**
Change the [`index.number_of_shards`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-number-of-shards) setting in the data stream’s [matching index template](../../../manage-data/data-store/data-streams/modify-data-stream.md#data-streams-change-mappings-and-settings). -* **Want larger shards or fewer backing indices?**
Increase your {{ilm-init}} policy’s [rollover threshold](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-rollover.html). +* **Want to decrease the shard count for new indices?**
Change the [`index.number_of_shards`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#index-number-of-shards) setting in the data stream’s [matching index template](../../../manage-data/data-store/data-streams/modify-data-stream.md#data-streams-change-mappings-and-settings). +* **Want larger shards or fewer backing indices?**
Increase your {{ilm-init}} policy’s [rollover threshold](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-rollover.md). * **Need indices that span shorter intervals?**
Offset the increased shard count by deleting older indices sooner. You can do this by lowering the `min_age` threshold for your policy’s [delete phase](../../../manage-data/lifecycle/index-lifecycle-management/index-lifecycle.md). Every new backing index is an opportunity to further tune your strategy. @@ -82,7 +82,7 @@ There is no hard limit on the physical size of a shard, and each shard can in th You may be able to use larger shards depending on your network and use case, and smaller shards may be appropriate for certain use cases. -If you use {{ilm-init}}, set the [rollover action](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-rollover.html)'s `max_primary_shard_size` threshold to `50gb` to avoid shards larger than 50GB and `min_primary_shard_size` threshold to `10gb` to avoid shards smaller than 10GB. +If you use {{ilm-init}}, set the [rollover action](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-rollover.md)'s `max_primary_shard_size` threshold to `50gb` to avoid shards larger than 50GB and `min_primary_shard_size` threshold to `10gb` to avoid shards smaller than 10GB. To see the current size of your shards, use the [cat shards API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cat-shards). @@ -133,7 +133,7 @@ GET _cat/shards?v=true ### Add enough nodes to stay within the cluster shard limits [shard-count-per-node-recommendation] -[Cluster shard limits](https://www.elastic.co/guide/en/elasticsearch/reference/current/misc-cluster-settings.html#cluster-shard-limit) prevent creation of more than 1000 non-frozen shards per node, and 3000 frozen shards per dedicated frozen node. Make sure you have enough nodes of each type in your cluster to handle the number of shards you need. +[Cluster shard limits](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/miscellaneous-cluster-settings.md#cluster-shard-limit) prevent creation of more than 1000 non-frozen shards per node, and 3000 frozen shards per dedicated frozen node. Make sure you have enough nodes of each type in your cluster to handle the number of shards you need. ### Allow enough heap for field mappers and overheads [field-count-recommendation] @@ -223,7 +223,7 @@ Note that the above rules do not necessarily guarantee the performance of search If too many shards are allocated to a specific node, the node can become a hotspot. For example, if a single node contains too many shards for an index with a high indexing volume, the node is likely to have issues. -To prevent hotspots, use the [`index.routing.allocation.total_shards_per_node`](https://www.elastic.co/guide/en/elasticsearch/reference/current/allocation-total-shards.html#total-shards-per-node) index setting to explicitly limit the number of shards on a single node. You can configure `index.routing.allocation.total_shards_per_node` using the [update index settings API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-put-settings). +To prevent hotspots, use the [`index.routing.allocation.total_shards_per_node`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/total-shards-per-node.md#total-shards-per-node) index setting to explicitly limit the number of shards on a single node. You can configure `index.routing.allocation.total_shards_per_node` using the [update index settings API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-put-settings). ```console PUT my-index-000001/_settings @@ -237,7 +237,7 @@ PUT my-index-000001/_settings ### Avoid unnecessary mapped fields [avoid-unnecessary-fields] -By default {{es}} [automatically creates a mapping](../../../manage-data/data-store/mapping/dynamic-mapping.md) for every field in every document it indexes. Every mapped field corresponds to some data structures on disk which are needed for efficient search, retrieval, and aggregations on this field. Details about each mapped field are also held in memory. In many cases this overhead is unnecessary because a field is not used in any searches or aggregations. Use [*Explicit mapping*](../../../manage-data/data-store/mapping/explicit-mapping.md) instead of dynamic mapping to avoid creating fields that are never used. If a collection of fields are typically used together, consider using [`copy_to`](https://www.elastic.co/guide/en/elasticsearch/reference/current/copy-to.html) to consolidate them at index time. If a field is only rarely used, it may be better to make it a [Runtime field](../../../manage-data/data-store/mapping/runtime-fields.md) instead. +By default {{es}} [automatically creates a mapping](../../../manage-data/data-store/mapping/dynamic-mapping.md) for every field in every document it indexes. Every mapped field corresponds to some data structures on disk which are needed for efficient search, retrieval, and aggregations on this field. Details about each mapped field are also held in memory. In many cases this overhead is unnecessary because a field is not used in any searches or aggregations. Use [*Explicit mapping*](../../../manage-data/data-store/mapping/explicit-mapping.md) instead of dynamic mapping to avoid creating fields that are never used. If a collection of fields are typically used together, consider using [`copy_to`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/copy-to.md) to consolidate them at index time. If a field is only rarely used, it may be better to make it a [Runtime field](../../../manage-data/data-store/mapping/runtime-fields.md) instead. You can get information about which fields are being used with the [Field usage stats](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-field-usage-stats) API, and you can analyze the disk usage of mapped fields using the [Analyze index disk usage](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-disk-usage) API. Note however that unnecessary mapped fields also carry some memory overhead as well as their disk usage. @@ -273,7 +273,7 @@ DELETE my-index-000001 ### Force merge during off-peak hours [force-merge-during-off-peak-hours] -If you no longer write to an index, you can use the [force merge API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-forcemerge) to [merge](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-merge.html) smaller segments into larger ones. This can reduce shard overhead and improve search speeds. However, force merges are resource-intensive. If possible, run the force merge during off-peak hours. +If you no longer write to an index, you can use the [force merge API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-forcemerge) to [merge](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/merge-scheduler-settings.md) smaller segments into larger ones. This can reduce shard overhead and improve search speeds. However, force merges are resource-intensive. If possible, run the force merge during off-peak hours. ```console POST my-index-000001/_forcemerge @@ -284,7 +284,7 @@ POST my-index-000001/_forcemerge If you no longer write to an index, you can use the [shrink index API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-shrink) to reduce its shard count. -{{ilm-init}} also has a [shrink action](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-shrink.html) for indices in the warm phase. +{{ilm-init}} also has a [shrink action](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-shrink.md) for indices in the warm phase. ### Combine smaller indices [combine-smaller-indices] @@ -311,7 +311,7 @@ Here’s how to resolve common shard-related errors. ### this action would add [x] total shards, but this cluster currently has [y]/[z] maximum shards open; [troubleshooting-max-shards-open] -The [`cluster.max_shards_per_node`](https://www.elastic.co/guide/en/elasticsearch/reference/current/misc-cluster-settings.html#cluster-max-shards-per-node) cluster setting limits the maximum number of open shards for a cluster. This error indicates an action would exceed this limit. +The [`cluster.max_shards_per_node`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/miscellaneous-cluster-settings.md#cluster-max-shards-per-node) cluster setting limits the maximum number of open shards for a cluster. This error indicates an action would exceed this limit. If you’re confident your changes won’t destabilize the cluster, you can temporarily increase the limit using the [cluster update settings API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cluster-put-settings) and retry the action. diff --git a/deploy-manage/reference-architectures/hotfrozen-high-availability.md b/deploy-manage/reference-architectures/hotfrozen-high-availability.md index b5e416678..ce3f7a864 100644 --- a/deploy-manage/reference-architectures/hotfrozen-high-availability.md +++ b/deploy-manage/reference-architectures/hotfrozen-high-availability.md @@ -10,7 +10,7 @@ applies: # Hot/Frozen - High Availability [hot-frozen-architecture] -The Hot/Frozen High Availability architecture is cost optimized for large time-series datasets. In this architecture, the hot tier is primarily used for indexing, searching, and continuity for automated processes. [Searchable snapshots](https://www.elastic.co/guide/en/elasticsearch/reference/current/searchable-snapshots.html) are taken from hot into a repository, such as a cloud object store or an on-premises shared filesystem, and then cached to any desired volume on the local disks of the frozen tier. Data in the repository is indexed for fast retrieval and accessed on-demand from the frozen nodes. Index and snapshot lifecycle management are used to automate this process. +The Hot/Frozen High Availability architecture is cost optimized for large time-series datasets. In this architecture, the hot tier is primarily used for indexing, searching, and continuity for automated processes. [Searchable snapshots](/deploy-manage/tools/snapshot-and-restore/searchable-snapshots.md) are taken from hot into a repository, such as a cloud object store or an on-premises shared filesystem, and then cached to any desired volume on the local disks of the frozen tier. Data in the repository is indexed for fast retrieval and accessed on-demand from the frozen nodes. Index and snapshot lifecycle management are used to automate this process. This architecture is ideal for time-series use cases, such as Observability or Security, that do not require updating. All the necessary components of the {{stack}} are included. This is not intended for sizing workloads, but rather as a basis to ensure that your cluster is ready to handle any desired workload with resiliency. A very high level representation of data flow is included, and for more detail around ingest architecture see our [ingest architectures](../../manage-data/ingest/ingest-reference-architectures.md) documentation. @@ -21,8 +21,8 @@ This Hot/Frozen – High Availability architecture is intended for organizations * Have a requirement for cost effective long term data storage (many months or years). * Provide insights and alerts using logs, metrics, traces, or various event types to ensure optimal performance and quick issue resolution for applications. -* Apply [machine learning anomaly detection](https://www.elastic.co/guide/en/kibana/current/xpack-ml-anomalies.html) to help detect patterns in time series data to find root cause and resolve problems faster. -* Use an AI assistant ([Observability](https://www.elastic.co/guide/en/observability/current/obs-ai-assistant.html), [Security](https://www.elastic.co/guide/en/security/current/security-assistant.html), or [Playground](https://www.elastic.co/guide/en/kibana/current/playground.html)) for investigation, incident response, reporting, query generation, or query conversion from other languages using natural language. +* Apply [machine learning anomaly detection](/explore-analyze/machine-learning/anomaly-detection.md) to help detect patterns in time series data to find root cause and resolve problems faster. +* Use an AI assistant ([Observability](/explore-analyze/ai-assistant.md), [Security](/solutions/security/ai/ai-assistant.md), or [Playground](/solutions/search/rag/playground.md)) for investigation, incident response, reporting, query generation, or query conversion from other languages using natural language. * Deploy an architecture model that allows for maximum flexibility between storage cost and performance. ::::{important} @@ -46,7 +46,7 @@ We use an Availability Zone (AZ) concept in the architecture above. When running :::: -The diagram illustrates an {{es}} cluster deployed across 3 availability zones (AZ). For production we recommend a minimum of 2 availability zones and 3 availability zones for mission critical applications. See [Plan for production](https://www.elastic.co/guide/en/cloud/current/ec-planning.html) for more details. A cluster that is running in {{ecloud}} that has data nodes in only two AZs will create a third master-eligible node in a third AZ. High availability cannot be achieved without three zones for any distributed computing technology. +The diagram illustrates an {{es}} cluster deployed across 3 availability zones (AZ). For production we recommend a minimum of 2 availability zones and 3 availability zones for mission critical applications. See [Plan for production](/deploy-manage/production-guidance/plan-for-production-elastic-cloud.md) for more details. A cluster that is running in {{ecloud}} that has data nodes in only two AZs will create a third master-eligible node in a third AZ. High availability cannot be achieved without three zones for any distributed computing technology. The number of data nodes shown for each tier (hot and frozen) is illustrative and would be scaled up depending on ingest volume and retention period. Hot nodes contain both primary and replica shards. By default, primary and replica shards are always guaranteed to be in different availability zones in {{ess}}, but when self-deploying [shard allocation awareness](../distributed-architecture/shard-allocation-relocation-recovery/shard-allocation-awareness.md) would need to be configured. Frozen nodes act as a large high-speed cache and retrieve data from the snapshot store as needed. @@ -55,7 +55,7 @@ Machine learning nodes are optional but highly recommended for large scale time ## Recommended hardware specifications [hot-frozen-hardware] -With {{ech}}, you can deploy clusters in AWS, Azure, and Google Cloud. Available hardware types and configurations vary across all three cloud providers but each provides instance types that meet our recommendations for the node types used in this architecture. For more details on these instance types, see our documentation on {{ech}} hardware for [AWS](https://www.elastic.co/guide/en/cloud/current/ec-default-aws-configurations.html), [Azure](https://www.elastic.co/guide/en/cloud/current/ec-default-azure-configurations.html), and [GCP](https://www.elastic.co/guide/en/cloud/current/ec-default-gcp-configurations.html). The **Physical** column below is guidance, based on the cloud node types, when self-deploying {{es}} in your own data center. +With {{ech}}, you can deploy clusters in AWS, Azure, and Google Cloud. Available hardware types and configurations vary across all three cloud providers but each provides instance types that meet our recommendations for the node types used in this architecture. For more details on these instance types, see our documentation on {{ech}} hardware for [AWS](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/aws-default.md), [Azure](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/azure-default.md), and [GCP](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/gcp-default-provider.md). The **Physical** column below is guidance, based on the cloud node types, when self-deploying {{es}} in your own data center. In the links provided above, Elastic has performance tested hardware for each of the cloud providers to find the optimal hardware for each node type. We use ratios to represent the best mix of CPU, RAM, and disk for each type. In some cases the CPU to RAM ratio is key, in others the disk to memory ratio and type of disk is critical. Significantly deviating from these ratios may seem like a way to save on hardware costs, but may result in an {{es}} cluster that does not scale and perform well. @@ -83,16 +83,16 @@ This table shows our specific recommendations for nodes in a Hot/Frozen architec **Shard management:** -* The most important foundational step to maintaining performance as you scale is proper shard management. This includes even shard distribution amongst nodes, shard size, and shard count. For a complete understanding of what shards are and how they should be used, refer to [Size your shards](https://www.elastic.co/guide/en/elasticsearch/reference/current/size-your-shards.html). +* The most important foundational step to maintaining performance as you scale is proper shard management. This includes even shard distribution amongst nodes, shard size, and shard count. For a complete understanding of what shards are and how they should be used, refer to [Size your shards](/deploy-manage/production-guidance/optimize-performance/size-shards.md). **Snapshots:** -* If auditable or business critical events are being logged, a backup is necessary. The choice to back up data will depend on each individual business’s needs and requirements. Refer to our [snapshot repository](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshots-register-repository.html) documentation to learn more. -* To automate snapshots and attach to Index lifecycle management policies, refer to [SLM (Snapshot lifecycle management)](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshots-take-snapshot.html#automate-snapshots-slm). +* If auditable or business critical events are being logged, a backup is necessary. The choice to back up data will depend on each individual business’s needs and requirements. Refer to our [snapshot repository](/deploy-manage/tools/snapshot-and-restore/self-managed.md) documentation to learn more. +* To automate snapshots and attach to Index lifecycle management policies, refer to [SLM (Snapshot lifecycle management)](/deploy-manage/tools/snapshot-and-restore/create-snapshots.md#automate-snapshots-slm). **Kibana:** -* If self-deploying outside of {{ess}}, ensure that {{kib}} is configured for [high availability](https://www.elastic.co/guide/en/kibana/current/production.html#high-availability). +* If self-deploying outside of {{ess}}, ensure that {{kib}} is configured for [high availability](/deploy-manage/production-guidance/kibana-in-production-environments.md#high-availability). ## How many nodes of each do you need? [hot-frozen-estimate] @@ -109,6 +109,6 @@ You can [contact us](https://www.elastic.co/contact) for an estimate and recomme ## Resources and references [hot-frozen-resources] -* [{{es}} - Get ready for production](https://www.elastic.co/guide/en/elasticsearch/reference/current/scalability.html) -* [{{ess}} - Preparing a deployment for production](https://www.elastic.co/guide/en/cloud/current/ec-prepare-production.html) -* [Size your shards](https://www.elastic.co/guide/en/elasticsearch/reference/current/size-your-shards.html) +* [{{es}} - Get ready for production](/deploy-manage/production-guidance/getting-ready-for-production-elasticsearch.md) +* [{{ess}} - Preparing a deployment for production](/deploy-manage/deploy/elastic-cloud/cloud-hosted.md) +* [Size your shards](/deploy-manage/production-guidance/optimize-performance/size-shards.md) diff --git a/deploy-manage/remote-clusters/ec-enable-ccs-for-eck.md b/deploy-manage/remote-clusters/ec-enable-ccs-for-eck.md index 1aaa6a8eb..f3207d452 100644 --- a/deploy-manage/remote-clusters/ec-enable-ccs-for-eck.md +++ b/deploy-manage/remote-clusters/ec-enable-ccs-for-eck.md @@ -5,7 +5,7 @@ mapped_pages: # Enabling CCS/R between Elasticsearch Service and ECK [ec-enable-ccs-for-eck] -These steps describe how to configure remote clusters between an {{es}} cluster in Elasticsearch Service and an {{es}} cluster running within [Elastic Cloud on Kubernetes (ECK)](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-overview.html). Once that’s done, you’ll be able to [run CCS queries from {{es}}](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cross-cluster-search.html) or [set up CCR](https://www.elastic.co/guide/en/elasticsearch/reference/current/ccr-getting-started-tutorial.html). +These steps describe how to configure remote clusters between an {{es}} cluster in Elasticsearch Service and an {{es}} cluster running within [Elastic Cloud on Kubernetes (ECK)](/deploy-manage/deploy/cloud-on-k8s.md). Once that’s done, you’ll be able to [run CCS queries from {{es}}](/solutions/search/cross-cluster-search.md) or [set up CCR](/deploy-manage/tools/cross-cluster-replication/set-up-cross-cluster-replication.md). ## Establish trust between two clusters [ec_establish_trust_between_two_clusters] @@ -85,4 +85,4 @@ Configure the ECK cluster [using certificate based authentication](ec-remote-clu ### Elasticsearch Service cluster to ECK Cluster [ec_elasticsearch_service_cluster_to_eck_cluster] -Follow the steps outlined in the [ECK documentation](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-remote-clusters.html#k8s_configure_the_remote_cluster_connection_through_the_elasticsearch_rest_api). +Follow the steps outlined in the [ECK documentation](/deploy-manage/remote-clusters/eck-remote-clusters.md#k8s_configure_the_remote_cluster_connection_through_the_elasticsearch_rest_api). diff --git a/deploy-manage/remote-clusters/ec-enable-ccs.md b/deploy-manage/remote-clusters/ec-enable-ccs.md index f1ab4c063..ceb1506f9 100644 --- a/deploy-manage/remote-clusters/ec-enable-ccs.md +++ b/deploy-manage/remote-clusters/ec-enable-ccs.md @@ -5,9 +5,9 @@ mapped_pages: # Enable cross-cluster search and cross-cluster replication [ec-enable-ccs] -[Cross-cluster search (CCS)](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cross-cluster-search.html) allows you to configure multiple remote clusters across different locations and to enable federated search queries across all of the configured remote clusters. +[Cross-cluster search (CCS)](/solutions/search/cross-cluster-search.md) allows you to configure multiple remote clusters across different locations and to enable federated search queries across all of the configured remote clusters. -[Cross-cluster replication (CCR)](https://www.elastic.co/guide/en/elasticsearch/reference/current/xpack-ccr.html) allows you to replicate indices across multiple remote clusters regardless of where they’re located. This provides tremendous benefit in scenarios of disaster recovery or data locality. +[Cross-cluster replication (CCR)](/deploy-manage/tools/cross-cluster-replication.md) allows you to replicate indices across multiple remote clusters regardless of where they’re located. This provides tremendous benefit in scenarios of disaster recovery or data locality. These remote clusters could be: @@ -21,7 +21,7 @@ These remote clusters could be: To use CCS or CCR, your deployments must meet the following criteria: -* Local and remote clusters must be in compatible versions. Review the [{{es}} version compatibility](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters-cert.html#remote-clusters-prerequisites-cert) table. +* Local and remote clusters must be in compatible versions. Review the [{{es}} version compatibility](/deploy-manage/remote-clusters/remote-clusters-cert.md#remote-clusters-prerequisites-cert) table. The steps, information, and authentication method required to configure CCS and CCR can vary depending on where the clusters you want to use as remote are hosted. @@ -37,8 +37,8 @@ The steps, information, and authentication method required to configure CCS and * [From another deployment of your Elasticsearch Service organization](ec-remote-cluster-same-ess.md) * [From a deployment of another Elasticsearch Service organization](ec-remote-cluster-other-ess.md) - * [From an ECE deployment](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-enable-ccs.html) - * [From a self-managed cluster](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html) + * [From an ECE deployment](/deploy-manage/remote-clusters/ece-enable-ccs.md) + * [From a self-managed cluster](/deploy-manage/remote-clusters/remote-clusters-self-managed.md) diff --git a/deploy-manage/remote-clusters/ec-migrate-ccs.md b/deploy-manage/remote-clusters/ec-migrate-ccs.md index f1f18d000..a4dbf6183 100644 --- a/deploy-manage/remote-clusters/ec-migrate-ccs.md +++ b/deploy-manage/remote-clusters/ec-migrate-ccs.md @@ -19,7 +19,7 @@ You can use a PUT request to update your deployment, changing both the deploymen 1. First, choose the new template you want to use and obtain its ID. This template ID can be obtained from the [Elasticsearch Service Console](https://cloud.elastic.co?page=docs&placement=docs-body) **Create Deployment** page by selecting **Equivalent API request** and inspecting the result for the field `deployment_template`. For example, we are going to use the "Storage optimized" deployment template, and in our GCP region the id is `gcp-storage-optimized-v5`. - You can also find the template in the [list of templates available for each region](https://www.elastic.co/guide/en/cloud/current/ec-regions-templates-instances.html). + You can also find the template in the [list of templates available for each region](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-regions-templates-instances.md). :::{image} ../../images/cloud-ec-migrate-deployment-template(2).png :alt: Deployment Template ID diff --git a/deploy-manage/remote-clusters/ec-remote-cluster-ece.md b/deploy-manage/remote-clusters/ec-remote-cluster-ece.md index 060216d95..31851cdbf 100644 --- a/deploy-manage/remote-clusters/ec-remote-cluster-ece.md +++ b/deploy-manage/remote-clusters/ec-remote-cluster-ece.md @@ -36,7 +36,7 @@ A deployment can be configured to trust all or specific deployments in a remote 7. Provide a name for the trusted environment. That name will appear in the trust summary of your deployment’s Security page. 8. Select **Create trust** to complete the configuration. -9. Configure the corresponding deployments of the ECE environment to [trust this deployment](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-enable-ccs.html). You will only be able to connect 2 deployments successfully when both of them trust each other. +9. Configure the corresponding deployments of the ECE environment to [trust this deployment](/deploy-manage/remote-clusters/ece-enable-ccs.md). You will only be able to connect 2 deployments successfully when both of them trust each other. Note that the environment ID and cluster IDs must be entered fully and correctly. For security reasons, no verification of the IDs is possible. If cross-environment trust does not appear to be working, double-checking the IDs is a good place to start. @@ -212,7 +212,7 @@ On the local cluster, add the remote cluster using Kibana or the {{es}} API. ::: ::::{note} - If you’re having issues establishing the connection and the remote cluster is part of an {{ece}} environment with a private certificate, make sure that the proxy address and server name match with the the certificate information. For more information, refer to [Administering endpoints in {{ece}}](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-administering-endpoints.html). + If you’re having issues establishing the connection and the remote cluster is part of an {{ece}} environment with a private certificate, make sure that the proxy address and server name match with the the certificate information. For more information, refer to [Administering endpoints in {{ece}}](/deploy-manage/deploy/cloud-enterprise/change-endpoint-urls.md). :::: 4. Click **Next**. @@ -258,7 +258,7 @@ This section only applies if you’re using TLS certificates as cross-cluster se :::: -When the cluster to be configured as a remote is above 6.7.0 and below 7.6.0, the remote cluster must be configured using the [sniff mode](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#sniff-mode) with the proxy field. For each remote cluster you need to pass the following fields: +When the cluster to be configured as a remote is above 6.7.0 and below 7.6.0, the remote cluster must be configured using the [sniff mode](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#sniff-mode) with the proxy field. For each remote cluster you need to pass the following fields: * **Proxy**: This value can be found on the **Security** page of the deployment you want to use as a remote under the name `Proxy Address`. Also, using the API, this can be obtained from the elasticsearch resource info, concatenating the fields `metadata.endpoint` and `metadata.ports.transport_passthrough` using a semicolon. * **Seeds**: This field is an array that must contain only one value, which is the `server name` that can be found on the **Security** page of the {{es}} deployment you want to use as a remote concatenated with `:1`. Also, using the API, this can be obtained from the {{es}} resource info, concatenating the fields `metadata.endpoint` and `1` with a semicolon. @@ -317,7 +317,7 @@ curl -H 'Content-Type: application/json' -X PUT -H "Authorization: ApiKey $EC_AP Note the following when using the Elasticsearch Service RESTful API: 1. A cluster alias must contain only letters, numbers, dashes (-), or underscores (_). -2. To learn about skipping disconnected clusters, refer to the [{{es}} documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cross-cluster-search.html#skip-unavailable-clusters). +2. To learn about skipping disconnected clusters, refer to the [{{es}} documentation](/solutions/search/cross-cluster-search.md#skip-unavailable-clusters). 3. When remote clusters are already configured for a deployment, the `PUT` request replaces the existing configuration with the new configuration passed. Passing an empty array of resources will remove all remote clusters. The following API request retrieves the remote clusters configuration: diff --git a/deploy-manage/remote-clusters/ec-remote-cluster-other-ess.md b/deploy-manage/remote-clusters/ec-remote-cluster-other-ess.md index 2f918911c..4892d367a 100644 --- a/deploy-manage/remote-clusters/ec-remote-cluster-other-ess.md +++ b/deploy-manage/remote-clusters/ec-remote-cluster-other-ess.md @@ -148,7 +148,7 @@ On the local cluster, add the remote cluster using Kibana or the {{es}} API. ::: ::::{note} - If you’re having issues establishing the connection and the remote cluster is part of an {{ece}} environment with a private certificate, make sure that the proxy address and server name match with the the certificate information. For more information, refer to [Administering endpoints in {{ece}}](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-administering-endpoints.html). + If you’re having issues establishing the connection and the remote cluster is part of an {{ece}} environment with a private certificate, make sure that the proxy address and server name match with the the certificate information. For more information, refer to [Administering endpoints in {{ece}}](/deploy-manage/deploy/cloud-enterprise/change-endpoint-urls.md). :::: 4. Click **Next**. @@ -194,7 +194,7 @@ This section only applies if you’re using TLS certificates as cross-cluster se :::: -When the cluster to be configured as a remote is above 6.7.0 and below 7.6.0, the remote cluster must be configured using the [sniff mode](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#sniff-mode) with the proxy field. For each remote cluster you need to pass the following fields: +When the cluster to be configured as a remote is above 6.7.0 and below 7.6.0, the remote cluster must be configured using the [sniff mode](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#sniff-mode) with the proxy field. For each remote cluster you need to pass the following fields: * **Proxy**: This value can be found on the **Security** page of the deployment you want to use as a remote under the name `Proxy Address`. Also, using the API, this can be obtained from the elasticsearch resource info, concatenating the fields `metadata.endpoint` and `metadata.ports.transport_passthrough` using a semicolon. * **Seeds**: This field is an array that must contain only one value, which is the `server name` that can be found on the **Security** page of the {{es}} deployment you want to use as a remote concatenated with `:1`. Also, using the API, this can be obtained from the {{es}} resource info, concatenating the fields `metadata.endpoint` and `1` with a semicolon. @@ -253,7 +253,7 @@ curl -H 'Content-Type: application/json' -X PUT -H "Authorization: ApiKey $EC_AP Note the following when using the Elasticsearch Service RESTful API: 1. A cluster alias must contain only letters, numbers, dashes (-), or underscores (_). -2. To learn about skipping disconnected clusters, refer to the [{{es}} documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cross-cluster-search.html#skip-unavailable-clusters). +2. To learn about skipping disconnected clusters, refer to the [{{es}} documentation](/solutions/search/cross-cluster-search.md#skip-unavailable-clusters). 3. When remote clusters are already configured for a deployment, the `PUT` request replaces the existing configuration with the new configuration passed. Passing an empty array of resources will remove all remote clusters. The following API request retrieves the remote clusters configuration: diff --git a/deploy-manage/remote-clusters/ec-remote-cluster-same-ess.md b/deploy-manage/remote-clusters/ec-remote-cluster-same-ess.md index 7e0447ee2..838ae0f5c 100644 --- a/deploy-manage/remote-clusters/ec-remote-cluster-same-ess.md +++ b/deploy-manage/remote-clusters/ec-remote-cluster-same-ess.md @@ -24,7 +24,7 @@ TLS certificate By default, any deployment that you create trusts all other deployments in the same organization. You can change this behavior in the [Elasticsearch Service Console](https://cloud.elastic.co?page=docs&placement=docs-body) under **Features** > **Trust**, so that when a new deployment is created it does not automatically trust any other deployment. You can choose one of the following options: -* Trust all my deployments - All of your organization’s deployments created while this option is selected already trust each other. If you keep this option, that includes any deployments you’ll create in the future. You can directly jump to [Connect to the remote cluster](https://www.elastic.co/guide/en/cloud/current/ec-remote-cluster-same-ess.html#ec_connect_to_the_remote_cluster) to finalize the CCS or CCR configuration. +* Trust all my deployments - All of your organization’s deployments created while this option is selected already trust each other. If you keep this option, that includes any deployments you’ll create in the future. You can directly jump to [Connect to the remote cluster](/deploy-manage/remote-clusters/ec-remote-cluster-same-ess.md#ec_connect_to_the_remote_cluster) to finalize the CCS or CCR configuration. * Trust no deployment - New deployments won’t trust any other deployment when they are created. You can instead configure trust individually for each of them in their security settings, as described in the next section. :::{image} ../../images/cloud-ec-account-trust-management.png @@ -54,7 +54,7 @@ If your organization’s deployments already trust each other by default, you ca ::::{note} -When trusting specific deployments, the more restrictive [CCS](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#sniff-mode) version policy is used (even if you only want to use [CCR](https://www.elastic.co/guide/en/elasticsearch/reference/current/xpack-ccr.html)). To work around this restriction for CCR-only trust, it is necessary to use the API as described below. +When trusting specific deployments, the more restrictive [CCS](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#sniff-mode) version policy is used (even if you only want to use [CCR](/deploy-manage/tools/cross-cluster-replication.md)). To work around this restriction for CCR-only trust, it is necessary to use the API as described below. :::: @@ -185,7 +185,7 @@ On the local cluster, add the remote cluster using Kibana or the {{es}} API. ::: ::::{note} - If you’re having issues establishing the connection and the remote cluster is part of an {{ece}} environment with a private certificate, make sure that the proxy address and server name match with the the certificate information. For more information, refer to [Administering endpoints in {{ece}}](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-administering-endpoints.html). + If you’re having issues establishing the connection and the remote cluster is part of an {{ece}} environment with a private certificate, make sure that the proxy address and server name match with the the certificate information. For more information, refer to [Administering endpoints in {{ece}}](/deploy-manage/deploy/cloud-enterprise/change-endpoint-urls.md). :::: 4. Click **Next**. @@ -231,7 +231,7 @@ This section only applies if you’re using TLS certificates as cross-cluster se :::: -When the cluster to be configured as a remote is above 6.7.0 and below 7.6.0, the remote cluster must be configured using the [sniff mode](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#sniff-mode) with the proxy field. For each remote cluster you need to pass the following fields: +When the cluster to be configured as a remote is above 6.7.0 and below 7.6.0, the remote cluster must be configured using the [sniff mode](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#sniff-mode) with the proxy field. For each remote cluster you need to pass the following fields: * **Proxy**: This value can be found on the **Security** page of the deployment you want to use as a remote under the name `Proxy Address`. Also, using the API, this can be obtained from the elasticsearch resource info, concatenating the fields `metadata.endpoint` and `metadata.ports.transport_passthrough` using a semicolon. * **Seeds**: This field is an array that must contain only one value, which is the `server name` that can be found on the **Security** page of the {{es}} deployment you want to use as a remote concatenated with `:1`. Also, using the API, this can be obtained from the {{es}} resource info, concatenating the fields `metadata.endpoint` and `1` with a semicolon. @@ -290,7 +290,7 @@ curl -H 'Content-Type: application/json' -X PUT -H "Authorization: ApiKey $EC_AP Note the following when using the Elasticsearch Service RESTful API: 1. A cluster alias must contain only letters, numbers, dashes (-), or underscores (_). -2. To learn about skipping disconnected clusters, refer to the [{{es}} documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cross-cluster-search.html#skip-unavailable-clusters). +2. To learn about skipping disconnected clusters, refer to the [{{es}} documentation](/solutions/search/cross-cluster-search.md#skip-unavailable-clusters). 3. When remote clusters are already configured for a deployment, the `PUT` request replaces the existing configuration with the new configuration passed. Passing an empty array of resources will remove all remote clusters. The following API request retrieves the remote clusters configuration: diff --git a/deploy-manage/remote-clusters/ec-remote-cluster-self-managed.md b/deploy-manage/remote-clusters/ec-remote-cluster-self-managed.md index c9a1fe050..9079c44b7 100644 --- a/deploy-manage/remote-clusters/ec-remote-cluster-self-managed.md +++ b/deploy-manage/remote-clusters/ec-remote-cluster-self-managed.md @@ -41,7 +41,7 @@ A deployment can be configured to trust all or specific deployments in any envir 7. Configure the self-managed cluster to trust this deployment, so that both deployments are configured to trust each other: * Download the Certificate Authority used to sign the certificates of your deployment nodes (it can be found in the Security page of your deployment) - * Trust this CA either using the [setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html) `xpack.security.transport.ssl.certificate_authorities` in `elasticsearch.yml` or by [adding it to the trust store](../security/different-ca.md). + * Trust this CA either using the [setting](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md) `xpack.security.transport.ssl.certificate_authorities` in `elasticsearch.yml` or by [adding it to the trust store](../security/different-ca.md). 8. Generate certificates with an `otherName` attribute using the Elasticsearch certutil. Create a file called `instances.yaml` with all the details of the nodes in your on-premise cluster like below. The `dns` and `ip` settings are optional, but `cn` is mandatory for use with the `trust_restrictions` path setting in the next step. Next, run `./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 -in instances.yaml` to create new certificates for all the nodes at once. You can then copy the resulting files into each node. @@ -239,7 +239,7 @@ On the local cluster, add the remote cluster using Kibana or the {{es}} API. ::: ::::{note} - If you’re having issues establishing the connection and the remote cluster is part of an {{ece}} environment with a private certificate, make sure that the proxy address and server name match with the the certificate information. For more information, refer to [Administering endpoints in {{ece}}](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-administering-endpoints.html). + If you’re having issues establishing the connection and the remote cluster is part of an {{ece}} environment with a private certificate, make sure that the proxy address and server name match with the the certificate information. For more information, refer to [Administering endpoints in {{ece}}](/deploy-manage/deploy/cloud-enterprise/change-endpoint-urls.md). :::: 4. Click **Next**. @@ -285,7 +285,7 @@ This section only applies if you’re using TLS certificates as cross-cluster se :::: -When the cluster to be configured as a remote is above 6.7.0 and below 7.6.0, the remote cluster must be configured using the [sniff mode](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#sniff-mode) with the proxy field. For each remote cluster you need to pass the following fields: +When the cluster to be configured as a remote is above 6.7.0 and below 7.6.0, the remote cluster must be configured using the [sniff mode](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#sniff-mode) with the proxy field. For each remote cluster you need to pass the following fields: * **Proxy**: This value can be found on the **Security** page of the deployment you want to use as a remote under the name `Proxy Address`. Also, using the API, this can be obtained from the elasticsearch resource info, concatenating the fields `metadata.endpoint` and `metadata.ports.transport_passthrough` using a semicolon. * **Seeds**: This field is an array that must contain only one value, which is the `server name` that can be found on the **Security** page of the {{es}} deployment you want to use as a remote concatenated with `:1`. Also, using the API, this can be obtained from the {{es}} resource info, concatenating the fields `metadata.endpoint` and `1` with a semicolon. @@ -344,7 +344,7 @@ curl -H 'Content-Type: application/json' -X PUT -H "Authorization: ApiKey $EC_AP Note the following when using the Elasticsearch Service RESTful API: 1. A cluster alias must contain only letters, numbers, dashes (-), or underscores (_). -2. To learn about skipping disconnected clusters, refer to the [{{es}} documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cross-cluster-search.html#skip-unavailable-clusters). +2. To learn about skipping disconnected clusters, refer to the [{{es}} documentation](/solutions/search/cross-cluster-search.md#skip-unavailable-clusters). 3. When remote clusters are already configured for a deployment, the `PUT` request replaces the existing configuration with the new configuration passed. Passing an empty array of resources will remove all remote clusters. The following API request retrieves the remote clusters configuration: diff --git a/deploy-manage/remote-clusters/ece-enable-ccs-for-eck.md b/deploy-manage/remote-clusters/ece-enable-ccs-for-eck.md index 23b05068b..70cfae6ec 100644 --- a/deploy-manage/remote-clusters/ece-enable-ccs-for-eck.md +++ b/deploy-manage/remote-clusters/ece-enable-ccs-for-eck.md @@ -5,7 +5,7 @@ mapped_pages: # Enabling CCS/R between Elastic Cloud Enterprise and ECK [ece-enable-ccs-for-eck] -These steps describe how to configure remote clusters between an {{es}} cluster in Elastic Cloud Enterprise and an {{es}} cluster running within [Elastic Cloud on Kubernetes (ECK)](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-overview.html). Once that’s done, you’ll be able to [run CCS queries from {{es}}](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cross-cluster-search.html) or [set up CCR](https://www.elastic.co/guide/en/elasticsearch/reference/current/ccr-getting-started-tutorial.html). +These steps describe how to configure remote clusters between an {{es}} cluster in Elastic Cloud Enterprise and an {{es}} cluster running within [Elastic Cloud on Kubernetes (ECK)](/deploy-manage/deploy/cloud-on-k8s.md). Once that’s done, you’ll be able to [run CCS queries from {{es}}](/solutions/search/cross-cluster-search.md) or [set up CCR](/deploy-manage/tools/cross-cluster-replication/set-up-cross-cluster-replication.md). ## Establish trust between two clusters [ece_establish_trust_between_two_clusters] @@ -85,4 +85,4 @@ Configure the ECK cluster [using certificate based authentication](ece-remote-cl ### Elastic Cloud Enterprise cluster to ECK Cluster [ece_elastic_cloud_enterprise_cluster_to_eck_cluster] -Follow the steps outlined in the [ECK documentation](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-remote-clusters.html#k8s_configure_the_remote_cluster_connection_through_the_elasticsearch_rest_api). +Follow the steps outlined in the [ECK documentation](/deploy-manage/remote-clusters/eck-remote-clusters.md#k8s_configure_the_remote_cluster_connection_through_the_elasticsearch_rest_api). diff --git a/deploy-manage/remote-clusters/ece-enable-ccs.md b/deploy-manage/remote-clusters/ece-enable-ccs.md index d1a854edf..a11864d98 100644 --- a/deploy-manage/remote-clusters/ece-enable-ccs.md +++ b/deploy-manage/remote-clusters/ece-enable-ccs.md @@ -5,9 +5,9 @@ mapped_pages: # Enable cross-cluster search and cross-cluster replication [ece-enable-ccs] -[Cross-cluster search (CCS)](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cross-cluster-search.html) allows you to configure multiple remote clusters across different locations and to enable federated search queries across all of the configured remote clusters. +[Cross-cluster search (CCS)](/solutions/search/cross-cluster-search.md) allows you to configure multiple remote clusters across different locations and to enable federated search queries across all of the configured remote clusters. -[Cross-cluster replication (CCR)](https://www.elastic.co/guide/en/elasticsearch/reference/current/xpack-ccr.html) allows you to replicate indices across multiple remote clusters regardless of where they’re located. This provides tremendous benefit in scenarios of disaster recovery or data locality. +[Cross-cluster replication (CCR)](/deploy-manage/tools/cross-cluster-replication.md) allows you to replicate indices across multiple remote clusters regardless of where they’re located. This provides tremendous benefit in scenarios of disaster recovery or data locality. These remote clusters could be: @@ -21,7 +21,7 @@ These remote clusters could be: To use CCS or CCR, your environment must meet the following criteria: -* Local and remote clusters must be in compatible versions. Review the [{{es}} version compatibility](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters-cert.html#remote-clusters-prerequisites-cert) table. +* Local and remote clusters must be in compatible versions. Review the [{{es}} version compatibility](/deploy-manage/remote-clusters/remote-clusters-cert.md#remote-clusters-prerequisites-cert) table. * System deployments cannot be used as remote clusters or have remote clusters. @@ -42,8 +42,8 @@ The steps, information, and authentication method required to configure CCS and * [From another deployment of the same Elastic Cloud Enterprise environment](ece-remote-cluster-same-ece.md) * [From a deployment of another Elastic Cloud Enterprise environment](ece-remote-cluster-other-ece.md) - * [From an {{ess}} deployment](https://www.elastic.co/guide/en/cloud/current/ec-remote-cluster-ece.html) - * [From a self-managed cluster](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html) + * [From an {{ess}} deployment](/deploy-manage/remote-clusters/ec-remote-cluster-ece.md) + * [From a self-managed cluster](/deploy-manage/remote-clusters/remote-clusters-self-managed.md) diff --git a/deploy-manage/remote-clusters/ece-migrate-ccs.md b/deploy-manage/remote-clusters/ece-migrate-ccs.md index 52aa629a7..1b788c0a7 100644 --- a/deploy-manage/remote-clusters/ece-migrate-ccs.md +++ b/deploy-manage/remote-clusters/ece-migrate-ccs.md @@ -23,5 +23,5 @@ You can make this change in the user Cloud UI. The only drawback of this method :class: screenshot ::: -4. Finally, [configure the remote clusters](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-remote-cluster-other-ece.html). +4. Finally, [configure the remote clusters](/deploy-manage/remote-clusters/ece-remote-cluster-other-ece.md). diff --git a/deploy-manage/remote-clusters/ece-remote-cluster-ece-ess.md b/deploy-manage/remote-clusters/ece-remote-cluster-ece-ess.md index c380a786d..ad9d667bd 100644 --- a/deploy-manage/remote-clusters/ece-remote-cluster-ece-ess.md +++ b/deploy-manage/remote-clusters/ece-remote-cluster-ece-ess.md @@ -33,7 +33,7 @@ A deployment can be configured to trust all or specific deployments from an orga * All deployments - This deployment trusts all deployments in the organization in the regions whose certificate authorities have been uploaded, including new deployments when they are created. * Specific deployments - Specify which of the existing deployments you want to trust from this organization. The full Elasticsearch cluster ID must be entered for each remote cluster. The Elasticsearch `Cluster ID` can be found in the deployment overview page under **Applications**. -5. Configure the deployment in {{ecloud}} to [trust this deployment](https://www.elastic.co/guide/en/cloud/current/ec-remote-cluster-ece.html#ec-trust-ece), so that both deployments are configured to trust each other. +5. Configure the deployment in {{ecloud}} to [trust this deployment](/deploy-manage/remote-clusters/ec-remote-cluster-ece.md#ec-trust-ece), so that both deployments are configured to trust each other. Note that the organization ID and cluster IDs must be entered fully and correctly. For security reasons, no verification of the IDs is possible. If cross-environment trust does not appear to be working, double-checking the IDs is a good place to start. @@ -154,14 +154,14 @@ On the local cluster, add the remote cluster using Kibana or the {{es}} API. ::: ::::{note} - If you’re having issues establishing the connection and the remote cluster is part of an {{ece}} environment with a private certificate, make sure that the proxy address and server name match with the the certificate information. For more information, refer to [Administering endpoints in {{ece}}](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-administering-endpoints.html). + If you’re having issues establishing the connection and the remote cluster is part of an {{ece}} environment with a private certificate, make sure that the proxy address and server name match with the the certificate information. For more information, refer to [Administering endpoints in {{ece}}](/deploy-manage/deploy/cloud-enterprise/change-endpoint-urls.md). :::: 4. Click **Next**. 5. Click **Add remote cluster** (you have already established trust in a previous step). ::::{note} -This configuration of remote clusters uses the [Proxy mode](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#proxy-mode) and it requires that the allocators can communicate via http with the proxies. +This configuration of remote clusters uses the [Proxy mode](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#proxy-mode) and it requires that the allocators can communicate via http with the proxies. :::: @@ -205,7 +205,7 @@ This section only applies if you’re using TLS certificates as cross-cluster se :::: -When the cluster to be configured as a remote is above 6.7.0 and below 7.6.0, the remote cluster must be configured using the [sniff mode](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#sniff-mode) with the proxy field. For each remote cluster you need to pass the following fields: +When the cluster to be configured as a remote is above 6.7.0 and below 7.6.0, the remote cluster must be configured using the [sniff mode](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#sniff-mode) with the proxy field. For each remote cluster you need to pass the following fields: * **Proxy**: This value can be found on the **Security** page of the deployment you want to use as a remote under the name `Proxy Address`. Also, using the API, this can be obtained from the elasticsearch resource info, concatenating the fields `metadata.endpoint` and `metadata.ports.transport_passthrough` using a semicolon. * **Seeds**: This field is an array that must contain only one value, which is the `server name` that can be found on the **Security** page of the ECE deployment you want to use as a remote concatenated with `:1`. Also, using the API, this can be obtained from the {{es}} resource info, concatenating the fields `metadata.endpoint` and `1` with a semicolon. @@ -264,7 +264,7 @@ curl -k -H 'Content-Type: application/json' -X PUT -H "Authorization: ApiKey $EC Note the following when using the Elastic Cloud Enterprise RESTful API: 1. A cluster alias must contain only letters, numbers, dashes (-), or underscores (_). -2. To learn about skipping disconnected clusters, refer to the [{{es}} documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cross-cluster-search.html#skip-unavailable-clusters). +2. To learn about skipping disconnected clusters, refer to the [{{es}} documentation](/solutions/search/cross-cluster-search.md#skip-unavailable-clusters). 3. When remote clusters are already configured for a deployment, the `PUT` request replaces the existing configuration with the new configuration passed. Passing an empty array of resources will remove all remote clusters. The following API request retrieves the remote clusters configuration: diff --git a/deploy-manage/remote-clusters/ece-remote-cluster-other-ece.md b/deploy-manage/remote-clusters/ece-remote-cluster-other-ece.md index e13b3fce3..c458b1a56 100644 --- a/deploy-manage/remote-clusters/ece-remote-cluster-other-ece.md +++ b/deploy-manage/remote-clusters/ece-remote-cluster-other-ece.md @@ -44,7 +44,7 @@ Now, deployments in those environments will be able to configure trust with depl * Specific deployments - Specify which of the existing deployments you want to trust in the ECE environment. The full Elasticsearch cluster ID must be entered for each remote cluster. The Elasticsearch `Cluster ID` can be found in the deployment overview page under **Applications**. 6. Select **Create trust** to complete the configuration. -7. Configure the corresponding deployments of the ECE environment to [trust this deployment](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-enable-ccs.html). You will only be able to connect 2 deployments successfully when both of them trust each other. +7. Configure the corresponding deployments of the ECE environment to [trust this deployment](/deploy-manage/remote-clusters/ece-enable-ccs.md). You will only be able to connect 2 deployments successfully when both of them trust each other. Note that the environment ID and cluster IDs must be entered fully and correctly. For security reasons, no verification of the IDs is possible. If cross-environment trust does not appear to be working, double-checking the IDs is a good place to start. @@ -232,14 +232,14 @@ On the local cluster, add the remote cluster using Kibana or the {{es}} API. ::: ::::{note} - If you’re having issues establishing the connection and the remote cluster is part of an {{ece}} environment with a private certificate, make sure that the proxy address and server name match with the the certificate information. For more information, refer to [Administering endpoints in {{ece}}](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-administering-endpoints.html). + If you’re having issues establishing the connection and the remote cluster is part of an {{ece}} environment with a private certificate, make sure that the proxy address and server name match with the the certificate information. For more information, refer to [Administering endpoints in {{ece}}](/deploy-manage/deploy/cloud-enterprise/change-endpoint-urls.md). :::: 4. Click **Next**. 5. Click **Add remote cluster** (you have already established trust in a previous step). ::::{note} -This configuration of remote clusters uses the [Proxy mode](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#proxy-mode) and it requires that the allocators can communicate via http with the proxies. +This configuration of remote clusters uses the [Proxy mode](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#proxy-mode) and it requires that the allocators can communicate via http with the proxies. :::: @@ -283,7 +283,7 @@ This section only applies if you’re using TLS certificates as cross-cluster se :::: -When the cluster to be configured as a remote is above 6.7.0 and below 7.6.0, the remote cluster must be configured using the [sniff mode](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#sniff-mode) with the proxy field. For each remote cluster you need to pass the following fields: +When the cluster to be configured as a remote is above 6.7.0 and below 7.6.0, the remote cluster must be configured using the [sniff mode](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#sniff-mode) with the proxy field. For each remote cluster you need to pass the following fields: * **Proxy**: This value can be found on the **Security** page of the deployment you want to use as a remote under the name `Proxy Address`. Also, using the API, this can be obtained from the elasticsearch resource info, concatenating the fields `metadata.endpoint` and `metadata.ports.transport_passthrough` using a semicolon. * **Seeds**: This field is an array that must contain only one value, which is the `server name` that can be found on the **Security** page of the ECE deployment you want to use as a remote concatenated with `:1`. Also, using the API, this can be obtained from the {{es}} resource info, concatenating the fields `metadata.endpoint` and `1` with a semicolon. @@ -342,7 +342,7 @@ curl -k -H 'Content-Type: application/json' -X PUT -H "Authorization: ApiKey $EC Note the following when using the Elastic Cloud Enterprise RESTful API: 1. A cluster alias must contain only letters, numbers, dashes (-), or underscores (_). -2. To learn about skipping disconnected clusters, refer to the [{{es}} documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cross-cluster-search.html#skip-unavailable-clusters). +2. To learn about skipping disconnected clusters, refer to the [{{es}} documentation](/solutions/search/cross-cluster-search.md#skip-unavailable-clusters). 3. When remote clusters are already configured for a deployment, the `PUT` request replaces the existing configuration with the new configuration passed. Passing an empty array of resources will remove all remote clusters. The following API request retrieves the remote clusters configuration: diff --git a/deploy-manage/remote-clusters/ece-remote-cluster-same-ece.md b/deploy-manage/remote-clusters/ece-remote-cluster-same-ece.md index 3c434e991..5f5f4f411 100644 --- a/deploy-manage/remote-clusters/ece-remote-cluster-same-ece.md +++ b/deploy-manage/remote-clusters/ece-remote-cluster-same-ece.md @@ -25,7 +25,7 @@ TLS certificate By default, any deployment that you or your users create trusts all other deployments in the same Elastic Cloud Enterprise environment. You can change this behavior in the Cloud UI under **Platform** > **Trust Management**, so that when a new deployment is created it does not automatically trust any other deployment. You can choose one of the following options: -* Trust all my deployments - All of your organization’s deployments created while this option is selected already trust each other. If you keep this option, that includes any deployments you’ll create in the future. You can directly jump to [Connect to the remote cluster](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-remote-cluster-same-ece.html#ece_connect_to_the_remote_cluster) to finalize the CCS or CCR configuration. +* Trust all my deployments - All of your organization’s deployments created while this option is selected already trust each other. If you keep this option, that includes any deployments you’ll create in the future. You can directly jump to [Connect to the remote cluster](/deploy-manage/remote-clusters/ece-remote-cluster-same-ece.md#ece_connect_to_the_remote_cluster) to finalize the CCS or CCR configuration. * Trust no deployment - New deployments won’t trust any other deployment when they are created. You can instead configure trust individually for each of them in their security settings, as described in the next section. :::{image} ../../images/cloud-enterprise-ce-environment-trust-management.png @@ -55,7 +55,7 @@ If your organization’s deployments already trust each other by default, you ca ::::{note} -When trusting specific deployments, the more restrictive [CCS](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#sniff-mode) version policy is used (even if you only want to use [CCR](https://www.elastic.co/guide/en/elasticsearch/reference/current/xpack-ccr.html)). To work around this restriction for CCR-only trust, it is necessary to use the API as described below. +When trusting specific deployments, the more restrictive [CCS](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#sniff-mode) version policy is used (even if you only want to use [CCR](/deploy-manage/tools/cross-cluster-replication.md)). To work around this restriction for CCR-only trust, it is necessary to use the API as described below. :::: @@ -184,14 +184,14 @@ On the local cluster, add the remote cluster using Kibana or the {{es}} API. ::: ::::{note} - If you’re having issues establishing the connection and the remote cluster is part of an {{ece}} environment with a private certificate, make sure that the proxy address and server name match with the the certificate information. For more information, refer to [Administering endpoints in {{ece}}](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-administering-endpoints.html). + If you’re having issues establishing the connection and the remote cluster is part of an {{ece}} environment with a private certificate, make sure that the proxy address and server name match with the the certificate information. For more information, refer to [Administering endpoints in {{ece}}](/deploy-manage/deploy/cloud-enterprise/change-endpoint-urls.md). :::: 4. Click **Next**. 5. Click **Add remote cluster** (you have already established trust in a previous step). ::::{note} -This configuration of remote clusters uses the [Proxy mode](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#proxy-mode) and it requires that the allocators can communicate via http with the proxies. +This configuration of remote clusters uses the [Proxy mode](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#proxy-mode) and it requires that the allocators can communicate via http with the proxies. :::: @@ -235,7 +235,7 @@ This section only applies if you’re using TLS certificates as cross-cluster se :::: -When the cluster to be configured as a remote is above 6.7.0 and below 7.6.0, the remote cluster must be configured using the [sniff mode](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#sniff-mode) with the proxy field. For each remote cluster you need to pass the following fields: +When the cluster to be configured as a remote is above 6.7.0 and below 7.6.0, the remote cluster must be configured using the [sniff mode](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#sniff-mode) with the proxy field. For each remote cluster you need to pass the following fields: * **Proxy**: This value can be found on the **Security** page of the deployment you want to use as a remote under the name `Proxy Address`. Also, using the API, this can be obtained from the elasticsearch resource info, concatenating the fields `metadata.endpoint` and `metadata.ports.transport_passthrough` using a semicolon. * **Seeds**: This field is an array that must contain only one value, which is the `server name` that can be found on the **Security** page of the ECE deployment you want to use as a remote concatenated with `:1`. Also, using the API, this can be obtained from the {{es}} resource info, concatenating the fields `metadata.endpoint` and `1` with a semicolon. @@ -294,7 +294,7 @@ curl -k -H 'Content-Type: application/json' -X PUT -H "Authorization: ApiKey $EC Note the following when using the Elastic Cloud Enterprise RESTful API: 1. A cluster alias must contain only letters, numbers, dashes (-), or underscores (_). -2. To learn about skipping disconnected clusters, refer to the [{{es}} documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cross-cluster-search.html#skip-unavailable-clusters). +2. To learn about skipping disconnected clusters, refer to the [{{es}} documentation](/solutions/search/cross-cluster-search.md#skip-unavailable-clusters). 3. When remote clusters are already configured for a deployment, the `PUT` request replaces the existing configuration with the new configuration passed. Passing an empty array of resources will remove all remote clusters. The following API request retrieves the remote clusters configuration: diff --git a/deploy-manage/remote-clusters/ece-remote-cluster-self-managed.md b/deploy-manage/remote-clusters/ece-remote-cluster-self-managed.md index c659f8501..276dbed8e 100644 --- a/deploy-manage/remote-clusters/ece-remote-cluster-self-managed.md +++ b/deploy-manage/remote-clusters/ece-remote-cluster-self-managed.md @@ -42,7 +42,7 @@ A deployment can be configured to trust all or specific deployments in any envir 7. Configure the self-managed cluster to trust this deployment, so that both deployments are configured to trust each other: * Download the Certificate Authority used to sign the certificates of your deployment nodes (it can be found in the Security page of your deployment) - * Trust this CA either using the [setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html) `xpack.security.transport.ssl.certificate_authorities` in `elasticsearch.yml` or by [adding it to the trust store](../security/different-ca.md). + * Trust this CA either using the [setting](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md) `xpack.security.transport.ssl.certificate_authorities` in `elasticsearch.yml` or by [adding it to the trust store](../security/different-ca.md). 8. Generate certificates with an `otherName` attribute using the Elasticsearch certutil. Create a file called `instances.yaml` with all the details of the nodes in your on-premise cluster like below. The `dns` and `ip` settings are optional, but `cn` is mandatory for use with the `trust_restrictions` path setting in the next step. Next, run `./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 -in instances.yaml` to create new certificates for all the nodes at once. You can then copy the resulting files into each node. @@ -237,14 +237,14 @@ On the local cluster, add the remote cluster using Kibana or the {{es}} API. ::: ::::{note} - If you’re having issues establishing the connection and the remote cluster is part of an {{ece}} environment with a private certificate, make sure that the proxy address and server name match with the the certificate information. For more information, refer to [Administering endpoints in {{ece}}](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-administering-endpoints.html). + If you’re having issues establishing the connection and the remote cluster is part of an {{ece}} environment with a private certificate, make sure that the proxy address and server name match with the the certificate information. For more information, refer to [Administering endpoints in {{ece}}](/deploy-manage/deploy/cloud-enterprise/change-endpoint-urls.md). :::: 4. Click **Next**. 5. Click **Add remote cluster** (you have already established trust in a previous step). ::::{note} -This configuration of remote clusters uses the [Proxy mode](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#proxy-mode) and it requires that the allocators can communicate via http with the proxies. +This configuration of remote clusters uses the [Proxy mode](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#proxy-mode) and it requires that the allocators can communicate via http with the proxies. :::: @@ -288,7 +288,7 @@ This section only applies if you’re using TLS certificates as cross-cluster se :::: -When the cluster to be configured as a remote is above 6.7.0 and below 7.6.0, the remote cluster must be configured using the [sniff mode](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#sniff-mode) with the proxy field. For each remote cluster you need to pass the following fields: +When the cluster to be configured as a remote is above 6.7.0 and below 7.6.0, the remote cluster must be configured using the [sniff mode](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#sniff-mode) with the proxy field. For each remote cluster you need to pass the following fields: * **Proxy**: This value can be found on the **Security** page of the deployment you want to use as a remote under the name `Proxy Address`. Also, using the API, this can be obtained from the elasticsearch resource info, concatenating the fields `metadata.endpoint` and `metadata.ports.transport_passthrough` using a semicolon. * **Seeds**: This field is an array that must contain only one value, which is the `server name` that can be found on the **Security** page of the ECE deployment you want to use as a remote concatenated with `:1`. Also, using the API, this can be obtained from the {{es}} resource info, concatenating the fields `metadata.endpoint` and `1` with a semicolon. @@ -347,7 +347,7 @@ curl -k -H 'Content-Type: application/json' -X PUT -H "Authorization: ApiKey $EC Note the following when using the Elastic Cloud Enterprise RESTful API: 1. A cluster alias must contain only letters, numbers, dashes (-), or underscores (_). -2. To learn about skipping disconnected clusters, refer to the [{{es}} documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cross-cluster-search.html#skip-unavailable-clusters). +2. To learn about skipping disconnected clusters, refer to the [{{es}} documentation](/solutions/search/cross-cluster-search.md#skip-unavailable-clusters). 3. When remote clusters are already configured for a deployment, the `PUT` request replaces the existing configuration with the new configuration passed. Passing an empty array of resources will remove all remote clusters. The following API request retrieves the remote clusters configuration: diff --git a/deploy-manage/remote-clusters/eck-remote-clusters.md b/deploy-manage/remote-clusters/eck-remote-clusters.md index b971765b7..33d951e7c 100644 --- a/deploy-manage/remote-clusters/eck-remote-clusters.md +++ b/deploy-manage/remote-clusters/eck-remote-clusters.md @@ -5,7 +5,7 @@ mapped_pages: # ECK remote clusters [k8s-remote-clusters] -The [remote clusters module](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html) in Elasticsearch enables you to establish uni-directional connections to a remote cluster. This functionality is used in cross-cluster replication and cross-cluster search. +The [remote clusters module](/deploy-manage/remote-clusters/remote-clusters-self-managed.md) in Elasticsearch enables you to establish uni-directional connections to a remote cluster. This functionality is used in cross-cluster replication and cross-cluster search. When using remote cluster connections with ECK, the setup process depends on where the remote cluster is deployed. @@ -20,7 +20,7 @@ To create a remote cluster connection to another Elasticsearch cluster deployed ### Security Models [k8s_security_models] -ECK supports two different security models: the API key based security model, and the certificate security model. These two security models are described in the [Remote clusters](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#remote-clusters-security-models) section of the {{es}} documentation. +ECK supports two different security models: the API key based security model, and the certificate security model. These two security models are described in the [Remote clusters](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#remote-clusters-security-models) section of the {{es}} documentation. ### Using the API key security model [k8s_using_the_api_key_security_model] @@ -77,7 +77,7 @@ spec: version: 8.16.1 ``` -1. This requires the sample data: [https://www.elastic.co/guide/en/kibana/current/get-started.html#gs-get-data-into-kibana](https://www.elastic.co/guide/en/kibana/current/get-started.html#gs-get-data-into-kibana) +1. This requires the sample data: [/explore-analyze/index.md#gs-get-data-into-kibana](/explore-analyze/index.md#gs-get-data-into-kibana) You can find a complete example in the [recipes directory](https://github.com/elastic/cloud-on-k8s/tree/2.16/config/recipes/remoteclusters). @@ -138,7 +138,7 @@ kubectl get secret cluster-one-es-transport-certs-public \ -o go-template='{{index .data "ca.crt" | base64decode}}' > remote.ca.crt ``` -You then need to configure the CA as one of the trusted CAs in `cluster-two`. If that cluster is hosted outside of Kubernetes, take the CA certificate that you have just extracted and add it to the list of CAs in [`xpack.security.transport.ssl.certificate_authorities`](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#_pem_encoded_files_3). +You then need to configure the CA as one of the trusted CAs in `cluster-two`. If that cluster is hosted outside of Kubernetes, take the CA certificate that you have just extracted and add it to the list of CAs in [`xpack.security.transport.ssl.certificate_authorities`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md#_pem_encoded_files_3). ::::{note} Beware of copying the source Secret as-is into a different namespace. Check [Common Problems: Owner References](../../troubleshoot/deployments/cloud-on-k8s/common-problems.md#k8s-common-problems-owner-refs) for more information. diff --git a/deploy-manage/remote-clusters/remote-clusters-api-key.md b/deploy-manage/remote-clusters/remote-clusters-api-key.md index 251774bae..b56ec50ea 100644 --- a/deploy-manage/remote-clusters/remote-clusters-api-key.md +++ b/deploy-manage/remote-clusters/remote-clusters-api-key.md @@ -11,7 +11,7 @@ All cross-cluster requests from the local cluster are bound by the API key’s p On the local cluster side, not every local user needs to access every piece of data allowed by the API key. An administrator of the local cluster can further configure additional permission constraints on local users so each user only gets access to the necessary remote data. Note it is only possible to further reduce the permissions allowed by the API key for individual local users. It is impossible to increase the permissions to go beyond what is allowed by the API key. -In this model, cross-cluster operations use [a dedicated server port](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#remote_cluster.port) (remote cluster interface) for communication between clusters. A remote cluster must enable this port for local clusters to connect. Configure Transport Layer Security (TLS) for this port to maximize security (as explained in [Establish trust with a remote cluster](#remote-clusters-security-api-key)). +In this model, cross-cluster operations use [a dedicated server port](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#remote_cluster.port) (remote cluster interface) for communication between clusters. A remote cluster must enable this port for local clusters to connect. Configure Transport Layer Security (TLS) for this port to maximize security (as explained in [Establish trust with a remote cluster](#remote-clusters-security-api-key)). The local cluster must trust the remote cluster on the remote cluster interface. This means that the local cluster trusts the remote cluster’s certificate authority (CA) that signs the server certificate used by the remote cluster interface. When establishing a connection, all nodes from the local cluster that participate in cross-cluster communication verify certificates from nodes on the other side, based on the TLS trust configuration. @@ -26,7 +26,7 @@ If you run into any issues, refer to [Troubleshooting](remote-clusters-troublesh ## Prerequisites [remote-clusters-prerequisites-api-key] -* The {{es}} security features need to be enabled on both clusters, on every node. Security is enabled by default. If it’s disabled, set `xpack.security.enabled` to `true` in `elasticsearch.yml`. Refer to [General security settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#general-security-settings). +* The {{es}} security features need to be enabled on both clusters, on every node. Security is enabled by default. If it’s disabled, set `xpack.security.enabled` to `true` in `elasticsearch.yml`. Refer to [General security settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md#general-security-settings). * The nodes of the local and remote clusters must be on version 8.10 or later. * The local and remote clusters must have an appropriate license. For more information, refer to [https://www.elastic.co/subscriptions](https://www.elastic.co/subscriptions). @@ -42,9 +42,9 @@ If a remote cluster is part of an {{ess}} deployment, it has a valid certificate 1. Enable the remote cluster server on every node of the remote cluster. In `elasticsearch.yml`: - 1. Set [`remote_cluster_server.enabled`](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#remote-cluster-network-settings) to `true`. - 2. Configure the bind and publish address for remote cluster server traffic, for example using [`remote_cluster.host`](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#remote-cluster-network-settings). Without configuring the address, remote cluster traffic may be bound to the local interface, and remote clusters running on other machines can’t connect. - 3. Optionally, configure the remote server port using [`remote_cluster.port`](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#remote_cluster.port) (defaults to `9443`). + 1. Set [`remote_cluster_server.enabled`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#remote-cluster-network-settings) to `true`. + 2. Configure the bind and publish address for remote cluster server traffic, for example using [`remote_cluster.host`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#remote-cluster-network-settings). Without configuring the address, remote cluster traffic may be bound to the local interface, and remote clusters running on other machines can’t connect. + 3. Optionally, configure the remote server port using [`remote_cluster.port`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#remote_cluster.port) (defaults to `9443`). 2. Next, generate a certificate authority (CA) and a server certificate/key pair. On one of the nodes of the remote cluster, from the directory where {{es}} has been installed: @@ -78,7 +78,7 @@ If a remote cluster is part of an {{ess}} deployment, it has a valid certificate 4. If the remote cluster has multiple nodes, you can either: * create a single wildcard certificate for all nodes; - * or, create separate certificates for each node either manually or in batch with the [silent mode](https://www.elastic.co/guide/en/elasticsearch/reference/current/certutil.html#certutil-silent). + * or, create separate certificates for each node either manually or in batch with the [silent mode](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/certutil.md#certutil-silent). 3. On every node of the remote cluster: @@ -136,7 +136,7 @@ You must have the `manage` cluster privilege to connect remote clusters. :::: -The local cluster uses the [remote cluster interface](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html) to establish communication with remote clusters. The coordinating nodes in the local cluster establish [long-lived](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#long-lived-connections) TCP connections with specific nodes in the remote cluster. {{es}} requires these connections to remain open, even if the connections are idle for an extended period. +The local cluster uses the [remote cluster interface](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md) to establish communication with remote clusters. The coordinating nodes in the local cluster establish [long-lived](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#long-lived-connections) TCP connections with specific nodes in the remote cluster. {{es}} requires these connections to remain open, even if the connections are idle for an extended period. To add a remote cluster from Stack Management in {{kib}}: @@ -203,9 +203,9 @@ The API response indicates that the local cluster is connected to the remote clu Use the [cluster update settings API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cluster-put-settings) to dynamically configure remote settings on every node in the cluster. The following request adds three remote clusters: `cluster_one`, `cluster_two`, and `cluster_three`. -The `seeds` parameter specifies the hostname and [remote cluster port](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html) (default `9443`) of a seed node in the remote cluster. +The `seeds` parameter specifies the hostname and [remote cluster port](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md) (default `9443`) of a seed node in the remote cluster. -The `mode` parameter determines the configured connection mode, which defaults to [`sniff`](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#sniff-mode). Because `cluster_one` doesn’t specify a `mode`, it uses the default. Both `cluster_two` and `cluster_three` explicitly use different modes. +The `mode` parameter determines the configured connection mode, which defaults to [`sniff`](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#sniff-mode). Because `cluster_one` doesn’t specify a `mode`, it uses the default. Both `cluster_two` and `cluster_three` explicitly use different modes. ```console PUT _cluster/settings diff --git a/deploy-manage/remote-clusters/remote-clusters-cert.md b/deploy-manage/remote-clusters/remote-clusters-cert.md index 40008ac9a..14e428d06 100644 --- a/deploy-manage/remote-clusters/remote-clusters-cert.md +++ b/deploy-manage/remote-clusters/remote-clusters-cert.md @@ -23,7 +23,7 @@ If you run into any issues, refer to [Troubleshooting](remote-clusters-troublesh ## Prerequisites [remote-clusters-prerequisites-cert] -1. The {{es}} security features need to be enabled on both clusters, on every node. Security is enabled by default. If it’s disabled, set `xpack.security.enabled` to `true` in `elasticsearch.yml`. Refer to [General security settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#general-security-settings). +1. The {{es}} security features need to be enabled on both clusters, on every node. Security is enabled by default. If it’s disabled, set `xpack.security.enabled` to `true` in `elasticsearch.yml`. Refer to [General security settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md#general-security-settings). 2. The local and remote clusters versions must be compatible. * Any node can communicate with another node on the same major version. For example, 7.0 can talk to any 7.x node. @@ -84,7 +84,7 @@ You must have the `manage` cluster privilege to connect remote clusters. :::: -The local cluster uses the [transport interface](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html) to establish communication with remote clusters. The coordinating nodes in the local cluster establish [long-lived](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#long-lived-connections) TCP connections with specific nodes in the remote cluster. {{es}} requires these connections to remain open, even if the connections are idle for an extended period. +The local cluster uses the [transport interface](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md) to establish communication with remote clusters. The coordinating nodes in the local cluster establish [long-lived](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#long-lived-connections) TCP connections with specific nodes in the remote cluster. {{es}} requires these connections to remain open, even if the connections are idle for an extended period. To add a remote cluster from Stack Management in {{kib}}: @@ -149,9 +149,9 @@ The API response indicates that the local cluster is connected to the remote clu Use the [cluster update settings API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cluster-put-settings) to dynamically configure remote settings on every node in the cluster. The following request adds three remote clusters: `cluster_one`, `cluster_two`, and `cluster_three`. -The `seeds` parameter specifies the hostname and [transport port](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html) (default `9300`) of a seed node in the remote cluster. +The `seeds` parameter specifies the hostname and [transport port](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md) (default `9300`) of a seed node in the remote cluster. -The `mode` parameter determines the configured connection mode, which defaults to [`sniff`](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#sniff-mode). Because `cluster_one` doesn’t specify a `mode`, it uses the default. Both `cluster_two` and `cluster_three` explicitly use different modes. +The `mode` parameter determines the configured connection mode, which defaults to [`sniff`](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#sniff-mode). Because `cluster_one` doesn’t specify a `mode`, it uses the default. Both `cluster_two` and `cluster_three` explicitly use different modes. ```console PUT _cluster/settings @@ -264,7 +264,7 @@ cluster: ## Configure roles and users for remote clusters [remote-clusters-privileges-cert] -After [connecting remote clusters](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html), you create a user role on both the local and remote clusters and assign necessary privileges. These roles are required to use {{ccr}} and {{ccs}}. +After [connecting remote clusters](/deploy-manage/remote-clusters/remote-clusters-self-managed.md), you create a user role on both the local and remote clusters and assign necessary privileges. These roles are required to use {{ccr}} and {{ccs}}. ::::{important} You must use the same role names on both the local and remote clusters. For example, the following configuration for {{ccr}} uses the `remote-replication` role name on both the local and remote clusters. However, you can specify different role definitions on each cluster. diff --git a/deploy-manage/remote-clusters/remote-clusters-migrate.md b/deploy-manage/remote-clusters/remote-clusters-migrate.md index 3bf205d98..a666ca6a5 100644 --- a/deploy-manage/remote-clusters/remote-clusters-migrate.md +++ b/deploy-manage/remote-clusters/remote-clusters-migrate.md @@ -39,9 +39,9 @@ On the remote cluster: 1. Enable the remote cluster server on every node of the remote cluster. In `elasticsearch.yml`: - 1. Set [`remote_cluster_server.enabled`](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#remote-cluster-network-settings) to `true`. - 2. Configure the bind and publish address for remote cluster server traffic, for example using [`remote_cluster.host`](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#remote-cluster-network-settings). Without configuring the address, remote cluster traffic may be bound to the local interface, and remote clusters running on other machines can’t connect. - 3. Optionally, configure the remote server port using [`remote_cluster.port`](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#remote_cluster.port) (defaults to `9443`). + 1. Set [`remote_cluster_server.enabled`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#remote-cluster-network-settings) to `true`. + 2. Configure the bind and publish address for remote cluster server traffic, for example using [`remote_cluster.host`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#remote-cluster-network-settings). Without configuring the address, remote cluster traffic may be bound to the local interface, and remote clusters running on other machines can’t connect. + 3. Optionally, configure the remote server port using [`remote_cluster.port`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#remote_cluster.port) (defaults to `9443`). 2. Next, generate a certificate authority (CA) and a server certificate/key pair. On one of the nodes of the remote cluster, from the directory where {{es}} has been installed: @@ -75,7 +75,7 @@ On the remote cluster: 4. If the remote cluster has multiple nodes, you can either: * create a single wildcard certificate for all nodes; - * or, create separate certificates for each node either manually or in batch with the [silent mode](https://www.elastic.co/guide/en/elasticsearch/reference/current/certutil.html#certutil-silent). + * or, create separate certificates for each node either manually or in batch with the [silent mode](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/certutil.md#certutil-silent). 3. On every node of the remote cluster: diff --git a/deploy-manage/remote-clusters/remote-clusters-self-managed.md b/deploy-manage/remote-clusters/remote-clusters-self-managed.md index 26b293f96..0e952b2d0 100644 --- a/deploy-manage/remote-clusters/remote-clusters-self-managed.md +++ b/deploy-manage/remote-clusters/remote-clusters-self-managed.md @@ -10,18 +10,18 @@ You can connect a local cluster to other {{es}} clusters, known as *remote clust ## {{ccr-cap}} [remote-clusters-ccr] -With [{{ccr}}](https://www.elastic.co/guide/en/elasticsearch/reference/current/xpack-ccr.html), you ingest data to an index on a remote cluster. This *leader* index is replicated to one or more read-only *follower* indices on your local cluster. Creating a multi-cluster architecture with {{ccr}} enables you to configure disaster recovery, bring data closer to your users, or establish a centralized reporting cluster to process reports locally. +With [{{ccr}}](/deploy-manage/tools/cross-cluster-replication.md), you ingest data to an index on a remote cluster. This *leader* index is replicated to one or more read-only *follower* indices on your local cluster. Creating a multi-cluster architecture with {{ccr}} enables you to configure disaster recovery, bring data closer to your users, or establish a centralized reporting cluster to process reports locally. ## {{ccs-cap}} [remote-clusters-ccs] -[{{ccs-cap}}](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cross-cluster-search.html) enables you to run a search request against one or more remote clusters. This capability provides each region with a global view of all clusters, allowing you to send a search request from a local cluster and return results from all connected remote clusters. For full {{ccs}} capabilities, the local and remote cluster must be on the same [subscription level](https://www.elastic.co/subscriptions). +[{{ccs-cap}}](/solutions/search/cross-cluster-search.md) enables you to run a search request against one or more remote clusters. This capability provides each region with a global view of all clusters, allowing you to send a search request from a local cluster and return results from all connected remote clusters. For full {{ccs}} capabilities, the local and remote cluster must be on the same [subscription level](https://www.elastic.co/subscriptions). ## Add remote clusters [add-remote-clusters] ::::{note} -The instructions that follow describe how to create a remote connection from a self-managed cluster. You can also set up {{ccs}} and {{ccr}} from an [{{ess}} deployment](https://www.elastic.co/guide/en/cloud/current/ec-enable-ccs.html) or from an [{{ece}} deployment](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-enable-ccs.html). +The instructions that follow describe how to create a remote connection from a self-managed cluster. You can also set up {{ccs}} and {{ccr}} from an [{{ess}} deployment](/deploy-manage/remote-clusters/ec-enable-ccs.md) or from an [{{ece}} deployment](/deploy-manage/remote-clusters/ece-enable-ccs.md). :::: @@ -57,7 +57,7 @@ Sniff mode The *gateway nodes* selection depends on the following criteria: * **version**: Remote nodes must be compatible with the cluster they are registered to. - * **role**: By default, any non-[master-eligible](https://www.elastic.co/guide/en/elasticsearch/reference/current/node-roles-overview.html#master-node-role) node can act as a gateway node. Dedicated master nodes are never selected as gateway nodes. + * **role**: By default, any non-[master-eligible](/deploy-manage/distributed-architecture/clusters-nodes-shards/node-roles.md#master-node-role) node can act as a gateway node. Dedicated master nodes are never selected as gateway nodes. * **attributes**: You can define the gateway nodes for a cluster by setting [`cluster.remote.node.attr.gateway`](remote-clusters-settings.md#cluster-remote-node-attr) to `true`. However, such nodes still have to satisfy the two above requirements. diff --git a/deploy-manage/remote-clusters/remote-clusters-settings.md b/deploy-manage/remote-clusters/remote-clusters-settings.md index a6b31c5d2..d733f90f8 100644 --- a/deploy-manage/remote-clusters/remote-clusters-settings.md +++ b/deploy-manage/remote-clusters/remote-clusters-settings.md @@ -5,16 +5,16 @@ mapped_pages: # Remote cluster settings [remote-clusters-settings] -The following settings apply to both [sniff mode](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#sniff-mode) and [proxy mode](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#proxy-mode). Settings that are specific to sniff mode and proxy mode are described separately. +The following settings apply to both [sniff mode](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#sniff-mode) and [proxy mode](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#proxy-mode). Settings that are specific to sniff mode and proxy mode are described separately. `cluster.remote..mode` -: The mode used for a remote cluster connection. The only supported modes are `sniff` and `proxy`. The default is `sniff`. See [Connection modes](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#sniff-proxy-modes) for further information about these modes, and [Sniff mode remote cluster settings](#remote-cluster-sniff-settings) and [Proxy mode remote cluster settings](#remote-cluster-proxy-settings) for further information about their settings. +: The mode used for a remote cluster connection. The only supported modes are `sniff` and `proxy`. The default is `sniff`. See [Connection modes](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#sniff-proxy-modes) for further information about these modes, and [Sniff mode remote cluster settings](#remote-cluster-sniff-settings) and [Proxy mode remote cluster settings](#remote-cluster-proxy-settings) for further information about their settings. `cluster.remote.initial_connect_timeout` : The time to wait for remote connections to be established when the node starts. The default is `30s`. -`remote_cluster_client` [role](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#node-roles) -: By default, any node in the cluster can act as a cross-cluster client and connect to remote clusters. To prevent a node from connecting to remote clusters, specify the [node.roles](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#node-roles) setting in `elasticsearch.yml` and exclude `remote_cluster_client` from the listed roles. Search requests targeting remote clusters must be sent to a node that is allowed to act as a cross-cluster client. Other features such as {{ml}} [data feeds](https://www.elastic.co/guide/en/elasticsearch/reference/current/ml-settings.html#general-ml-settings), [transforms](https://www.elastic.co/guide/en/elasticsearch/reference/current/transform-settings.html#general-transform-settings), and [{{ccr}}](../tools/cross-cluster-replication/set-up-cross-cluster-replication.md) require the `remote_cluster_client` role. +`remote_cluster_client` [role](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md#node-roles) +: By default, any node in the cluster can act as a cross-cluster client and connect to remote clusters. To prevent a node from connecting to remote clusters, specify the [node.roles](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md#node-roles) setting in `elasticsearch.yml` and exclude `remote_cluster_client` from the listed roles. Search requests targeting remote clusters must be sent to a node that is allowed to act as a cross-cluster client. Other features such as {{ml}} [data feeds](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/machine-learning-settings.md#general-ml-settings), [transforms](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/transforms-settings.md#general-transform-settings), and [{{ccr}}](../tools/cross-cluster-replication/set-up-cross-cluster-replication.md) require the `remote_cluster_client` role. `cluster.remote..skip_unavailable` : Per cluster boolean setting that allows to skip specific clusters when no nodes belonging to them are available and they are the target of a remote cluster request. @@ -25,13 +25,13 @@ In Elasticsearch 8.15, the default value for `skip_unavailable` was changed from `cluster.remote..transport.ping_schedule` -: Sets the time interval between regular application-level ping messages that are sent to try and keep remote cluster connections alive. If set to `-1`, application-level ping messages to this remote cluster are not sent. If unset, application-level ping messages are sent according to the global `transport.ping_schedule` setting, which defaults to `-1` meaning that pings are not sent. It is preferable to correctly configure TCP keep-alives instead of configuring a `ping_schedule`, because TCP keep-alives are handled by the operating system and not by {{es}}. By default {{es}} enables TCP keep-alives on remote cluster connections. Remote cluster connections are transport connections so the `transport.tcp.*` [advanced settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#transport-settings) regarding TCP keep-alives apply to them. +: Sets the time interval between regular application-level ping messages that are sent to try and keep remote cluster connections alive. If set to `-1`, application-level ping messages to this remote cluster are not sent. If unset, application-level ping messages are sent according to the global `transport.ping_schedule` setting, which defaults to `-1` meaning that pings are not sent. It is preferable to correctly configure TCP keep-alives instead of configuring a `ping_schedule`, because TCP keep-alives are handled by the operating system and not by {{es}}. By default {{es}} enables TCP keep-alives on remote cluster connections. Remote cluster connections are transport connections so the `transport.tcp.*` [advanced settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#transport-settings) regarding TCP keep-alives apply to them. `cluster.remote..transport.compress` -: Per-cluster setting that enables you to configure compression for requests to a specific remote cluster. The handling cluster will automatically compress responses to compressed requests. The setting options are `true`, `indexing_data`, and `false`. If unset, defaults to the behaviour specified by the node-wide `transport.compress` setting. See the [documentation for the `transport.compress` setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#transport-settings-compress) for further information. +: Per-cluster setting that enables you to configure compression for requests to a specific remote cluster. The handling cluster will automatically compress responses to compressed requests. The setting options are `true`, `indexing_data`, and `false`. If unset, defaults to the behaviour specified by the node-wide `transport.compress` setting. See the [documentation for the `transport.compress` setting](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#transport-settings-compress) for further information. `cluster.remote..transport.compression_scheme` -: Per-cluster setting that enables you to configure the compression scheme for requests to a specific cluster if those requests are selected to be compressed by to the `cluster.remote..transport.compress` setting. The handling cluster will automatically use the same compression scheme for responses as for the corresponding requests. The setting options are `deflate` and `lz4`. If unset, defaults to the behaviour specified by the node-wide `transport.compression_scheme` setting. See the [documentation for the `transport.compression_scheme` setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#transport-settings-compression-scheme) for further information. +: Per-cluster setting that enables you to configure the compression scheme for requests to a specific cluster if those requests are selected to be compressed by to the `cluster.remote..transport.compress` setting. The handling cluster will automatically use the same compression scheme for responses as for the corresponding requests. The setting options are `deflate` and `lz4`. If unset, defaults to the behaviour specified by the node-wide `transport.compression_scheme` setting. See the [documentation for the `transport.compression_scheme` setting](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#transport-settings-compression-scheme) for further information. $$$remote-cluster-credentials-setting$$$ @@ -40,7 +40,7 @@ $$$remote-cluster-credentials-setting$$$ ## Sniff mode remote cluster settings [remote-cluster-sniff-settings] -To use [sniff mode](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#sniff-mode) to connect to a remote cluster, set `cluster.remote..mode: sniff` and then configure the following settings. You may also leave `cluster.remote..mode` unset since `sniff` is the default mode. +To use [sniff mode](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#sniff-mode) to connect to a remote cluster, set `cluster.remote..mode: sniff` and then configure the following settings. You may also leave `cluster.remote..mode` unset since `sniff` is the default mode. `cluster.remote..seeds` : The list of seed nodes used to sniff the remote cluster state. @@ -56,7 +56,7 @@ $$$cluster-remote-node-attr$$$ ## Proxy mode remote cluster settings [remote-cluster-proxy-settings] -To use [proxy mode](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#proxy-mode) to connect to a remote cluster, set `cluster.remote..mode: proxy` and then configure the following settings. +To use [proxy mode](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#proxy-mode) to connect to a remote cluster, set `cluster.remote..mode: proxy` and then configure the following settings. `cluster.remote..proxy_address` : The address used for all remote connections. diff --git a/deploy-manage/remote-clusters/remote-clusters-troubleshooting.md b/deploy-manage/remote-clusters/remote-clusters-troubleshooting.md index 5fe48aee9..d5f068b7f 100644 --- a/deploy-manage/remote-clusters/remote-clusters-troubleshooting.md +++ b/deploy-manage/remote-clusters/remote-clusters-troubleshooting.md @@ -49,9 +49,9 @@ The API should return `"connected" : true`. When using [API key authentication]( When using API key authentication, cross-cluster traffic happens on the remote cluster interface, instead of the transport interface. The remote cluster interface is not enabled by default. This means a node is not ready to accept incoming cross-cluster requests by default, while it is ready to send outgoing cross-cluster requests. Ensure you’ve enabled the remote cluster server on every node of the remote cluster. In `elasticsearch.yml`: -* Set [`remote_cluster_server.enabled`](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#remote-cluster-network-settings) to `true`. -* Configure the bind and publish address for remote cluster server traffic, for example using [`remote_cluster.host`](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#remote-cluster-network-settings). Without configuring the address, remote cluster traffic may be bound to the local interface, and remote clusters running on other machines can’t connect. -* Optionally, configure the remote server port using [`remote_cluster.port`](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#remote_cluster.port) (defaults to `9443`). +* Set [`remote_cluster_server.enabled`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#remote-cluster-network-settings) to `true`. +* Configure the bind and publish address for remote cluster server traffic, for example using [`remote_cluster.host`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#remote-cluster-network-settings). Without configuring the address, remote cluster traffic may be bound to the local interface, and remote clusters running on other machines can’t connect. +* Optionally, configure the remote server port using [`remote_cluster.port`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#remote_cluster.port) (defaults to `9443`). @@ -108,7 +108,7 @@ Note that with some network configurations it could take minutes or hours for th #### Resolution [_resolution_2] * Ensure that the network between the clusters is as reliable as possible. -* Ensure that the network is configured to permit [Long-lived idle connections](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#long-lived-connections). +* Ensure that the network is configured to permit [Long-lived idle connections](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#long-lived-connections). * Ensure that the network is configured to detect faulty connections quickly. In particular, you must enable and fully support TCP keepalives, and set a short [retransmission timeout](../deploy/self-managed/system-config-tcpretries.md). * On Linux systems, execute `ss -tonie` to verify the details of the configuration of each network connection between the clusters. * If the problems persist, capture network packets at both ends of the connection and analyse the traffic to look for delays and lost messages. diff --git a/deploy-manage/security/different-ca.md b/deploy-manage/security/different-ca.md index f335bffe2..5e50eeaac 100644 --- a/deploy-manage/security/different-ca.md +++ b/deploy-manage/security/different-ca.md @@ -97,7 +97,7 @@ The following examples use PKCS#12 files, but the same steps apply to JKS keysto Now that your CA truststore is updated, use your new CA certificate to sign a certificate for your nodes. ::::{note} -If your organization has its own CA, you’ll need to [generate Certificate Signing Requests (CSRs)](https://www.elastic.co/guide/en/elasticsearch/reference/current/certutil.html#certutil-csr). CSRs contain information that your CA uses to generate and sign a security certificate. +If your organization has its own CA, you’ll need to [generate Certificate Signing Requests (CSRs)](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/certutil.md#certutil-csr). CSRs contain information that your CA uses to generate and sign a security certificate. :::: @@ -177,7 +177,7 @@ Well done! You’ve updated the keystore for the transport layer. You can also [ You can generate certificates for the HTTP layer using your new CA certificate and private key. Other components such as {{kib}} or any of the Elastic language clients verify this certificate when they connect to {{es}}. ::::{note} -If your organization has its own CA, you’ll need to [generate Certificate Signing Requests (CSRs)](https://www.elastic.co/guide/en/elasticsearch/reference/current/certutil.html#certutil-csr). CSRs contain information that your CA uses to generate and sign a security certificate instead of using self-signed certificates that the `elasticsearch-certutil` tool generates. +If your organization has its own CA, you’ll need to [generate Certificate Signing Requests (CSRs)](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/certutil.md#certutil-csr). CSRs contain information that your CA uses to generate and sign a security certificate instead of using self-signed certificates that the `elasticsearch-certutil` tool generates. :::: diff --git a/deploy-manage/security/enabling-cipher-suites-for-stronger-encryption.md b/deploy-manage/security/enabling-cipher-suites-for-stronger-encryption.md index 908fe4cfb..67232ef96 100644 --- a/deploy-manage/security/enabling-cipher-suites-for-stronger-encryption.md +++ b/deploy-manage/security/enabling-cipher-suites-for-stronger-encryption.md @@ -9,7 +9,7 @@ The TLS and SSL protocols use a cipher suite that determines the strength of enc The *Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files* enable the use of additional cipher suites for Java in a separate JAR file that you need to add to your Java installation. You can download this JAR file from Oracle’s [download page](http://www.oracle.com/technetwork/java/javase/downloads/index.md). The *JCE Unlimited Strength Jurisdiction Policy Files`* are required for encryption with key lengths greater than 128 bits, such as 256-bit AES encryption. -After installation, all cipher suites in the JCE are available for use but requires configuration in order to use them. To enable the use of stronger cipher suites with {{es}} {{security-features}}, configure the [`cipher_suites` parameter](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#ssl-tls-settings). +After installation, all cipher suites in the JCE are available for use but requires configuration in order to use them. To enable the use of stronger cipher suites with {{es}} {{security-features}}, configure the [`cipher_suites` parameter](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md#ssl-tls-settings). ::::{note} The *JCE Unlimited Strength Jurisdiction Policy Files* must be installed on all nodes in the cluster to establish an improved level of encryption strength. diff --git a/deploy-manage/security/encrypt-deployment-with-customer-managed-encryption-key.md b/deploy-manage/security/encrypt-deployment-with-customer-managed-encryption-key.md index 3a254e28f..2ec337546 100644 --- a/deploy-manage/security/encrypt-deployment-with-customer-managed-encryption-key.md +++ b/deploy-manage/security/encrypt-deployment-with-customer-managed-encryption-key.md @@ -35,7 +35,7 @@ When a deployment encrypted with a customer-managed key is deleted or terminated ::::::{tab-item} AWS * Have permissions on AWS KMS to [create a symmetric AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.md#symmetric-cmks) and to configure AWS IAM roles. -* Consider the cloud regions where you need your deployment to live. Refer to the [list of available regions, deployment templates, and instance configurations](https://www.elastic.co/guide/en/cloud/current/ec-regions-templates-instances.html) supported by Elastic Cloud. +* Consider the cloud regions where you need your deployment to live. Refer to the [list of available regions, deployment templates, and instance configurations](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-regions-templates-instances.md) supported by Elastic Cloud. :::::: ::::::{tab-item} Azure @@ -46,11 +46,11 @@ When a deployment encrypted with a customer-managed key is deleted or terminated * Permissions to [assign roles in your Key Vault using Access control (IAM)](https://learn.microsoft.com/en-us/azure/key-vault/general/rbac-guide?tabs=azure-cli#prerequisites). This is required to grant the service principal access to your key. * The Azure Key Vault where the RSA key will be stored must have [purge protection](https://learn.microsoft.com/en-us/azure/key-vault/general/soft-delete-overview#purge-protection) enabled to support the encryption of snapshots. -* Consider the cloud regions where you need your deployment to live. Refer to the [list of available regions, deployment templates, and instance configurations](https://www.elastic.co/guide/en/cloud/current/ec-regions-templates-instances.html) supported by Elastic Cloud. +* Consider the cloud regions where you need your deployment to live. Refer to the [list of available regions, deployment templates, and instance configurations](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-regions-templates-instances.md) supported by Elastic Cloud. :::::: ::::::{tab-item} Google Cloud -* Consider the cloud regions where you need your deployment to live. Refer to the [list of available regions, deployment templates, and instance configurations](https://www.elastic.co/guide/en/cloud/current/ec-regions-templates-instances.html) supported by Elastic Cloud. +* Consider the cloud regions where you need your deployment to live. Refer to the [list of available regions, deployment templates, and instance configurations](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-regions-templates-instances.md) supported by Elastic Cloud. * Have the following permissions in Google Cloud KMS: * Permissions to [create a KMS key](https://cloud.google.com/kms/docs/create-key) on a key ring in the same region as your deployment. If you don’t have a key ring in the same region, or want to store the key in its own key ring, then you also need permissions to [create a key ring](https://cloud.google.com/kms/docs/create-key-ring). @@ -169,8 +169,8 @@ Provide your key identifier without the key version identifier so Elastic Cloud * using the API: - * Choose a **cloud region** and a **deployment template** (also called hardware profile) for your deployment from the [list of available regions, deployment templates, and instance configurations](https://www.elastic.co/guide/en/cloud/current/ec-regions-templates-instances.html). - * [Get a valid Elastic Cloud API key](https://www.elastic.co/guide/en/cloud/current/ec-api-authentication.html) with the **Organization owner** role or the **Admin** role on deployments. These roles allow you to create new deployments. + * Choose a **cloud region** and a **deployment template** (also called hardware profile) for your deployment from the [list of available regions, deployment templates, and instance configurations](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-regions-templates-instances.md). + * [Get a valid Elastic Cloud API key](/deploy-manage/api-keys/elastic-cloud-api-keys.md) with the **Organization owner** role or the **Admin** role on deployments. These roles allow you to create new deployments. * Get the ARN of the symmetric AWS KMS key or of its alias. Use an alias if you are planning to do manual key rotations as specified in the [AWS documentation](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.md). * Use these parameters to create a new deployment with the [Elastic Cloud API](https://www.elastic.co/docs/api/doc/cloud/group/endpoint-deployments). For example: @@ -243,9 +243,9 @@ After you have created the service principal and granted it the necessary permis * Using the API: - * Choose a **cloud region** and a **deployment template** (also called hardware profile) for your deployment from the [list of available regions, deployment templates, and instance configurations](https://www.elastic.co/guide/en/cloud/current/ec-regions-templates-instances.html). + * Choose a **cloud region** and a **deployment template** (also called hardware profile) for your deployment from the [list of available regions, deployment templates, and instance configurations](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-regions-templates-instances.md). - * [Get a valid Elastic Cloud API key](https://www.elastic.co/guide/en/cloud/current/ec-api-authentication.html) with the **Organization owner** role or the **Admin** role on deployments. These roles allow you to create new deployments. + * [Get a valid Elastic Cloud API key](/deploy-manage/api-keys/elastic-cloud-api-keys.md) with the **Organization owner** role or the **Admin** role on deployments. These roles allow you to create new deployments. * Use these parameters to create a new deployment with the [Elastic Cloud API](https://www.elastic.co/docs/api/doc/cloud/group/endpoint-deployments). For example: ```bash @@ -322,9 +322,9 @@ After you have granted the Elastic principals the necessary roles, you can finis * Using the API: - * Choose a **cloud region** and a **deployment template** (also called hardware profile) for your deployment from the [list of available regions, deployment templates, and instance configurations](https://www.elastic.co/guide/en/cloud/current/ec-regions-templates-instances.html). + * Choose a **cloud region** and a **deployment template** (also called hardware profile) for your deployment from the [list of available regions, deployment templates, and instance configurations](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-regions-templates-instances.md). - * [Get a valid Elastic Cloud API key](https://www.elastic.co/guide/en/cloud/current/ec-api-authentication.html) with the **Organization owner** role or the **Admin** role on deployments. These roles allow you to create new deployments. + * [Get a valid Elastic Cloud API key](/deploy-manage/api-keys/elastic-cloud-api-keys.md) with the **Organization owner** role or the **Admin** role on deployments. These roles allow you to create new deployments. * Use these parameters to create a new deployment with the [Elastic Cloud API](https://www.elastic.co/docs/api/doc/cloud/group/endpoint-deployments). For example: ```bash diff --git a/deploy-manage/security/httprest-clients-security.md b/deploy-manage/security/httprest-clients-security.md index 38892be85..76011038f 100644 --- a/deploy-manage/security/httprest-clients-security.md +++ b/deploy-manage/security/httprest-clients-security.md @@ -70,11 +70,11 @@ es-secondary-authorization: ApiKey <1> For more information about using {{security-features}} with the language specific clients, refer to: -* [Java](https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/_basic_authentication.html) -* [JavaScript](https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/client-connecting.html) -* [.NET](https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/configuration.html) +* [Java](asciidocalypse://docs/elasticsearch-java/docs/reference/elasticsearch/elasticsearch-client-java-api-client/_basic_authentication.md) +* [JavaScript](asciidocalypse://docs/elasticsearch-js/docs/reference/elasticsearch/elasticsearch-client-javascript-api/connecting.md) +* [.NET](asciidocalypse://docs/elasticsearch-net/docs/reference/elasticsearch/elasticsearch-client-net-api/configuration.md) * [Perl](https://metacpan.org/pod/Search::Elasticsearch::Cxn::HTTPTiny#CONFIGURATION) -* [PHP](https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/connecting.html) +* [PHP](asciidocalypse://docs/elasticsearch-php/docs/reference/elasticsearch/elasticsearch-client-php-api/connecting.md) * [Python](https://elasticsearch-py.readthedocs.io/en/master/#ssl-and-authentication) * [Ruby](https://github.com/elasticsearch/elasticsearch-ruby/tree/master/elasticsearch-transport#authentication) diff --git a/deploy-manage/security/kibana-session-management.md b/deploy-manage/security/kibana-session-management.md index 14e45383d..7e63a2cb5 100644 --- a/deploy-manage/security/kibana-session-management.md +++ b/deploy-manage/security/kibana-session-management.md @@ -9,7 +9,7 @@ When you log in, {{kib}} creates a session that is used to authenticate subseque When your session expires, or you log out, {{kib}} will invalidate your cookie and remove session information from the index. {{kib}} also periodically invalidates and removes any expired sessions that weren’t explicitly invalidated. -To manage user sessions programmatically, {{kib}} exposes [session management APIs](https://www.elastic.co/guide/en/kibana/current/session-management-api.html). For details, check out [Session and cookie security settings](https://www.elastic.co/guide/en/kibana/current/security-settings-kb.html#security-session-and-cookie-settings). +To manage user sessions programmatically, {{kib}} exposes [session management APIs](https://www.elastic.co/guide/en/kibana/current/session-management-api.html). For details, check out [Session and cookie security settings](asciidocalypse://docs/kibana/docs/reference/configuration-reference/security-settings.md#security-session-and-cookie-settings). ## Session idle timeout [session-idle-timeout] diff --git a/deploy-manage/security/same-ca.md b/deploy-manage/security/same-ca.md index a70a09654..e8ae052da 100644 --- a/deploy-manage/security/same-ca.md +++ b/deploy-manage/security/same-ca.md @@ -115,7 +115,7 @@ Well done! You’ve updated the keystore for the transport layer. You can also [ Other components such as {{kib}} or any of the Elastic language clients verify this certificate when they connect to {{es}}. ::::{note} -If your organization has its own CA, you’ll need to [generate Certificate Signing Requests (CSRs)](https://www.elastic.co/guide/en/elasticsearch/reference/current/certutil.html#certutil-csr). CSRs contain information that your CA uses to generate and sign a certificate. +If your organization has its own CA, you’ll need to [generate Certificate Signing Requests (CSRs)](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/certutil.md#certutil-csr). CSRs contain information that your CA uses to generate and sign a certificate. :::: diff --git a/deploy-manage/security/secure-clients-integrations.md b/deploy-manage/security/secure-clients-integrations.md index 2f7212cb1..a7cb47df2 100644 --- a/deploy-manage/security/secure-clients-integrations.md +++ b/deploy-manage/security/secure-clients-integrations.md @@ -9,18 +9,18 @@ You will need to update the configuration for several [clients](httprest-clients The {{es}} {{security-features}} enable you to secure your {{es}} cluster. But {{es}} itself is only one product within the {{stack}}. It is often the case that other products in the {{stack}} are connected to the cluster and therefore need to be secured as well, or at least communicate with the cluster in a secured way: -* [Apache Hadoop](https://www.elastic.co/guide/en/elasticsearch/reference/current/hadoop.html) -* [Auditbeat](https://www.elastic.co/guide/en/beats/auditbeat/current/securing-auditbeat.html) -* [Filebeat](https://www.elastic.co/guide/en/beats/filebeat/current/securing-filebeat.html) -* [{{fleet}} & {{agent}}](https://www.elastic.co/guide/en/fleet/current/secure.html) -* [Heartbeat](https://www.elastic.co/guide/en/beats/heartbeat/current/securing-heartbeat.html) +* [Apache Hadoop](asciidocalypse://docs/elasticsearch-hadoop/docs/reference/ingestion-tools/elasticsearch-hadoop/security.md) +* [Auditbeat](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-auditbeat/securing-auditbeat.md) +* [Filebeat](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/securing-filebeat.md) +* [{{fleet}} & {{agent}}](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/secure.md) +* [Heartbeat](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-heartbeat/securing-heartbeat.md) * [{{kib}}](../security.md) -* [Logstash](https://www.elastic.co/guide/en/logstash/current/ls-security.html) -* [Metricbeat](https://www.elastic.co/guide/en/beats/metricbeat/current/securing-metricbeat.html) +* [Logstash](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/secure-connection.md) +* [Metricbeat](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/securing-metricbeat.md) * [Monitoring and security](../monitor.md) -* [Packetbeat](https://www.elastic.co/guide/en/beats/packetbeat/current/securing-packetbeat.html) +* [Packetbeat](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-packetbeat/securing-packetbeat.md) * [Reporting](../../explore-analyze/report-and-share.md) -* [Winlogbeat](https://www.elastic.co/guide/en/beats/winlogbeat/current/securing-winlogbeat.html) +* [Winlogbeat](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-winlogbeat/securing-winlogbeat.md) diff --git a/deploy-manage/security/secure-endpoints.md b/deploy-manage/security/secure-endpoints.md index aac93e5bd..9db6054c0 100644 --- a/deploy-manage/security/secure-endpoints.md +++ b/deploy-manage/security/secure-endpoints.md @@ -22,7 +22,7 @@ Never try to run {{es}} as the `root` user, which would invalidate any defense s Even with security enabled, never expose {{es}} to public internet traffic. Using an application to sanitize requests to {{es}} still poses risks, such as a malicious user writing [`_search`](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-search) requests that could overwhelm an {{es}} cluster and bring it down. Keep {{es}} as isolated as possible, preferably behind a firewall and a VPN. Any internet-facing applications should run pre-canned aggregations, or not run aggregations at all. -While you absolutely shouldn’t expose {{es}} directly to the internet, you also shouldn’t expose {{es}} directly to users. Instead, use an intermediary application to make requests on behalf of users. This implementation allows you to track user behaviors, such as can submit requests, and to which specific nodes in the cluster. For example, you can implement an application that accepts a search term from a user and funnels it through a [`simple_query_string`](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-simple-query-string-query.html) query. +While you absolutely shouldn’t expose {{es}} directly to the internet, you also shouldn’t expose {{es}} directly to users. Instead, use an intermediary application to make requests on behalf of users. This implementation allows you to track user behaviors, such as can submit requests, and to which specific nodes in the cluster. For example, you can implement an application that accepts a search term from a user and funnels it through a [`simple_query_string`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-simple-query-string-query.md) query. ## Implement role based access control [security-create-appropriate-users] diff --git a/deploy-manage/security/secure-saved-objects.md b/deploy-manage/security/secure-saved-objects.md index 9753ef1be..7cf075884 100644 --- a/deploy-manage/security/secure-saved-objects.md +++ b/deploy-manage/security/secure-saved-objects.md @@ -23,7 +23,7 @@ If you don’t specify an encryption key, {{kib}} might disable features that re ::::{tip} -For help generating the encryption key, refer to the [`kibana-encryption-keys`](https://www.elastic.co/guide/en/kibana/current/kibana-encryption-keys.html) script. +For help generating the encryption key, refer to the [`kibana-encryption-keys`](asciidocalypse://docs/kibana/docs/reference/commands/kibana-encryption-keys.md) script. :::: diff --git a/deploy-manage/security/secure-your-cluster-deployment.md b/deploy-manage/security/secure-your-cluster-deployment.md index 196386894..6e487f539 100644 --- a/deploy-manage/security/secure-your-cluster-deployment.md +++ b/deploy-manage/security/secure-your-cluster-deployment.md @@ -39,6 +39,8 @@ $$$install-stack-demo-secure-transport$$$ $$$install-stack-demo-secure-view-data$$$ +$$$security-configure-settings$$$ + **This page is a work in progress.** The documentation team is working to combine content pulled from the following pages: * [/raw-migrated-files/elasticsearch/elasticsearch-reference/es-security-principles.md](/raw-migrated-files/elasticsearch/elasticsearch-reference/es-security-principles.md) diff --git a/deploy-manage/security/security-certificates-keys.md b/deploy-manage/security/security-certificates-keys.md index 9af860c79..26a6512e7 100644 --- a/deploy-manage/security/security-certificates-keys.md +++ b/deploy-manage/security/security-certificates-keys.md @@ -39,7 +39,7 @@ There are [some cases](../deploy/self-managed/installing-elasticsearch.md#stack- 2. Copy the generated `elastic` password and enrollment token. These credentials are only shown when you start {{es}} for the first time. ::::{note} - If you need to reset the password for the `elastic` user or other built-in users, run the [`elasticsearch-reset-password`](https://www.elastic.co/guide/en/elasticsearch/reference/current/reset-password.html) tool. To generate new enrollment tokens for {{kib}} or {{es}} nodes, run the [`elasticsearch-create-enrollment-token`](https://www.elastic.co/guide/en/elasticsearch/reference/current/create-enrollment-token.html) tool. These tools are available in the {{es}} `bin` directory. + If you need to reset the password for the `elastic` user or other built-in users, run the [`elasticsearch-reset-password`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/reset-password.md) tool. To generate new enrollment tokens for {{kib}} or {{es}} nodes, run the [`elasticsearch-create-enrollment-token`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/create-enrollment-token.md) tool. These tools are available in the {{es}} `bin` directory. :::: @@ -90,11 +90,11 @@ When {{es}} starts for the first time, the security auto-configuration process b Before enrolling a new node, additional actions such as binding to an address other than `localhost` or satisfying bootstrap checks are typically necessary in production clusters. During that time, an auto-generated enrollment token could expire, which is why enrollment tokens aren’t generated automatically. -Additionally, only nodes on the same host can join the cluster without additional configuration. If you want nodes from another host to join your cluster, you need to set `transport.host` to a [supported value](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#network-interface-values) (such as uncommenting the suggested value of `0.0.0.0`), or an IP address that’s bound to an interface where other hosts can reach it. Refer to [transport settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#transport-settings) for more information. +Additionally, only nodes on the same host can join the cluster without additional configuration. If you want nodes from another host to join your cluster, you need to set `transport.host` to a [supported value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#network-interface-values) (such as uncommenting the suggested value of `0.0.0.0`), or an IP address that’s bound to an interface where other hosts can reach it. Refer to [transport settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#transport-settings) for more information. To enroll new nodes in your cluster, create an enrollment token with the `elasticsearch-create-enrollment-token` tool on any existing node in your cluster. You can then start a new node with the `--enrollment-token` parameter so that it joins an existing cluster. -1. In a separate terminal from where {{es}} is running, navigate to the directory where you installed {{es}} and run the [`elasticsearch-create-enrollment-token`](https://www.elastic.co/guide/en/elasticsearch/reference/current/create-enrollment-token.html) tool to generate an enrollment token for your new nodes. +1. In a separate terminal from where {{es}} is running, navigate to the directory where you installed {{es}} and run the [`elasticsearch-create-enrollment-token`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/create-enrollment-token.md) tool to generate an enrollment token for your new nodes. ```sh bin/elasticsearch-create-enrollment-token -s node @@ -177,7 +177,7 @@ When you install {{es}}, the following certificates and keys are generated in th `transport.p12` : Keystore that contains the key and certificate for the transport layer for all the nodes in your cluster. -`http.p12` and `transport.p12` are password-protected PKCS#12 keystores. {{es}} stores the passwords for these keystores as [secure settings](secure-settings.md). To retrieve the passwords so that you can inspect or change the keystore contents, use the [`bin/elasticsearch-keystore`](https://www.elastic.co/guide/en/elasticsearch/reference/current/elasticsearch-keystore.html) tool. +`http.p12` and `transport.p12` are password-protected PKCS#12 keystores. {{es}} stores the passwords for these keystores as [secure settings](secure-settings.md). To retrieve the passwords so that you can inspect or change the keystore contents, use the [`bin/elasticsearch-keystore`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/elasticsearch-keystore.md) tool. Use the following command to retrieve the password for `http.p12`: @@ -228,11 +228,11 @@ The {{es}} configuration directory isn’t writable The following settings are incompatible with security auto configuration. If any of these settings exist, the node startup process skips configuring security automatically and the node starts normally. -* [`node.roles`](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#node-roles) is set to a value where the node can’t be elected as `master`, or if the node can’t hold data -* [`xpack.security.autoconfiguration.enabled`](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#general-security-settings) is set to `false` -* [`xpack.security.enabled`](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#general-security-settings) has a value set -* Any of the [`xpack.security.transport.ssl.*`](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#transport-tls-ssl-settings) or [`xpack.security.http.ssl.*`](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#http-tls-ssl-settings) settings have a value set in the `elasticsearch.yml` configuration file or in the `elasticsearch.keystore` -* Any of the `discovery.type`, `discovery.seed_hosts`, or `cluster.initial_master_nodes` [discovery and cluster formation settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-settings.html) have a value set +* [`node.roles`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md#node-roles) is set to a value where the node can’t be elected as `master`, or if the node can’t hold data +* [`xpack.security.autoconfiguration.enabled`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md#general-security-settings) is set to `false` +* [`xpack.security.enabled`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md#general-security-settings) has a value set +* Any of the [`xpack.security.transport.ssl.*`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md#transport-tls-ssl-settings) or [`xpack.security.http.ssl.*`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md#http-tls-ssl-settings) settings have a value set in the `elasticsearch.yml` configuration file or in the `elasticsearch.keystore` +* Any of the `discovery.type`, `discovery.seed_hosts`, or `cluster.initial_master_nodes` [discovery and cluster formation settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/discovery-cluster-formation-settings.md) have a value set ::::{note} Exceptions are when `discovery.type` is set to `single-node`, or when `cluster.initial_master_nodes` exists but contains only the name of the current node. diff --git a/deploy-manage/security/set-up-basic-security-plus-https.md b/deploy-manage/security/set-up-basic-security-plus-https.md index cf376793d..111e17a05 100644 --- a/deploy-manage/security/set-up-basic-security-plus-https.md +++ b/deploy-manage/security/set-up-basic-security-plus-https.md @@ -201,11 +201,11 @@ After making these changes, you must always access {{kib}} via HTTPS. For exampl ## Configure {{beats}} security [configure-beats-security] -{{beats}} are open source data shippers that you install as agents on your servers to send operational data to {{es}}. Each Beat is a separately installable product. The following steps cover configuring security for {{metricbeat}}. Follow these steps for each [additional Beat](https://www.elastic.co/guide/en/beats/libbeat/current/getting-started.html) you want to configure security for. +{{beats}} are open source data shippers that you install as agents on your servers to send operational data to {{es}}. Each Beat is a separately installable product. The following steps cover configuring security for {{metricbeat}}. Follow these steps for each [additional Beat](asciidocalypse://docs/beats/docs/reference/ingestion-tools/index.md) you want to configure security for. ### Prerequisites [_prerequisites_13] -[Install {{metricbeat}}](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-installation-configuration.html) using your preferred method. +[Install {{metricbeat}}](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/metricbeat-installation-configuration.md) using your preferred method. ::::{important} You cannot connect to the {{stack}} or configure assets for {{metricbeat}} before completing the following steps. @@ -269,7 +269,7 @@ To send monitoring data securely, create a monitoring user and grant it the nece You can use the built-in `beats_system` user, if it’s available in your environment. Because the built-in users are not available in {{ecloud}}, these instructions create a user that is explicitly used for monitoring {{metricbeat}}. -1. If you’re using the built-in `beats_system` user, on any node in your cluster, run the [`elasticsearch-reset-password`](https://www.elastic.co/guide/en/elasticsearch/reference/current/reset-password.html) utility to set the password for that user: +1. If you’re using the built-in `beats_system` user, on any node in your cluster, run the [`elasticsearch-reset-password`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/reset-password.md) utility to set the password for that user: This command resets the password for the `beats_system` user to an auto-generated value. @@ -441,7 +441,7 @@ In production environments, we strongly recommend using a separate cluster (refe verification_mode: "certificate" ``` - 1. Configuring SSL is required when monitoring a node with encrypted traffic. See [Configure SSL for {{metricbeat}}](https://www.elastic.co/guide/en/beats/metricbeat/current/configuration-ssl.html).`hosts` + 1. Configuring SSL is required when monitoring a node with encrypted traffic. See [Configure SSL for {{metricbeat}}](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/configuration-ssl.md).`hosts` : Specifies the host where your {{es}} cluster is running. Ensure that you include `https` in the URL. `username` diff --git a/deploy-manage/security/set-up-basic-security.md b/deploy-manage/security/set-up-basic-security.md index 458d827c4..e60f3aa30 100644 --- a/deploy-manage/security/set-up-basic-security.md +++ b/deploy-manage/security/set-up-basic-security.md @@ -81,7 +81,7 @@ Complete the following steps **for each node in your cluster**. To join the same 1. Open the `$ES_PATH_CONF/elasticsearch.yml` file and make the following changes: - 1. Add the [`cluster-name`](https://www.elastic.co/guide/en/elasticsearch/reference/current/misc-cluster-settings.html#cluster-name) setting and enter a name for your cluster: + 1. Add the [`cluster-name`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/miscellaneous-cluster-settings.md#cluster-name) setting and enter a name for your cluster: ```yaml cluster.name: my-cluster @@ -105,7 +105,7 @@ Complete the following steps **for each node in your cluster**. To join the same xpack.security.transport.ssl.truststore.path: elastic-certificates.p12 ``` - 1. If you want to use hostname verification, set the verification mode to `full`. You should generate a different certificate for each host that matches the DNS or IP address. See the `xpack.security.transport.ssl.verification_mode` parameter in [TLS settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#transport-tls-ssl-settings). + 1. If you want to use hostname verification, set the verification mode to `full`. You should generate a different certificate for each host that matches the DNS or IP address. See the `xpack.security.transport.ssl.verification_mode` parameter in [TLS settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md#transport-tls-ssl-settings). 2. If you entered a password when creating the node certificate, run the following commands to store the password in the {{es}} keystore: diff --git a/deploy-manage/security/set-up-minimal-security.md b/deploy-manage/security/set-up-minimal-security.md index 4a6f6e4db..60c8c9461 100644 --- a/deploy-manage/security/set-up-minimal-security.md +++ b/deploy-manage/security/set-up-minimal-security.md @@ -61,7 +61,7 @@ You only need to set passwords for the `elastic` and `kibana_system` users when ./bin/elasticsearch ``` -2. On any node in your cluster, open another terminal window and set the password for the `elastic` built-in user by running the [`elasticsearch-reset-password`](https://www.elastic.co/guide/en/elasticsearch/reference/current/reset-password.html) utility. This command resets the password to an auto-generated value. +2. On any node in your cluster, open another terminal window and set the password for the `elastic` built-in user by running the [`elasticsearch-reset-password`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/reset-password.md) utility. This command resets the password to an auto-generated value. ```shell ./bin/elasticsearch-reset-password -u elastic diff --git a/deploy-manage/security/supported-ssltls-versions-by-jdk-version.md b/deploy-manage/security/supported-ssltls-versions-by-jdk-version.md index 376375278..e96d8f6ca 100644 --- a/deploy-manage/security/supported-ssltls-versions-by-jdk-version.md +++ b/deploy-manage/security/supported-ssltls-versions-by-jdk-version.md @@ -93,9 +93,9 @@ jdk.tls.disabledAlgorithms=SSLv3, TLSv1, RC4, DES, MD5withRSA, \ ### Enable your custom security configuration [_enable_your_custom_security_configuration] -To enable your custom security policy, add a file in the [`jvm.options.d`](https://www.elastic.co/guide/en/elasticsearch/reference/current/advanced-configuration.html#set-jvm-options) directory within your {{es}} configuration directory. +To enable your custom security policy, add a file in the [`jvm.options.d`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/jvm-settings.md#set-jvm-options) directory within your {{es}} configuration directory. -To enable your custom security policy, create a file named `java.security.options` within the [jvm.options.d](https://www.elastic.co/guide/en/elasticsearch/reference/current/advanced-configuration.html#set-jvm-options) directory of your {{es}} configuration directory, with this content: +To enable your custom security policy, create a file named `java.security.options` within the [jvm.options.d](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/jvm-settings.md#set-jvm-options) directory of your {{es}} configuration directory, with this content: ```text -Djava.security.properties=/path/to/your/es.java.security @@ -105,7 +105,7 @@ To enable your custom security policy, create a file named `java.security.option ## Enabling TLS versions in {{es}} [_enabling_tls_versions_in_es] -SSL/TLS versions can be enabled and disabled within {{es}} via the [`ssl.supported_protocols` settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#ssl-tls-settings). +SSL/TLS versions can be enabled and disabled within {{es}} via the [`ssl.supported_protocols` settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md#ssl-tls-settings). {{es}} will only support the TLS versions that are enabled by the underlying JDK. If you configure `ssl.supported_procotols` to include a TLS version that is not enabled in your JDK, then it will be silently ignored. diff --git a/deploy-manage/tools/cross-cluster-replication.md b/deploy-manage/tools/cross-cluster-replication.md index 05c6f0356..1f78d6c1c 100644 --- a/deploy-manage/tools/cross-cluster-replication.md +++ b/deploy-manage/tools/cross-cluster-replication.md @@ -178,7 +178,7 @@ When you create a follower index, you cannot use it until it is fully initialize Remote recovery is a network intensive process that transfers all of the Lucene segment files from the leader cluster to the follower cluster. The follower requests that a recovery session be initiated on the primary shard in the leader cluster. The follower then requests file chunks concurrently from the leader. By default, the process concurrently requests five 1MB file chunks. This default behavior is designed to support leader and follower clusters with high network latency between them. ::::{tip} -You can modify dynamic [remote recovery settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/ccr-settings.html#ccr-recovery-settings) to rate-limit the transmitted data and manage the resources consumed by remote recoveries. +You can modify dynamic [remote recovery settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cross-cluster-replication-settings.md#ccr-recovery-settings) to rate-limit the transmitted data and manage the resources consumed by remote recoveries. :::: @@ -187,11 +187,11 @@ Use the [recovery API](https://www.elastic.co/docs/api/doc/elasticsearch/operati ## Replicating a leader requires soft deletes [ccr-leader-requirements] -{{ccr-cap}} works by replaying the history of individual write operations that were performed on the shards of the leader index. {{es}} needs to retain the [history of these operations](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-history-retention.html) on the leader shards so that they can be pulled by the follower shard tasks. The underlying mechanism used to retain these operations is *soft deletes*. +{{ccr-cap}} works by replaying the history of individual write operations that were performed on the shards of the leader index. {{es}} needs to retain the [history of these operations](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/history-retention-settings.md) on the leader shards so that they can be pulled by the follower shard tasks. The underlying mechanism used to retain these operations is *soft deletes*. A soft delete occurs whenever an existing document is deleted or updated. By retaining these soft deletes up to configurable limits, the history of operations can be retained on the leader shards and made available to the follower shard tasks as it replays the history of operations. -The [`index.soft_deletes.retention_lease.period`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#ccr-index-soft-deletes-retention-period) setting defines the maximum time to retain a shard history retention lease before it is considered expired. This setting determines how long the cluster containing your follower index can be offline, which is 12 hours by default. If a shard copy recovers after its retention lease expires, but the missing operations are still available on the leader index, then {{es}} will establish a new lease and copy the missing operations. However {{es}} does not guarantee to retain unleased operations, so it is also possible that some of the missing operations have been discarded by the leader and are now completely unavailable. If this happens then the follower cannot recover automatically so you must [recreate it](cross-cluster-replication/ccr-recreate-follower-index.md). +The [`index.soft_deletes.retention_lease.period`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#ccr-index-soft-deletes-retention-period) setting defines the maximum time to retain a shard history retention lease before it is considered expired. This setting determines how long the cluster containing your follower index can be offline, which is 12 hours by default. If a shard copy recovers after its retention lease expires, but the missing operations are still available on the leader index, then {{es}} will establish a new lease and copy the missing operations. However {{es}} does not guarantee to retain unleased operations, so it is also possible that some of the missing operations have been discarded by the leader and are now completely unavailable. If this happens then the follower cannot recover automatically so you must [recreate it](cross-cluster-replication/ccr-recreate-follower-index.md). Soft deletes must be enabled for indices that you want to use as leader indices. Soft deletes are enabled by default on new indices created on or after {{es}} 7.0.0. @@ -215,13 +215,13 @@ This following sections provide more information about how to configure and use {{ccr-cap}} is designed to replicate user-generated indices only, and doesn’t currently replicate any of the following: -* [System indices](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#system-indices) +* [System indices](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#system-indices) * [Machine learning jobs](../../explore-analyze/machine-learning.md) * [index templates](../../manage-data/data-store/templates.md) * [{{ilm-cap}}](../../manage-data/lifecycle/index-lifecycle-management.md) and [{{slm}}](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-slm) polices * [User permissions and role mappings](../users-roles/cluster-or-deployment-auth/mapping-users-groups-to-roles.md) * [Snapshot repository settings](snapshot-and-restore/self-managed.md) -* [Cluster settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html) +* [Cluster settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md) * [Searchable snapshot](snapshot-and-restore/searchable-snapshots.md) If you want to replicate any of this data, you must replicate it to a remote cluster manually. diff --git a/deploy-manage/tools/cross-cluster-replication/_connect_to_a_remote_cluster.md b/deploy-manage/tools/cross-cluster-replication/_connect_to_a_remote_cluster.md index 998b59198..f884218ab 100644 --- a/deploy-manage/tools/cross-cluster-replication/_connect_to_a_remote_cluster.md +++ b/deploy-manage/tools/cross-cluster-replication/_connect_to_a_remote_cluster.md @@ -13,7 +13,7 @@ To replicate an index on a remote cluster (Cluster A) to a local cluster (Cluste To configure a remote cluster from Stack Management in {{kib}}: -1. Set up a [secure connection](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#add-remote-clusters) as needed. +1. Set up a [secure connection](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#add-remote-clusters) as needed. 2. Select **Remote Clusters** from the side navigation. 3. Specify the {{es}} endpoint URL, or the IP address or host name of the remote cluster (`ClusterA`) followed by the transport port (defaults to `9300`). For example, `cluster.es.eastus2.staging.azure.foundit.no:9400` or `192.168.1.1:9300`. diff --git a/deploy-manage/tools/cross-cluster-replication/_failback_when_clustera_comes_back.md b/deploy-manage/tools/cross-cluster-replication/_failback_when_clustera_comes_back.md index 86a31375b..7e85485cb 100644 --- a/deploy-manage/tools/cross-cluster-replication/_failback_when_clustera_comes_back.md +++ b/deploy-manage/tools/cross-cluster-replication/_failback_when_clustera_comes_back.md @@ -55,7 +55,7 @@ When `clusterA` comes back, `clusterB` becomes the new leader and `clusterA` bec ``` ::::{tip} - If a soft delete is merged away before it can be replicated to a follower the following process will fail due to incomplete history on the leader, see [index.soft_deletes.retention_lease.period](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#ccr-index-soft-deletes-retention-period) for more details. + If a soft delete is merged away before it can be replicated to a follower the following process will fail due to incomplete history on the leader, see [index.soft_deletes.retention_lease.period](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#ccr-index-soft-deletes-retention-period) for more details. :::: diff --git a/deploy-manage/tools/cross-cluster-replication/_perform_update_or_delete_by_query.md b/deploy-manage/tools/cross-cluster-replication/_perform_update_or_delete_by_query.md index e2e7fabcb..9f9204ad2 100644 --- a/deploy-manage/tools/cross-cluster-replication/_perform_update_or_delete_by_query.md +++ b/deploy-manage/tools/cross-cluster-replication/_perform_update_or_delete_by_query.md @@ -47,7 +47,7 @@ It is possible to update or delete the documents but you can only perform these ``` ::::{tip} - If a soft delete is merged away before it can be replicated to a follower the following process will fail due to incomplete history on the leader, see [index.soft_deletes.retention_lease.period](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#ccr-index-soft-deletes-retention-period) for more details. + If a soft delete is merged away before it can be replicated to a follower the following process will fail due to incomplete history on the leader, see [index.soft_deletes.retention_lease.period](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#ccr-index-soft-deletes-retention-period) for more details. :::: diff --git a/deploy-manage/tools/cross-cluster-replication/bi-directional-disaster-recovery.md b/deploy-manage/tools/cross-cluster-replication/bi-directional-disaster-recovery.md index 5e2f1f8fe..aaabf9b64 100644 --- a/deploy-manage/tools/cross-cluster-replication/bi-directional-disaster-recovery.md +++ b/deploy-manage/tools/cross-cluster-replication/bi-directional-disaster-recovery.md @@ -11,7 +11,7 @@ mapped_pages: Learn how to set up disaster recovery between two clusters based on bi-directional {{ccr}}. The following tutorial is designed for data streams which support [update by query](../../../manage-data/data-store/data-streams/use-data-stream.md#update-docs-in-a-data-stream-by-query) and [delete by query](../../../manage-data/data-store/data-streams/use-data-stream.md#delete-docs-in-a-data-stream-by-query). You can only perform these actions on the leader index. -This tutorial works with {{ls}} as the source of ingestion. It takes advantage of a {{ls}} feature where [the {{ls}} output to {{es}}](https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html) can be load balanced across an array of hosts specified. {{beats}} and {{agents}} currently do not support multiple outputs. It should also be possible to set up a proxy (load balancer) to redirect traffic without {{ls}} in this tutorial. +This tutorial works with {{ls}} as the source of ingestion. It takes advantage of a {{ls}} feature where [the {{ls}} output to {{es}}](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-outputs-elasticsearch.md) can be load balanced across an array of hosts specified. {{beats}} and {{agents}} currently do not support multiple outputs. It should also be possible to set up a proxy (load balancer) to redirect traffic without {{ls}} in this tutorial. * Setting up a remote cluster on `clusterA` and `clusterB`. * Setting up bi-directional cross-cluster replication with exclusion patterns. diff --git a/deploy-manage/tools/cross-cluster-replication/ccr-getting-started-prerequisites.md b/deploy-manage/tools/cross-cluster-replication/ccr-getting-started-prerequisites.md index c7c4b3731..74b4e41d0 100644 --- a/deploy-manage/tools/cross-cluster-replication/ccr-getting-started-prerequisites.md +++ b/deploy-manage/tools/cross-cluster-replication/ccr-getting-started-prerequisites.md @@ -10,5 +10,5 @@ To complete this tutorial, you need: * The `manage` cluster privilege on the local cluster. * A license on both clusters that includes {{ccr}}. [Activate a free 30-day trial](../../license/manage-your-license-in-self-managed-cluster.md). * An index on the remote cluster that contains the data you want to replicate. This tutorial uses the sample eCommerce orders data set. [Load sample data](../../../explore-analyze/index.md#gs-get-data-into-kibana). -* In the local cluster, all nodes with the `master` [node role](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#node-roles) must also have the [`remote_cluster_client`](../../distributed-architecture/clusters-nodes-shards/node-roles.md#remote-node) role. The local cluster must also have at least one node with both a data role and the [`remote_cluster_client`](../../distributed-architecture/clusters-nodes-shards/node-roles.md#remote-node) role. Individual tasks for coordinating replication scale based on the number of data nodes with the `remote_cluster_client` role in the local cluster. +* In the local cluster, all nodes with the `master` [node role](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md#node-roles) must also have the [`remote_cluster_client`](../../distributed-architecture/clusters-nodes-shards/node-roles.md#remote-node) role. The local cluster must also have at least one node with both a data role and the [`remote_cluster_client`](../../distributed-architecture/clusters-nodes-shards/node-roles.md#remote-node) role. Individual tasks for coordinating replication scale based on the number of data nodes with the `remote_cluster_client` role in the local cluster. diff --git a/deploy-manage/tools/cross-cluster-replication/ccr-recreate-follower-index.md b/deploy-manage/tools/cross-cluster-replication/ccr-recreate-follower-index.md index 1faca2059..601d4fa06 100644 --- a/deploy-manage/tools/cross-cluster-replication/ccr-recreate-follower-index.md +++ b/deploy-manage/tools/cross-cluster-replication/ccr-recreate-follower-index.md @@ -5,7 +5,7 @@ mapped_pages: # Recreate a follower index [ccr-recreate-follower-index] -When a document is updated or deleted, the underlying operation is retained in the Lucene index for a period of time defined by the [`index.soft_deletes.retention_lease.period`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#ccr-index-soft-deletes-retention-period) parameter. You configure this setting on the [leader index](../cross-cluster-replication.md#ccr-leader-requirements). +When a document is updated or deleted, the underlying operation is retained in the Lucene index for a period of time defined by the [`index.soft_deletes.retention_lease.period`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#ccr-index-soft-deletes-retention-period) parameter. You configure this setting on the [leader index](../cross-cluster-replication.md#ccr-leader-requirements). When a follower index starts, it acquires a retention lease from the leader index. This lease informs the leader that it should not allow a soft delete to be pruned until either the follower indicates that it has received the operation, or until the lease expires. diff --git a/deploy-manage/tools/cross-cluster-replication/manage-auto-follow-patterns.md b/deploy-manage/tools/cross-cluster-replication/manage-auto-follow-patterns.md index f30bc5e7b..525fdd0bd 100644 --- a/deploy-manage/tools/cross-cluster-replication/manage-auto-follow-patterns.md +++ b/deploy-manage/tools/cross-cluster-replication/manage-auto-follow-patterns.md @@ -8,7 +8,7 @@ mapped_pages: To replicate time series indices, you configure an auto-follow pattern so that each new index in the series is replicated automatically. Whenever the name of a new index on the remote cluster matches the auto-follow pattern, a corresponding follower index is added to the local cluster. ::::{note} -Auto-follow patterns only match open indices on the remote cluster that have all primary shards started. Auto-follow patterns do not match indices that can’t be used for {{ccr-init}} such as [closed indices](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-open) or [{{search-snaps}}](../snapshot-and-restore/searchable-snapshots.md). Avoid using an auto-follow pattern that matches indices with a [read or write block](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-blocks.html#index-block-settings). These blocks prevent follower indices from replicating such indices. +Auto-follow patterns only match open indices on the remote cluster that have all primary shards started. Auto-follow patterns do not match indices that can’t be used for {{ccr-init}} such as [closed indices](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-open) or [{{search-snaps}}](../snapshot-and-restore/searchable-snapshots.md). Avoid using an auto-follow pattern that matches indices with a [read or write block](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index-block-settings.md#index-block-settings). These blocks prevent follower indices from replicating such indices. :::: diff --git a/deploy-manage/tools/cross-cluster-replication/set-up-cross-cluster-replication.md b/deploy-manage/tools/cross-cluster-replication/set-up-cross-cluster-replication.md index 56a271c44..53d3dcec4 100644 --- a/deploy-manage/tools/cross-cluster-replication/set-up-cross-cluster-replication.md +++ b/deploy-manage/tools/cross-cluster-replication/set-up-cross-cluster-replication.md @@ -23,7 +23,7 @@ In this guide, you’ll learn how to: You can manually create follower indices to replicate specific indices on a remote cluster, or configure auto-follow patterns to replicate rolling time series indices. ::::{tip} -If you want to replicate data across clusters in the cloud, you can [configure remote clusters on {{ess}}](https://www.elastic.co/guide/en/cloud/current/ec-enable-ccs.html). Then, you can [search across clusters](../../../solutions/search/cross-cluster-search.md) and set up {{ccr}}. +If you want to replicate data across clusters in the cloud, you can [configure remote clusters on {{ess}}](/deploy-manage/remote-clusters/ec-enable-ccs.md). Then, you can [search across clusters](../../../solutions/search/cross-cluster-search.md) and set up {{ccr}}. :::: diff --git a/deploy-manage/tools/snapshot-and-restore.md b/deploy-manage/tools/snapshot-and-restore.md index e013098f9..6e83a3ce5 100644 --- a/deploy-manage/tools/snapshot-and-restore.md +++ b/deploy-manage/tools/snapshot-and-restore.md @@ -136,7 +136,7 @@ A **feature state** contains the indices and data streams used to store configur To retrieve a list of feature states, use the [Features API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-features-get-features). :::: -A feature state typically includes one or more [system indices or system data streams](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#system-indices). It may also include regular indices and data streams used by the feature. For example, a feature state may include a regular index that contains the feature’s execution history. Storing this history in a regular index lets you more easily search it. +A feature state typically includes one or more [system indices or system data streams](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#system-indices). It may also include regular indices and data streams used by the feature. For example, a feature state may include a regular index that contains the feature’s execution history. Storing this history in a regular index lets you more easily search it. In Elasticsearch 8.0 and later versions, feature states are the only way to back up and restore system indices and system data streams. @@ -183,7 +183,7 @@ You can’t restore an index to an earlier version of Elasticsearch. For example A compatible snapshot can contain indices created in an older incompatible version. For example, a snapshot of a 7.17 cluster can contain an index created in 6.8. Restoring the 6.8 index to an 8.17 cluster fails unless you can use the [archive functionality](/deploy-manage/upgrade/deployment-or-cluster/reading-indices-from-older-elasticsearch-versions.md). Keep this in mind if you take a snapshot before upgrading a cluster. -As a workaround, you can first restore the index to another cluster running the latest version of Elasticsearch that’s compatible with both the index and your current cluster. You can then use [reindex-from-remote](https://www.elastic.co/guide/en/elasticsearch/reference/8.17/docs-reindex.html#reindex-from-remote) to rebuild the index on your current cluster. Reindex from remote is only possible if the index’s [`_source`](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html) is enabled. +As a workaround, you can first restore the index to another cluster running the latest version of Elasticsearch that’s compatible with both the index and your current cluster. You can then use [reindex-from-remote](https://www.elastic.co/guide/en/elasticsearch/reference/8.17/docs-reindex.html#reindex-from-remote) to rebuild the index on your current cluster. Reindex from remote is only possible if the index’s [`_source`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md) is enabled. Reindexing from remote can take significantly longer than restoring a snapshot. Before you start, test the reindex from remote process with a subset of the data to estimate your time requirements. diff --git a/deploy-manage/tools/snapshot-and-restore/azure-repository.md b/deploy-manage/tools/snapshot-and-restore/azure-repository.md index 50ef1b3ff..15cad9aa1 100644 --- a/deploy-manage/tools/snapshot-and-restore/azure-repository.md +++ b/deploy-manage/tools/snapshot-and-restore/azure-repository.md @@ -73,15 +73,15 @@ In progress snapshot or restore jobs will not be preempted by a **reload** of th ## Client settings [repository-azure-client-settings] -The following list describes the available client settings. Those that must be stored in the keystore are marked as ([Secure](https://www.elastic.co/guide/en/elasticsearch/reference/current/secure-settings.html), [reloadable](../../security/secure-settings.md#reloadable-secure-settings)); the other settings must be stored in the `elasticsearch.yml` file. The default `CLIENT_NAME` is `default` but you may configure a client with a different name and specify that client by name when registering a repository. +The following list describes the available client settings. Those that must be stored in the keystore are marked as ([Secure](/deploy-manage/security/secure-settings.md), [reloadable](../../security/secure-settings.md#reloadable-secure-settings)); the other settings must be stored in the `elasticsearch.yml` file. The default `CLIENT_NAME` is `default` but you may configure a client with a different name and specify that client by name when registering a repository. -`azure.client.CLIENT_NAME.account` ([Secure](https://www.elastic.co/guide/en/elasticsearch/reference/current/secure-settings.html), [reloadable](../../security/secure-settings.md#reloadable-secure-settings)) +`azure.client.CLIENT_NAME.account` ([Secure](/deploy-manage/security/secure-settings.md), [reloadable](../../security/secure-settings.md#reloadable-secure-settings)) : The Azure account name, which is used by the repository’s internal Azure client. This setting is required for all clients. `azure.client.CLIENT_NAME.endpoint_suffix` : The Azure endpoint suffix to connect to. The default value is `core.windows.net`. -`azure.client.CLIENT_NAME.key` ([Secure](https://www.elastic.co/guide/en/elasticsearch/reference/current/secure-settings.html), [reloadable](../../security/secure-settings.md#reloadable-secure-settings)) +`azure.client.CLIENT_NAME.key` ([Secure](/deploy-manage/security/secure-settings.md), [reloadable](../../security/secure-settings.md#reloadable-secure-settings)) : The Azure secret key, which is used by the repository’s internal Azure client. Alternatively, use `sas_token`. `azure.client.CLIENT_NAME.max_retries` @@ -96,11 +96,11 @@ The following list describes the available client settings. Those that must be s `azure.client.CLIENT_NAME.proxy.type` : Register a proxy type for the client. Supported values are `direct`, `http`, and `socks`. For example: `azure.client.default.proxy.type: http`. When `proxy.type` is set to `http` or `socks`, `proxy.host` and `proxy.port` must also be provided. The default value is `direct`. -`azure.client.CLIENT_NAME.sas_token` ([Secure](https://www.elastic.co/guide/en/elasticsearch/reference/current/secure-settings.html), [reloadable](../../security/secure-settings.md#reloadable-secure-settings)) +`azure.client.CLIENT_NAME.sas_token` ([Secure](/deploy-manage/security/secure-settings.md), [reloadable](../../security/secure-settings.md#reloadable-secure-settings)) : A shared access signatures (SAS) token, which the repository’s internal Azure client uses for authentication. The SAS token must have read (r), write (w), list (l), and delete (d) permissions for the repository base path and all its contents. These permissions must be granted for the blob service (b) and apply to resource types service (s), container (c), and object (o). Alternatively, use `key`. `azure.client.CLIENT_NAME.timeout` -: The client side timeout for any single request to Azure, as a [time unit](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#time-units). For example, a value of `5s` specifies a 5 second timeout. There is no default value, which means that {{es}} uses the [default value](https://azure.github.io/azure-storage-java/com/microsoft/azure/storage/RequestOptions.md#setTimeoutIntervalInMs(java.lang.Integer)) set by the Azure client. +: The client side timeout for any single request to Azure, as a [time unit](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#time-units). For example, a value of `5s` specifies a 5 second timeout. There is no default value, which means that {{es}} uses the [default value](https://azure.github.io/azure-storage-java/com/microsoft/azure/storage/RequestOptions.md#setTimeoutIntervalInMs(java.lang.Integer)) set by the Azure client. `azure.client.CLIENT_NAME.endpoint` : The Azure endpoint to connect to. It must include the protocol used to connect to Azure. @@ -156,16 +156,16 @@ PUT _snapshot/my_backup `chunk_size` -: Big files can be broken down into multiple smaller blobs in the blob store during snapshotting. It is not recommended to change this value from its default unless there is an explicit reason for limiting the size of blobs in the repository. Setting a value lower than the default can result in an increased number of API calls to the Azure blob store during snapshot create as well as restore operations compared to using the default value and thus make both operations slower as well as more costly. Specify the chunk size as a [byte unit](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#byte-units), for example: `10MB`, `5KB`, `500B`. Defaults to the maximum size of a blob in the Azure blob store which is `5TB`. +: Big files can be broken down into multiple smaller blobs in the blob store during snapshotting. It is not recommended to change this value from its default unless there is an explicit reason for limiting the size of blobs in the repository. Setting a value lower than the default can result in an increased number of API calls to the Azure blob store during snapshot create as well as restore operations compared to using the default value and thus make both operations slower as well as more costly. Specify the chunk size as a [byte unit](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#byte-units), for example: `10MB`, `5KB`, `500B`. Defaults to the maximum size of a blob in the Azure blob store which is `5TB`. `compress` : When set to `true` metadata files are stored in compressed format. This setting doesn’t affect index files that are already compressed by default. Defaults to `true`. `max_restore_bytes_per_sec` -: (Optional, [byte value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#byte-units)) Maximum snapshot restore rate per node. Defaults to unlimited. Note that restores are also throttled through [recovery settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html). +: (Optional, [byte value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#byte-units)) Maximum snapshot restore rate per node. Defaults to unlimited. Note that restores are also throttled through [recovery settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-recovery-settings.md). `max_snapshot_bytes_per_sec` -: (Optional, [byte value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#byte-units)) Maximum snapshot creation rate per node. Defaults to `40mb` per second. Note that if the [recovery settings for managed services](https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html#recovery-settings-for-managed-services) are set, then it defaults to unlimited, and the rate is additionally throttled through [recovery settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html). +: (Optional, [byte value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#byte-units)) Maximum snapshot creation rate per node. Defaults to `40mb` per second. Note that if the [recovery settings for managed services](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-recovery-settings.md#recovery-settings-for-managed-services) are set, then it defaults to unlimited, and the rate is additionally throttled through [recovery settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-recovery-settings.md). `readonly` : (Optional, Boolean) If `true`, the repository is read-only. The cluster can retrieve and restore snapshots from the repository but not write to the repository or create snapshots in it. diff --git a/deploy-manage/tools/snapshot-and-restore/azure-storage-repository.md b/deploy-manage/tools/snapshot-and-restore/azure-storage-repository.md index 8154f2566..8d9780f19 100644 --- a/deploy-manage/tools/snapshot-and-restore/azure-storage-repository.md +++ b/deploy-manage/tools/snapshot-and-restore/azure-storage-repository.md @@ -15,7 +15,7 @@ Add your Azure Storage Container as a repository to the platform: 1. [Log into the Cloud UI](../../deploy/cloud-enterprise/log-into-cloud-ui.md). 2. Go to **Platform > Repositories** and add the following snapshot repository configuration under the advanced mode: - If needed, set additional options for configuring chunk_size, compressions, and retries. Check the [supported settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/repository-azure.html#repository-azure-repository-settings). + If needed, set additional options for configuring chunk_size, compressions, and retries. Check the [supported settings](/deploy-manage/tools/snapshot-and-restore/azure-repository.md#repository-azure-repository-settings). ```json { diff --git a/deploy-manage/tools/snapshot-and-restore/cloud-enterprise.md b/deploy-manage/tools/snapshot-and-restore/cloud-enterprise.md index 4678a3fd2..beed2d4be 100644 --- a/deploy-manage/tools/snapshot-and-restore/cloud-enterprise.md +++ b/deploy-manage/tools/snapshot-and-restore/cloud-enterprise.md @@ -11,11 +11,11 @@ When a repository is specified, a snapshot is taken every 30 minutes by default. Snapshots are configured and restored using the [snapshot and restore feature](../snapshot-and-restore.md). -Elastic Cloud Enterprise installations support the following {{es}} [snapshot repository types](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshots-register-repository.html#ess-repo-types): +Elastic Cloud Enterprise installations support the following {{es}} [snapshot repository types](/deploy-manage/tools/snapshot-and-restore/self-managed.md#ess-repo-types): -* [Azure](https://www.elastic.co/guide/en/elasticsearch/reference/current/repository-azure.html) -* [Google Cloud Storage](https://www.elastic.co/guide/en/elasticsearch/reference/current/repository-gcs.html) -* [AWS S3](https://www.elastic.co/guide/en/elasticsearch/reference/current/repository-s3.html) +* [Azure](/deploy-manage/tools/snapshot-and-restore/azure-repository.md) +* [Google Cloud Storage](/deploy-manage/tools/snapshot-and-restore/google-cloud-storage-repository.md) +* [AWS S3](/deploy-manage/tools/snapshot-and-restore/s3-repository.md) ::::{note} No repository types other than those listed are supported in the Elastic Cloud Enterprise platform, even if they are supported by {{es}}. @@ -26,7 +26,7 @@ To configure Google Cloud Storage (GCS) as a snapshot repository, you must use [ To configure Microsoft Azure Storage as a snapshot repository, refer to [Snapshotting to Azure Storage](azure-storage-repository.md). -For more details about how snapshots are used with Elasticsearch, check [Snapshot and Restore](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-restore.html). You can also review the official documentation for these storage repository options: +For more details about how snapshots are used with Elasticsearch, check [Snapshot and Restore](/deploy-manage/tools/snapshot-and-restore.md). You can also review the official documentation for these storage repository options: * [Amazon S3 documentation](http://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.md) * [Microsoft Azure storage documentation](https://docs.microsoft.com/en-us/azure/storage/common/storage-quickstart-create-account) @@ -73,7 +73,7 @@ To add a snapshot repository: Used for Microsoft Azure, Google Cloud Platform, or for some Amazon S3 repositories where you need to provide additional configuration parameters not supported by the S3 repository option. Configurations must be specified in a valid JSON format. For example: - Amazon S3 (check [supported settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/repository-s3.html#repository-s3-repository)): + Amazon S3 (check [supported settings](/deploy-manage/tools/snapshot-and-restore/s3-repository.md#repository-s3-repository)): ```json { diff --git a/deploy-manage/tools/snapshot-and-restore/cloud-on-k8s.md b/deploy-manage/tools/snapshot-and-restore/cloud-on-k8s.md index 3e99b456f..b3e64f39d 100644 --- a/deploy-manage/tools/snapshot-and-restore/cloud-on-k8s.md +++ b/deploy-manage/tools/snapshot-and-restore/cloud-on-k8s.md @@ -13,14 +13,14 @@ Snapshots are essential for recovering Elasticsearch indices in case of accident To set up automated snapshots for Elasticsearch on Kubernetes you have to: 1. Register the snapshot repository with the Elasticsearch API. -2. Set up a Snapshot Lifecycle Management Policy through [API](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-slm) or the [Kibana UI](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-restore.html) +2. Set up a Snapshot Lifecycle Management Policy through [API](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-slm) or the [Kibana UI](/deploy-manage/tools/snapshot-and-restore.md) ::::{note} Support for S3, GCS and Azure repositories is bundled in Elasticsearch by default from version 8.0. On older versions of Elasticsearch, or if another snapshot repository plugin should be used, you have to [Install a snapshot repository plugin](#k8s-install-plugin). :::: -For more information on Elasticsearch snapshots, check [Snapshot and Restore](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-restore.html) in the Elasticsearch documentation. +For more information on Elasticsearch snapshots, check [Snapshot and Restore](/deploy-manage/tools/snapshot-and-restore.md) in the Elasticsearch documentation. ## Configuration examples [k8s_configuration_examples] @@ -42,7 +42,7 @@ The final example illustrates how to configure secure and trusted communication #### Configure GCS credentials through the Elasticsearch keystore [k8s-secure-settings] -The Elasticsearch GCS repository plugin requires a JSON file that contains service account credentials. These need to be added as secure settings to the Elasticsearch keystore. For more details, check [Google Cloud Storage Repository](https://www.elastic.co/guide/en/elasticsearch/reference/current/repository-gcs.html). +The Elasticsearch GCS repository plugin requires a JSON file that contains service account credentials. These need to be added as secure settings to the Elasticsearch keystore. For more details, check [Google Cloud Storage Repository](/deploy-manage/tools/snapshot-and-restore/google-cloud-storage-repository.md). Using ECK, you can automatically inject secure settings into a cluster node by providing them through a secret in the Elasticsearch Spec. @@ -97,7 +97,7 @@ GCS credentials are automatically propagated into each Elasticsearch node’s ke #### Register the repository in Elasticsearch [k8s-create-repository] -1. Create the GCS snapshot repository in Elasticsearch. You can either use the [Snapshot and Restore UI](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-restore.html) in Kibana version 7.4.0 or higher, or follow the procedure described in [Snapshot and Restore](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-restore.html): +1. Create the GCS snapshot repository in Elasticsearch. You can either use the [Snapshot and Restore UI](/deploy-manage/tools/snapshot-and-restore.md) in Kibana version 7.4.0 or higher, or follow the procedure described in [Snapshot and Restore](/deploy-manage/tools/snapshot-and-restore.md): ```sh PUT /_snapshot/my_gcs_repository @@ -306,7 +306,7 @@ Follow the [Azure documentation](https://learn.microsoft.com/en-us/azure/aks/wor --sku Standard_ZRS <1> ``` - 1. This can be any of the supported storage account types `Standard_LRS`, `Standard_ZRS`, `Standard_GRS`, `Standard_RAGRS` but not `Premium_LRS` see [the Elasticsearch documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/repository-azure.html) for details. + 1. This can be any of the supported storage account types `Standard_LRS`, `Standard_ZRS`, `Standard_GRS`, `Standard_RAGRS` but not `Premium_LRS` see [the Elasticsearch documentation](/deploy-manage/tools/snapshot-and-restore/azure-repository.md) for details. 7. Create a container in the storage account, for this example `es-snapshots`. diff --git a/deploy-manage/tools/snapshot-and-restore/create-snapshots.md b/deploy-manage/tools/snapshot-and-restore/create-snapshots.md index f57b959ae..089b25479 100644 --- a/deploy-manage/tools/snapshot-and-restore/create-snapshots.md +++ b/deploy-manage/tools/snapshot-and-restore/create-snapshots.md @@ -27,7 +27,7 @@ The guide also provides tips for creating dedicated cluster state snapshots and * You can only take a snapshot from a running cluster with an elected [master node](../../distributed-architecture/clusters-nodes-shards/node-roles.md#master-node-role). * A snapshot repository must be [registered](self-managed.md) and available to the cluster. -* The cluster’s global metadata must be readable. To include an index in a snapshot, the index and its metadata must also be readable. Ensure there aren’t any [cluster blocks](https://www.elastic.co/guide/en/elasticsearch/reference/current/misc-cluster-settings.html#cluster-read-only) or [index blocks](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-blocks.html) that prevent read access. +* The cluster’s global metadata must be readable. To include an index in a snapshot, the index and its metadata must also be readable. Ensure there aren’t any [cluster blocks](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/miscellaneous-cluster-settings.md#cluster-read-only) or [index blocks](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index-block-settings.md) that prevent read access. ## Considerations [create-snapshot-considerations] @@ -37,7 +37,7 @@ The guide also provides tips for creating dedicated cluster state snapshots and * Each snapshot is logically independent. You can delete a snapshot without affecting other snapshots. * Taking a snapshot can temporarily pause shard allocations. See [Snapshots and shard allocation](../snapshot-and-restore.md#snapshots-shard-allocation). * Taking a snapshot doesn’t block indexing or other requests. However, the snapshot won’t include changes made after the snapshot process starts. -* You can take multiple snapshots at the same time. The [`snapshot.max_concurrent_operations`](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-settings.html#snapshot-max-concurrent-ops) cluster setting limits the maximum number of concurrent snapshot operations. +* You can take multiple snapshots at the same time. The [`snapshot.max_concurrent_operations`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/snapshot-restore-settings.md#snapshot-max-concurrent-ops) cluster setting limits the maximum number of concurrent snapshot operations. * If you include a data stream in a snapshot, the snapshot also includes the stream’s backing indices and metadata. You can also include only specific backing indices in a snapshot. However, the snapshot won’t include the data stream’s metadata or its other backing indices. @@ -132,7 +132,7 @@ PUT _slm/policy/nightly-snapshots ``` 1. When to take snapshots, written in [Cron syntax](/explore-analyze/alerts-cases/watcher/schedule-types.md#schedule-cron). -2. Snapshot name. Supports [date math](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#api-date-math-index-names). To prevent naming conflicts, the policy also appends a UUID to each snapshot name. +2. Snapshot name. Supports [date math](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#api-date-math-index-names). To prevent naming conflicts, the policy also appends a UUID to each snapshot name. 3. [Registered snapshot repository](self-managed.md) used to store the policy’s snapshots. 4. Data streams and indices to include in the policy’s snapshots. 5. If `true`, the policy’s snapshots include the cluster state. This also includes all feature states by default. To only include specific feature states, see [Back up a specific feature state](#back-up-specific-feature-state). @@ -155,7 +155,7 @@ The snapshot process runs in the background. To monitor its progress, see [Monit ### {{slm-init}} retention [slm-retention-task] -{{slm-init}} snapshot retention is a cluster-level task that runs separately from a policy’s snapshot schedule. To control when the {{slm-init}} retention task runs, configure the [`slm.retention_schedule`](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-settings.html#slm-retention-schedule) cluster setting. +{{slm-init}} snapshot retention is a cluster-level task that runs separately from a policy’s snapshot schedule. To control when the {{slm-init}} retention task runs, configure the [`slm.retention_schedule`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/snapshot-restore-settings.md#slm-retention-schedule) cluster setting. ```console PUT _cluster/settings @@ -184,7 +184,7 @@ A snapshot repository can safely scale to thousands of snapshots. However, to ma ## Manually create a snapshot [manually-create-snapshot] -To take a snapshot without an {{slm-init}} policy, use the [create snapshot API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-snapshot-create). The snapshot name supports [date math](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#api-date-math-index-names). +To take a snapshot without an {{slm-init}} policy, use the [create snapshot API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-snapshot-create). The snapshot name supports [date math](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#api-date-math-index-names). ```console # PUT _snapshot/my_repository/ diff --git a/deploy-manage/tools/snapshot-and-restore/ec-aws-custom-repository.md b/deploy-manage/tools/snapshot-and-restore/ec-aws-custom-repository.md index 5bb7f5da6..bb1792231 100644 --- a/deploy-manage/tools/snapshot-and-restore/ec-aws-custom-repository.md +++ b/deploy-manage/tools/snapshot-and-restore/ec-aws-custom-repository.md @@ -55,7 +55,7 @@ You can use the Elasticsearch Service Keystore to store the credentials to acces * `s3.client.secondary.access_key` * `s3.client.secondary.secret_key` -5. Perform a cluster restart to [reload the secure settings](https://www.elastic.co/guide/en/cloud/current/ec-configuring-keystore.html#ec-add-secret-values). +5. Perform a cluster restart to [reload the secure settings](/deploy-manage/security/secure-settings.md#ec-add-secret-values). ## Create the repository [ec-create-aws-repository] diff --git a/deploy-manage/tools/snapshot-and-restore/ec-gcs-snapshotting.md b/deploy-manage/tools/snapshot-and-restore/ec-gcs-snapshotting.md index ca986a155..12857f552 100644 --- a/deploy-manage/tools/snapshot-and-restore/ec-gcs-snapshotting.md +++ b/deploy-manage/tools/snapshot-and-restore/ec-gcs-snapshotting.md @@ -14,11 +14,11 @@ You’ll need to have an existing Google Cloud account and have the appropriate 1. Create a [service account key](https://cloud.google.com/iam/docs/creating-managing-service-account-keys) in your Google Cloud project. - The service account should be configured to have permission to read, write, and list the bucket objects. For more information, refer to [Recommended bucket permission](https://www.elastic.co/guide/en/elasticsearch/reference/current/repository-gcs.html#repository-gcs-bucket-permission) in the Elasticsearch docs. + The service account should be configured to have permission to read, write, and list the bucket objects. For more information, refer to [Recommended bucket permission](/deploy-manage/tools/snapshot-and-restore/google-cloud-storage-repository.md#repository-gcs-bucket-permission) in the Elasticsearch docs. 2. Save the service account key in JSON file format. You are going to use it later to configure your Elasticsearch deployment for snapshotting. -For more detailed information on the JSON account service key, refer to [Using a Service Account](https://www.elastic.co/guide/en/elasticsearch/reference/current/repository-gcs.html#repository-gcs-using-service-account). +For more detailed information on the JSON account service key, refer to [Using a Service Account](/deploy-manage/tools/snapshot-and-restore/google-cloud-storage-repository.md#repository-gcs-using-service-account). ## Prepare a bucket [ec-prepare-gcs-bucket] diff --git a/deploy-manage/tools/snapshot-and-restore/ech-aws-custom-repository.md b/deploy-manage/tools/snapshot-and-restore/ech-aws-custom-repository.md index f2db5ba59..c16dbcbf1 100644 --- a/deploy-manage/tools/snapshot-and-restore/ech-aws-custom-repository.md +++ b/deploy-manage/tools/snapshot-and-restore/ech-aws-custom-repository.md @@ -55,7 +55,7 @@ You can use the Elasticsearch Add-On for Heroku Keystore to store the credential * `s3.client.secondary.access_key` * `s3.client.secondary.secret_key` -5. Perform a cluster restart to [reload the secure settings](https://www.elastic.co/guide/en/cloud/current/ec-configuring-keystore.html#ec-add-secret-values). +5. Perform a cluster restart to [reload the secure settings](/deploy-manage/security/secure-settings.md#ec-add-secret-values). ## Create the repository [ech-create-aws-repository] diff --git a/deploy-manage/tools/snapshot-and-restore/ech-gcs-snapshotting.md b/deploy-manage/tools/snapshot-and-restore/ech-gcs-snapshotting.md index 268947843..5fc548afd 100644 --- a/deploy-manage/tools/snapshot-and-restore/ech-gcs-snapshotting.md +++ b/deploy-manage/tools/snapshot-and-restore/ech-gcs-snapshotting.md @@ -14,11 +14,11 @@ You’ll need to have an existing Google Cloud account and have the appropriate 1. Create a [service account key](https://cloud.google.com/iam/docs/creating-managing-service-account-keys) in your Google Cloud project. - The service account should be configured to have permission to read, write, and list the bucket objects. For more information, refer to [Recommended bucket permission](https://www.elastic.co/guide/en/elasticsearch/reference/current/repository-gcs.html#repository-gcs-bucket-permission) in the Elasticsearch docs. + The service account should be configured to have permission to read, write, and list the bucket objects. For more information, refer to [Recommended bucket permission](/deploy-manage/tools/snapshot-and-restore/google-cloud-storage-repository.md#repository-gcs-bucket-permission) in the Elasticsearch docs. 2. Save the service account key in JSON file format. You are going to use it later to configure your Elasticsearch deployment for snapshotting. -For more detailed information on the JSON account service key, refer to [Using a Service Account](https://www.elastic.co/guide/en/elasticsearch/reference/current/repository-gcs.html#repository-gcs-using-service-account). +For more detailed information on the JSON account service key, refer to [Using a Service Account](/deploy-manage/tools/snapshot-and-restore/google-cloud-storage-repository.md#repository-gcs-using-service-account). ## Prepare a bucket [ech-prepare-gcs-bucket] diff --git a/deploy-manage/tools/snapshot-and-restore/google-cloud-storage-gcs-repository.md b/deploy-manage/tools/snapshot-and-restore/google-cloud-storage-gcs-repository.md index edcb16406..20faca102 100644 --- a/deploy-manage/tools/snapshot-and-restore/google-cloud-storage-gcs-repository.md +++ b/deploy-manage/tools/snapshot-and-restore/google-cloud-storage-gcs-repository.md @@ -26,7 +26,7 @@ Add your Google Cloud Storage bucket as a repository to the platform: 1. [Log into the Cloud UI](../../deploy/cloud-enterprise/log-into-cloud-ui.md). 2. Go to **Platform > Repositories** and add the following snapshot repository configuration under the advanced mode: - Repository GCS (check: [supported settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/repository-gcs.html#repository-gcs-repository)) + Repository GCS (check: [supported settings](/deploy-manage/tools/snapshot-and-restore/google-cloud-storage-repository.md#repository-gcs-repository)) ```json { diff --git a/deploy-manage/tools/snapshot-and-restore/google-cloud-storage-repository.md b/deploy-manage/tools/snapshot-and-restore/google-cloud-storage-repository.md index 05c0c9963..dde5d9056 100644 --- a/deploy-manage/tools/snapshot-and-restore/google-cloud-storage-repository.md +++ b/deploy-manage/tools/snapshot-and-restore/google-cloud-storage-repository.md @@ -123,7 +123,7 @@ bin/elasticsearch-keystore add-file gcs.client.default.credentials_file /path/se The following are the available client settings. Those that must be stored in the keystore are marked as `Secure`. -`credentials_file` ([Secure](https://www.elastic.co/guide/en/elasticsearch/reference/current/secure-settings.html), [reloadable](../../security/secure-settings.md#reloadable-secure-settings)) +`credentials_file` ([Secure](/deploy-manage/security/secure-settings.md), [reloadable](../../security/secure-settings.md#reloadable-secure-settings)) : The service account file that is used to authenticate to the Google Cloud Storage service. `endpoint` @@ -191,10 +191,10 @@ The following settings are supported: : When set to `true` metadata files are stored in compressed format. This setting doesn’t affect index files that are already compressed by default. Defaults to `true`. `max_restore_bytes_per_sec` -: (Optional, [byte value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#byte-units)) Maximum snapshot restore rate per node. Defaults to unlimited. Note that restores are also throttled through [recovery settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html). +: (Optional, [byte value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#byte-units)) Maximum snapshot restore rate per node. Defaults to unlimited. Note that restores are also throttled through [recovery settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-recovery-settings.md). `max_snapshot_bytes_per_sec` -: (Optional, [byte value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#byte-units)) Maximum snapshot creation rate per node. Defaults to `40mb` per second. Note that if the [recovery settings for managed services](https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html#recovery-settings-for-managed-services) are set, then it defaults to unlimited, and the rate is additionally throttled through [recovery settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html). +: (Optional, [byte value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#byte-units)) Maximum snapshot creation rate per node. Defaults to `40mb` per second. Note that if the [recovery settings for managed services](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-recovery-settings.md#recovery-settings-for-managed-services) are set, then it defaults to unlimited, and the rate is additionally throttled through [recovery settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-recovery-settings.md). `readonly` : (Optional, Boolean) If `true`, the repository is read-only. The cluster can retrieve and restore snapshots from the repository but not write to the repository or create snapshots in it. diff --git a/deploy-manage/tools/snapshot-and-restore/manage-snapshot-repositories.md b/deploy-manage/tools/snapshot-and-restore/manage-snapshot-repositories.md index 58a3c61f0..ad2c8f9d5 100644 --- a/deploy-manage/tools/snapshot-and-restore/manage-snapshot-repositories.md +++ b/deploy-manage/tools/snapshot-and-restore/manage-snapshot-repositories.md @@ -33,7 +33,7 @@ If you manage your own Elasticsearch cluster, you can use the following built-in Other repository types are available through official plugins: -* [Hadoop Distributed File System (HDFS)](https://www.elastic.co/guide/en/elasticsearch/plugins/current/repository-hdfs.html) +* [Hadoop Distributed File System (HDFS)](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch-plugins/repository-hdfs.md) ### Elastic Cloud Hosted diff --git a/deploy-manage/tools/snapshot-and-restore/minio-on-premise-repository.md b/deploy-manage/tools/snapshot-and-restore/minio-on-premise-repository.md index de92dbe89..c772c0c3b 100644 --- a/deploy-manage/tools/snapshot-and-restore/minio-on-premise-repository.md +++ b/deploy-manage/tools/snapshot-and-restore/minio-on-premise-repository.md @@ -62,7 +62,7 @@ How you create the AWS S3 bucket depends on what version of Elasticsearch you ar * For version 7.x: 1. Using the Minio browser or an S3 client application, create an S3 bucket to store your snapshots. - 2. [Log into the Cloud UI](../../deploy/cloud-enterprise/log-into-cloud-ui.md) and [add the S3 repository plugin](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-add-plugins.html) to your cluster. + 2. [Log into the Cloud UI](../../deploy/cloud-enterprise/log-into-cloud-ui.md) and [add the S3 repository plugin](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch-plugins/cloud-enterprise/ece-add-plugins.md) to your cluster. * For versions 8.0 and later, {{es}} has built-in support for AWS S3 repositories; no repository plugin is needed. Use the Minio browser or an S3 client application to create an S3 bucket to store your snapshots. diff --git a/deploy-manage/tools/snapshot-and-restore/read-only-url-repository.md b/deploy-manage/tools/snapshot-and-restore/read-only-url-repository.md index 61625bdad..399fdd0f6 100644 --- a/deploy-manage/tools/snapshot-and-restore/read-only-url-repository.md +++ b/deploy-manage/tools/snapshot-and-restore/read-only-url-repository.md @@ -27,13 +27,13 @@ PUT _snapshot/my_read_only_url_repository ## Repository settings [read-only-url-repository-settings] `chunk_size` -: (Optional, [byte value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#byte-units)) Maximum size of files in snapshots. In snapshots, files larger than this are broken down into chunks of this size or smaller. Defaults to `null` (unlimited file size). +: (Optional, [byte value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#byte-units)) Maximum size of files in snapshots. In snapshots, files larger than this are broken down into chunks of this size or smaller. Defaults to `null` (unlimited file size). `http_max_retries` : (Optional, integer) Maximum number of retries for `http` and `https` URLs. Defaults to `5`. `http_socket_timeout` -: (Optional, [time value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#time-units)) Maximum wait time for data transfers over a connection. Defaults to `50s`. +: (Optional, [time value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#time-units)) Maximum wait time for data transfers over a connection. Defaults to `50s`. `compress` : (Optional, Boolean) If `true`, metadata files, such as index mappings and settings, are compressed in snapshots. Data files are not compressed. Defaults to `true`. @@ -42,10 +42,10 @@ PUT _snapshot/my_read_only_url_repository : (Optional, integer) Maximum number of snapshots the repository can contain. Defaults to `Integer.MAX_VALUE`, which is `2^31-1` or `2147483647`. `max_restore_bytes_per_sec` -: (Optional, [byte value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#byte-units)) Maximum snapshot restore rate per node. Defaults to unlimited. Note that restores are also throttled through [recovery settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html). +: (Optional, [byte value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#byte-units)) Maximum snapshot restore rate per node. Defaults to unlimited. Note that restores are also throttled through [recovery settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-recovery-settings.md). `max_snapshot_bytes_per_sec` -: (Optional, [byte value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#byte-units)) Maximum snapshot creation rate per node. Defaults to `40mb` per second. Note that if the [recovery settings for managed services](https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html#recovery-settings-for-managed-services) are set, then it defaults to unlimited, and the rate is additionally throttled through [recovery settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html). +: (Optional, [byte value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#byte-units)) Maximum snapshot creation rate per node. Defaults to `40mb` per second. Note that if the [recovery settings for managed services](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-recovery-settings.md#recovery-settings-for-managed-services) are set, then it defaults to unlimited, and the rate is additionally throttled through [recovery settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-recovery-settings.md). `url` : (Required, string) URL location of the root of the shared filesystem repository. The following protocols are supported: @@ -56,7 +56,7 @@ PUT _snapshot/my_read_only_url_repository * `https` * `jar` -URLs using the `http`, `https`, or `ftp` protocols must be explicitly allowed with the [`repositories.url.allowed_urls`](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-settings.html#repositories-url-allowed) cluster setting. This setting supports wildcards in the place of a host, path, query, or fragment in the URL. +URLs using the `http`, `https`, or `ftp` protocols must be explicitly allowed with the [`repositories.url.allowed_urls`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/snapshot-restore-settings.md#repositories-url-allowed) cluster setting. This setting supports wildcards in the place of a host, path, query, or fragment in the URL. URLs using the `file` protocol must point to the location of a shared filesystem accessible to all master and data nodes in the cluster. This location must be registered in the `path.repo` setting. You don’t need to register URLs using the `ftp`, `http`, `https`, or `jar` protocols in the `path.repo` setting. diff --git a/deploy-manage/tools/snapshot-and-restore/s3-repository.md b/deploy-manage/tools/snapshot-and-restore/s3-repository.md index c3ab673ce..754ae4615 100644 --- a/deploy-manage/tools/snapshot-and-restore/s3-repository.md +++ b/deploy-manage/tools/snapshot-and-restore/s3-repository.md @@ -72,13 +72,13 @@ Define the relevant secure settings in each node’s keystore before starting th The following list contains the available client settings. Those that must be stored in the keystore are marked as "secure" and are **reloadable**; the other settings belong in the `elasticsearch.yml` file. -`access_key` ([Secure](https://www.elastic.co/guide/en/elasticsearch/reference/current/secure-settings.html), [reloadable](../../security/secure-settings.md#reloadable-secure-settings)) +`access_key` ([Secure](/deploy-manage/security/secure-settings.md), [reloadable](../../security/secure-settings.md#reloadable-secure-settings)) : An S3 access key. If set, the `secret_key` setting must also be specified. If unset, the client will use the instance or container role instead. -`secret_key` ([Secure](https://www.elastic.co/guide/en/elasticsearch/reference/current/secure-settings.html), [reloadable](../../security/secure-settings.md#reloadable-secure-settings)) +`secret_key` ([Secure](/deploy-manage/security/secure-settings.md), [reloadable](../../security/secure-settings.md#reloadable-secure-settings)) : An S3 secret key. If set, the `access_key` setting must also be specified. -`session_token` ([Secure](https://www.elastic.co/guide/en/elasticsearch/reference/current/secure-settings.html), [reloadable](../../security/secure-settings.md#reloadable-secure-settings)) +`session_token` ([Secure](/deploy-manage/security/secure-settings.md), [reloadable](../../security/secure-settings.md#reloadable-secure-settings)) : An S3 session token. If set, the `access_key` and `secret_key` settings must also be specified. `endpoint` @@ -96,14 +96,14 @@ The following list contains the available client settings. Those that must be st `proxy.scheme` : The scheme to use for the proxy connection to S3. Valid values are either `http` or `https`. Defaults to `http`. This setting allows to specify the protocol used for communication with the proxy server -`proxy.username` ([Secure](https://www.elastic.co/guide/en/elasticsearch/reference/current/secure-settings.html), [reloadable](../../security/secure-settings.md#reloadable-secure-settings)) +`proxy.username` ([Secure](/deploy-manage/security/secure-settings.md), [reloadable](../../security/secure-settings.md#reloadable-secure-settings)) : The username to connect to the `proxy.host` with. -`proxy.password` ([Secure](https://www.elastic.co/guide/en/elasticsearch/reference/current/secure-settings.html), [reloadable](../../security/secure-settings.md#reloadable-secure-settings)) +`proxy.password` ([Secure](/deploy-manage/security/secure-settings.md), [reloadable](../../security/secure-settings.md#reloadable-secure-settings)) : The password to connect to the `proxy.host` with. `read_timeout` -: ([time value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#time-units)) The maximum time {{es}} will wait to receive the next byte of data over an established, open connection to the repository before it closes the connection. The default value is 50 seconds. +: ([time value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#time-units)) The maximum time {{es}} will wait to receive the next byte of data over an established, open connection to the repository before it closes the connection. The default value is 50 seconds. `max_connections` : The maximum number of concurrent connections to S3. The default value is `50`. @@ -169,16 +169,16 @@ The following settings are supported: `chunk_size` -: ([byte value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#byte-units)) The maximum size of object that {{es}} will write to the repository when creating a snapshot. Files which are larger than `chunk_size` will be chunked into several smaller objects. {{es}} may also split a file across multiple objects to satisfy other constraints such as the `max_multipart_parts` limit. Defaults to `5TB` which is the [maximum size of an object in AWS S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/qfacts.md). +: ([byte value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#byte-units)) The maximum size of object that {{es}} will write to the repository when creating a snapshot. Files which are larger than `chunk_size` will be chunked into several smaller objects. {{es}} may also split a file across multiple objects to satisfy other constraints such as the `max_multipart_parts` limit. Defaults to `5TB` which is the [maximum size of an object in AWS S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/qfacts.md). `compress` : When set to `true` metadata files are stored in compressed format. This setting doesn’t affect index files that are already compressed by default. Defaults to `true`. `max_restore_bytes_per_sec` -: (Optional, [byte value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#byte-units)) Maximum snapshot restore rate per node. Defaults to unlimited. Note that restores are also throttled through [recovery settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html). +: (Optional, [byte value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#byte-units)) Maximum snapshot restore rate per node. Defaults to unlimited. Note that restores are also throttled through [recovery settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-recovery-settings.md). `max_snapshot_bytes_per_sec` -: (Optional, [byte value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#byte-units)) Maximum snapshot creation rate per node. Defaults to `40mb` per second. Note that if the [recovery settings for managed services](https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html#recovery-settings-for-managed-services) are set, then it defaults to unlimited, and the rate is additionally throttled through [recovery settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html). +: (Optional, [byte value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#byte-units)) Maximum snapshot creation rate per node. Defaults to `40mb` per second. Note that if the [recovery settings for managed services](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-recovery-settings.md#recovery-settings-for-managed-services) are set, then it defaults to unlimited, and the rate is additionally throttled through [recovery settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-recovery-settings.md). `readonly` : (Optional, Boolean) If `true`, the repository is read-only. The cluster can retrieve and restore snapshots from the repository but not write to the repository or create snapshots in it. @@ -197,7 +197,7 @@ The following settings are supported: : When set to `true` files are encrypted on server side using AES256 algorithm. Defaults to `false`. `buffer_size` -: ([byte value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#byte-units)) Minimum threshold below which the chunk is uploaded using a single request. Beyond this threshold, the S3 repository will use the [AWS Multipart Upload API](https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.md) to split the chunk into several parts, each of `buffer_size` length, and to upload each part in its own request. Note that setting a buffer size lower than `5mb` is not allowed since it will prevent the use of the Multipart API and may result in upload errors. It is also not possible to set a buffer size greater than `5gb` as it is the maximum upload size allowed by S3. Defaults to `100mb` or `5%` of JVM heap, whichever is smaller. +: ([byte value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#byte-units)) Minimum threshold below which the chunk is uploaded using a single request. Beyond this threshold, the S3 repository will use the [AWS Multipart Upload API](https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.md) to split the chunk into several parts, each of `buffer_size` length, and to upload each part in its own request. Note that setting a buffer size lower than `5mb` is not allowed since it will prevent the use of the Multipart API and may result in upload errors. It is also not possible to set a buffer size greater than `5gb` as it is the maximum upload size allowed by S3. Defaults to `100mb` or `5%` of JVM heap, whichever is smaller. `max_multipart_parts` : (integer) The maximum number of parts that {{es}} will write during a multipart upload of a single object. Files which are larger than `buffer_size × max_multipart_parts` will be chunked into several smaller objects. {{es}} may also split a file across multiple objects to satisfy other constraints such as the `chunk_size` limit. Defaults to `10000` which is the [maximum number of parts in a multipart upload in AWS S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/qfacts.md). @@ -215,16 +215,16 @@ The following settings are supported: : (integer) Sets the maximum number of possibly-dangling multipart uploads to clean up in each batch of snapshot deletions. Defaults to `1000` which is the maximum number supported by the [AWS ListMultipartUploads API](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.md). If set to `0`, {{es}} will not attempt to clean up dangling multipart uploads. `throttled_delete_retry.delay_increment` -: ([time value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#time-units)) This value is used as the delay before the first retry and the amount the delay is incremented by on each subsequent retry. Default is 50ms, minimum is 0ms. +: ([time value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#time-units)) This value is used as the delay before the first retry and the amount the delay is incremented by on each subsequent retry. Default is 50ms, minimum is 0ms. `throttled_delete_retry.maximum_delay` -: ([time value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#time-units)) This is the upper bound on how long the delays between retries will grow to. Default is 5s, minimum is 0ms. +: ([time value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#time-units)) This is the upper bound on how long the delays between retries will grow to. Default is 5s, minimum is 0ms. `throttled_delete_retry.maximum_number_of_retries` : (integer) Sets the number times to retry a throttled snapshot deletion. Defaults to `10`, minimum value is `0` which will disable retries altogether. Note that if retries are enabled in the Azure client, each of these retries comprises that many client-level retries. `get_register_retry_delay` -: ([time value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#time-units)) Sets the time to wait before trying again if an attempt to read a [linearizable register](#repository-s3-linearizable-registers) fails. Defaults to `5s`. +: ([time value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#time-units)) Sets the time to wait before trying again if an attempt to read a [linearizable register](#repository-s3-linearizable-registers) fails. Defaults to `5s`. ::::{note} The option of defining client settings in the repository settings as documented below is considered deprecated, and will be removed in a future version. @@ -385,7 +385,7 @@ You can perform some basic checks of the suitability of your storage system usin Most storage systems can be configured to log the details of their interaction with {{es}}. If you are investigating a suspected incompatibility with AWS S3, it is usually simplest to collect these logs and provide them to the supplier of your storage system for further analysis. If the incompatibility is not clear from the logs emitted by the storage system, configure {{es}} to log every request it makes to the S3 API by [setting the logging level](../../monitor/logging-configuration/elasticsearch-log4j-configuration-self-managed.md#configuring-logging-levels) of the `com.amazonaws.request` logger to `DEBUG`. -To prevent leaking sensitive information such as credentials and keys in logs, {{es}} rejects configuring this logger at high verbosity unless [insecure network trace logging](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#http-rest-request-tracer) is enabled. To do so, you must explicitly enable it on each node by setting the system property `es.insecure_network_trace_enabled` to `true`. +To prevent leaking sensitive information such as credentials and keys in logs, {{es}} rejects configuring this logger at high verbosity unless [insecure network trace logging](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md#http-rest-request-tracer) is enabled. To do so, you must explicitly enable it on each node by setting the system property `es.insecure_network_trace_enabled` to `true`. Once enabled, you can configure the `com.amazonaws.request` logger: @@ -398,7 +398,7 @@ PUT /_cluster/settings } ``` -Collect the Elasticsearch logs covering the time period of the failed analysis from all nodes in your cluster and share them with the supplier of your storage system along with the analysis response so they can use them to determine the problem. See the [AWS Java SDK](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-../../monitor/logging-configuration/elasticsearch-log4j-configuration-self-managed.md) documentation for further information, including details about other loggers that can be used to obtain even more verbose logs. When you have finished collecting the logs needed by your supplier, set the logger settings back to `null` to return to the default logging configuration and disable insecure network trace logging again. See [Logger](https://www.elastic.co/guide/en/elasticsearch/reference/current/misc-cluster-settings.html#cluster-logger) and [Cluster update settings](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cluster-put-settings) for more information. +Collect the Elasticsearch logs covering the time period of the failed analysis from all nodes in your cluster and share them with the supplier of your storage system along with the analysis response so they can use them to determine the problem. See the [AWS Java SDK](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-../../monitor/logging-configuration/elasticsearch-log4j-configuration-self-managed.md) documentation for further information, including details about other loggers that can be used to obtain even more verbose logs. When you have finished collecting the logs needed by your supplier, set the logger settings back to `null` to return to the default logging configuration and disable insecure network trace logging again. See [Logger](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/miscellaneous-cluster-settings.md#cluster-logger) and [Cluster update settings](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cluster-put-settings) for more information. ## Linearizable register implementation [repository-s3-linearizable-registers] diff --git a/deploy-manage/tools/snapshot-and-restore/searchable-snapshots.md b/deploy-manage/tools/snapshot-and-restore/searchable-snapshots.md index b3fc380e2..862a6cbcc 100644 --- a/deploy-manage/tools/snapshot-and-restore/searchable-snapshots.md +++ b/deploy-manage/tools/snapshot-and-restore/searchable-snapshots.md @@ -18,13 +18,13 @@ By default, {{search-snap}} indices have no replicas. The underlying snapshot pr If a node fails and {{search-snap}} shards need to be recovered elsewhere, there is a brief window of time while {{es}} allocates the shards to other nodes where the cluster health will not be `green`. Searches that hit these shards may fail or return partial results until the shards are reallocated to healthy nodes. -You typically manage {{search-snaps}} through {{ilm-init}}. The [searchable snapshots](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-searchable-snapshot.html) action automatically converts a regular index into a {{search-snap}} index when it reaches the `cold` or `frozen` phase. You can also make indices in existing snapshots searchable by manually mounting them using the [mount snapshot](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-searchable-snapshots-mount) API. +You typically manage {{search-snaps}} through {{ilm-init}}. The [searchable snapshots](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-searchable-snapshot.md) action automatically converts a regular index into a {{search-snap}} index when it reaches the `cold` or `frozen` phase. You can also make indices in existing snapshots searchable by manually mounting them using the [mount snapshot](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-searchable-snapshots-mount) API. To mount an index from a snapshot that contains multiple indices, we recommend creating a [clone](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-snapshot-clone) of the snapshot that contains only the index you want to search, and mounting the clone. You should not delete a snapshot if it has any mounted indices, so creating a clone enables you to manage the lifecycle of the backup snapshot independently of any {{search-snaps}}. If you use {{ilm-init}} to manage your {{search-snaps}} then it will automatically look after cloning the snapshot as needed. You can control the allocation of the shards of {{search-snap}} indices using the same mechanisms as for regular indices. For example, you could use [Index-level shard allocation filtering](../../distributed-architecture/shard-allocation-relocation-recovery/index-level-shard-allocation.md) to restrict {{search-snap}} shards to a subset of your nodes. -The speed of recovery of a {{search-snap}} index is limited by the repository setting `max_restore_bytes_per_sec` and the node setting `indices.recovery.max_bytes_per_sec` just like a normal restore operation. By default `max_restore_bytes_per_sec` is unlimited, but the default for `indices.recovery.max_bytes_per_sec` depends on the configuration of the node. See [Recovery settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html#recovery-settings). +The speed of recovery of a {{search-snap}} index is limited by the repository setting `max_restore_bytes_per_sec` and the node setting `indices.recovery.max_bytes_per_sec` just like a normal restore operation. By default `max_restore_bytes_per_sec` is unlimited, but the default for `indices.recovery.max_bytes_per_sec` depends on the configuration of the node. See [Recovery settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-recovery-settings.md#recovery-settings). We recommend that you [force-merge](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-forcemerge) indices to a single segment per shard before taking a snapshot that will be mounted as a {{search-snap}} index. Each read from a snapshot repository takes time and costs money, and the fewer segments there are the fewer reads are needed to restore the snapshot or to respond to a search. @@ -42,7 +42,7 @@ Use any of the following repository types with searchable snapshots: * [AWS S3](s3-repository.md) * [Google Cloud Storage](google-cloud-storage-repository.md) * [Azure Blob Storage](azure-repository.md) -* [Hadoop Distributed File Store (HDFS)](https://www.elastic.co/guide/en/elasticsearch/plugins/current/repository-hdfs.html) +* [Hadoop Distributed File Store (HDFS)](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch-plugins/repository-hdfs.md) * [Shared filesystems](shared-file-system-repository.md) such as NFS * [Read-only HTTP and HTTPS repositories](read-only-url-repository.md) @@ -95,7 +95,7 @@ Manually mounting snapshots captured by an Index Lifecycle Management ({{ilm-ini For optimal results, allow {{ilm-init}} to manage snapshots automatically. -[Learn more about {{ilm-init}} snapshot management](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-searchable-snapshot.html). +[Learn more about {{ilm-init}} snapshot management](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-searchable-snapshot.md). :::: @@ -103,10 +103,10 @@ For optimal results, allow {{ilm-init}} to manage snapshots automatically. $$$searchable-snapshots-shared-cache$$$ `xpack.searchable.snapshot.shared_cache.size` -: ([Static](../../deploy/self-managed/configure-elasticsearch.md#static-cluster-setting)) Disk space reserved for the shared cache of partially mounted indices. Accepts a percentage of total disk space or an absolute [byte value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#byte-units). Defaults to `90%` of total disk space for dedicated frozen data tier nodes. Otherwise defaults to `0b`. +: ([Static](../../deploy/self-managed/configure-elasticsearch.md#static-cluster-setting)) Disk space reserved for the shared cache of partially mounted indices. Accepts a percentage of total disk space or an absolute [byte value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#byte-units). Defaults to `90%` of total disk space for dedicated frozen data tier nodes. Otherwise defaults to `0b`. `xpack.searchable.snapshot.shared_cache.size.max_headroom` -: ([Static](../../deploy/self-managed/configure-elasticsearch.md#static-cluster-setting), [byte value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#byte-units)) For dedicated frozen tier nodes, the max headroom to maintain. If `xpack.searchable.snapshot.shared_cache.size` is not explicitly set, this setting defaults to `100GB`. Otherwise it defaults to `-1` (not set). You can only configure this setting if `xpack.searchable.snapshot.shared_cache.size` is set as a percentage. +: ([Static](../../deploy/self-managed/configure-elasticsearch.md#static-cluster-setting), [byte value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#byte-units)) For dedicated frozen tier nodes, the max headroom to maintain. If `xpack.searchable.snapshot.shared_cache.size` is not explicitly set, this setting defaults to `100GB`. Otherwise it defaults to `-1` (not set). You can only configure this setting if `xpack.searchable.snapshot.shared_cache.size` is set as a percentage. To illustrate how these settings work in concert let us look at two examples when using the default values of the settings on a dedicated frozen node: diff --git a/deploy-manage/tools/snapshot-and-restore/self-managed.md b/deploy-manage/tools/snapshot-and-restore/self-managed.md index 984031e17..331b44d8d 100644 --- a/deploy-manage/tools/snapshot-and-restore/self-managed.md +++ b/deploy-manage/tools/snapshot-and-restore/self-managed.md @@ -25,7 +25,7 @@ In this guide, you’ll learn how to: * [Cluster privileges](../../users-roles/cluster-or-deployment-auth/elasticsearch-privileges.md#privileges-list-cluster): `monitor`, `manage_slm`, `cluster:admin/snapshot`, and `cluster:admin/repository` * [Index privilege](../../users-roles/cluster-or-deployment-auth/elasticsearch-privileges.md#privileges-list-indices): `all` on the `monitor` index -* To register a snapshot repository, the cluster’s global metadata must be writeable. Ensure there aren’t any [cluster blocks](https://www.elastic.co/guide/en/elasticsearch/reference/current/misc-cluster-settings.html#cluster-read-only) that prevent write access. +* To register a snapshot repository, the cluster’s global metadata must be writeable. Ensure there aren’t any [cluster blocks](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/miscellaneous-cluster-settings.md#cluster-read-only) that prevent write access. ## Considerations [snapshot-repo-considerations] @@ -90,7 +90,7 @@ If you manage your own {{es}} cluster, you can use the following built-in snapsh $$$snapshots-repository-plugins$$$ Other repository types are available through official plugins: -* [Hadoop Distributed File System (HDFS)](https://www.elastic.co/guide/en/elasticsearch/plugins/current/repository-hdfs.html) +* [Hadoop Distributed File System (HDFS)](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch-plugins/repository-hdfs.md) You can also use alternative storage implementations with these repository types, as long as the alternative implementation is fully compatible. For instance, [MinIO](https://minio.io) provides an alternative implementation of the AWS S3 API and you can use MinIO with the [`s3` repository type](s3-repository.md). diff --git a/deploy-manage/tools/snapshot-and-restore/shared-file-system-repository.md b/deploy-manage/tools/snapshot-and-restore/shared-file-system-repository.md index 3cf7f392a..daa2578e4 100644 --- a/deploy-manage/tools/snapshot-and-restore/shared-file-system-repository.md +++ b/deploy-manage/tools/snapshot-and-restore/shared-file-system-repository.md @@ -136,7 +136,7 @@ PUT _snapshot/my_fs_backup ## Repository settings [filesystem-repository-settings] `chunk_size` -: (Optional, [byte value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#byte-units)) Maximum size of files in snapshots. In snapshots, files larger than this are broken down into chunks of this size or smaller. Defaults to `null` (unlimited file size). +: (Optional, [byte value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#byte-units)) Maximum size of files in snapshots. In snapshots, files larger than this are broken down into chunks of this size or smaller. Defaults to `null` (unlimited file size). `compress` : (Optional, Boolean) If `true`, metadata files, such as index mappings and settings, are compressed in snapshots. Data files are not compressed. Defaults to `true`. @@ -148,10 +148,10 @@ PUT _snapshot/my_fs_backup : (Optional, integer) Maximum number of snapshots the repository can contain. Defaults to `Integer.MAX_VALUE`, which is `2^31-1` or `2147483647`. `max_restore_bytes_per_sec` -: (Optional, [byte value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#byte-units)) Maximum snapshot restore rate per node. Defaults to unlimited. Note that restores are also throttled through [recovery settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html). +: (Optional, [byte value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#byte-units)) Maximum snapshot restore rate per node. Defaults to unlimited. Note that restores are also throttled through [recovery settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-recovery-settings.md). `max_snapshot_bytes_per_sec` -: (Optional, [byte value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#byte-units)) Maximum snapshot creation rate per node. Defaults to `40mb` per second. Note that if the [recovery settings for managed services](https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html#recovery-settings-for-managed-services) are set, then it defaults to unlimited, and the rate is additionally throttled through [recovery settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html). +: (Optional, [byte value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#byte-units)) Maximum snapshot creation rate per node. Defaults to `40mb` per second. Note that if the [recovery settings for managed services](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-recovery-settings.md#recovery-settings-for-managed-services) are set, then it defaults to unlimited, and the rate is additionally throttled through [recovery settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-recovery-settings.md). `readonly` : (Optional, Boolean) If `true`, the repository is read-only. The cluster can retrieve and restore snapshots from the repository but not write to the repository or create snapshots in it. diff --git a/deploy-manage/tools/snapshot-and-restore/source-only-repository.md b/deploy-manage/tools/snapshot-and-restore/source-only-repository.md index acea41d1f..8f2343f21 100644 --- a/deploy-manage/tools/snapshot-and-restore/source-only-repository.md +++ b/deploy-manage/tools/snapshot-and-restore/source-only-repository.md @@ -38,7 +38,7 @@ PUT _snapshot/my_src_only_repository ## Repository settings [source-only-repository-settings] `chunk_size` -: (Optional, [byte value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#byte-units)) Maximum size of files in snapshots. In snapshots, files larger than this are broken down into chunks of this size or smaller. Defaults to `null` (unlimited file size). +: (Optional, [byte value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#byte-units)) Maximum size of files in snapshots. In snapshots, files larger than this are broken down into chunks of this size or smaller. Defaults to `null` (unlimited file size). `compress` : (Optional, Boolean) If `true`, metadata files, such as index mappings and settings, are compressed in snapshots. Data files are not compressed. Defaults to `true`. @@ -53,10 +53,10 @@ PUT _snapshot/my_src_only_repository : (Optional, integer) Maximum number of snapshots the repository can contain. Defaults to `Integer.MAX_VALUE`, which is `2^31-1` or `2147483647`. `max_restore_bytes_per_sec` -: (Optional, [byte value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#byte-units)) Maximum snapshot restore rate per node. Defaults to unlimited. Note that restores are also throttled through [recovery settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html). +: (Optional, [byte value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#byte-units)) Maximum snapshot restore rate per node. Defaults to unlimited. Note that restores are also throttled through [recovery settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-recovery-settings.md). `max_snapshot_bytes_per_sec` -: (Optional, [byte value](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#byte-units)) Maximum snapshot creation rate per node. Defaults to `40mb` per second. Note that if the [recovery settings for managed services](https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html#recovery-settings-for-managed-services) are set, then it defaults to unlimited, and the rate is additionally throttled through [recovery settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html). +: (Optional, [byte value](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#byte-units)) Maximum snapshot creation rate per node. Defaults to `40mb` per second. Note that if the [recovery settings for managed services](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-recovery-settings.md#recovery-settings-for-managed-services) are set, then it defaults to unlimited, and the rate is additionally throttled through [recovery settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-recovery-settings.md). `readonly` : (Optional, Boolean) If `true`, the repository is read-only. The cluster can retrieve and restore snapshots from the repository but not write to the repository or create snapshots in it. diff --git a/deploy-manage/upgrade/deployment-or-cluster/reading-indices-from-older-elasticsearch-versions.md b/deploy-manage/upgrade/deployment-or-cluster/reading-indices-from-older-elasticsearch-versions.md index 0c08ec28a..4f5fa6dd5 100644 --- a/deploy-manage/upgrade/deployment-or-cluster/reading-indices-from-older-elasticsearch-versions.md +++ b/deploy-manage/upgrade/deployment-or-cluster/reading-indices-from-older-elasticsearch-versions.md @@ -16,23 +16,23 @@ For this, {{es}} has the ability to access older snapshot repositories (going ba Old mappings are imported as much "as-is" as possible into {{es}} 8, but only provide regular query capabilities on a select subset of fields: -* [Numeric types](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) -* [`boolean` type](https://www.elastic.co/guide/en/elasticsearch/reference/current/boolean.html) -* [`ip` type](https://www.elastic.co/guide/en/elasticsearch/reference/current/ip.html) -* [`geo_point` type](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html) -* [`date` types](https://www.elastic.co/guide/en/elasticsearch/reference/current/date.html): the date `format` setting on date fields is supported as long as it behaves similarly across these versions. In case it is not, for example [when using custom date formats](https://www.elastic.co/guide/en/elasticsearch/reference/7.17/migrate-to-java-time.html), this field can be updated on legacy indices so that it can be changed by a user if need be. -* [`keyword` type](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html#keyword-field-type): the `normalizer` setting on keyword fields is supported as long as it behaves similarly across these versions. In case it is not, this field can be updated on legacy indices if need be. -* [`text` type](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html#text-field-type): scoring capabilities are limited, and all queries return constant scores that are equal to 1.0. The `analyzer` settings on text fields are supported as long as they behave similarly across these versions. In case they do not, they can be updated on legacy indices if need be. -* [Multi-fields](https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html) -* [Field aliases](https://www.elastic.co/guide/en/elasticsearch/reference/current/field-alias.html) -* [`object`](https://www.elastic.co/guide/en/elasticsearch/reference/current/object.html) fields +* [Numeric types](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) +* [`boolean` type](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/boolean.md) +* [`ip` type](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/ip.md) +* [`geo_point` type](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-point.md) +* [`date` types](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/date.md): the date `format` setting on date fields is supported as long as it behaves similarly across these versions. In case it is not, for example [when using custom date formats](https://www.elastic.co/guide/en/elasticsearch/reference/7.17/migrate-to-java-time.html), this field can be updated on legacy indices so that it can be changed by a user if need be. +* [`keyword` type](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md#keyword-field-type): the `normalizer` setting on keyword fields is supported as long as it behaves similarly across these versions. In case it is not, this field can be updated on legacy indices if need be. +* [`text` type](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md#text-field-type): scoring capabilities are limited, and all queries return constant scores that are equal to 1.0. The `analyzer` settings on text fields are supported as long as they behave similarly across these versions. In case they do not, they can be updated on legacy indices if need be. +* [Multi-fields](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/multi-fields.md) +* [Field aliases](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/field-alias.md) +* [`object`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/object.md) fields * some basic metadata fields, e.g. `_type` for querying {{es}} 5 indices * [runtime fields](../../../manage-data/data-store/mapping/map-runtime-field.md) -* [`_source` field](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html) +* [`_source` field](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md) {{es}} 5 indices with mappings that have [multiple mapping types](https://www.elastic.co/guide/en/elasticsearch/reference/7.17/removal-of-types.html) are collapsed together on a best-effort basis before they are imported. -In case the auto-import of mappings does not work, or the new {{es}} version can’t make sense of the mapping, it falls back to importing the index without the mapping, but stores the original mapping in the [_meta](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-meta-field.html) section of the imported index. The legacy mapping can then be introspected using the [GET mapping](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-get-mapping) API and an updated mapping can be manually put in place using the [update mapping](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-put-mapping) API, copying and adapting relevant sections of the legacy mapping to work with the current {{es}} version. While auto-import is expected to work in most cases, failures of doing so should be [raised](https://github.com/elastic/elasticsearch/issues/new/choose) with the Elastic team for future improvements. +In case the auto-import of mappings does not work, or the new {{es}} version can’t make sense of the mapping, it falls back to importing the index without the mapping, but stores the original mapping in the [_meta](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-meta-field.md) section of the imported index. The legacy mapping can then be introspected using the [GET mapping](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-get-mapping) API and an updated mapping can be manually put in place using the [update mapping](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-put-mapping) API, copying and adapting relevant sections of the legacy mapping to work with the current {{es}} version. While auto-import is expected to work in most cases, failures of doing so should be [raised](https://github.com/elastic/elasticsearch/issues/new/choose) with the Elastic team for future improvements. ## Supported APIs [_supported_apis] diff --git a/deploy-manage/upgrade/orchestrator/upgrade-cloud-on-k8s.md b/deploy-manage/upgrade/orchestrator/upgrade-cloud-on-k8s.md index 71b91a0e0..66195cb80 100644 --- a/deploy-manage/upgrade/orchestrator/upgrade-cloud-on-k8s.md +++ b/deploy-manage/upgrade/orchestrator/upgrade-cloud-on-k8s.md @@ -66,7 +66,7 @@ If you are using ECK through an OLM-managed distribution channel like [operatorh ### Upgrading from ECK 1.9 or earlier [k8s_upgrading_from_eck_1_9_or_earlier] -Operator Lifecycle Manager (OLM) and OpenShift OperatorHub users that run with automatic upgrades enabled, are advised to set the `set-default-security-context` [operator flag](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-operator-config.html) explicitly before upgrading to ECK 2.0 or later. If not set, ECK can fail to [auto-detect](https://github.com/elastic/cloud-on-k8s/issues/5061) the correct security context configuration and Elasticsearch Pods may not be allowed to run. +Operator Lifecycle Manager (OLM) and OpenShift OperatorHub users that run with automatic upgrades enabled, are advised to set the `set-default-security-context` [operator flag](/deploy-manage/deploy/cloud-on-k8s/configure-eck.md) explicitly before upgrading to ECK 2.0 or later. If not set, ECK can fail to [auto-detect](https://github.com/elastic/cloud-on-k8s/issues/5061) the correct security context configuration and Elasticsearch Pods may not be allowed to run. ### Upgrading from ECK 2.0 or later [k8s_upgrading_from_eck_2_0_or_later] diff --git a/deploy-manage/upgrade/prepare-to-upgrade/index-compatibility.md b/deploy-manage/upgrade/prepare-to-upgrade/index-compatibility.md index 7d8de2c69..610dd15a6 100644 --- a/deploy-manage/upgrade/prepare-to-upgrade/index-compatibility.md +++ b/deploy-manage/upgrade/prepare-to-upgrade/index-compatibility.md @@ -29,7 +29,7 @@ To upgrade to 9.0.0-beta1 from 7.16 or an earlier version, **you must first upgr ## REST API compatibility [upgrade-rest-api-compatibility] -[REST API compatibility](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-api-compatibility.html) is a per-request opt-in feature that can help REST clients mitigate non-compatible (breaking) changes to the REST API. +[REST API compatibility](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/compatibility.md) is a per-request opt-in feature that can help REST clients mitigate non-compatible (breaking) changes to the REST API. ## FIPS Compliance and Java 17 [upgrade-fips-java17] diff --git a/deploy-manage/users-roles/cloud-enterprise-orchestrator/manage-system-passwords.md b/deploy-manage/users-roles/cloud-enterprise-orchestrator/manage-system-passwords.md index 71a47a182..3bb9ef60b 100644 --- a/deploy-manage/users-roles/cloud-enterprise-orchestrator/manage-system-passwords.md +++ b/deploy-manage/users-roles/cloud-enterprise-orchestrator/manage-system-passwords.md @@ -8,7 +8,7 @@ mapped_pages: At the end of the Elastic Cloud Enterprise installation process on the first host, you are provided with the URL and user credentials for the administration console users `admin` and `readonly`. You use this information to log into the Cloud UI. Both users can access all parts of the Cloud UI, but only the `admin` user can make changes. We recommend that you keep this information secure. -## Retrieve user passwords [ece-retrieve-passwords] +## Retrieve user passwords [ece-retrieve-passwords] If you need to retrieve the system passwords at a later point, you can issue one of the following commands from the first host you installed on (requires that you have [jq](https://stedolan.github.io/jq/download/) installed). @@ -29,7 +29,7 @@ jq -r '.adminconsole_readonly_password' /mnt/data/elastic/bootstrap-state/bootst You access the Cloud UI on port 12400 or port 12443 at IP address of the first host you installed on ([https://192.168.50.10:12443](https://192.168.50.10:12443), for example). -## Reset user passwords [ece-reset-passwords] +## Reset user passwords [ece-reset-passwords] You might need to reset the Cloud UI passwords for one of the following reasons: @@ -50,5 +50,5 @@ To reset the password for the `admin` user if no secrets file exists: bash elastic-cloud-enterprise.sh reset-adminconsole-password ``` -For additional usage examples, check [`elastic-cloud-enterprise.sh reset-adminconsole-password` Reference](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-installation-script-reset.md). +For additional usage examples, check [`elastic-cloud-enterprise.sh reset-adminconsole-password` Reference](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-enterprise/ece-installation-script-reset.md). diff --git a/deploy-manage/users-roles/cloud-enterprise-orchestrator/manage-users-roles.md b/deploy-manage/users-roles/cloud-enterprise-orchestrator/manage-users-roles.md index 5501d13d6..2672650b2 100644 --- a/deploy-manage/users-roles/cloud-enterprise-orchestrator/manage-users-roles.md +++ b/deploy-manage/users-roles/cloud-enterprise-orchestrator/manage-users-roles.md @@ -23,14 +23,14 @@ Implementing RBAC in your environment benefits you in several ways: ::::{important} -With RBAC, interacting with API endpoints now requires a [bearer token](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-api-command-line.md) or [API key](../../api-keys/elastic-cloud-enterprise-api-keys.md#ece-api-keys). +With RBAC, interacting with API endpoints now requires a [bearer token](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-enterprise/ece-api-command-line.md) or [API key](../../api-keys/elastic-cloud-enterprise-api-keys.md#ece-api-keys). :::: ## Before you begin [ece_before_you_begin_8] -To prepare for RBAC, you should review the Elastic Cloud Enterprise [limitations and known issues](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-limitations.md). +To prepare for RBAC, you should review the Elastic Cloud Enterprise [limitations and known issues](asciidocalypse://docs/cloud/docs/release-notes/known-issues/cloud-enterprise.md). ## Available roles and permissions [ece-user-role-permissions] diff --git a/deploy-manage/users-roles/cloud-enterprise-orchestrator/saml.md b/deploy-manage/users-roles/cloud-enterprise-orchestrator/saml.md index 49a435a38..b2ce58d45 100644 --- a/deploy-manage/users-roles/cloud-enterprise-orchestrator/saml.md +++ b/deploy-manage/users-roles/cloud-enterprise-orchestrator/saml.md @@ -50,7 +50,7 @@ $$$ece-saml-general-settings$$$Begin the provider profile by adding the general ## Map SAML attributes to User Properties [ece-saml-attributes] -The SAML assertion about a user usually includes attribute names and values that can be used for role mapping. The configuration in this section allows to configure a mapping between these SAML attribute values and [Elasticsearch user properties](https://www.elastic.co/guide/en/elasticsearch/reference/current/saml-guide-stack.html#saml-elasticsearch-authentication). When the attributes have been mapped to user properties such as `groups`, these can then be used to configure [role mappings](#ece-saml-role-mapping). Mapping the `principal` user property is required and the `groups` property is recommended for a minimum configuration. +The SAML assertion about a user usually includes attribute names and values that can be used for role mapping. The configuration in this section allows to configure a mapping between these SAML attribute values and [Elasticsearch user properties](/deploy-manage/users-roles/cluster-or-deployment-auth/saml.md#saml-elasticsearch-authentication). When the attributes have been mapped to user properties such as `groups`, these can then be used to configure [role mappings](#ece-saml-role-mapping). Mapping the `principal` user property is required and the `groups` property is recommended for a minimum configuration. Note that some additional attention must be paid to the `principal` user property. Although the SAML specification does not have many restrictions on the type of value that is mapped, ECE requires that the mapped value is also a valid Elasticsearch native realm identifier. Specifically, this means the mapped identifier should not contain any commas or slashes, and should be otherwise URL friendly. diff --git a/deploy-manage/users-roles/cluster-or-deployment-auth/authorization-plugins.md b/deploy-manage/users-roles/cluster-or-deployment-auth/authorization-plugins.md index f3914825d..d65179ecd 100644 --- a/deploy-manage/users-roles/cluster-or-deployment-auth/authorization-plugins.md +++ b/deploy-manage/users-roles/cluster-or-deployment-auth/authorization-plugins.md @@ -60,7 +60,7 @@ In order to register the security extension for your custom roles provider or au 1. Implement a plugin class that extends `org.elasticsearch.plugins.Plugin` 2. Create a build configuration file for the plugin; Gradle is our recommendation. -3. Create a `plugin-descriptor.properties` file as described in [Help for plugin authors](https://www.elastic.co/guide/en/elasticsearch/plugins/current/plugin-authors.md). +3. Create a `plugin-descriptor.properties` file as described in [Help for plugin authors](asciidocalypse://docs/elasticsearch/docs/extend/create-elasticsearch-plugins/index.md). 4. Create a `META-INF/services/org.elasticsearch.xpack.core.security.SecurityExtension` descriptor file for the extension that contains the fully qualified class name of your `org.elasticsearch.xpack.core.security.SecurityExtension` implementation 5. Bundle all in a single zip file. diff --git a/deploy-manage/users-roles/cluster-or-deployment-auth/controlling-user-cache.md b/deploy-manage/users-roles/cluster-or-deployment-auth/controlling-user-cache.md index 867972e30..11af1c209 100644 --- a/deploy-manage/users-roles/cluster-or-deployment-auth/controlling-user-cache.md +++ b/deploy-manage/users-roles/cluster-or-deployment-auth/controlling-user-cache.md @@ -17,7 +17,7 @@ PKI and JWT realms do not cache user credentials, but do cache the resolved user :::: -The cached user credentials are hashed in memory. By default, the {{es}} {{security-features}} use a salted `sha-256` hash algorithm. You can use a different hashing algorithm by setting the `cache.hash_algo` realm settings. See [User cache and password hash algorithms](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#hashing-settings). +The cached user credentials are hashed in memory. By default, the {{es}} {{security-features}} use a salted `sha-256` hash algorithm. You can use a different hashing algorithm by setting the `cache.hash_algo` realm settings. See [User cache and password hash algorithms](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md#hashing-settings). ## Evicting users from the cache [cache-eviction-api] diff --git a/deploy-manage/users-roles/cluster-or-deployment-auth/looking-up-users-without-authentication.md b/deploy-manage/users-roles/cluster-or-deployment-auth/looking-up-users-without-authentication.md index 61e7634cb..d04b0a9d5 100644 --- a/deploy-manage/users-roles/cluster-or-deployment-auth/looking-up-users-without-authentication.md +++ b/deploy-manage/users-roles/cluster-or-deployment-auth/looking-up-users-without-authentication.md @@ -22,12 +22,12 @@ See the [run_as](submitting-requests-on-behalf-of-other-users.md) and [delegated * The reserved, [`native`](native.md) and [`file`](file-based.md) realms always support user lookup. * The [`ldap`](ldap.md) realm supports user lookup when the realm is configured in [*user search* mode](ldap.md#ldap-realm-configuration). User lookup is not support when the realm is configured with `user_dn_templates`. -* User lookup support in the [`active_directory`](active-directory.md) realm requires that the realm be configured with a [`bind_dn`](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#ref-ad-settings) and a bind password. +* User lookup support in the [`active_directory`](active-directory.md) realm requires that the realm be configured with a [`bind_dn`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md#ref-ad-settings) and a bind password. The `pki`, `saml`, `oidc`, `kerberos` and `jwt` realms do not support user lookup. ::::{note} -If you want to use a realm only for user lookup and prevent users from authenticating against that realm, you can [configure the realm](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#ref-realm-settings) and set `authentication.enabled` to `false` +If you want to use a realm only for user lookup and prevent users from authenticating against that realm, you can [configure the realm](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md#ref-realm-settings) and set `authentication.enabled` to `false` :::: diff --git a/deploy-manage/users-roles/cluster-or-deployment-auth/manage-authentication-for-multiple-clusters.md b/deploy-manage/users-roles/cluster-or-deployment-auth/manage-authentication-for-multiple-clusters.md index f682cc419..7227bec77 100644 --- a/deploy-manage/users-roles/cluster-or-deployment-auth/manage-authentication-for-multiple-clusters.md +++ b/deploy-manage/users-roles/cluster-or-deployment-auth/manage-authentication-for-multiple-clusters.md @@ -36,13 +36,13 @@ This requires a valid Enterprise license or Enterprise trial license. Check [the ::::{tip} -Make sure you check the complete [guide to setting up LDAP with Elasticsearch](https://www.elastic.co/guide/en/elasticsearch/reference/current/ldap-realm.html). +Make sure you check the complete [guide to setting up LDAP with Elasticsearch](/deploy-manage/users-roles/cluster-or-deployment-auth/ldap.md). :::: ### To configure LDAP using Elastic Stack configuration policy with user search: [k8s_to_configure_ldap_using_elastic_stack_configuration_policy_with_user_search] -1. Add a realm configuration to the `config` field under `elasticsearch` in the `xpack.security.authc.realms.ldap` namespace. At a minimum, you must specify the URL of the LDAP server and the order of the LDAP realm compared to other configured security realms. You also have to set `user_search.base_dn` to the container DN where the users are searched for. Refer to [LDAP realm settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#ref-ldap-settings) for all of the options you can set for an LDAP realm. For example, the following snippet shows an LDAP realm configured with a user search: +1. Add a realm configuration to the `config` field under `elasticsearch` in the `xpack.security.authc.realms.ldap` namespace. At a minimum, you must specify the URL of the LDAP server and the order of the LDAP realm compared to other configured security realms. You also have to set `user_search.base_dn` to the container DN where the users are searched for. Refer to [LDAP realm settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md#ref-ldap-settings) for all of the options you can set for an LDAP realm. For example, the following snippet shows an LDAP realm configured with a user search: ```yaml elasticsearch: @@ -135,7 +135,7 @@ spec: ### To configure an LDAP realm with user DN templates: [k8s_to_configure_an_ldap_realm_with_user_dn_templates] -Add a realm configuration to `elasticsearch.yml` in the xpack.security.authc.realms.ldap namespace. At a minimum, you must specify the url and order of the LDAP server, and specify at least one template with the user_dn_templates option. Check [LDAP realm settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#ref-ldap-settings) for all of the options you can set for an ldap realm. +Add a realm configuration to `elasticsearch.yml` in the xpack.security.authc.realms.ldap namespace. At a minimum, you must specify the url and order of the LDAP server, and specify at least one template with the user_dn_templates option. Check [LDAP realm settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md#ref-ldap-settings) for all of the options you can set for an ldap realm. For example, the following snippet shows an LDAP realm configured with user DN templates: @@ -205,7 +205,7 @@ This requires a valid Enterprise license or Enterprise trial license. Check [the ::::{tip} -Make sure you check the complete [guide to setting up OpenID Connect with Elasticsearch](https://www.elastic.co/guide/en/elasticsearch/reference/current/oidc-guide.html). +Make sure you check the complete [guide to setting up OpenID Connect with Elasticsearch](/deploy-manage/users-roles/cluster-or-deployment-auth/openid-connect.md). :::: @@ -386,7 +386,7 @@ This requires a valid Enterprise license or Enterprise trial license. Check [the ::::{tip} -Make sure you check the complete [guide to setting up JWT with Elasticsearch](https://www.elastic.co/guide/en/elasticsearch/reference/current/jwt-auth-realm.html). +Make sure you check the complete [guide to setting up JWT with Elasticsearch](/deploy-manage/users-roles/cluster-or-deployment-auth/jwt.md). :::: diff --git a/deploy-manage/users-roles/cluster-or-deployment-auth/openid-connect.md b/deploy-manage/users-roles/cluster-or-deployment-auth/openid-connect.md index 2f0f5a9be..973329cce 100644 --- a/deploy-manage/users-roles/cluster-or-deployment-auth/openid-connect.md +++ b/deploy-manage/users-roles/cluster-or-deployment-auth/openid-connect.md @@ -68,6 +68,8 @@ $$$oidc-user-metadata$$$ $$$oidc-user-properties$$$ +$$$oidc-claims-mapping$$$ + **This page is a work in progress.** The documentation team is working to combine content pulled from the following pages: * [/raw-migrated-files/elasticsearch/elasticsearch-reference/oidc-realm.md](/raw-migrated-files/elasticsearch/elasticsearch-reference/oidc-realm.md) diff --git a/deploy-manage/users-roles/cluster-or-deployment-auth/operator-only-functionality.md b/deploy-manage/users-roles/cluster-or-deployment-auth/operator-only-functionality.md index 5ccbeb192..816a814f0 100644 --- a/deploy-manage/users-roles/cluster-or-deployment-auth/operator-only-functionality.md +++ b/deploy-manage/users-roles/cluster-or-deployment-auth/operator-only-functionality.md @@ -29,7 +29,7 @@ Operator privileges provide protection for APIs and dynamic cluster settings. An ## Operator-only dynamic cluster settings [operator-only-dynamic-cluster-settings] * All [IP filtering](../../security/ip-traffic-filtering.md) settings -* The following dynamic [machine learning settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/ml-settings.html): +* The following dynamic [machine learning settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/machine-learning-settings.md): * `xpack.ml.node_concurrent_job_allocations` * `xpack.ml.max_machine_memory_percent` @@ -41,8 +41,8 @@ Operator privileges provide protection for APIs and dynamic cluster settings. An * `xpack.ml.enable_config_migration` * `xpack.ml.persist_results_max_retries` -* The [`cluster.routing.allocation.disk.threshold_enabled` setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html#cluster-routing-disk-threshold) -* The following [recovery settings for managed services](https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html#recovery-settings-for-managed-services): +* The [`cluster.routing.allocation.disk.threshold_enabled` setting](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md#cluster-routing-disk-threshold) +* The following [recovery settings for managed services](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-recovery-settings.md#recovery-settings-for-managed-services): * `node.bandwidth.recovery.operator.factor` * `node.bandwidth.recovery.operator.factor.read` diff --git a/deploy-manage/users-roles/cluster-or-deployment-auth/pki.md b/deploy-manage/users-roles/cluster-or-deployment-auth/pki.md index 5c537ae6d..46008c5e4 100644 --- a/deploy-manage/users-roles/cluster-or-deployment-auth/pki.md +++ b/deploy-manage/users-roles/cluster-or-deployment-auth/pki.md @@ -13,7 +13,7 @@ You can also use PKI certificates to authenticate to {{kib}}, however this requi To use PKI in {{es}}, you configure a PKI realm, enable client authentication on the desired network layers (transport or http), and map the Distinguished Names (DNs) from the Subject field in the user certificates to roles. You create the mappings in a role mapping file or use the role mappings API. -1. Add a realm configuration for a `pki` realm to `elasticsearch.yml` under the `xpack.security.authc.realms.pki` namespace. You must explicitly set the `order` attribute. See [PKI realm settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#ref-pki-settings) for all of the options you can set for a `pki` realm. +1. Add a realm configuration for a `pki` realm to `elasticsearch.yml` under the `xpack.security.authc.realms.pki` namespace. You must explicitly set the `order` attribute. See [PKI realm settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md#ref-pki-settings) for all of the options you can set for a `pki` realm. For example, the following snippet shows the most basic `pki` realm configuration: @@ -33,7 +33,7 @@ To use PKI in {{es}}, you configure a PKI realm, enable client authentication on When you configure realms in `elasticsearch.yml`, only the realms you specify are used for authentication. If you also want to use the `native` or `file` realms, you must include them in the realm chain. :::: -2. Optional: The username is defined by the [username_pattern](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#ref-pki-settings). If you want to use something other than the CN of the Subject DN as the username, you can specify a regex to extract the desired username. The regex is applied on the Subject DN. +2. Optional: The username is defined by the [username_pattern](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md#ref-pki-settings). If you want to use something other than the CN of the Subject DN as the username, you can specify a regex to extract the desired username. The regex is applied on the Subject DN. For example, the regex in the following configuration extracts the email address from the Subject DN: @@ -70,7 +70,7 @@ To use PKI in {{es}}, you configure a PKI realm, enable client authentication on * The interface must *trust* the certificate that is presented by the client by configuring either the `truststore` or `certificate_authorities` paths, or by setting `verification_mode` to `none`. * The *protocols* supported by the interface must be compatible with those used by the client. - For an explanation of these settings, see [General TLS settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#ssl-tls-settings). + For an explanation of these settings, see [General TLS settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md#ssl-tls-settings). The relevant network interface (transport or http) must be configured to trust any certificate that is to be used within the PKI realm. However, it is possible to configure the PKI realm to trust only a *subset* of the certificates accepted by the network interface. This is useful when the SSL/TLS layer trusts clients with certificates that are signed by a different CA than the one that signs your users' certificates. diff --git a/deploy-manage/users-roles/cluster-or-deployment-auth/realm-chains.md b/deploy-manage/users-roles/cluster-or-deployment-auth/realm-chains.md index eef6143b7..a7c87cb9f 100644 --- a/deploy-manage/users-roles/cluster-or-deployment-auth/realm-chains.md +++ b/deploy-manage/users-roles/cluster-or-deployment-auth/realm-chains.md @@ -42,7 +42,7 @@ xpack.security.authc.realms: enabled: false ``` -As can be seen above, each realm has a unique name that identifies it. Each type of realm dictates its own set of required and optional settings. That said, there are [settings that are common to all realms](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#ref-realm-settings). +As can be seen above, each realm has a unique name that identifies it. Each type of realm dictates its own set of required and optional settings. That said, there are [settings that are common to all realms](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md#ref-realm-settings). ## Delegating authorization to another realm [authorization_realms] @@ -52,7 +52,7 @@ For example, you may wish to use a PKI realm to authenticate your users with TLS Any realm that supports retrieving users (without needing their credentials) can be used as an *authorization realm* (that is, its name may appear as one of the values in the list of `authorization_realms`). See [Looking up users without authentication](looking-up-users-without-authentication.md) for further explanation on which realms support this. -For realms that support this feature, it can be enabled by configuring the `authorization_realms` setting on the authenticating realm. Check the list of [supported settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#realm-settings) for each realm to see if they support the `authorization_realms` setting. +For realms that support this feature, it can be enabled by configuring the `authorization_realms` setting on the authenticating realm. Check the list of [supported settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md#realm-settings) for each realm to see if they support the `authorization_realms` setting. If delegated authorization is enabled for a realm, it authenticates the user in its standard manner (including relevant caching) then looks for that user in the configured list of authorization realms. It tries each realm in the order they are specified in the `authorization_realms` setting. The user is retrieved by principal - the user must have identical usernames in the *authentication* and *authorization realms*. If the user cannot be found in any of the authorization realms, authentication fails. diff --git a/deploy-manage/users-roles/cluster-or-deployment-auth/saml.md b/deploy-manage/users-roles/cluster-or-deployment-auth/saml.md index ee5c106ed..183c987c2 100644 --- a/deploy-manage/users-roles/cluster-or-deployment-auth/saml.md +++ b/deploy-manage/users-roles/cluster-or-deployment-auth/saml.md @@ -70,6 +70,10 @@ $$$saml-no-kibana-sp-init-sso$$$ $$$req-authn-context$$$ +$$$saml-guide-idp$$$ + +$$$saml-sp-metadata$$$ + **This page is a work in progress.** The documentation team is working to combine content pulled from the following pages: * [/raw-migrated-files/elasticsearch/elasticsearch-reference/saml-realm.md](/raw-migrated-files/elasticsearch/elasticsearch-reference/saml-realm.md) diff --git a/deploy-manage/users-roles/cluster-or-deployment-auth/service-accounts.md b/deploy-manage/users-roles/cluster-or-deployment-auth/service-accounts.md index 5c8742aff..0686dc8f3 100644 --- a/deploy-manage/users-roles/cluster-or-deployment-auth/service-accounts.md +++ b/deploy-manage/users-roles/cluster-or-deployment-auth/service-accounts.md @@ -47,7 +47,7 @@ Service tokens can be backed by either the `.security` index (recommended) or th You must create a service token to use a service account. You can create a service token using either: * The [create service account token API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-security-create-service-token), which saves the new service token in the `.security` index and returns the bearer token in the HTTP response. -* The [elasticsearch-service-tokens](https://www.elastic.co/guide/en/elasticsearch/reference/current/service-tokens-command.html) CLI tool, which saves the new service token in the `$ES_HOME/config/service_tokens` file and outputs the bearer token to your terminal +* The [elasticsearch-service-tokens](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/service-tokens-command.md) CLI tool, which saves the new service token in the `$ES_HOME/config/service_tokens` file and outputs the bearer token to your terminal We recommend that you create service tokens via the REST API rather than the CLI. The API stores service tokens within the `.security` index which means that the tokens are available for authentication on all nodes, and will be backed up within cluster snapshots. The use of the CLI is intended for cases where there is an external orchestration process (such as [{{ece}}](https://www.elastic.co/guide/en/cloud-enterprise/current) or [{{eck}}](https://www.elastic.co/guide/en/cloud-on-k8s/current)) that will manage the creation and distribution of the `service_tokens` file. diff --git a/deploy-manage/users-roles/cluster-or-deployment-auth/token-based-authentication-services.md b/deploy-manage/users-roles/cluster-or-deployment-auth/token-based-authentication-services.md index 107412824..a998a6dfe 100644 --- a/deploy-manage/users-roles/cluster-or-deployment-auth/token-based-authentication-services.md +++ b/deploy-manage/users-roles/cluster-or-deployment-auth/token-based-authentication-services.md @@ -10,7 +10,7 @@ The {{stack-security-features}} authenticate users by using realms and one or mo The {{security-features}} provide the following built-in token-based authentication services, which are listed in the order they are consulted: *service-accounts* -: The [service accounts](service-accounts.md) use either the [create service account token API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-security-create-service-token) or the [elasticsearch-service-tokens](https://www.elastic.co/guide/en/elasticsearch/reference/current/service-tokens-command.html) CLI tool to generate service account tokens. +: The [service accounts](service-accounts.md) use either the [create service account token API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-security-create-service-token) or the [elasticsearch-service-tokens](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/service-tokens-command.md) CLI tool to generate service account tokens. To use a service account token, include the generated token value in a request with an `Authorization: Bearer` header: diff --git a/explore-analyze/alerts-cases/alerts/alerting-common-issues.md b/explore-analyze/alerts-cases/alerts/alerting-common-issues.md index 0db738b83..b5de69068 100644 --- a/explore-analyze/alerts-cases/alerts/alerting-common-issues.md +++ b/explore-analyze/alerts-cases/alerts/alerting-common-issues.md @@ -18,9 +18,9 @@ Rules with a small check interval, such as every two seconds, run later than sch **Solution** -Rules run as background tasks at a cadence defined by their **check interval**. When a Rule **check interval** is smaller than the Task Manager [`poll_interval`](https://www.elastic.co/guide/en/kibana/current/task-manager-settings-kb.html#task-manager-settings), the rule will run late. +Rules run as background tasks at a cadence defined by their **check interval**. When a Rule **check interval** is smaller than the Task Manager [`poll_interval`](asciidocalypse://docs/kibana/docs/reference/configuration-reference/task-manager-settings.md#task-manager-settings), the rule will run late. -Either tweak the [{{kib}} Task Manager settings](https://www.elastic.co/guide/en/kibana/current/task-manager-settings-kb.html#task-manager-settings) or increase the **check interval** of the rules in question. +Either tweak the [{{kib}} Task Manager settings](asciidocalypse://docs/kibana/docs/reference/configuration-reference/task-manager-settings.md#task-manager-settings) or increase the **check interval** of the rules in question. For more details, see [Tasks with small schedule intervals run late](../../../troubleshoot/kibana/task-manager.md#task-manager-health-scheduled-tasks-small-schedule-interval-run-late). @@ -36,7 +36,7 @@ Actions run long after the status of a rule changes, sending a notification of t Rules and actions run as background tasks by each {{kib}} instance at a default rate of ten tasks every three seconds. When diagnosing issues related to alerting, focus on the tasks that begin with `alerting:` and `actions:`. -Alerting tasks always begin with `alerting:`. For example, the `alerting:.index-threshold` tasks back the [index threshold stack rule](rule-type-index-threshold.md). Action tasks always begin with `actions:`. For example, the `actions:.index` tasks back the [index action](https://www.elastic.co/guide/en/kibana/current/index-action-type.html). +Alerting tasks always begin with `alerting:`. For example, the `alerting:.index-threshold` tasks back the [index threshold stack rule](rule-type-index-threshold.md). Action tasks always begin with `actions:`. For example, the `actions:.index` tasks back the [index action](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/index-action-type.md). For more details on monitoring and diagnosing tasks in Task Manager, refer to [Health monitoring](../../../deploy-manage/monitor/kibana-task-manager-health-monitoring.md). @@ -48,7 +48,7 @@ A connector gets a TLS socket error when connecting to the server to run an acti **Solution** -Configuration options are available to specialize connections to TLS servers, including ignoring server certificate validation and providing certificate authority data to verify servers using custom certificates. For more details, see [Action settings](https://www.elastic.co/guide/en/kibana/current/alert-action-settings-kb.html#action-settings). +Configuration options are available to specialize connections to TLS servers, including ignoring server certificate validation and providing certificate authority data to verify servers using custom certificates. For more details, see [Action settings](asciidocalypse://docs/kibana/docs/reference/configuration-reference/alerting-settings.md#action-settings). ## Rules take a long time to run [rules-long-run-time] @@ -76,7 +76,7 @@ and in the [details page](create-manage-rules.md#rule-details): :class: screenshot ::: -If you want your rules to run longer, update the `xpack.alerting.rules.run.timeout` configuration in your [Alerting settings](https://www.elastic.co/guide/en/kibana/current/alert-action-settings-kb.html#alert-settings). You can also target a specific rule type by using `xpack.alerting.rules.run.ruleTypeOverrides`. +If you want your rules to run longer, update the `xpack.alerting.rules.run.timeout` configuration in your [Alerting settings](asciidocalypse://docs/kibana/docs/reference/configuration-reference/alerting-settings.md#alert-settings). You can also target a specific rule type by using `xpack.alerting.rules.run.ruleTypeOverrides`. Rules that consistently run longer than their [check interval](create-manage-rules.md#create-edit-rules) may produce unexpected results. If the average run duration, visible on the [details page](create-manage-rules.md#rule-details), is greater than the check interval, consider increasing the check interval. @@ -243,8 +243,8 @@ This error happens when the `xpack.encryptedSavedObjects.encryptionKey` value us | | | | --- | --- | -| If the value in `xpack.encryptedSavedObjects.encryptionKey` was manually changed, and the previous encryption key is still known. | Ensure any previous encryption key is included in the keys used for [decryption only](https://www.elastic.co/guide/en/kibana/current/security-settings-kb.html#xpack-encryptedSavedObjects-keyRotation-decryptionOnlyKeys). | -| If another {{kib}} instance with a different encryption key connects to the cluster. | The other {{kib}} instance might be trying to run the rule using a different encryption key than what the rule was created with. Ensure the encryption keys among all the {{kib}} instances are the same, and setting [decryption only keys](https://www.elastic.co/guide/en/kibana/current/security-settings-kb.html#xpack-encryptedSavedObjects-keyRotation-decryptionOnlyKeys) for previously used encryption keys. | +| If the value in `xpack.encryptedSavedObjects.encryptionKey` was manually changed, and the previous encryption key is still known. | Ensure any previous encryption key is included in the keys used for [decryption only](asciidocalypse://docs/kibana/docs/reference/configuration-reference/security-settings.md#xpack-encryptedSavedObjects-keyRotation-decryptionOnlyKeys). | +| If another {{kib}} instance with a different encryption key connects to the cluster. | The other {{kib}} instance might be trying to run the rule using a different encryption key than what the rule was created with. Ensure the encryption keys among all the {{kib}} instances are the same, and setting [decryption only keys](asciidocalypse://docs/kibana/docs/reference/configuration-reference/security-settings.md#xpack-encryptedSavedObjects-keyRotation-decryptionOnlyKeys) for previously used encryption keys. | | If other scenarios don’t apply. | Generate a new API key for the rule. For example, in **{{stack-manage-app}} > {{rules-ui}}**, select **Update API key** from the action menu. | ## Rules stop running after upgrade [known-issue-upgrade-rule] diff --git a/explore-analyze/alerts-cases/alerts/alerting-getting-started.md b/explore-analyze/alerts-cases/alerts/alerting-getting-started.md index b097e508d..c705effc0 100644 --- a/explore-analyze/alerts-cases/alerts/alerting-getting-started.md +++ b/explore-analyze/alerts-cases/alerts/alerting-getting-started.md @@ -7,7 +7,7 @@ navigation_title: Getting started with alerts # Getting started with alerting [alerting-getting-started] -Alerting enables you to define *rules*, which detect complex conditions within different {{kib}} apps and trigger actions when those conditions are met. Alerting is integrated with [**{{observability}}**](../../../solutions/observability/incident-management/alerting.md), [**Security**](https://www.elastic.co/guide/en/security/current/prebuilt-rules.html), [**Maps**](../../../explore-analyze/alerts-cases/alerts/geo-alerting.md) and [**{{ml-app}}**](../../../explore-analyze/machine-learning/anomaly-detection/ml-configuring-alerts.md). It can be centrally managed from **{{stack-manage-app}}** and provides a set of built-in [connectors](../../../deploy-manage/manage-connectors.md) and [rules](../../../explore-analyze/alerts-cases/alerts/rule-types.md#stack-rules) for you to use. +Alerting enables you to define *rules*, which detect complex conditions within different {{kib}} apps and trigger actions when those conditions are met. Alerting is integrated with [**{{observability}}**](../../../solutions/observability/incident-management/alerting.md), [**Security**](asciidocalypse://docs/docs-content/docs/reference/security/prebuilt-rules.md), [**Maps**](../../../explore-analyze/alerts-cases/alerts/geo-alerting.md) and [**{{ml-app}}**](../../../explore-analyze/machine-learning/anomaly-detection/ml-configuring-alerts.md). It can be centrally managed from **{{stack-manage-app}}** and provides a set of built-in [connectors](../../../deploy-manage/manage-connectors.md) and [rules](../../../explore-analyze/alerts-cases/alerts/rule-types.md#stack-rules) for you to use. :::{image} ../../../images/kibana-alerting-overview.png :alt: {{rules-ui}} UI diff --git a/explore-analyze/alerts-cases/alerts/alerting-setup.md b/explore-analyze/alerts-cases/alerts/alerting-setup.md index 7b9cf3f67..5c2b071e5 100644 --- a/explore-analyze/alerts-cases/alerts/alerting-setup.md +++ b/explore-analyze/alerts-cases/alerts/alerting-setup.md @@ -15,14 +15,14 @@ mapped_pages: If you are using an **on-premises** {{stack}} deployment: -* In the `kibana.yml` configuration file, add the [`xpack.encryptedSavedObjects.encryptionKey`](https://www.elastic.co/guide/en/kibana/current/alert-action-settings-kb.html#general-alert-action-settings) setting. +* In the `kibana.yml` configuration file, add the [`xpack.encryptedSavedObjects.encryptionKey`](asciidocalypse://docs/kibana/docs/reference/configuration-reference/alerting-settings.md#general-alert-action-settings) setting. * For emails to have a footer with a link back to {{kib}}, set the [`server.publicBaseUrl`](../../../deploy-manage/deploy/self-managed/configure.md#server-publicBaseUrl) configuration setting. If you are using an **on-premises** {{stack}} deployment with [**security**](../../../deploy-manage/security.md): -* If you are unable to access {{kib}} {{alert-features}}, ensure that you have not [explicitly disabled API keys](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#api-key-service-settings). +* If you are unable to access {{kib}} {{alert-features}}, ensure that you have not [explicitly disabled API keys](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/security-settings.md#api-key-service-settings). -The alerting framework uses queries that require the `search.allow_expensive_queries` setting to be `true`. See the scripts [documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-script-query.html#_allow_expensive_queries_4). +The alerting framework uses queries that require the `search.allow_expensive_queries` setting to be `true`. See the scripts [documentation](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-script-query.md#_allow_expensive_queries_4). ## Production considerations and scaling guidance [alerting-setup-production] @@ -47,7 +47,7 @@ The **{{connectors-feature}}** feature privilege is required to manage connector Likewise, you can customize the **Rules Settings** sub-feature privileges related to flapping detection settings. -To create a rule that uses the [Cases connector](https://www.elastic.co/guide/en/kibana/current/cases-action-type.html), you must also have `All` privileges for the **Cases** feature. +To create a rule that uses the [Cases connector](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/cases-action-type.md), you must also have `All` privileges for the **Cases** feature. The rule type also affects the privileges that are required. For example, to create or edit {{ml}} rules, you must have `all` privileges for the **Analytics > {{ml-app}}** feature. For {{stack-monitor-app}} rules, you must have the `monitoring_user` role. For {{observability}} rules, you must have `all` privileges for the appropriate {{observability}} features. For Security rules, refer to [Detections prerequisites and requirements](../../../solutions/security/detect-and-alert/detections-requirements.md). @@ -104,7 +104,7 @@ If a rule requires certain privileges, such as index privileges, to run and a us ### Restrict actions [alerting-restricting-actions] -For security reasons you may wish to limit the extent to which {{kib}} can connect to external services. You can use [Action settings](https://www.elastic.co/guide/en/kibana/current/alert-action-settings-kb.html#action-settings) to disable certain [*Connectors*](../../../deploy-manage/manage-connectors.md) and allowlist the hostnames that {{kib}} can connect with. +For security reasons you may wish to limit the extent to which {{kib}} can connect to external services. You can use [Action settings](asciidocalypse://docs/kibana/docs/reference/configuration-reference/alerting-settings.md#action-settings) to disable certain [*Connectors*](../../../deploy-manage/manage-connectors.md) and allowlist the hostnames that {{kib}} can connect with. ## Space isolation [alerting-spaces] diff --git a/explore-analyze/alerts-cases/alerts/alerting-troubleshooting.md b/explore-analyze/alerts-cases/alerts/alerting-troubleshooting.md index 15fed0550..c983214c2 100644 --- a/explore-analyze/alerts-cases/alerts/alerting-troubleshooting.md +++ b/explore-analyze/alerts-cases/alerts/alerting-troubleshooting.md @@ -177,7 +177,7 @@ In addition to the above methods, refer to the following approaches and common i ### Temporarily throttle all tasks [alerting-kibana-throttle] -If cluster performance becomes degraded from excessive or expensive rules and {{kib}} is sluggish or unresponsive, you can temporarily reduce load to the Task Manager by updating its [settings](https://www.elastic.co/guide/en/kibana/current/task-manager-settings-kb.html): +If cluster performance becomes degraded from excessive or expensive rules and {{kib}} is sluggish or unresponsive, you can temporarily reduce load to the Task Manager by updating its [settings](asciidocalypse://docs/kibana/docs/reference/configuration-reference/task-manager-settings.md): ```txt xpack.task_manager.capacity: 5 diff --git a/explore-analyze/alerts-cases/alerts/create-manage-rules.md b/explore-analyze/alerts-cases/alerts/create-manage-rules.md index 247ccd14f..1479f5e0d 100644 --- a/explore-analyze/alerts-cases/alerts/create-manage-rules.md +++ b/explore-analyze/alerts-cases/alerts/create-manage-rules.md @@ -8,7 +8,7 @@ mapped_pages: # Create and manage rules [create-and-manage-rules] -The **{{stack-manage-app}}** > **{{rules-ui}}** UI provides a cross-app view of alerting. Different {{kib}} apps like [**{{observability}}**](../../../solutions/observability/incident-management/alerting.md), [**Security**](https://www.elastic.co/guide/en/security/current/prebuilt-rules.html), [**Maps**](geo-alerting.md) and [**{{ml-app}}**](../../machine-learning/machine-learning-in-kibana.md) can offer their own rules. +The **{{stack-manage-app}}** > **{{rules-ui}}** UI provides a cross-app view of alerting. Different {{kib}} apps like [**{{observability}}**](../../../solutions/observability/incident-management/alerting.md), [**Security**](asciidocalypse://docs/docs-content/docs/reference/security/prebuilt-rules.md), [**Maps**](geo-alerting.md) and [**{{ml-app}}**](../../machine-learning/machine-learning-in-kibana.md) can offer their own rules. You can find **Rules** in **Stack Management** > **Alerts and insights** > **Rules** in {{kib}} or by using the [global search field](/explore-analyze/find-and-organize/find-apps-and-objects.md). @@ -58,7 +58,7 @@ You can add one or more actions to your rule to generate notifications when its Each action uses a connector, which provides connection information for a {{kib}} service or third party integration, depending on where you want to send the notifications. -[preview] Some connectors that perform actions within {{kib}}, such as the [Cases connector](https://www.elastic.co/guide/en/kibana/current/cases-action-type.html), require less configuration. For example, you do not need to set the action frequency or variables. +[preview] Some connectors that perform actions within {{kib}}, such as the [Cases connector](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/cases-action-type.md), require less configuration. For example, you do not need to set the action frequency or variables. After you select a connector, set the action frequency. You can choose to create a summary of alerts on each check interval or on a custom interval. Alternatively, you an choose to run actions for each alert (at each check interval, only when the alert status changes, or at a custom interval). @@ -150,7 +150,7 @@ Click the rule name to access a rule details page: In this example, the rule detects when a site serves more than a threshold number of bytes in a 24 hour period. Four sites are above the threshold. These are called alerts - occurrences of the condition being detected - and the alert name, status, time of detection, and duration of the condition are shown in this view. Alerts come and go from the list depending on whether the rule conditions are met. For more information about alerts, go to [*View alerts*](view-alerts.md). -If there are rule actions that failed to run successfully, you can see the details on the **History** tab. In the **Message** column, click the warning or expand icon ![double arrow icon to open a flyout with the document details](../../../images/kibana-expand-icon-2.png "") or click the number in the **Errored actions** column to open the **Errored Actions** panel. In this example, the action failed because the [`xpack.actions.email.domain_allowlist`](https://www.elastic.co/guide/en/kibana/current/alert-action-settings-kb.html#action-config-email-domain-allowlist) setting was updated and the action’s email recipient is no longer included in the allowlist: +If there are rule actions that failed to run successfully, you can see the details on the **History** tab. In the **Message** column, click the warning or expand icon ![double arrow icon to open a flyout with the document details](../../../images/kibana-expand-icon-2.png "") or click the number in the **Errored actions** column to open the **Errored Actions** panel. In this example, the action failed because the [`xpack.actions.email.domain_allowlist`](asciidocalypse://docs/kibana/docs/reference/configuration-reference/alerting-settings.md#action-config-email-domain-allowlist) setting was updated and the action’s email recipient is no longer included in the allowlist: :::{image} ../../../images/kibana-rule-details-errored-actions.png :alt: Rule histor page with alerts that have errored actions diff --git a/explore-analyze/alerts-cases/alerts/notifications-domain-allowlist.md b/explore-analyze/alerts-cases/alerts/notifications-domain-allowlist.md index b5d0672ff..ed9290501 100644 --- a/explore-analyze/alerts-cases/alerts/notifications-domain-allowlist.md +++ b/explore-analyze/alerts-cases/alerts/notifications-domain-allowlist.md @@ -33,7 +33,7 @@ This updates the notifications settings for {{es}} and {{kib}} to reflect what i ### Use the {{ecloud}} Control CLI [use-the-ecloud-control-cli] -Updating multiple deployments through the UI can take a lot of time. Instead, you can use the [{{ecloud}} Control](https://www.elastic.co/guide/en/ecctl/current/ecctl-overview.html) command-line interface (`ecctl`) to automate the deployment update. +Updating multiple deployments through the UI can take a lot of time. Instead, you can use the [{{ecloud}} Control](asciidocalypse://docs/ecctl/docs/reference/cloud/ecctl/index.md) command-line interface (`ecctl`) to automate the deployment update. The following example script shows how to update all deployments of an organization: diff --git a/explore-analyze/alerts-cases/alerts/rule-action-variables.md b/explore-analyze/alerts-cases/alerts/rule-action-variables.md index 42010c163..ebcc50e2c 100644 --- a/explore-analyze/alerts-cases/alerts/rule-action-variables.md +++ b/explore-analyze/alerts-cases/alerts/rule-action-variables.md @@ -20,9 +20,9 @@ The available variables differ by rule type, however there are some common varia Some cases exist where the variable values will be "escaped" when used in a context where escaping is needed. For example: -* For the [email connector](https://www.elastic.co/guide/en/kibana/current/email-action-type.html), the `message` action configuration property escapes any characters that would be interpreted as Markdown. -* For the [Slack connector](https://www.elastic.co/guide/en/kibana/current/slack-action-type.html), the `message` action configuration property escapes any characters that would be interpreted as Slack Markdown. -* For the [Webhook connector](https://www.elastic.co/guide/en/kibana/current/webhook-action-type.html), the `body` action configuration property escapes any characters that are invalid in JSON string values. +* For the [email connector](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/email-action-type.md), the `message` action configuration property escapes any characters that would be interpreted as Markdown. +* For the [Slack connector](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/slack-action-type.md), the `message` action configuration property escapes any characters that would be interpreted as Slack Markdown. +* For the [Webhook connector](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/webhook-action-type.md), the `body` action configuration property escapes any characters that are invalid in JSON string values. Mustache also supports "triple braces" of the form `{{{variable name}}}`, which indicates no escaping should be done at all. Use this form with caution, since it could end up rendering the variable content such that the resulting parameter is invalid or formatted incorrectly. @@ -221,7 +221,7 @@ You can enhance the values contained in Mustache variables when the Mustache tem ### Rendering objects as JSON [_rendering_objects_as_json] -Some connectors (such as the [Webhook connector](https://www.elastic.co/guide/en/kibana/current/webhook-action-type.html)) expect JSON values to be passed as parameters when the connector is invoked. The following capabilities are available: +Some connectors (such as the [Webhook connector](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/webhook-action-type.md)) expect JSON values to be passed as parameters when the connector is invoked. The following capabilities are available: * Array values referenced in braces have a predefined rendering by Mustache as string versions of the array elements, joined with a comma (`,`). To render array values as JSON, access the `asJSON` property of the array, instead of the array directly. For example, given a Mustache variable `context.values` that has the value `[1, 4, 9]` the Mustache template `{{context.values}}` will render as `1,4,9`, and the Mustache template `{{context.values.asJSON}}` will render as `[1,4,9]`. * The [ParseHjson lambda](#parse-hjson-lambda) Mustache lambda makes it easier to create JSON in your templates by using [Hjson](https://hjson.github.io/), a syntax extension to JSON, rather than strict JSON. diff --git a/explore-analyze/alerts-cases/alerts/rule-type-es-query.md b/explore-analyze/alerts-cases/alerts/rule-type-es-query.md index 95c9a2651..9478ea853 100644 --- a/explore-analyze/alerts-cases/alerts/rule-type-es-query.md +++ b/explore-analyze/alerts-cases/alerts/rule-type-es-query.md @@ -52,7 +52,7 @@ When you create an {{es}} query rule, your choice of query type affects the info : Specify how to calculate the value that is compared to the threshold. The value is calculated by aggregating a numeric field within the time window. The aggregation options are: `count`, `average`, `sum`, `min`, and `max`. When using `count` the document count is used and an aggregation field is not necessary. Over or Grouped Over - : Specify whether the aggregation is applied over all documents or split into groups using up to four grouping fields. If you choose to use grouping, it’s a [terms](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html) or [multi terms aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-multi-terms-aggregation.html); an alert will be created for each unique set of values when it meets the condition. To limit the number of alerts on high cardinality fields, you must specify the number of groups to check against the threshold. Only the top groups are checked. + : Specify whether the aggregation is applied over all documents or split into groups using up to four grouping fields. If you choose to use grouping, it’s a [terms](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-terms-aggregation.md) or [multi terms aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-multi-terms-aggregation.md); an alert will be created for each unique set of values when it meets the condition. To limit the number of alerts on high cardinality fields, you must specify the number of groups to check against the threshold. Only the top groups are checked. Threshold : Defines a threshold value and a comparison operator (`is above`, `is above or equals`, `is below`, `is below or equals`, or `is between`). The value calculated by the aggregation is compared to this threshold. @@ -150,7 +150,7 @@ The following variables are specific to the {{es}} query rule: {{/context.hits}} ``` - The documents returned by `context.hits` include the [`_source`](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html) field. If the {{es}} query search API’s [`fields`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-fields.html#search-fields-param) parameter is used, documents will also return the `fields` field, which can be used to access any runtime fields defined by the [`runtime_mappings`](../../../manage-data/data-store/mapping/define-runtime-fields-in-search-request.md) parameter. For example: + The documents returned by `context.hits` include the [`_source`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md) field. If the {{es}} query search API’s [`fields`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/retrieve-selected-fields.md#search-fields-param) parameter is used, documents will also return the `fields` field, which can be used to access any runtime fields defined by the [`runtime_mappings`](../../../manage-data/data-store/mapping/define-runtime-fields-in-search-request.md) parameter. For example: ```handlebars {{#context.hits}} @@ -162,7 +162,7 @@ The following variables are specific to the {{es}} query rule: 1. The `fields` parameter here is used to access the `day_of_week` runtime field. - As the [`fields`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-fields.html#search-fields-response) response always returns an array of values for each field, the [Mustache](https://mustache.github.io/) template array syntax is used to iterate over these values in your actions. For example: + As the [`fields`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/retrieve-selected-fields.md#search-fields-response) response always returns an array of values for each field, the [Mustache](https://mustache.github.io/) template array syntax is used to iterate over these values in your actions. For example: ```handlebars {{#context.hits}} diff --git a/explore-analyze/alerts-cases/alerts/rule-type-index-threshold.md b/explore-analyze/alerts-cases/alerts/rule-type-index-threshold.md index a21835e48..626f53fbe 100644 --- a/explore-analyze/alerts-cases/alerts/rule-type-index-threshold.md +++ b/explore-analyze/alerts-cases/alerts/rule-type-index-threshold.md @@ -83,7 +83,7 @@ The following action variables are specific to the index threshold rule. You can ## Example [_example] -In this example, you will use the {{kib}} [sample weblog data set](https://www.elastic.co/guide/en/kibana/current/get-started.html) to set up and tune the conditions on an index threshold rule. For this example, you want to detect when any of the top four sites serve more than 420,000 bytes over a 24 hour period. +In this example, you will use the {{kib}} [sample weblog data set](/explore-analyze/index.md) to set up and tune the conditions on an index threshold rule. For this example, you want to detect when any of the top four sites serve more than 420,000 bytes over a 24 hour period. 1. Go to **{{stack-manage-app}} > {{rules-ui}}** and click **Create rule**. 2. Select the **Index threshold** rule type. diff --git a/explore-analyze/alerts-cases/alerts/rule-types.md b/explore-analyze/alerts-cases/alerts/rule-types.md index 911f803a5..7568d9f4f 100644 --- a/explore-analyze/alerts-cases/alerts/rule-types.md +++ b/explore-analyze/alerts-cases/alerts/rule-types.md @@ -41,7 +41,7 @@ If you create a rule in the {{observability}} app, its alerts are not visible in ## Security rules [security-rules] -Security rules detect suspicious source events with pre-built or custom rules and create alerts when a rule’s conditions are met. For more information, refer to [Security rules](https://www.elastic.co/guide/en/security/current/prebuilt-rules.html). +Security rules detect suspicious source events with pre-built or custom rules and create alerts when a rule’s conditions are met. For more information, refer to [Security rules](asciidocalypse://docs/docs-content/docs/reference/security/prebuilt-rules.md). ::::{note} Alerts associated with security rules are visible only in the {{security-app}}; they are not visible in **{{stack-manage-app}} > {{rules-ui}}**. diff --git a/explore-analyze/alerts-cases/cases/manage-cases-settings.md b/explore-analyze/alerts-cases/cases/manage-cases-settings.md index af0217074..7d33018af 100644 --- a/explore-analyze/alerts-cases/cases/manage-cases-settings.md +++ b/explore-analyze/alerts-cases/cases/manage-cases-settings.md @@ -43,7 +43,7 @@ You can create connectors in **{{stack-manage-app}} > {{connectors-ui}}**, as de 1. From the **Incident management system** list, select **Add new connector**. 2. Select an external incident management system. -3. Enter your required settings. Refer to [{{ibm-r}}](https://www.elastic.co/guide/en/kibana/current/resilient-action-type.html), [Jira](https://www.elastic.co/guide/en/kibana/current/jira-action-type.html), [{{sn-itsm}}](https://www.elastic.co/guide/en/kibana/current/servicenow-action-type.html), [{{sn-sir}}](https://www.elastic.co/guide/en/kibana/current/servicenow-sir-action-type.html), [Swimlane](https://www.elastic.co/guide/en/kibana/current/swimlane-action-type.html), [{{hive}}](https://www.elastic.co/guide/en/kibana/current/thehive-action-type.html), or [{{webhook-cm}}](https://www.elastic.co/guide/en/kibana/current/cases-webhook-action-type.html) for connector configuration details. +3. Enter your required settings. Refer to [{{ibm-r}}](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/resilient-action-type.md), [Jira](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/jira-action-type.md), [{{sn-itsm}}](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/servicenow-action-type.md), [{{sn-sir}}](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/servicenow-sir-action-type.md), [Swimlane](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/swimlane-action-type.md), [{{hive}}](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/thehive-action-type.md), or [{{webhook-cm}}](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/cases-webhook-action-type.md) for connector configuration details. You can subsequently choose the connector when you create cases and use it in case templates. To change the default connector for new cases, select the connector from the **Incident management system** list. diff --git a/explore-analyze/alerts-cases/cases/manage-cases.md b/explore-analyze/alerts-cases/cases/manage-cases.md index 92769b2c6..8507f8431 100644 --- a/explore-analyze/alerts-cases/cases/manage-cases.md +++ b/explore-analyze/alerts-cases/cases/manage-cases.md @@ -31,7 +31,7 @@ Open a new case to keep track of issues and share their details with colleagues. 6. For the **External incident management system**, select a connector. For more information, refer to [External incident management systems](manage-cases-settings.md#case-connectors). 7. After you’ve completed all of the required fields, click **Create case**. -[preview] Alternatively, you can configure your rules to automatically create cases by using [case actions](https://www.elastic.co/guide/en/kibana/current/cases-action-type.html). By default, the rule adds all of the alerts within a specified time window to a single case. You can optionally choose a field to group the alerts and create separate cases for each group. You can also choose whether you want the rule to reopen cases or open new ones when the time window elapses. +[preview] Alternatively, you can configure your rules to automatically create cases by using [case actions](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/cases-action-type.md). By default, the rule adds all of the alerts within a specified time window to a single case. You can optionally choose a field to group the alerts and create separate cases for each group. You can also choose whether you want the rule to reopen cases or open new ones when the time window elapses. ## Add email notifications [add-case-notifications] @@ -47,7 +47,7 @@ For self-managed {{kib}}: 1. Create a preconfigured email connector. ::::{note} - At this time, email notifications support only preconfigured connectors, which are defined in the `kibana.yml` file. For examples, refer to [Email connectors](https://www.elastic.co/guide/en/kibana/current/pre-configured-connectors.html#preconfigured-email-configuration) and [Configure email accounts for well-known services](https://www.elastic.co/guide/en/kibana/current/email-action-type.html#configuring-email). + At this time, email notifications support only preconfigured connectors, which are defined in the `kibana.yml` file. For examples, refer to [Email connectors](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/pre-configured-connectors.md#preconfigured-email-configuration) and [Configure email accounts for well-known services](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/email-action-type.md#configuring-email). :::: 2. Set the `notifications.connectors.default.email` {{kib}} setting in kibana.yml to the name of your email connector. diff --git a/explore-analyze/alerts-cases/cases/setup-cases.md b/explore-analyze/alerts-cases/cases/setup-cases.md index 7bef85ffe..2b7f4374f 100644 --- a/explore-analyze/alerts-cases/cases/setup-cases.md +++ b/explore-analyze/alerts-cases/cases/setup-cases.md @@ -33,7 +33,7 @@ By default, `All` for the **Cases** feature includes authority to delete cases a ::::{note} Before a user can be assigned to a case, they must log into {{kib}} at least once, which creates a user profile. -This privilege is also required to add [case actions](https://www.elastic.co/guide/en/kibana/current/cases-action-type.html) to rules. +This privilege is also required to add [case actions](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/cases-action-type.md) to rules. :::: diff --git a/explore-analyze/alerts-cases/watcher/actions-email.md b/explore-analyze/alerts-cases/watcher/actions-email.md index 1ec223159..53d682671 100644 --- a/explore-analyze/alerts-cases/watcher/actions-email.md +++ b/explore-analyze/alerts-cases/watcher/actions-email.md @@ -282,7 +282,7 @@ bin/elasticsearch-keystore add xpack.notification.email.account.exchange_account The `email` action supports sending messages with an HTML body. However, for security reasons, {{watcher}} [sanitizes](https://en.wikipedia.org/wiki/HTML_sanitization) the HTML. -You can control which HTML features are allowed or disallowed by configuring the `xpack.notification.email.html.sanitization.allow` and `xpack.notification.email.html.sanitization.disallow` settings in `elasticsearch.yml`. You can specify individual HTML elements and [HTML feature groups](https://www.elastic.co/guide/en/elasticsearch/reference/current/notification-settings.html#html-feature-groups). By default, {{watcher}} allows the following features: `body`, `head`, `_tables`, `_links`, `_blocks`, `_formatting` and `img:embedded`. +You can control which HTML features are allowed or disallowed by configuring the `xpack.notification.email.html.sanitization.allow` and `xpack.notification.email.html.sanitization.disallow` settings in `elasticsearch.yml`. You can specify individual HTML elements and [HTML feature groups](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/watcher-settings.md#html-feature-groups). By default, {{watcher}} allows the following features: `body`, `head`, `_tables`, `_links`, `_blocks`, `_formatting` and `img:embedded`. For example, the following settings allow the HTML to contain tables and block elements, but disallow `

`, `
` and `
` tags. diff --git a/explore-analyze/alerts-cases/watcher/actions-index.md b/explore-analyze/alerts-cases/watcher/actions-index.md index e85250ef1..5cd0c3592 100644 --- a/explore-analyze/alerts-cases/watcher/actions-index.md +++ b/explore-analyze/alerts-cases/watcher/actions-index.md @@ -43,7 +43,7 @@ The following snippet shows a simple `index` action definition: | `op_type` | no | `index` | The [op_type](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-create) for the index operation. Must be one of either `index` or `create`. Must be `create` if `index` is a data stream. | | `execution_time_field` | no | - | The field that will store/index the watch execution time. | | `timeout` | no | 60s | The timeout for waiting for the index api call to return. If no response is returned within this time, the index action times out and fails. This setting overrides the default timeouts. | -| `refresh` | no | - | Optional setting of the [refresh policy](https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-refresh.html) for the write request | +| `refresh` | no | - | Optional setting of the [refresh policy](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/refresh-parameter.md) for the write request | ## Multi-document support [anatomy-actions-index-multi-doc-support] diff --git a/explore-analyze/alerts-cases/watcher/actions-jira.md b/explore-analyze/alerts-cases/watcher/actions-jira.md index a48e136ba..c257a7fc0 100644 --- a/explore-analyze/alerts-cases/watcher/actions-jira.md +++ b/explore-analyze/alerts-cases/watcher/actions-jira.md @@ -108,7 +108,7 @@ xpack.notification.jira: It is strongly advised to use Basic Authentication with secured HTTPS protocol only. :::: -You can also specify defaults for the [Jira issues](https://www.elastic.co/guide/en/elasticsearch/reference/current/notification-settings.html#jira-account-attributes): +You can also specify defaults for the [Jira issues](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/watcher-settings.md#jira-account-attributes): ```yaml xpack.notification.jira: diff --git a/explore-analyze/alerts-cases/watcher/actions-slack.md b/explore-analyze/alerts-cases/watcher/actions-slack.md index 02a0e5f83..54760f815 100644 --- a/explore-analyze/alerts-cases/watcher/actions-slack.md +++ b/explore-analyze/alerts-cases/watcher/actions-slack.md @@ -153,7 +153,7 @@ You can no longer configure Slack accounts using `elasticsearch.yml` settings. P :::: -You can specify defaults for the [Slack notification attributes](https://www.elastic.co/guide/en/elasticsearch/reference/current/notification-settings.html#slack-account-attributes): +You can specify defaults for the [Slack notification attributes](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/watcher-settings.md#slack-account-attributes): ```yaml xpack.notification.slack: diff --git a/explore-analyze/alerts-cases/watcher/actions-webhook.md b/explore-analyze/alerts-cases/watcher/actions-webhook.md index 2bbaad7df..072cebd71 100644 --- a/explore-analyze/alerts-cases/watcher/actions-webhook.md +++ b/explore-analyze/alerts-cases/watcher/actions-webhook.md @@ -71,7 +71,7 @@ You can use basic authentication when sending a request to a secured webservice. By default, both the username and the password are stored in the `.watches` index in plain text. When the {{es}} {{security-features}} are enabled, {{watcher}} can encrypt the password before storing it. :::: -You can also use PKI-based authentication when submitting requests to a cluster that has {{es}} {{security-features}} enabled. When you use PKI-based authentication instead of HTTP basic auth, you don’t need to store any authentication information in the watch itself. To use PKI-based authentication, you [configure the SSL key settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/notification-settings.html#ssl-notification-settings) for {{watcher}} in `elasticsearch.yml`. +You can also use PKI-based authentication when submitting requests to a cluster that has {{es}} {{security-features}} enabled. When you use PKI-based authentication instead of HTTP basic auth, you don’t need to store any authentication information in the watch itself. To use PKI-based authentication, you [configure the SSL key settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/watcher-settings.md#ssl-notification-settings) for {{watcher}} in `elasticsearch.yml`. ## Query parameters [webhook-query-parameters] diff --git a/explore-analyze/alerts-cases/watcher/enable-watcher.md b/explore-analyze/alerts-cases/watcher/enable-watcher.md index 71289d128..94fba8b68 100644 --- a/explore-analyze/alerts-cases/watcher/enable-watcher.md +++ b/explore-analyze/alerts-cases/watcher/enable-watcher.md @@ -128,7 +128,7 @@ PUT _watcher/watch/test-alarm ## Configuring a custom mail server [watcher-custom-mail-server] -It is possible to use a custom mail service instead of the one configured by default. It can be configured by following the [Elasticsearch documentation for configuring email accounts](https://www.elastic.co/guide/en/elasticsearch/reference/current/actions-email.html). +It is possible to use a custom mail service instead of the one configured by default. It can be configured by following the [Elasticsearch documentation for configuring email accounts](/explore-analyze/alerts-cases/watcher/actions-email.md). An example on how to configure a new account from the Elastic cloud console: @@ -158,4 +158,4 @@ An example on how to configure a new account from the Elastic cloud console: 6. The new email account is now set up. It will now be used by default for watcher email actions. -For a full reference of all available settings, see the [Elasticsearch documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/notification-settings.html#email-notification-settings). +For a full reference of all available settings, see the [Elasticsearch documentation](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/watcher-settings.md#email-notification-settings). diff --git a/explore-analyze/alerts-cases/watcher/encrypting-data.md b/explore-analyze/alerts-cases/watcher/encrypting-data.md index 7c32b8cd0..f691ffc9a 100644 --- a/explore-analyze/alerts-cases/watcher/encrypting-data.md +++ b/explore-analyze/alerts-cases/watcher/encrypting-data.md @@ -14,19 +14,19 @@ Every `password` field that is used in your watch within an HTTP basic authentic To encrypt sensitive data in {{watcher}}: -1. Use the [elasticsearch-syskeygen](https://www.elastic.co/guide/en/elasticsearch/reference/current/syskeygen.html) command to create a system key file. +1. Use the [elasticsearch-syskeygen](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/syskeygen.md) command to create a system key file. 2. Copy the `system_key` file to all of the nodes in your cluster. ::::{important} The system key is a symmetric key, so the same key must be used on every node in the cluster. :::: -3. Set the [`xpack.watcher.encrypt_sensitive_data` setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/notification-settings.html): +3. Set the [`xpack.watcher.encrypt_sensitive_data` setting](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/watcher-settings.md): ```sh xpack.watcher.encrypt_sensitive_data: true ``` -4. Set the [`xpack.watcher.encryption_key` setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/notification-settings.html) in the [{{es}} keystore](../../../deploy-manage/security/secure-settings.md) on each node in the cluster. +4. Set the [`xpack.watcher.encryption_key` setting](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/watcher-settings.md) in the [{{es}} keystore](../../../deploy-manage/security/secure-settings.md) on each node in the cluster. For example, run the following command to import the `system_key` file on each node: diff --git a/explore-analyze/alerts-cases/watcher/input-search.md b/explore-analyze/alerts-cases/watcher/input-search.md index 272898505..365c4224a 100644 --- a/explore-analyze/alerts-cases/watcher/input-search.md +++ b/explore-analyze/alerts-cases/watcher/input-search.md @@ -141,9 +141,9 @@ The total number of hits in the search response is returned as an object in the | `request.indices` | no | - | The indices to search. If omitted, all indices are searched, which is the default behaviour in Elasticsearch. | | `request.body` | no | - | The body of the request. The [request body](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-search) follows the same structure you normally send in the body of a REST `_search` request. The body can be static text or include `mustache` [templates](how-watcher-works.md#templates). | | `request.template` | no | - | The body of the search template. See [configure templates](how-watcher-works.md#templates) for more information. | -| `request.indices_options.expand_wildcards` | no | `open` | How to expand wildcards. Valid values are: `all`, `open`, `closed`, and `none` See [`expand_wildcards`](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#api-multi-index) for more information. | -| `request.indices_options.ignore_unavailable` | no | `true` | Whether the search should ignore unavailable indices. See [`ignore_unavailable`](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#api-multi-index) for more information. | -| `request.indices_options.allow_no_indices` | no | `true` | Whether to allow a search where a wildcard indices expression results in no concrete indices. See [allow_no_indices](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#api-multi-index) for more information. | +| `request.indices_options.expand_wildcards` | no | `open` | How to expand wildcards. Valid values are: `all`, `open`, `closed`, and `none` See [`expand_wildcards`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#api-multi-index) for more information. | +| `request.indices_options.ignore_unavailable` | no | `true` | Whether the search should ignore unavailable indices. See [`ignore_unavailable`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#api-multi-index) for more information. | +| `request.indices_options.allow_no_indices` | no | `true` | Whether to allow a search where a wildcard indices expression results in no concrete indices. See [allow_no_indices](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#api-multi-index) for more information. | | `extract` | no | - | A array of JSON keys to extract from the search response and load as the payload. When a search generates a large response, you can use `extract` to select the relevant fields instead of loading the entire response. | | `timeout` | no | 1m | The timeout for waiting for the search api call to return. If no response is returned within this time, the search input times out and fails. This setting overrides the default search operations timeouts. | diff --git a/explore-analyze/alerts-cases/watcher/schedule-types.md b/explore-analyze/alerts-cases/watcher/schedule-types.md index 60ea2af9e..e54a8054a 100644 --- a/explore-analyze/alerts-cases/watcher/schedule-types.md +++ b/explore-analyze/alerts-cases/watcher/schedule-types.md @@ -418,10 +418,10 @@ By default, the `yearly` schedule is evaluated in the UTC time zone. To use a di ## {{watcher}} cron schedule [schedule-cron] -Defines a [`schedule`](trigger-schedule.md) using a [cron expression](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#api-cron-expressions) that specifiues when to execute a watch. +Defines a [`schedule`](trigger-schedule.md) using a [cron expression](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#api-cron-expressions) that specifiues when to execute a watch. ::::{tip} -While cron expressions are powerful, a regularly occurring schedule is easier to configure with the other schedule types. If you must use a cron schedule, make sure you verify it with [`elasticsearch-croneval`](https://www.elastic.co/guide/en/elasticsearch/reference/current/elasticsearch-croneval.html) . +While cron expressions are powerful, a regularly occurring schedule is easier to configure with the other schedule types. If you must use a cron schedule, make sure you verify it with [`elasticsearch-croneval`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/elasticsearch-croneval.md) . :::: @@ -484,7 +484,7 @@ By default, cron expressions are evaluated in the UTC time zone. To use a differ ### Use croneval to validate cron expressions [croneval] -{{es}} provides a [`elasticsearch-croneval`](https://www.elastic.co/guide/en/elasticsearch/reference/current/elasticsearch-croneval.html) command line tool in the `$ES_HOME/bin` directory that you can use to check that your cron expressions are valid and produce the expected results. +{{es}} provides a [`elasticsearch-croneval`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/elasticsearch-croneval.md) command line tool in the `$ES_HOME/bin` directory that you can use to check that your cron expressions are valid and produce the expected results. To validate a cron expression, pass it in as a parameter to `elasticsearch-croneval`: diff --git a/explore-analyze/alerts-cases/watcher/transform-search.md b/explore-analyze/alerts-cases/watcher/transform-search.md index c67fa35fd..85153b362 100644 --- a/explore-analyze/alerts-cases/watcher/transform-search.md +++ b/explore-analyze/alerts-cases/watcher/transform-search.md @@ -52,9 +52,9 @@ The following table lists all available settings for the search {{watcher-transf | `request.search_type` | no | query_then_fetch | The search [type](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-search). | | `request.indices` | no | all indices | One or more indices to search on. | | `request.body` | no | `match_all` query | The body of the request. The [request body](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-search) follows the same structure you normally send in the body of a REST `_search` request. The body can be static text or include `mustache` [templates](how-watcher-works.md#templates). | -| `request.indices_options.expand_wildcards` | no | `open` | Determines how to expand indices wildcards. An array consisting of a combination of `open`, `closed`, and `hidden`. Alternatively a value of `none` or `all`. (see [multi-target syntax](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#api-multi-index)) | -| `request.indices_options.ignore_unavailable` | no | `true` | A boolean value that determines whether the search should leniently ignore unavailable indices (see [multi-target syntax](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#api-multi-index)) | -| `request.indices_options.allow_no_indices` | no | `true` | A boolean value that determines whether the search should leniently return no results when no indices are resolved (see [multi-target syntax](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#api-multi-index)) | +| `request.indices_options.expand_wildcards` | no | `open` | Determines how to expand indices wildcards. An array consisting of a combination of `open`, `closed`, and `hidden`. Alternatively a value of `none` or `all`. (see [multi-target syntax](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#api-multi-index)) | +| `request.indices_options.ignore_unavailable` | no | `true` | A boolean value that determines whether the search should leniently ignore unavailable indices (see [multi-target syntax](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#api-multi-index)) | +| `request.indices_options.allow_no_indices` | no | `true` | A boolean value that determines whether the search should leniently return no results when no indices are resolved (see [multi-target syntax](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#api-multi-index)) | | `request.template` | no | - | The body of the search template. See [configure templates](how-watcher-works.md#templates) for more information. | | `timeout` | no | 30s | The timeout for waiting for the search api call to return. If no response is returned within this time, the search {{watcher-transform}} times out and fails. This setting overrides the default timeouts. | diff --git a/explore-analyze/alerts-cases/watcher/watch-cluster-status.md b/explore-analyze/alerts-cases/watcher/watch-cluster-status.md index 9a08061f6..461cf3bba 100644 --- a/explore-analyze/alerts-cases/watcher/watch-cluster-status.md +++ b/explore-analyze/alerts-cases/watcher/watch-cluster-status.md @@ -85,7 +85,7 @@ PUT _watcher/watch/cluster_health_watch It would be a good idea to create a user with the minimum privileges required for use with such a watch configuration. -Depending on how your cluster is configured, there may be additional settings required before the watch can access your cluster such as keystores, truststores, or certificates. For more information, see [{{watcher}} settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/notification-settings.html). +Depending on how your cluster is configured, there may be additional settings required before the watch can access your cluster such as keystores, truststores, or certificates. For more information, see [{{watcher}} settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/watcher-settings.md). If you check the watch history, you’ll see that the cluster status is recorded as part of the `watch_record` each time the watch executes. diff --git a/explore-analyze/alerts-cases/watcher/watcher-ui.md b/explore-analyze/alerts-cases/watcher/watcher-ui.md index a66d44011..815a2ab27 100644 --- a/explore-analyze/alerts-cases/watcher/watcher-ui.md +++ b/explore-analyze/alerts-cases/watcher/watcher-ui.md @@ -32,7 +32,7 @@ If you are creating a threshold watch, you must also have the `view_index_metada A threshold alert is one of the most common types of watches that you can create. This alert periodically checks when your data is above, below, equals, or is in between a certain threshold within a given time interval. -The following example walks you through creating a threshold alert. The alert is triggered when the maximum total CPU usage on a machine goes above a certain percentage. The example uses [Metricbeat](https://www.elastic.co/products/beats/metricbeat) to collect metrics from your systems and services. [Learn more](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-installation-configuration.html) on how to install and get started with Metricbeat. +The following example walks you through creating a threshold alert. The alert is triggered when the maximum total CPU usage on a machine goes above a certain percentage. The example uses [Metricbeat](https://www.elastic.co/products/beats/metricbeat) to collect metrics from your systems and services. [Learn more](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/metricbeat-installation-configuration.md) on how to install and get started with Metricbeat. ### Define the watch input and schedule [_define_the_watch_input_and_schedule] @@ -129,7 +129,7 @@ On the Watch overview page, click **Create** and choose **Create advanced watch* The **Simulate** tab allows you to override parts of the watch, and then run a simulation. Be aware of these implementation details on overrides: -* Trigger overrides use [date math](https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#date-math). +* Trigger overrides use [date math](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/common-options.md#date-math). * Input overrides accepts a JSON blob. * Condition overrides indicates if you want to force the condition to always be `true`. * Action overrides support [multiple options](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-watcher-execute-watch). diff --git a/explore-analyze/dashboards/create-dashboard-of-panels-with-ecommerce-data.md b/explore-analyze/dashboards/create-dashboard-of-panels-with-ecommerce-data.md index 5414ee1c9..496644b46 100644 --- a/explore-analyze/dashboards/create-dashboard-of-panels-with-ecommerce-data.md +++ b/explore-analyze/dashboards/create-dashboard-of-panels-with-ecommerce-data.md @@ -37,7 +37,7 @@ Open the visualization editor, then make sure the correct fields appear. ## Create visualizations with custom time intervals [custom-time-interval] -When you create visualizations with time series data, you can use the default time interval or increase and decrease the interval. For performance reasons, the visualization editor allows you to choose the minimum time interval, but not the exact time interval. The interval limit is controlled by the [`histogram:maxBars`](https://www.elastic.co/guide/en/kibana/current/advanced-options.html#histogram-maxbars) setting and [time range](../query-filter/filtering.md). +When you create visualizations with time series data, you can use the default time interval or increase and decrease the interval. For performance reasons, the visualization editor allows you to choose the minimum time interval, but not the exact time interval. The interval limit is controlled by the [`histogram:maxBars`](asciidocalypse://docs/kibana/docs/reference/advanced-settings.md#histogram-maxbars) setting and [time range](../query-filter/filtering.md). To analyze the data with a custom time interval, create a bar chart that shows you how many orders were made at your store every hour: diff --git a/explore-analyze/dashboards/create-dashboard-of-panels-with-web-server-data.md b/explore-analyze/dashboards/create-dashboard-of-panels-with-web-server-data.md index f4b7a0bf4..8b24ed6a3 100644 --- a/explore-analyze/dashboards/create-dashboard-of-panels-with-web-server-data.md +++ b/explore-analyze/dashboards/create-dashboard-of-panels-with-web-server-data.md @@ -118,7 +118,7 @@ To increase the minimum time interval: 1. In the layer pane, click **timestamp**. 2. Change the **Minimum interval** to **1d**, then click **Close**. - You can increase and decrease the minimum interval, but you are unable to decrease the interval below the configured [**Advanced Settings**](https://www.elastic.co/guide/en/kibana/current/advanced-options.html). + You can increase and decrease the minimum interval, but you are unable to decrease the interval below the configured [**Advanced Settings**](asciidocalypse://docs/kibana/docs/reference/advanced-settings.md). To save space on the dashboard, hide the axis labels. diff --git a/explore-analyze/dashboards/drilldowns.md b/explore-analyze/dashboards/drilldowns.md index b5d5c10ed..764cd1e3c 100644 --- a/explore-analyze/dashboards/drilldowns.md +++ b/explore-analyze/dashboards/drilldowns.md @@ -79,7 +79,7 @@ Create a drilldown that opens the **Detailed logs** dashboard from the **[Logs] ## Create URL drilldowns [create-url-drilldowns] -URL drilldowns enable you to navigate from a dashboard to external websites. Destination URLs can be dynamic, depending on the dashboard context or user interaction with a panel. To create URL drilldowns, you add [variables](https://www.elastic.co/guide/en/kibana/current/drilldowns.html) to a URL template, which configures the behavior of the drilldown. All panels that you create with the visualization editors support dashboard drilldowns. +URL drilldowns enable you to navigate from a dashboard to external websites. Destination URLs can be dynamic, depending on the dashboard context or user interaction with a panel. To create URL drilldowns, you add [variables](/explore-analyze/dashboards/drilldowns.md) to a URL template, which configures the behavior of the drilldown. All panels that you create with the visualization editors support dashboard drilldowns. ![Drilldown on pie chart that navigates to Github](../../images/kibana-dashboard_urlDrilldownGoToGitHub_8.3.gif "") diff --git a/explore-analyze/discover/discover-get-started.md b/explore-analyze/discover/discover-get-started.md index ebc0d803a..d141f8898 100644 --- a/explore-analyze/discover/discover-get-started.md +++ b/explore-analyze/discover/discover-get-started.md @@ -283,5 +283,5 @@ This section references common questions and issues encountered when using Disco This can happen in several cases: -* With runtime fields and regular keyword fields, when the string exceeds the value set for the [ignore_above](https://www.elastic.co/guide/en/elasticsearch/reference/current/ignore-above.html) setting used when indexing the data into {{es}}. +* With runtime fields and regular keyword fields, when the string exceeds the value set for the [ignore_above](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/ignore-above.md) setting used when indexing the data into {{es}}. * Due to the structure of nested fields, a leaf field added to the table as a column will not contain values in any of its cells. Instead, add the root field as a column to view a JSON representation of its values. Learn more in [this blog post](https://www.elastic.co/de/blog/discover-uses-fields-api-in-7-12). diff --git a/explore-analyze/discover/document-explorer.md b/explore-analyze/discover/document-explorer.md index b12de18da..4da403fd9 100644 --- a/explore-analyze/discover/document-explorer.md +++ b/explore-analyze/discover/document-explorer.md @@ -53,7 +53,7 @@ You can define different settings for the header row and body rows. ### Limit the sample size [document-explorer-sample-size] -When the number of results returned by your search query (displayed at the top of the **Documents** or **Results** tab) is greater than the value of [`discover:sampleSize`](https://www.elastic.co/guide/en/kibana/current/advanced-options.html#kibana-discover-settings), the number of results displayed in the table is limited to the configured value by default. You can adjust the initial sample size for searches to any number between 10 and `discover:sampleSize` from the **Display options** located in the table toolbar. +When the number of results returned by your search query (displayed at the top of the **Documents** or **Results** tab) is greater than the value of [`discover:sampleSize`](asciidocalypse://docs/kibana/docs/reference/advanced-settings.md#kibana-discover-settings), the number of results displayed in the table is limited to the configured value by default. You can adjust the initial sample size for searches to any number between 10 and `discover:sampleSize` from the **Display options** located in the table toolbar. On the last page of the table, a message indicates that you’ve reached the end of the loaded search results. From that message, you can choose to load more results to continue exploring. diff --git a/explore-analyze/discover/search-sessions.md b/explore-analyze/discover/search-sessions.md index 2c398f727..3b84bc19d 100644 --- a/explore-analyze/discover/search-sessions.md +++ b/explore-analyze/discover/search-sessions.md @@ -17,7 +17,7 @@ Search Sessions are deprecated and will be removed in a future version. Sometimes you might need to search through large amounts of data, no matter how long the search takes. Consider a threat hunting scenario, where you need to search through years of data. You can save a long-running search, so {{kib}} processes your request in the background, and you can continue your work. -Save your search session from **Discover** or **Dashboard**, and when your session is complete, view and manage it in **Stack Management**. Search sessions are [enabled by default](https://www.elastic.co/guide/en/kibana/current/search-session-settings-kb.html). +Save your search session from **Discover** or **Dashboard**, and when your session is complete, view and manage it in **Stack Management**. Search sessions are [enabled by default](asciidocalypse://docs/kibana/docs/reference/configuration-reference/search-sessions-settings.md). :::{image} ../../images/kibana-search-session.png :alt: Search Session indicator displaying the current state of the search diff --git a/explore-analyze/find-and-organize/data-views.md b/explore-analyze/find-and-organize/data-views.md index 32ba3c8a2..abffb0116 100644 --- a/explore-analyze/find-and-organize/data-views.md +++ b/explore-analyze/find-and-organize/data-views.md @@ -476,7 +476,7 @@ Built-in validation is unsupported for scripted fields. When your scripts contai 5. Select **Set format**, then enter the **Format** for the field. ::::{note} -For numeric fields the default field formatters are based on the `meta.unit` field. The unit is associated with a [time unit](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#time-units), percent, or byte. The convention for percents is to use value 1 to mean 100%. +For numeric fields the default field formatters are based on the `meta.unit` field. The unit is associated with a [time unit](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#time-units), percent, or byte. The convention for percents is to use value 1 to mean 100%. :::: @@ -613,7 +613,7 @@ Numeric fields support **Bytes**, **Color**, **Duration**, **Histogram**, **Numb The **Bytes**, **Number**, and **Percentage** formatters enable you to choose the display formats of numbers in the field using the [Elastic numeral pattern](../../explore-analyze/numeral-formatting.md) syntax that {{kib}} maintains. -The **Histogram** formatter is used only for the [histogram field type](https://www.elastic.co/guide/en/elasticsearch/reference/current/histogram.html). When you use the **Histogram** formatter, you can apply the **Bytes**, **Number**, or **Percentage** format to aggregated data. +The **Histogram** formatter is used only for the [histogram field type](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/histogram.md). When you use the **Histogram** formatter, you can apply the **Bytes**, **Number**, or **Percentage** format to aggregated data. You can specify the following types to the `Url` field formatter: diff --git a/explore-analyze/find-and-organize/saved-objects.md b/explore-analyze/find-and-organize/saved-objects.md index 46fec69ed..510d883ea 100644 --- a/explore-analyze/find-and-organize/saved-objects.md +++ b/explore-analyze/find-and-organize/saved-objects.md @@ -149,7 +149,7 @@ After you upgrade, or if you set up a new {{kib}} instance using version 8.x or #### Accessing saved objects using old URLs [saved-object-ids-impact-when-using-legacy-urls] -When you upgrade {{kib}} and saved object IDs change, the "deep link" URLs to access those saved objects will also change. To reduce the impact, each existing URL is preserved with a special [legacy URL alias](https://www.elastic.co/guide/en/kibana/current/legacy-url-aliases.html). This means that if you use a bookmark for a saved object ID that was changed, you’ll be redirected to the new URL for that saved object. +When you upgrade {{kib}} and saved object IDs change, the "deep link" URLs to access those saved objects will also change. To reduce the impact, each existing URL is preserved with a special [legacy URL alias](asciidocalypse://docs/kibana/docs/extend/contribute-to-kibana/legacy-url-aliases.md). This means that if you use a bookmark for a saved object ID that was changed, you’ll be redirected to the new URL for that saved object. #### Importing and copying saved objects [saved-object-ids-impact-when-using-import-and-copy] diff --git a/explore-analyze/geospatial-analysis.md b/explore-analyze/geospatial-analysis.md index 8c4bfbc74..f7aa5985f 100644 --- a/explore-analyze/geospatial-analysis.md +++ b/explore-analyze/geospatial-analysis.md @@ -15,7 +15,7 @@ Not sure where to get started with {{es}} and geo? Then, you have come to the ri ## Geospatial mapping [geospatial-mapping] -{{es}} supports two types of geo data: [geo_point](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html) fields which support lat/lon pairs, and [geo_shape](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-shape.html) fields, which support points, lines, circles, polygons, multi-polygons, and so on. Use [explicit mapping](../manage-data/data-store/mapping/explicit-mapping.md) to index geo data fields. +{{es}} supports two types of geo data: [geo_point](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-point.md) fields which support lat/lon pairs, and [geo_shape](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-shape.md) fields, which support points, lines, circles, polygons, multi-polygons, and so on. Use [explicit mapping](../manage-data/data-store/mapping/explicit-mapping.md) to index geo data fields. Have an index with lat/lon pairs but no geo_point mapping? Use [runtime fields](../manage-data/data-store/mapping/map-runtime-field.md) to make a geo_point field without reindexing. @@ -24,46 +24,46 @@ Have an index with lat/lon pairs but no geo_point mapping? Use [runtime fields]( Data is often messy and incomplete. [Ingest pipelines](../manage-data/ingest/transform-enrich/ingest-pipelines.md) lets you clean, transform, and augment your data before indexing. -* Use [CSV](https://www.elastic.co/guide/en/elasticsearch/reference/current/csv-processor.html) together with [explicit mapping](../manage-data/data-store/mapping/explicit-mapping.md) to index CSV files with geo data. Kibana’s [Import CSV](visualize/maps/import-geospatial-data.md) feature can help with this. -* Use [GeoIP](https://www.elastic.co/guide/en/elasticsearch/reference/current/geoip-processor.html) to add geographical location of an IPv4 or IPv6 address. -* Use [geo-grid processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest-geo-grid-processor.html) to convert grid tiles or hexagonal cell ids to bounding boxes or polygons which describe their shape. +* Use [CSV](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/csv-processor.md) together with [explicit mapping](../manage-data/data-store/mapping/explicit-mapping.md) to index CSV files with geo data. Kibana’s [Import CSV](visualize/maps/import-geospatial-data.md) feature can help with this. +* Use [GeoIP](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/geoip-processor.md) to add geographical location of an IPv4 or IPv6 address. +* Use [geo-grid processor](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/ingest-geo-grid-processor.md) to convert grid tiles or hexagonal cell ids to bounding boxes or polygons which describe their shape. * Use [geo_match enrich policy](../manage-data/ingest/transform-enrich/example-enrich-data-based-on-geolocation.md) for reverse geocoding. For example, use [reverse geocoding](visualize/maps/reverse-geocoding-tutorial.md) to visualize metropolitan areas by web traffic. ## Query [geospatial-query] -[Geo queries](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-queries.html) answer location-driven questions. Find documents that intersect with, are within, are contained by, or do not intersect your query geometry. Combine geospatial queries with full text search queries for unparalleled searching experience. For example, "Show me all subscribers that live within 5 miles of our new gym location, that joined in the last year and have running mentioned in their profile". +[Geo queries](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/geo-queries.md) answer location-driven questions. Find documents that intersect with, are within, are contained by, or do not intersect your query geometry. Combine geospatial queries with full text search queries for unparalleled searching experience. For example, "Show me all subscribers that live within 5 miles of our new gym location, that joined in the last year and have running mentioned in their profile". ## ES|QL [esql-query] -[ES|QL](query-filter/languages/esql.md) has support for [Geospatial Search](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-functions-operators.html#esql-spatial-functions) functions, enabling efficient index searching for documents that intersect with, are within, are contained by, or are disjoint from a query geometry. In addition, the `ST_DISTANCE` function calculates the distance between two points. +[ES|QL](query-filter/languages/esql.md) has support for [Geospatial Search](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-functions-operators.md#esql-spatial-functions) functions, enabling efficient index searching for documents that intersect with, are within, are contained by, or are disjoint from a query geometry. In addition, the `ST_DISTANCE` function calculates the distance between two points. -* [`ST_INTERSECTS`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-functions-operators.html#esql-st_intersects) -* [`ST_DISJOINT`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-functions-operators.html#esql-st_disjoint) -* [`ST_CONTAINS`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-functions-operators.html#esql-st_contains) -* [`ST_WITHIN`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-functions-operators.html#esql-st_within) -* [`ST_DISTANCE`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-functions-operators.html#esql-st_distance) +* [`ST_INTERSECTS`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-functions-operators.md#esql-st_intersects) +* [`ST_DISJOINT`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-functions-operators.md#esql-st_disjoint) +* [`ST_CONTAINS`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-functions-operators.md#esql-st_contains) +* [`ST_WITHIN`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-functions-operators.md#esql-st_within) +* [`ST_DISTANCE`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-functions-operators.md#esql-st_distance) ## Aggregate [geospatial-aggregate] -[Aggregations](query-filter/aggregations.md) summarizes your data as metrics, statistics, or other analytics. Use [bucket aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket.html) to group documents into buckets, also called bins, based on field values, ranges, or other criteria. Then, use [metric aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics.html) to calculate metrics, such as a sum or average, from field values in each bucket. Compare metrics across buckets to gain insights from your data. +[Aggregations](query-filter/aggregations.md) summarizes your data as metrics, statistics, or other analytics. Use [bucket aggregations](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/bucket.md) to group documents into buckets, also called bins, based on field values, ranges, or other criteria. Then, use [metric aggregations](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/metrics.md) to calculate metrics, such as a sum or average, from field values in each bucket. Compare metrics across buckets to gain insights from your data. Geospatial bucket aggregations: -* [Geo-distance aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geodistance-aggregation.html) evaluates the distance of each geo_point location from an origin point and determines the buckets it belongs to based on the ranges (a document belongs to a bucket if the distance between the document and the origin falls within the distance range of the bucket). -* [Geohash grid aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geohashgrid-aggregation.html) groups geo_point and geo_shape values into buckets that represent a grid. -* [Geohex grid aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geohexgrid-aggregation.html) groups geo_point and geo_shape values into buckets that represent an H3 hexagonal cell. -* [Geotile grid aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geotilegrid-aggregation.html) groups geo_point and geo_shape values into buckets that represent a grid. Each cell corresponds to a [map tile](https://en.wikipedia.org/wiki/Tiled_web_map) as used by many online map sites. +* [Geo-distance aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-geodistance-aggregation.md) evaluates the distance of each geo_point location from an origin point and determines the buckets it belongs to based on the ranges (a document belongs to a bucket if the distance between the document and the origin falls within the distance range of the bucket). +* [Geohash grid aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-geohashgrid-aggregation.md) groups geo_point and geo_shape values into buckets that represent a grid. +* [Geohex grid aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-geohexgrid-aggregation.md) groups geo_point and geo_shape values into buckets that represent an H3 hexagonal cell. +* [Geotile grid aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-geotilegrid-aggregation.md) groups geo_point and geo_shape values into buckets that represent a grid. Each cell corresponds to a [map tile](https://en.wikipedia.org/wiki/Tiled_web_map) as used by many online map sites. Geospatial metric aggregations: -* [Geo-bounds aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-geobounds-aggregation.html) computes the geographic bounding box containing all values for a Geopoint or Geoshape field. -* [Geo-centroid aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-geocentroid-aggregation.html) computes the weighted centroid from all coordinate values for geo fields. -* [Geo-line aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-geo-line.html) aggregates all geo_point values within a bucket into a LineString ordered by the chosen sort field. Use geo_line aggregation to create [vehicle tracks](visualize/maps/asset-tracking-tutorial.md). +* [Geo-bounds aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-geobounds-aggregation.md) computes the geographic bounding box containing all values for a Geopoint or Geoshape field. +* [Geo-centroid aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-geocentroid-aggregation.md) computes the weighted centroid from all coordinate values for geo fields. +* [Geo-line aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-geo-line.md) aggregates all geo_point values within a bucket into a LineString ordered by the chosen sort field. Use geo_line aggregation to create [vehicle tracks](visualize/maps/asset-tracking-tutorial.md). -Combine aggregations to perform complex geospatial analysis. For example, to calculate the most recent GPS tracks per flight, use a [terms aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html) to group documents into buckets per aircraft. Then use geo-line aggregation to compute a track for each aircraft. In another example, use geotile grid aggregation to group documents into a grid. Then use geo-centroid aggregation to find the weighted centroid of each grid cell. +Combine aggregations to perform complex geospatial analysis. For example, to calculate the most recent GPS tracks per flight, use a [terms aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-terms-aggregation.md) to group documents into buckets per aircraft. Then use geo-line aggregation to compute a track for each aircraft. In another example, use geotile grid aggregation to group documents into a grid. Then use geo-centroid aggregation to find the weighted centroid of each grid cell. ## Integrate [geospatial-integrate] diff --git a/explore-analyze/machine-learning/anomaly-detection/anomaly-detection-scale.md b/explore-analyze/machine-learning/anomaly-detection/anomaly-detection-scale.md index 1dcdbda6d..942454ff3 100644 --- a/explore-analyze/machine-learning/anomaly-detection/anomaly-detection-scale.md +++ b/explore-analyze/machine-learning/anomaly-detection/anomaly-detection-scale.md @@ -114,7 +114,7 @@ When working with large model sizes, consider how frequently you want to create Also consider how long you wish to retain snapshots using `model_snapshot_retention_days` and `daily_model_snapshot_retention_after_days`. Retaining fewer snapshots substantially reduces index storage requirements for model state, but also reduces the granularity of model snapshots from which you can revert. -For more information, refer to [Model snapshots](https://www.elastic.co/guide/en/machine-learning/current/ml-ad-run-jobs.html#ml-ad-model-snapshots). +For more information, refer to [Model snapshots](/explore-analyze/machine-learning/anomaly-detection/ml-ad-run-jobs.md#ml-ad-model-snapshots). ## 12. Optimize your search queries [search-queries] diff --git a/explore-analyze/machine-learning/anomaly-detection/geographic-anomalies.md b/explore-analyze/machine-learning/anomaly-detection/geographic-anomalies.md index 68ca2bd8d..e116e930c 100644 --- a/explore-analyze/machine-learning/anomaly-detection/geographic-anomalies.md +++ b/explore-analyze/machine-learning/anomaly-detection/geographic-anomalies.md @@ -15,9 +15,9 @@ If your data includes geographic fields, you can use {{ml-features}} to detect a To run this type of {{anomaly-job}}, you must have [{{ml-features}} set up](../setting-up-machine-learning.md). You must also have time series data that contains spatial data types. In particular, you must have: * two comma-separated numbers of the form `latitude,longitude`, -* a [`geo_point`](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html) field, -* a [`geo_shape`](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-shape.html) field that contains point values, or -* a [`geo_centroid`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-geocentroid-aggregation.html) aggregation +* a [`geo_point`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-point.md) field, +* a [`geo_shape`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-shape.md) field that contains point values, or +* a [`geo_centroid`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-geocentroid-aggregation.md) aggregation The latitude and longitude must be in the range -180 to 180 and represent a point on the surface of the Earth. @@ -37,9 +37,9 @@ To get the best results from {{ml}} analytics, you must understand your data. Yo There are a few limitations to consider before you create this type of job: 1. You cannot create forecasts for {{anomaly-jobs}} that contain geographic functions. -2. You cannot add [custom rules with conditions](https://www.elastic.co/guide/en/machine-learning/current/ml-ad-run-jobs.html#ml-ad-rules) to detectors that use geographic functions. +2. You cannot add [custom rules with conditions](/explore-analyze/machine-learning/anomaly-detection/ml-ad-run-jobs.md#ml-ad-rules) to detectors that use geographic functions. -If those limitations are acceptable, try creating an {{anomaly-job}} that uses the [`lat_long` function](https://www.elastic.co/guide/en/machine-learning/current/ml-geo-functions.html#ml-lat-long) to analyze your own data or the sample data sets. +If those limitations are acceptable, try creating an {{anomaly-job}} that uses the [`lat_long` function](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-geo-functions.md#ml-lat-long) to analyze your own data or the sample data sets. To create an {{anomaly-job}} that uses the `lat_long` function, in {{kib}} you must click **Create job** on the **{{ml-cap}} > {{anomaly-detect-cap}} > Jobs** page and select the advanced job wizard. Alternatively, use the [create {{anomaly-jobs}} API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ml-put-job). @@ -204,7 +204,7 @@ You can also view the anomaly in **Maps** by clicking **View in Maps** in the ac When you try this type of {{anomaly-job}} with your own data, it might take some experimentation to find the best combination of buckets, detectors, and influencers to detect the type of behavior you’re seeking. -For more information about {{anomaly-detect}} concepts, see [Concepts](https://www.elastic.co/guide/en/machine-learning/current/ml-ad-overview.html). For the full list of functions that you can use in {{anomaly-jobs}}, see [*Function reference*](ml-functions.md). For more {{anomaly-detect}} examples, see [Examples](https://www.elastic.co/guide/en/machine-learning/current/anomaly-how-tos.html). +For more information about {{anomaly-detect}} concepts, see [Concepts](/explore-analyze/machine-learning/anomaly-detection.md). For the full list of functions that you can use in {{anomaly-jobs}}, see [*Function reference*](ml-functions.md). For more {{anomaly-detect}} examples, see [Examples](/explore-analyze/machine-learning/anomaly-detection/anomaly-how-tos.md). ## Add anomaly layers to your maps [geographic-anomalies-map-layer] diff --git a/explore-analyze/machine-learning/anomaly-detection/ml-ad-run-jobs.md b/explore-analyze/machine-learning/anomaly-detection/ml-ad-run-jobs.md index b4dd2e507..56eef99fd 100644 --- a/explore-analyze/machine-learning/anomaly-detection/ml-ad-run-jobs.md +++ b/explore-analyze/machine-learning/anomaly-detection/ml-ad-run-jobs.md @@ -45,7 +45,7 @@ The {{ml-features}} use the concept of a *bucket* to divide the time series into The *bucket span* is part of the configuration information for an {{anomaly-job}}. It defines the time interval that is used to summarize and model the data. This is typically between 5 minutes to 1 hour and it depends on your data characteristics. When you set the bucket span, take into account the granularity at which you want to analyze, the frequency of the input data, the typical duration of the anomalies, and the frequency at which alerting is required. -The bucket span must contain a valid [time interval](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#time-units). When you create an {{anomaly-job}} in {{kib}}, you can choose to estimate a bucket span value based on your data characteristics. If you choose a value that is larger than one day or is significantly different than the estimated value, you receive an informational message. +The bucket span must contain a valid [time interval](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#time-units). When you create an {{anomaly-job}} in {{kib}}, you can choose to estimate a bucket span value based on your data characteristics. If you choose a value that is larger than one day or is significantly different than the estimated value, you receive an informational message. ### Detectors [ml-ad-detectors] @@ -118,7 +118,7 @@ For each {{anomaly-job}}, you can optionally specify a dedicated index to store If you create {{anomaly-jobs}} in {{kib}}, you *must* use {{dfeeds}} to retrieve data from {{es}} for analysis. When you create an {{anomaly-job}}, you select a {{data-source}} and {{kib}} configures the {{dfeed}} for you under the covers. -You can associate only one {{dfeed}} with each {{anomaly-job}}. The {{dfeed}} contains a query that runs at a defined interval (`frequency`). By default, this interval is calculated relative to the [bucket span](https://www.elastic.co/guide/en/machine-learning/current/ml-ad-run-jobs.html#ml-ad-create-job) of the {{anomaly-job}}. If you are concerned about delayed data, you can add a delay before the query runs at each interval. See [Handling delayed data](ml-delayed-data-detection.md). +You can associate only one {{dfeed}} with each {{anomaly-job}}. The {{dfeed}} contains a query that runs at a defined interval (`frequency`). By default, this interval is calculated relative to the [bucket span](/explore-analyze/machine-learning/anomaly-detection/ml-ad-run-jobs.md#ml-ad-create-job) of the {{anomaly-job}}. If you are concerned about delayed data, you can add a delay before the query runs at each interval. See [Handling delayed data](ml-delayed-data-detection.md). {{dfeeds-cap}} can also aggregate data before sending it to the {{anomaly-job}}. There are some limitations, however, and aggregations should generally be used only for low cardinality data. See [Aggregating data for faster performance](ml-configuring-aggregation.md). @@ -159,7 +159,7 @@ If you want to add multiple scheduled events at once, you can import an iCalenda * You must identify scheduled events before your {{anomaly-job}} analyzes the data for that time period. Machine learning results are not updated retroactively. * If your iCalendar file contains recurring events, only the first occurrence is imported. -* [Bucket results](https://www.elastic.co/guide/en/machine-learning/current/ml-ad-view-results.html#ml-ad-bucket-results) are generated during scheduled events but they have an anomaly score of zero. +* [Bucket results](/explore-analyze/machine-learning/anomaly-detection/ml-ad-view-results.md#ml-ad-bucket-results) are generated during scheduled events but they have an anomaly score of zero. * If you use long or frequent scheduled events, it might take longer for the {{ml}} analytics to learn to model your data and some anomalous behavior might be missed. :::: @@ -194,7 +194,7 @@ You can see the list of model snapshots for each job with the [get model snapsho ::: ::::{tip} -There are situations other than system failures where you might want to [revert](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ml-revert-model-snapshot) to using a specific model snapshot. The {{ml-features}} react quickly to anomalous input and new behaviors in data. Highly anomalous input increases the variance in the models and {{ml}} analytics must determine whether it is a new step-change in behavior or a one-off event. In the case where you know this anomalous input is a one-off, it might be appropriate to reset the model state to a time before this event. For example, after a Black Friday sales day you might consider reverting to a saved snapshot. If you know about such events in advance, however, you can use [calendars and scheduled events](https://www.elastic.co/guide/en/machine-learning/current/ml-ad-run-jobs.html#ml-ad-calendars) to avoid impacting your model. +There are situations other than system failures where you might want to [revert](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ml-revert-model-snapshot) to using a specific model snapshot. The {{ml-features}} react quickly to anomalous input and new behaviors in data. Highly anomalous input increases the variance in the models and {{ml}} analytics must determine whether it is a new step-change in behavior or a one-off event. In the case where you know this anomalous input is a one-off, it might be appropriate to reset the model state to a time before this event. For example, after a Black Friday sales day you might consider reverting to a saved snapshot. If you know about such events in advance, however, you can use [calendars and scheduled events](/explore-analyze/machine-learning/anomaly-detection/ml-ad-run-jobs.md#ml-ad-calendars) to avoid impacting your model. :::: ## Close the job [ml-ad-close-job] diff --git a/explore-analyze/machine-learning/anomaly-detection/ml-ad-troubleshooting.md b/explore-analyze/machine-learning/anomaly-detection/ml-ad-troubleshooting.md index 68b85088a..3ea661f26 100644 --- a/explore-analyze/machine-learning/anomaly-detection/ml-ad-troubleshooting.md +++ b/explore-analyze/machine-learning/anomaly-detection/ml-ad-troubleshooting.md @@ -45,7 +45,7 @@ Further papers cited in the C++ code: ## What are the input features used by the model? [faq-features] -All input features are specified by the user, for example, using [diverse statistical functions](https://www.elastic.co/guide/en/machine-learning/current/ml-functions.html) like count or mean over the data of interest. +All input features are specified by the user, for example, using [diverse statistical functions](/explore-analyze/machine-learning/anomaly-detection/ml-functions.md) like count or mean over the data of interest. ## Does the data used by the model only include customers' data? [faq-data] diff --git a/explore-analyze/machine-learning/anomaly-detection/ml-configuring-aggregation.md b/explore-analyze/machine-learning/anomaly-detection/ml-configuring-aggregation.md index 7610aaa8b..e4f620782 100644 --- a/explore-analyze/machine-learning/anomaly-detection/ml-configuring-aggregation.md +++ b/explore-analyze/machine-learning/anomaly-detection/ml-configuring-aggregation.md @@ -34,13 +34,13 @@ There are a number of requirements for using aggregations in {{dfeeds}}. * If your [{{dfeed}} uses aggregations with nested `terms` aggs](#aggs-dfeeds) and model plot is not enabled for the {{anomaly-job}}, neither the **Single Metric Viewer** nor the **Anomaly Explorer** can plot and display an anomaly chart. In these cases, an explanatory message is shown instead of the chart. * Your {{dfeed}} can contain multiple aggregations, but only the ones with names that match values in the job configuration are fed to the job. -* Using [scripted metric](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-scripted-metric-aggregation.html) aggregations is not supported in {{dfeeds}}. +* Using [scripted metric](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-scripted-metric-aggregation.md) aggregations is not supported in {{dfeeds}}. ## Recommendations [aggs-recommendations-dfeeds] -* When your detectors use [metric](https://www.elastic.co/guide/en/machine-learning/current/ml-metric-functions.html) or [sum](https://www.elastic.co/guide/en/machine-learning/current/ml-sum-functions.html) analytical functions, it’s recommended to set the `date_histogram` or `composite` aggregation interval to a tenth of the bucket span. This creates finer, more granular time buckets, which are ideal for this type of analysis. -* When your detectors use [count](https://www.elastic.co/guide/en/machine-learning/current/ml-count-functions.html) or [rare](https://www.elastic.co/guide/en/machine-learning/current/ml-rare-functions.html) functions, set the interval to the same value as the bucket span. -* If you have multiple influencers or partition fields or if your field cardinality is more than 1000, use [composite aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-composite-aggregation.html). +* When your detectors use [metric](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-metric-functions.md) or [sum](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-sum-functions.md) analytical functions, it’s recommended to set the `date_histogram` or `composite` aggregation interval to a tenth of the bucket span. This creates finer, more granular time buckets, which are ideal for this type of analysis. +* When your detectors use [count](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-count-functions.md) or [rare](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-rare-functions.md) functions, set the interval to the same value as the bucket span. +* If you have multiple influencers or partition fields or if your field cardinality is more than 1000, use [composite aggregations](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-composite-aggregation.md). To determine the cardinality of your data, you can run searches such as: @@ -254,10 +254,10 @@ Use the following format to define a composite aggregation in your {{dfeed}}: You can also use complex nested aggregations in {{dfeeds}}. -The next example uses the [`derivative` pipeline aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-derivative-aggregation.html) to find the first order derivative of the counter `system.network.out.bytes` for each value of the field `beat.name`. +The next example uses the [`derivative` pipeline aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-pipeline-derivative-aggregation.md) to find the first order derivative of the counter `system.network.out.bytes` for each value of the field `beat.name`. ::::{note} -`derivative` or other pipeline aggregations may not work within `composite` aggregations. See [composite aggregations and pipeline aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-composite-aggregation.html#search-aggregations-bucket-composite-aggregation-pipeline-aggregations). +`derivative` or other pipeline aggregations may not work within `composite` aggregations. See [composite aggregations and pipeline aggregations](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-composite-aggregation.md#search-aggregations-bucket-composite-aggregation-pipeline-aggregations). :::: ```js @@ -346,7 +346,7 @@ You can also use single bucket aggregations in {{dfeeds}}. The following example It is not currently possible to use `aggregate_metric_double` type fields in {{dfeeds}} without aggregations. :::: -You can use fields with the [`aggregate_metric_double`](https://www.elastic.co/guide/en/elasticsearch/reference/current/aggregate-metric-double.html) field type in a {{dfeed}} with aggregations. It is required to retrieve the `value_count` of the `aggregate_metric_double` filed in an aggregation and then use it as the `summary_count_field_name` to provide the correct count that represents the aggregation value. +You can use fields with the [`aggregate_metric_double`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/aggregate-metric-double.md) field type in a {{dfeed}} with aggregations. It is required to retrieve the `value_count` of the `aggregate_metric_double` filed in an aggregation and then use it as the `summary_count_field_name` to provide the correct count that represents the aggregation value. In the following example, `presum` is an `aggregate_metric_double` type field that has all the possible metrics: `[ min, max, sum, value_count ]`. To use an `avg` aggregation on this field, you need to perform a `value_count` aggregation on `presum` and then set the field that contains the aggregated values `my_count` as the `summary_count_field_name`: diff --git a/explore-analyze/machine-learning/anomaly-detection/ml-configuring-categories.md b/explore-analyze/machine-learning/anomaly-detection/ml-configuring-categories.md index cb39632fb..13bbad017 100644 --- a/explore-analyze/machine-learning/anomaly-detection/ml-configuring-categories.md +++ b/explore-analyze/machine-learning/anomaly-detection/ml-configuring-categories.md @@ -8,7 +8,7 @@ mapped_pages: # Detecting anomalous categories of data [ml-configuring-categories] -Categorization is a {{ml}} process that tokenizes a text field, clusters similar data together, and classifies it into categories. It works best on machine-written messages and application output that typically consist of repeated elements. [Categorization jobs](ml-anomaly-detection-job-types.md#categorization-jobs) enable you to find anomalous behavior in your categorized data. Categorization is not natural language processing (NLP). When you create a categorization {{anomaly-job}}, the {{ml}} model learns what volume and pattern is normal for each category over time. You can then detect anomalies and surface rare events or unusual types of messages by using [count](https://www.elastic.co/guide/en/machine-learning/current/ml-count-functions.html) or [rare](https://www.elastic.co/guide/en/machine-learning/current/ml-rare-functions.html) functions. Categorization works well on finite set of possible messages, for example: +Categorization is a {{ml}} process that tokenizes a text field, clusters similar data together, and classifies it into categories. It works best on machine-written messages and application output that typically consist of repeated elements. [Categorization jobs](ml-anomaly-detection-job-types.md#categorization-jobs) enable you to find anomalous behavior in your categorized data. Categorization is not natural language processing (NLP). When you create a categorization {{anomaly-job}}, the {{ml}} model learns what volume and pattern is normal for each category over time. You can then detect anomalies and surface rare events or unusual types of messages by using [count](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-count-functions.md) or [rare](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-rare-functions.md) functions. Categorization works well on finite set of possible messages, for example: ```js {"@timestamp":1549596476000, @@ -84,7 +84,7 @@ Another advanced option is the `categorization_filters` property, which can cont ## Per-partition categorization [ml-per-partition-categorization] -If you enable per-partition categorization, categories are determined independently for each partition. For example, if your data includes messages from multiple types of logs from different applications, you can use a field like the ECS [`event.dataset` field](https://www.elastic.co/guide/en/ecs/current/ecs-event.html) as the `partition_field_name` and categorize the messages for each type of log separately. +If you enable per-partition categorization, categories are determined independently for each partition. For example, if your data includes messages from multiple types of logs from different applications, you can use a field like the ECS [`event.dataset` field](asciidocalypse://docs/ecs/docs/reference/ecs/ecs-event.md) as the `partition_field_name` and categorize the messages for each type of log separately. If your job has multiple detectors, every detector that uses the `mlcategory` keyword must also define a `partition_field_name`. You must use the same `partition_field_name` value in all of these detectors. Otherwise, when you create or update a job and enable per-partition categorization, it fails. @@ -101,7 +101,7 @@ If you use the categorization wizard in {{kib}}, you can see which categorizatio :class: screenshot ::: -The categorization analyzer can refer to a built-in {{es}} analyzer or a combination of zero or more character filters, a tokenizer, and zero or more token filters. In this example, adding a [`pattern_replace` character filter](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-pattern-replace-charfilter.html) achieves the same behavior as the `categorization_filters` job configuration option described earlier. For more details about these properties, refer to the [`categorization_analyzer` API object](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ml-put-job#ml-put-job-request-body). +The categorization analyzer can refer to a built-in {{es}} analyzer or a combination of zero or more character filters, a tokenizer, and zero or more token filters. In this example, adding a [`pattern_replace` character filter](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-pattern-replace-charfilter.md) achieves the same behavior as the `categorization_filters` job configuration option described earlier. For more details about these properties, refer to the [`categorization_analyzer` API object](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ml-put-job#ml-put-job-request-body). If you use the default categorization analyzer in {{kib}} or omit the `categorization_analyzer` property from the API, the following default values are used: @@ -137,7 +137,7 @@ POST _ml/anomaly_detectors/_validate If you specify any part of the `categorization_analyzer`, however, any omitted sub-properties are *not* set to default values. -The `ml_standard` tokenizer and the day and month stopword filter are almost equivalent to the following analyzer, which is defined using only built-in {{es}} [tokenizers](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenizers.html) and [token filters](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenfilters.html): +The `ml_standard` tokenizer and the day and month stopword filter are almost equivalent to the following analyzer, which is defined using only built-in {{es}} [tokenizers](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/tokenizer-reference.md) and [token filters](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/token-filter-reference.md): ```console PUT _ml/anomaly_detectors/it_ops_new_logs diff --git a/explore-analyze/machine-learning/anomaly-detection/ml-configuring-populations.md b/explore-analyze/machine-learning/anomaly-detection/ml-configuring-populations.md index 30144f14a..5fb1740d6 100644 --- a/explore-analyze/machine-learning/anomaly-detection/ml-configuring-populations.md +++ b/explore-analyze/machine-learning/anomaly-detection/ml-configuring-populations.md @@ -22,7 +22,7 @@ Population analysis is resource-efficient and scales well, enabling the analysis ## Creating population jobs [creating-population-jobs] -1. In {{kib}}, navigate to **Jobs**. To open **Jobs**, find **{{ml-app}} > Anomaly Detection** in the main menu, or use the [global search field](https://www.elastic.co/guide/en/kibana/current/kibana-concepts-analysts.html#_finding_your_apps_and_objects). +1. In {{kib}}, navigate to **Jobs**. To open **Jobs**, find **{{ml-app}} > Anomaly Detection** in the main menu, or use the [global search field](/explore-analyze/query-filter/filtering.md#_finding_your_apps_and_objects). 2. Click **Create job**, select the {{data-source}} you want to analyze. 3. Select the **Population** wizard from the list. 4. Choose a population field - it’s the `clientip` field in this example - and the metric you want to use for the analysis - `Mean(bytes)` in this example. diff --git a/explore-analyze/machine-learning/anomaly-detection/ml-configuring-transform.md b/explore-analyze/machine-learning/anomaly-detection/ml-configuring-transform.md index fa28dfcc9..6545a1014 100644 --- a/explore-analyze/machine-learning/anomaly-detection/ml-configuring-transform.md +++ b/explore-analyze/machine-learning/anomaly-detection/ml-configuring-transform.md @@ -74,7 +74,7 @@ PUT /my-index-000001/_doc/1 } ``` -1. In this example, string fields are mapped as `keyword` fields to support aggregation. If you want both a full text (`text`) and a keyword (`keyword`) version of the same field, use multi-fields. For more information, see [fields](https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html). +1. In this example, string fields are mapped as `keyword` fields to support aggregation. If you want both a full text (`text`) and a keyword (`keyword`) version of the same field, use multi-fields. For more information, see [fields](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/multi-fields.md). $$$ml-configuring-transform1$$$ @@ -380,7 +380,7 @@ PUT _ml/anomaly_detectors/test3 GET _ml/datafeeds/datafeed-test3/_preview ``` -In {{es}}, location data can be stored in `geo_point` fields but this data type is not supported natively in {{ml}} analytics. This example of a runtime field transforms the data into an appropriate format. For more information, see [Geographic functions](https://www.elastic.co/guide/en/machine-learning/current/ml-geo-functions.html). +In {{es}}, location data can be stored in `geo_point` fields but this data type is not supported natively in {{ml}} analytics. This example of a runtime field transforms the data into an appropriate format. For more information, see [Geographic functions](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-geo-functions.md). The preview {{dfeed}} API returns the following results, which show that `41.44` and `90.5` have been combined into "41.44,90.5": diff --git a/explore-analyze/machine-learning/anomaly-detection/ml-functions.md b/explore-analyze/machine-learning/anomaly-detection/ml-functions.md index bf3aad97d..f3f83f130 100644 --- a/explore-analyze/machine-learning/anomaly-detection/ml-functions.md +++ b/explore-analyze/machine-learning/anomaly-detection/ml-functions.md @@ -18,10 +18,10 @@ You can specify a `summary_count_field_name` with any function except `metric`. If your data is sparse, there may be gaps in the data which means you might have empty buckets. You might want to treat these as anomalies or you might want these gaps to be ignored. Your decision depends on your use case and what is important to you. It also depends on which functions you use. The `sum` and `count` functions are strongly affected by empty buckets. For this reason, there are `non_null_sum` and `non_zero_count` functions, which are tolerant to sparse data. These functions effectively ignore empty buckets. -* [Count functions](https://www.elastic.co/guide/en/machine-learning/current/ml-count-functions.html) -* [Geographic functions](https://www.elastic.co/guide/en/machine-learning/current/ml-geo-functions.html) -* [Information content functions](https://www.elastic.co/guide/en/machine-learning/current/ml-info-functions.html) -* [Metric functions](https://www.elastic.co/guide/en/machine-learning/current/ml-metric-functions.html) -* [Rare functions](https://www.elastic.co/guide/en/machine-learning/current/ml-rare-functions.html) -* [Sum functions](https://www.elastic.co/guide/en/machine-learning/current/ml-sum-functions.html) -* [Time functions](https://www.elastic.co/guide/en/machine-learning/current/ml-time-functions.html) +* [Count functions](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-count-functions.md) +* [Geographic functions](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-geo-functions.md) +* [Information content functions](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-info-functions.md) +* [Metric functions](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-metric-functions.md) +* [Rare functions](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-rare-functions.md) +* [Sum functions](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-sum-functions.md) +* [Time functions](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-time-functions.md) diff --git a/explore-analyze/machine-learning/anomaly-detection/ml-getting-started.md b/explore-analyze/machine-learning/anomaly-detection/ml-getting-started.md index d3891fe7d..9776a6cb9 100644 --- a/explore-analyze/machine-learning/anomaly-detection/ml-getting-started.md +++ b/explore-analyze/machine-learning/anomaly-detection/ml-getting-started.md @@ -50,7 +50,7 @@ To get the best results from {{ml}} analytics, you must understand your data. Yo 6. Optional: You can change the random sampling behavior, which affects the number of documents per shard that are used in the {{data-viz}}. You can use automatic random sampling that balances accuracy and speed, manual sampling where you can chose a value for the sampling percentage, or you can turn the feaure off to use the full data set. There is a relatively small number of documents in the {{kib}} sample data, so you can turn random sampling off. For larger data sets, keep in mind that using a large sample size increases query run times and increases the load on the cluster. 7. Explore the fields in the {{data-viz}}. - You can filter the list by field names or [field types](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html). The {{data-viz}} indicates how many of the documents in the sample for the selected time period contain each field. + You can filter the list by field names or [field types](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/field-data-types.md). The {{data-viz}} indicates how many of the documents in the sample for the selected time period contain each field. In particular, look at the `clientip`, `response.keyword`, and `url.keyword` fields, since we’ll use them in our {{anomaly-jobs}}. For these fields, the {{data-viz}} provides the number of distinct values, a list of the top values, and the number and percentage of documents that contain the field. For example: :::{image} ../../../images/machine-learning-ml-gs-data-keyword.jpg @@ -95,7 +95,7 @@ The job uses *buckets* to divide the time series into batches for processing. Fo Each {{anomaly-job}} contains one or more *detectors*, which define the type of analysis that occurs (for example, `max`, `average`, or `rare` analytical functions) and the fields that are analyzed. Some of the analytical functions look for single anomalous data points. For example, `max` identifies the maximum value that is seen within a bucket. Others perform some aggregation over the length of the bucket. For example, `mean` calculates the mean of all the data points seen within the bucket. -For more information, see [{{dfeeds-cap}}](ml-ad-run-jobs.md#ml-ad-datafeeds), [Buckets](https://www.elastic.co/guide/en/machine-learning/current/ml-ad-run-jobs.html#ml-ad-create-job), and [*Function reference*](ml-functions.md). +For more information, see [{{dfeeds-cap}}](ml-ad-run-jobs.md#ml-ad-datafeeds), [Buckets](/explore-analyze/machine-learning/anomaly-detection/ml-ad-run-jobs.md#ml-ad-create-job), and [*Function reference*](ml-functions.md). :::: @@ -271,7 +271,7 @@ To create a forecast in {{kib}}: :class: screenshot ::: -3. Specify a duration for your forecast. This value indicates how far to extrapolate beyond the last record that was processed. You must use [time units](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#time-units). In this example, the duration is one week (`1w`): +3. Specify a duration for your forecast. This value indicates how far to extrapolate beyond the last record that was processed. You must use [time units](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#time-units). In this example, the duration is one week (`1w`): :::{image} ../../../images/machine-learning-ml-gs-duration.png :alt: Specify a duration of 1w :class: screenshot @@ -311,8 +311,8 @@ If you’re now thinking about where {{anomaly-detect}} can be most impactful fo 2. It should be information that contains key performance indicators for the health, security, or success of your business or system. The better you know the data, the quicker you will be able to create jobs that generate useful insights. 3. Ideally, the data is located in {{es}} and you can therefore create a {{dfeed}} that retrieves data in real time. If your data is outside of {{es}}, you cannot use {{kib}} to create your jobs and you cannot use {{dfeeds}}. -In general, it is a good idea to start with single metric {{anomaly-jobs}} for your key performance indicators. After you examine these simple analysis results, you will have a better idea of what the influencers might be. You can create multi-metric jobs and split the data or create more complex analysis functions as necessary. For examples of more complicated configuration options, see [Examples](https://www.elastic.co/guide/en/machine-learning/current/anomaly-how-tos.html). +In general, it is a good idea to start with single metric {{anomaly-jobs}} for your key performance indicators. After you examine these simple analysis results, you will have a better idea of what the influencers might be. You can create multi-metric jobs and split the data or create more complex analysis functions as necessary. For examples of more complicated configuration options, see [Examples](/explore-analyze/machine-learning/anomaly-detection/anomaly-how-tos.md). -If you want to find more sample jobs, see [Supplied configurations](ootb-ml-jobs.md). In particular, there are sample jobs for [Apache](https://www.elastic.co/guide/en/machine-learning/current/ootb-ml-jobs-apache.html) and [Nginx](https://www.elastic.co/guide/en/machine-learning/current/ootb-ml-jobs-nginx.html) that are quite similar to the examples in this tutorial. +If you want to find more sample jobs, see [Supplied configurations](ootb-ml-jobs.md). In particular, there are sample jobs for [Apache](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ootb-ml-jobs-apache.md) and [Nginx](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ootb-ml-jobs-nginx.md) that are quite similar to the examples in this tutorial. If you encounter problems, we’re here to help. If you are an existing Elastic customer with a support contract, please create a ticket in the [Elastic Support portal](http://support.elastic.co). Or post in the [Elastic forum](https://discuss.elastic.co/). diff --git a/explore-analyze/machine-learning/anomaly-detection/ml-limitations.md b/explore-analyze/machine-learning/anomaly-detection/ml-limitations.md index 3cade2a56..98a87c784 100644 --- a/explore-analyze/machine-learning/anomaly-detection/ml-limitations.md +++ b/explore-analyze/machine-learning/anomaly-detection/ml-limitations.md @@ -20,7 +20,7 @@ The following limitations and known problems apply to the 9.0.0-beta1 release of ### CPUs must support SSE4.2 [ml-limitations-sse] -{{ml-cap}} uses Streaming SIMD Extensions (SSE) 4.2 instructions, so it works only on machines whose CPUs [support](https://en.wikipedia.org/wiki/SSE4#Supporting_CPUs) SSE4.2. If you run {{es}} on older hardware you must disable {{ml}} by setting `xpack.ml.enabled` to `false`. See [{{ml-cap}} settings in {{es}}](https://www.elastic.co/guide/en/elasticsearch/reference/current/ml-settings.html). +{{ml-cap}} uses Streaming SIMD Extensions (SSE) 4.2 instructions, so it works only on machines whose CPUs [support](https://en.wikipedia.org/wiki/SSE4#Supporting_CPUs) SSE4.2. If you run {{es}} on older hardware you must disable {{ml}} by setting `xpack.ml.enabled` to `false`. See [{{ml-cap}} settings in {{es}}](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/machine-learning-settings.md). ### CPU scheduling improvements apply to Linux and MacOS only [ml-scheduling-priority] @@ -40,7 +40,7 @@ If you send pre-aggregated data to a job for analysis, you must ensure that the ### Scripted metric aggregations are not supported [_scripted_metric_aggregations_are_not_supported] -Using [scripted metric aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-scripted-metric-aggregation.html) in {{dfeeds}} is not supported. Refer to the [Aggregating data for faster performance](ml-configuring-aggregation.md) page to learn more about aggregations in {{dfeeds}}. +Using [scripted metric aggregations](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-scripted-metric-aggregation.md) in {{dfeeds}} is not supported. Refer to the [Aggregating data for faster performance](ml-configuring-aggregation.md) page to learn more about aggregations in {{dfeeds}}. ### Fields named "by", "count", or "over" cannot be used to split data [_fields_named_by_count_or_over_cannot_be_used_to_split_data] @@ -124,7 +124,7 @@ In {{kib}}, **Anomaly Explorer** and **Single Metric Viewer** charts are not dis * for anomalies that were due to categorization (if model plot is not enabled), * if the {{dfeed}} uses scripted fields and model plot is not enabled (except for scripts that define metric fields), -* if the {{dfeed}} uses [composite aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-composite-aggregation.html) that have composite sources other than `terms` and `date_histogram`, +* if the {{dfeed}} uses [composite aggregations](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-composite-aggregation.md) that have composite sources other than `terms` and `date_histogram`, * if your [{{dfeed}} uses aggregations with nested `terms` aggs](ml-configuring-aggregation.md#aggs-dfeeds) and model plot is not enabled, * `freq_rare` functions, * `info_content`, `high_info_content`, `low_info_content` functions, @@ -138,22 +138,22 @@ The charts can also look odd in circumstances where there is very little data to | Detector functions | Function description | Supported | | --- | --- | --- | -| count, high_count, low_count, non_zero_count, low_non_zero_count | [Count functions](https://www.elastic.co/guide/en/machine-learning/current/ml-count-functions.html) | yes | -| count, high_count, low_count, non_zero_count, low_non_zero_count with summary_count_field_name that is not doc_count (model plot not enabled) | [Count functions](https://www.elastic.co/guide/en/machine-learning/current/ml-count-functions.html) | yes | -| non_zero_count with summary_count_field that is not doc_count using cardinality aggregation in datafeed config (model plot not enabled) | [Count functions](https://www.elastic.co/guide/en/machine-learning/current/ml-count-functions.html) | yes | -| distinct_count, high_distinct_count, low_distinct_count | [Count functions](https://www.elastic.co/guide/en/machine-learning/current/ml-count-functions.html) | yes | -| mean, high_mean, low_mean | [Mean, high_mean, low_mean](https://www.elastic.co/guide/en/machine-learning/current/ml-metric-functions.html#ml-metric-mean) | yes | -| min | [Min](https://www.elastic.co/guide/en/machine-learning/current/ml-metric-functions.html#ml-metric-min) | yes | -| max | [Max](https://www.elastic.co/guide/en/machine-learning/current/ml-metric-functions.html#ml-metric-max) | yes | -| metric | [Metric](https://www.elastic.co/guide/en/machine-learning/current/ml-metric-functions.html#ml-metric-metric) | yes | -| median, high_median, low_median | [Median, high_median, low_median](https://www.elastic.co/guide/en/machine-learning/current/ml-metric-functions.html#ml-metric-median) | yes | -| sum, high_sum ,low_sum, non_null_sum, high_non_null_sum, low_non_null_sum | [Sum functions](https://www.elastic.co/guide/en/machine-learning/current/ml-sum-functions.html) | yes | -| varp, high_varp, low_varp | [Varp, high_varp, low_varp](https://www.elastic.co/guide/en/machine-learning/current/ml-metric-functions.html#ml-metric-varp) | yes (only if model plot is enabled) | -| lat_long | [Lat_long](https://www.elastic.co/guide/en/machine-learning/current/ml-geo-functions.html#ml-lat-long) | no (but map is displayed in the Anomaly Explorer) | -| info_content, high_info_content, low_info_content | [Info_content, High_info_content, Low_info_content](https://www.elastic.co/guide/en/machine-learning/current/ml-info-functions.html#ml-info-content) | yes (only if model plot is enabled) | -| rare | [Rare](https://www.elastic.co/guide/en/machine-learning/current/ml-rare-functions.html#ml-rare) | yes | -| freq_rare | [Freq_rare](https://www.elastic.co/guide/en/machine-learning/current/ml-rare-functions.html#ml-freq-rare) | no | -| time_of_day, time_of_week | [Time functions](https://www.elastic.co/guide/en/machine-learning/current/ml-time-functions.html) | no | +| count, high_count, low_count, non_zero_count, low_non_zero_count | [Count functions](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-count-functions.md) | yes | +| count, high_count, low_count, non_zero_count, low_non_zero_count with summary_count_field_name that is not doc_count (model plot not enabled) | [Count functions](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-count-functions.md) | yes | +| non_zero_count with summary_count_field that is not doc_count using cardinality aggregation in datafeed config (model plot not enabled) | [Count functions](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-count-functions.md) | yes | +| distinct_count, high_distinct_count, low_distinct_count | [Count functions](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-count-functions.md) | yes | +| mean, high_mean, low_mean | [Mean, high_mean, low_mean](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-metric-functions.md#ml-metric-mean) | yes | +| min | [Min](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-metric-functions.md#ml-metric-min) | yes | +| max | [Max](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-metric-functions.md#ml-metric-max) | yes | +| metric | [Metric](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-metric-functions.md#ml-metric-metric) | yes | +| median, high_median, low_median | [Median, high_median, low_median](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-metric-functions.md#ml-metric-median) | yes | +| sum, high_sum ,low_sum, non_null_sum, high_non_null_sum, low_non_null_sum | [Sum functions](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-sum-functions.md) | yes | +| varp, high_varp, low_varp | [Varp, high_varp, low_varp](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-metric-functions.md#ml-metric-varp) | yes (only if model plot is enabled) | +| lat_long | [Lat_long](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-geo-functions.md#ml-lat-long) | no (but map is displayed in the Anomaly Explorer) | +| info_content, high_info_content, low_info_content | [Info_content, High_info_content, Low_info_content](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-info-functions.md#ml-info-content) | yes (only if model plot is enabled) | +| rare | [Rare](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-rare-functions.md#ml-rare) | yes | +| freq_rare | [Freq_rare](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-rare-functions.md#ml-freq-rare) | no | +| time_of_day, time_of_week | [Time functions](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ml-time-functions.md) | no | ### Jobs created in {{kib}} must use {{dfeeds}} [_jobs_created_in_kib_must_use_dfeeds] @@ -171,7 +171,7 @@ When the aggregation interval of the {{dfeed}} and the bucket span of the job do ### Calendars and filters are visible in all {{kib}} spaces [ml-space-limitations] -[Spaces](../../../deploy-manage/manage-spaces.md) enable you to organize your {{anomaly-jobs}} in {{kib}} and to see only the jobs and other saved objects that belong to your space. However, this limited scope does not apply to [calendars](https://www.elastic.co/guide/en/machine-learning/current/ml-ad-run-jobs.html#ml-ad-calendars) and [filters](https://www.elastic.co/guide/en/machine-learning/current/ml-ad-run-jobs.html#ml-ad-rules); they are visible in all spaces. +[Spaces](../../../deploy-manage/manage-spaces.md) enable you to organize your {{anomaly-jobs}} in {{kib}} and to see only the jobs and other saved objects that belong to your space. However, this limited scope does not apply to [calendars](/explore-analyze/machine-learning/anomaly-detection/ml-ad-run-jobs.md#ml-ad-calendars) and [filters](/explore-analyze/machine-learning/anomaly-detection/ml-ad-run-jobs.md#ml-ad-rules); they are visible in all spaces. ### Rollup indices are not supported in {{kib}} [ml-rollup-limitations] diff --git a/explore-analyze/machine-learning/anomaly-detection/move-jobs.md b/explore-analyze/machine-learning/anomaly-detection/move-jobs.md index 9b513834f..bb21898c9 100644 --- a/explore-analyze/machine-learning/anomaly-detection/move-jobs.md +++ b/explore-analyze/machine-learning/anomaly-detection/move-jobs.md @@ -15,6 +15,6 @@ The exported file contains configuration details; it does not contain the {{ml}} There are some additional actions that you must take before you can successfully import and run your jobs: -1. The {{kib}} [{{data-sources}}](https://www.elastic.co/guide/en/kibana/current/data-views.html) that are used by {{anomaly-detect}} {{dfeeds}} and {{dfanalytics}} source indices must exist; otherwise, the import fails. +1. The {{kib}} [{{data-sources}}](/explore-analyze/find-and-organize/data-views.md) that are used by {{anomaly-detect}} {{dfeeds}} and {{dfanalytics}} source indices must exist; otherwise, the import fails. 2. If your {{anomaly-jobs}} use [custom rules](ml-configuring-detector-custom-rules.md) with filter lists, the filter lists must exist; otherwise, the import fails. To create filter lists, use {{kib}} or the [create filters API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ml-put-filter). -3. If your {{anomaly-jobs}} were associated with [calendars](https://www.elastic.co/guide/en/machine-learning/current/ml-ad-run-jobs.html#ml-ad-calendars), you must create the calendar in the new environment and add your imported jobs to the calendar. Use {{kib}} or the [create calendars](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ml-put-calendar), [add events to calendar](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ml-post-calendar-events), and [add jobs to calendar](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ml-put-calendar-job) APIs. +3. If your {{anomaly-jobs}} were associated with [calendars](/explore-analyze/machine-learning/anomaly-detection/ml-ad-run-jobs.md#ml-ad-calendars), you must create the calendar in the new environment and add your imported jobs to the calendar. Use {{kib}} or the [create calendars](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ml-put-calendar), [add events to calendar](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ml-post-calendar-events), and [add jobs to calendar](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ml-put-calendar-job) APIs. diff --git a/explore-analyze/machine-learning/anomaly-detection/ootb-ml-jobs.md b/explore-analyze/machine-learning/anomaly-detection/ootb-ml-jobs.md index 4670c783f..d1c79bfe5 100644 --- a/explore-analyze/machine-learning/anomaly-detection/ootb-ml-jobs.md +++ b/explore-analyze/machine-learning/anomaly-detection/ootb-ml-jobs.md @@ -9,17 +9,17 @@ mapped_pages: # Supplied configurations [ootb-ml-jobs] -{{anomaly-jobs-cap}} contain the configuration information and metadata necessary to perform an analytics task. {{kib}} can recognize certain types of data and provide specialized wizards for that context. This page lists the categories of the {{anomaly-jobs}} that are ready to use via {{kib}} in **Machine learning**. Refer to [Create {{anomaly-jobs}}](https://www.elastic.co/guide/en/machine-learning/current/ml-ad-run-jobs.html#ml-ad-create-job) to learn more about creating a job by using supplied configurations. Logs and Metrics supplied configurations are available and can be created via the related solution UI in {{kib}}. +{{anomaly-jobs-cap}} contain the configuration information and metadata necessary to perform an analytics task. {{kib}} can recognize certain types of data and provide specialized wizards for that context. This page lists the categories of the {{anomaly-jobs}} that are ready to use via {{kib}} in **Machine learning**. Refer to [Create {{anomaly-jobs}}](/explore-analyze/machine-learning/anomaly-detection/ml-ad-run-jobs.md#ml-ad-create-job) to learn more about creating a job by using supplied configurations. Logs and Metrics supplied configurations are available and can be created via the related solution UI in {{kib}}. -* [Apache](https://www.elastic.co/guide/en/machine-learning/current/ootb-ml-jobs-apache.html) -* [APM](https://www.elastic.co/guide/en/machine-learning/current/ootb-ml-jobs-apm.html) -* [{{auditbeat}}](https://www.elastic.co/guide/en/machine-learning/current/ootb-ml-jobs-auditbeat.html) -* [Logs](https://www.elastic.co/guide/en/machine-learning/current/ootb-ml-jobs-logs-ui.html) -* [{{metricbeat}}](https://www.elastic.co/guide/en/machine-learning/current/ootb-ml-jobs-metricbeat.html) -* [Metrics](https://www.elastic.co/guide/en/machine-learning/current/ootb-ml-jobs-metrics-ui.html) -* [Nginx](https://www.elastic.co/guide/en/machine-learning/current/ootb-ml-jobs-nginx.html) -* [Security](https://www.elastic.co/guide/en/machine-learning/current/ootb-ml-jobs-siem.html) -* [Uptime](https://www.elastic.co/guide/en/machine-learning/current/ootb-ml-jobs-uptime.html) +* [Apache](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ootb-ml-jobs-apache.md) +* [APM](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ootb-ml-jobs-apm.md) +* [{{auditbeat}}](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ootb-ml-jobs-auditbeat.md) +* [Logs](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ootb-ml-jobs-logs-ui.md) +* [{{metricbeat}}](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ootb-ml-jobs-metricbeat.md) +* [Metrics](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ootb-ml-jobs-metrics-ui.md) +* [Nginx](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ootb-ml-jobs-nginx.md) +* [Security](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ootb-ml-jobs-siem.md) +* [Uptime](asciidocalypse://docs/docs-content/docs/reference/data-analysis/machine-learning/ootb-ml-jobs-uptime.md) ::::{note} The configurations are only available if data exists that matches the queries specified in the manifest files. These recognizer queries are linked in the descriptions of the individual configurations. diff --git a/explore-analyze/machine-learning/data-frame-analytics/ml-dfa-classification.md b/explore-analyze/machine-learning/data-frame-analytics/ml-dfa-classification.md index 5a1d33f53..864c15f64 100644 --- a/explore-analyze/machine-learning/data-frame-analytics/ml-dfa-classification.md +++ b/explore-analyze/machine-learning/data-frame-analytics/ml-dfa-classification.md @@ -193,13 +193,13 @@ For instance, suppose you have an online service and you would like to predict w {{infer-cap}} can be used as a processor specified in an [ingest pipeline](../../../manage-data/ingest/transform-enrich/ingest-pipelines.md). It uses a trained model to infer against the data that is being ingested in the pipeline. The model is used on the ingest node. {{infer-cap}} pre-processes the data by using the model and provides a prediction. After the process, the pipeline continues executing (if there is any other processor in the pipeline), finally the new data together with the results are indexed into the destination index. -Check the [{{infer}} processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/inference-processor.html) and [the {{ml}} {{dfanalytics}} API documentation](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-ml-data-frame) to learn more. +Check the [{{infer}} processor](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/inference-processor.md) and [the {{ml}} {{dfanalytics}} API documentation](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-ml-data-frame) to learn more. #### {{infer-cap}} aggregation [ml-inference-aggregation-class] {{infer-cap}} can also be used as a pipeline aggregation. You can reference a trained model in the aggregation to infer on the result field of the parent bucket aggregation. The {{infer}} aggregation uses the model on the results to provide a prediction. This aggregation enables you to run {{classification}} or {{reganalysis}} at search time. If you want to perform the analysis on a small set of data, this aggregation enables you to generate predictions without the need to set up a processor in the ingest pipeline. -Check the [{{infer}} bucket aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-inference-bucket-aggregation.html) and [the {{ml}} {{dfanalytics}} API documentation](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-ml-data-frame) to learn more. +Check the [{{infer}} bucket aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-pipeline-inference-bucket-aggregation.md) and [the {{ml}} {{dfanalytics}} API documentation](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-ml-data-frame) to learn more. ::::{note} If you use trained model aliases to reference your trained model in an {{infer}} processor or {{infer}} aggregation, you can replace your trained model with a new one without the need of updating the processor or the aggregation. Reassign the alias you used to a new trained model ID by using the [Create or update trained model aliases API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ml-put-trained-model-alias). The new trained model needs to use the same type of {{dfanalytics}} as the old one. diff --git a/explore-analyze/machine-learning/data-frame-analytics/ml-dfa-limitations.md b/explore-analyze/machine-learning/data-frame-analytics/ml-dfa-limitations.md index d5975cdec..3200fbb6c 100644 --- a/explore-analyze/machine-learning/data-frame-analytics/ml-dfa-limitations.md +++ b/explore-analyze/machine-learning/data-frame-analytics/ml-dfa-limitations.md @@ -37,7 +37,7 @@ You cannot update {{dfanalytics}} configurations. Instead, delete the {{dfanalyt ### {{dfanalytics-cap}} memory limitation [dfa-dataframe-size-limitations] -{{dfanalytics-cap}} can only perform analyses that fit into the memory available for {{ml}}. Overspill to disk is not currently possible. For general {{ml}} settings, see [{{ml-cap}} settings in {{es}}](https://www.elastic.co/guide/en/elasticsearch/reference/current/ml-settings.html). +{{dfanalytics-cap}} can only perform analyses that fit into the memory available for {{ml}}. Overspill to disk is not currently possible. For general {{ml}} settings, see [{{ml-cap}} settings in {{es}}](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/machine-learning-settings.md). When you create a {{dfanalytics-job}} and the inference step of the process fails due to the model is too large to fit into JVM, follow the steps in [this GitHub issue](https://github.com/elastic/elasticsearch/issues/76093) for a workaround. diff --git a/explore-analyze/machine-learning/data-frame-analytics/ml-dfa-regression.md b/explore-analyze/machine-learning/data-frame-analytics/ml-dfa-regression.md index 320336d6a..d2210b155 100644 --- a/explore-analyze/machine-learning/data-frame-analytics/ml-dfa-regression.md +++ b/explore-analyze/machine-learning/data-frame-analytics/ml-dfa-regression.md @@ -139,13 +139,13 @@ For instance, suppose you have an online service and you would like to predict w {{infer-cap}} can be used as a processor specified in an [ingest pipeline](../../../manage-data/ingest/transform-enrich/ingest-pipelines.md). It uses a trained model to infer against the data that is being ingested in the pipeline. The model is used on the ingest node. {{infer-cap}} pre-processes the data by using the model and provides a prediction. After the process, the pipeline continues executing (if there is any other processor in the pipeline), finally the new data together with the results are indexed into the destination index. -Check the [{{infer}} processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/inference-processor.html) and [the {{ml}} {{dfanalytics}} API documentation](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-ml-data-frame) to learn more. +Check the [{{infer}} processor](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/inference-processor.md) and [the {{ml}} {{dfanalytics}} API documentation](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-ml-data-frame) to learn more. #### {{infer-cap}} aggregation [ml-inference-aggregation-reg] {{infer-cap}} can also be used as a pipeline aggregation. You can reference a trained model in the aggregation to infer on the result field of the parent bucket aggregation. The {{infer}} aggregation uses the model on the results to provide a prediction. This aggregation enables you to run {{classification}} or {{reganalysis}} at search time. If you want to perform the analysis on a small set of data, this aggregation enables you to generate predictions without the need to set up a processor in the ingest pipeline. -Check the [{{infer}} bucket aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-inference-bucket-aggregation.html) and [the {{ml}} {{dfanalytics}} API documentation](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-ml-data-frame) to learn more. +Check the [{{infer}} bucket aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-pipeline-inference-bucket-aggregation.md) and [the {{ml}} {{dfanalytics}} API documentation](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-ml-data-frame) to learn more. ::::{note} If you use trained model aliases to reference your trained model in an {{infer}} processor or {{infer}} aggregation, you can replace your trained model with a new one without the need of updating the processor or the aggregation. Reassign the alias you used to a new trained model ID by using the [Create or update trained model aliases API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ml-put-trained-model-alias). The new trained model needs to use the same type of {{dfanalytics}} as the old one. diff --git a/explore-analyze/machine-learning/data-frame-analytics/ml-trained-models.md b/explore-analyze/machine-learning/data-frame-analytics/ml-trained-models.md index fbc7fa983..343ed9018 100644 --- a/explore-analyze/machine-learning/data-frame-analytics/ml-trained-models.md +++ b/explore-analyze/machine-learning/data-frame-analytics/ml-trained-models.md @@ -106,7 +106,7 @@ A few observations: ::::{note} -* Models exported from the [get trained models API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ml-get-trained-models) are limited in size by the [http.max_content_length](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html) global configuration value in {{es}}. The default value is `100mb` and may need to be increased depending on the size of model being exported. +* Models exported from the [get trained models API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ml-get-trained-models) are limited in size by the [http.max_content_length](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md) global configuration value in {{es}}. The default value is `100mb` and may need to be increased depending on the size of model being exported. * Connection timeouts can occur, for example, when model sizes are very large or your cluster is under load. If needed, you can increase [timeout configurations](https://ec.haxx.se/usingcurl/usingcurl-timeouts) for `curl` (for example, `curl --max-time 600`) or your client of choice. :::: @@ -115,4 +115,4 @@ If you also want to copy the {{dfanalytics-job}} to the new cluster, you can exp ## Importing an external model to the {{stack}} [import-external-model-to-es] -It is possible to import a model to your {{es}} cluster even if the model is not trained by Elastic {{dfanalytics}}. Eland supports [importing models](https://www.elastic.co/guide/en/elasticsearch/client/eland/current/machine-learning.html) directly through its APIs. Please refer to the latest [Eland documentation](https://eland.readthedocs.io/en/latest/index.md) for more information on supported model types and other details of using Eland to import models with. +It is possible to import a model to your {{es}} cluster even if the model is not trained by Elastic {{dfanalytics}}. Eland supports [importing models](asciidocalypse://docs/eland/docs/reference/elasticsearch/elasticsearch-client-eland/machine-learning.md) directly through its APIs. Please refer to the latest [Eland documentation](https://eland.readthedocs.io/en/latest/index.md) for more information on supported model types and other details of using Eland to import models with. diff --git a/explore-analyze/machine-learning/machine-learning-in-kibana.md b/explore-analyze/machine-learning/machine-learning-in-kibana.md index 5525d86f9..aa2b5f7f2 100644 --- a/explore-analyze/machine-learning/machine-learning-in-kibana.md +++ b/explore-analyze/machine-learning/machine-learning-in-kibana.md @@ -35,7 +35,7 @@ File formats supported up to 60 MB: * Rich Text (RTF) * Open Document Format (ODF) -The **{{data-viz}}** identifies the file format and field mappings, and you can import the data into an {{es}} index. To change the default file size limit, see [`fileUpload:maxFileSize`](https://www.elastic.co/guide/en/kibana/current/advanced-options.html#kibana-general-settings) in advanced settings. +The **{{data-viz}}** identifies the file format and field mappings, and you can import the data into an {{es}} index. To change the default file size limit, see [`fileUpload:maxFileSize`](asciidocalypse://docs/kibana/docs/reference/advanced-settings.md#kibana-general-settings) in advanced settings. If {{stack-security-features}} are enabled, users must have the necessary privileges to use {{ml-features}}. Refer to [Set up {{ml-features}}](setting-up-machine-learning.md#setup-privileges). diff --git a/explore-analyze/machine-learning/machine-learning-in-kibana/inference-processing.md b/explore-analyze/machine-learning/machine-learning-in-kibana/inference-processing.md index 97e0ac880..c6afe4130 100644 --- a/explore-analyze/machine-learning/machine-learning-in-kibana/inference-processing.md +++ b/explore-analyze/machine-learning/machine-learning-in-kibana/inference-processing.md @@ -35,7 +35,7 @@ Most commonly used to detect entities such as People, Places, and Organization i ### Text embedding [ingest-pipeline-search-inference-text-embedding] -Analyzing a text field using a [Text embedding](../nlp/ml-nlp-search-compare.md#ml-nlp-text-embedding) model will generate a [dense vector](https://www.elastic.co/guide/en/elasticsearch/reference/current/dense-vector.html) representation of the text. This array of numeric values encodes the semantic *meaning* of the text. Using the same model with a user’s search query will produce a vector that can then be used to search, ranking results based on vector similarity - semantic similarity - as opposed to traditional word or text similarity. +Analyzing a text field using a [Text embedding](../nlp/ml-nlp-search-compare.md#ml-nlp-text-embedding) model will generate a [dense vector](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/dense-vector.md) representation of the text. This array of numeric values encodes the semantic *meaning* of the text. Using the same model with a user’s search query will produce a vector that can then be used to search, ranking results based on vector similarity - semantic similarity - as opposed to traditional word or text similarity. A common use case is a user searching FAQs, or a support agent searching a knowledge base, where semantically similar content may be indexed with little similarity in phrasing. diff --git a/explore-analyze/machine-learning/machine-learning-in-kibana/xpack-ml-aiops.md b/explore-analyze/machine-learning/machine-learning-in-kibana/xpack-ml-aiops.md index dba274feb..c6e8da9a1 100644 --- a/explore-analyze/machine-learning/machine-learning-in-kibana/xpack-ml-aiops.md +++ b/explore-analyze/machine-learning/machine-learning-in-kibana/xpack-ml-aiops.md @@ -52,7 +52,7 @@ Select a field for categorization and optionally apply any filters that you want This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. :::: -Change point detection uses the [change point aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-change-point-aggregation.html) to detect distribution changes, trend changes, and other statistically significant change points in a metric of your time series data. +Change point detection uses the [change point aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-change-point-aggregation.md) to detect distribution changes, trend changes, and other statistically significant change points in a metric of your time series data. You can find change point detection under **{{ml-app}}** > **AIOps Labs** or by using the [global search field](/explore-analyze/find-and-organize/find-apps-and-objects.md). Here, you can select the {{data-source}} or saved Discover session that you want to analyze. diff --git a/explore-analyze/machine-learning/nlp/ml-nlp-deploy-model.md b/explore-analyze/machine-learning/nlp/ml-nlp-deploy-model.md index 6fc96f939..a7cc8f489 100644 --- a/explore-analyze/machine-learning/nlp/ml-nlp-deploy-model.md +++ b/explore-analyze/machine-learning/nlp/ml-nlp-deploy-model.md @@ -37,4 +37,4 @@ For the resource levels when adaptive resources are enabled, refer to <[*Trained Each allocation of a model deployment has a dedicated queue to buffer {{infer}} requests. The size of this queue is determined by the `queue_capacity` parameter in the [start trained model deployment API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ml-start-trained-model-deployment). When the queue reaches its maximum capacity, new requests are declined until some of the queued requests are processed, creating available capacity once again. When multiple ingest pipelines reference the same deployment, the queue can fill up, resulting in rejected requests. Consider using dedicated deployments to prevent this situation. -{{infer-cap}} requests originating from search, such as the [`text_expansion` query](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-text-expansion-query.html), have a higher priority compared to non-search requests. The {{infer}} ingest processor generates normal priority requests. If both a search query and an ingest processor use the same deployment, the search requests with higher priority skip ahead in the queue for processing before the lower priority ingest requests. This prioritization accelerates search responses while potentially slowing down ingest where response time is less critical. +{{infer-cap}} requests originating from search, such as the [`text_expansion` query](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-text-expansion-query.md), have a higher priority compared to non-search requests. The {{infer}} ingest processor generates normal priority requests. If both a search query and an ingest processor use the same deployment, the search requests with higher priority skip ahead in the queue for processing before the lower priority ingest requests. This prioritization accelerates search responses while potentially slowing down ingest where response time is less critical. diff --git a/explore-analyze/machine-learning/nlp/ml-nlp-elser.md b/explore-analyze/machine-learning/nlp/ml-nlp-elser.md index 96d14984e..a37c71699 100644 --- a/explore-analyze/machine-learning/nlp/ml-nlp-elser.md +++ b/explore-analyze/machine-learning/nlp/ml-nlp-elser.md @@ -21,7 +21,7 @@ While ELSER V2 is generally available, ELSER V1 is in [preview] and will remain ## Tokens - not synonyms [elser-tokens] -ELSER expands the indexed and searched passages into collections of terms that are learned to co-occur frequently within a diverse set of training data. The terms that the text is expanded into by the model *are not* synonyms for the search terms; they are learned associations capturing relevance. These expanded terms are weighted as some of them are more significant than others. Then the {{es}} [sparse vector](https://www.elastic.co/guide/en/elasticsearch/reference/current/sparse-vector.html) (or [rank features](https://www.elastic.co/guide/en/elasticsearch/reference/current/rank-features.html)) field type is used to store the terms and weights at index time, and to search against later. +ELSER expands the indexed and searched passages into collections of terms that are learned to co-occur frequently within a diverse set of training data. The terms that the text is expanded into by the model *are not* synonyms for the search terms; they are learned associations capturing relevance. These expanded terms are weighted as some of them are more significant than others. Then the {{es}} [sparse vector](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/sparse-vector.md) (or [rank features](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/rank-features.md)) field type is used to store the terms and weights at index time, and to search against later. This approach provides a more understandable search experience compared to vector embeddings. However, attempting to directly interpret the tokens and weights can be misleading, as the expansion essentially results in a vector in a very high-dimensional space. Consequently, certain tokens, especially those with low weight, contain information that is intertwined with other low-weight tokens in the representation. In this regard, they function similarly to a dense vector representation, making it challenging to separate their individual contributions. This complexity can potentially lead to misinterpretations if not carefully considered during analysis. @@ -172,7 +172,7 @@ POST _ml/trained_models/.elser_model_2/deployment/_start?deployment_id=for_searc If you want to deploy ELSER in a restricted or closed network, you have two options: * create your own HTTP/HTTPS endpoint with the model artifacts on it, -* put the model artifacts into a directory inside the config directory on all [master-eligible nodes](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#master-node). +* put the model artifacts into a directory inside the config directory on all [master-eligible nodes](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md#master-node). ### Model artifact files [elser-model-artifacts] @@ -284,7 +284,7 @@ To learn more about ELSER performance, refer to the [Benchmark information](#els ## Pre-cleaning input text [pre-cleaning] -The quality of the input text significantly affects the quality of the embeddings. To achieve the best results, it’s recommended to clean the input text before generating embeddings. The exact preprocessing you may need to do heavily depends on your text. For example, if your text contains HTML tags, use the [HTML strip processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/htmlstrip-processor.html) in an ingest pipeline to remove unnecessary elements. Always review and clean your input text before ingestion to eliminate any irrelevant entities that might affect the results. +The quality of the input text significantly affects the quality of the embeddings. To achieve the best results, it’s recommended to clean the input text before generating embeddings. The exact preprocessing you may need to do heavily depends on your text. For example, if your text contains HTML tags, use the [HTML strip processor](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/htmlstrip-processor.md) in an ingest pipeline to remove unnecessary elements. Always review and clean your input text before ingestion to eliminate any irrelevant entities that might affect the results. ## Recommendations for using ELSER [elser-recommendations] diff --git a/explore-analyze/machine-learning/nlp/ml-nlp-import-model.md b/explore-analyze/machine-learning/nlp/ml-nlp-import-model.md index eea06fef5..441ce118b 100644 --- a/explore-analyze/machine-learning/nlp/ml-nlp-import-model.md +++ b/explore-analyze/machine-learning/nlp/ml-nlp-import-model.md @@ -9,7 +9,7 @@ mapped_pages: # Import the trained model and vocabulary [ml-nlp-import-model] ::::{important} -If you want to install a trained model in a restricted or closed network, refer to [these instructions](https://www.elastic.co/guide/en/elasticsearch/client/eland/current/machine-learning.html#ml-nlp-pytorch-air-gapped). +If you want to install a trained model in a restricted or closed network, refer to [these instructions](asciidocalypse://docs/eland/docs/reference/elasticsearch/elasticsearch-client-eland/machine-learning.md#ml-nlp-pytorch-air-gapped). :::: After you choose a model, you must import it and its tokenizer vocabulary to your cluster. When you import the model, it must be chunked and imported one chunk at a time for storage in parts due to its size. @@ -22,7 +22,7 @@ Trained models must be in a TorchScript representation for use with {{stack-ml-f ## Import with the Eland client installed [ml-nlp-import-script] -1. Install the [Eland Python client](https://www.elastic.co/guide/en/elasticsearch/client/eland/current/installation.html) with PyTorch extra dependencies. +1. Install the [Eland Python client](asciidocalypse://docs/eland/docs/reference/elasticsearch/elasticsearch-client-eland/installation.md) with PyTorch extra dependencies. ```shell python -m pip install 'eland[pytorch]' @@ -43,7 +43,7 @@ Trained models must be in a TorchScript representation for use with {{stack-ml-f 3. Specify the identifier for the model in the Hugging Face model hub. 4. Specify the type of NLP task. Supported values are `fill_mask`, `ner`, `question_answering`, `text_classification`, `text_embedding`, `text_expansion`, `text_similarity`, and `zero_shot_classification`. -For more details, refer to [https://www.elastic.co/guide/en/elasticsearch/client/eland/current/machine-learning.html#ml-nlp-pytorch](https://www.elastic.co/guide/en/elasticsearch/client/eland/current/machine-learning.html#ml-nlp-pytorch). +For more details, refer to [asciidocalypse://docs/eland/docs/reference/elasticsearch/elasticsearch-client-eland/machine-learning.md#ml-nlp-pytorch](asciidocalypse://docs/eland/docs/reference/elasticsearch/elasticsearch-client-eland/machine-learning.md#ml-nlp-pytorch). ## Import with Docker [ml-nlp-import-docker] diff --git a/explore-analyze/machine-learning/nlp/ml-nlp-inference.md b/explore-analyze/machine-learning/nlp/ml-nlp-inference.md index c94ffba54..12ff54e74 100644 --- a/explore-analyze/machine-learning/nlp/ml-nlp-inference.md +++ b/explore-analyze/machine-learning/nlp/ml-nlp-inference.md @@ -25,7 +25,7 @@ In {{kib}}, you can create and edit pipelines in **{{stack-manage-app}}** > **In ::: 1. Click **Create pipeline** or edit an existing pipeline. -2. Add an [{{infer}} processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/inference-processor.html) to your pipeline: +2. Add an [{{infer}} processor](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/inference-processor.md) to your pipeline: 1. Click **Add a processor** and select the **{{infer-cap}}** processor type. 2. Set **Model ID** to the name of your trained model, for example `elastic__distilbert-base-cased-finetuned-conll03-english` or `lang_ident_model_1`. @@ -39,7 +39,7 @@ In {{kib}}, you can create and edit pipelines in **{{stack-manage-app}}** > **In } ``` - 2. You can also optionally add [classification configuration options](https://www.elastic.co/guide/en/elasticsearch/reference/current/inference-processor.html#inference-processor-classification-opt) in the **{{infer-cap}} configuration** section. For example, to include the top five language predictions: + 2. You can also optionally add [classification configuration options](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/inference-processor.md#inference-processor-classification-opt) in the **{{infer-cap}} configuration** section. For example, to include the top five language predictions: ```js { @@ -51,7 +51,7 @@ In {{kib}}, you can create and edit pipelines in **{{stack-manage-app}}** > **In 4. Click **Add** to save the processor. -3. Optional: Add a [set processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/set-processor.html) to index the ingest timestamp. +3. Optional: Add a [set processor](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/set-processor.md) to index the ingest timestamp. 1. Click **Add a processor** and select the **Set** processor type. 2. Choose a name for the field (such as `event.ingested`) and set its value to `{{{_ingest.timestamp}}}`. For more details, refer to [Access ingest metadata in a processor](../../../manage-data/ingest/transform-enrich/ingest-pipelines.md#access-ingest-metadata). @@ -117,7 +117,7 @@ PUT ner-test ``` ::::{tip} -To use the `annotated_text` data type in this example, you must install the [mapper annotated text plugin](https://www.elastic.co/guide/en/elasticsearch/plugins/current/mapper-annotated-text.html). For more installation details, refer to [Add plugins provided with {{ess}}](https://www.elastic.co/guide/en/cloud/current/ec-adding-elastic-plugins.html). +To use the `annotated_text` data type in this example, you must install the [mapper annotated text plugin](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch-plugins/mapper-annotated-text.md). For more installation details, refer to [Add plugins provided with {{ess}}](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch-plugins/cloud/ec-adding-elastic-plugins.md). :::: You can then use the new pipeline to index some documents. For example, use a bulk indexing request with the `pipeline` query parameter for your NER pipeline: diff --git a/explore-analyze/machine-learning/nlp/ml-nlp-limitations.md b/explore-analyze/machine-learning/nlp/ml-nlp-limitations.md index 22f238f91..5ef661ad6 100644 --- a/explore-analyze/machine-learning/nlp/ml-nlp-limitations.md +++ b/explore-analyze/machine-learning/nlp/ml-nlp-limitations.md @@ -12,7 +12,7 @@ The following limitations and known problems apply to the 9.0.0-beta1 release of ## Document size limitations when using `semantic_text` fields [ml-nlp-large-documents-limit-10k-10mb] -When using semantic text to ingest documents, chunking takes place automatically. The number of chunks is limited by the [`index.mapping.nested_objects.limit`](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-settings-limit.html) cluster setting, which defaults to 10k. Documents that are too large will cause errors during ingestion. To avoid this issue, please split your documents into roughly 1MB parts before ingestion. +When using semantic text to ingest documents, chunking takes place automatically. The number of chunks is limited by the [`index.mapping.nested_objects.limit`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/mapping-limit-settings.md) cluster setting, which defaults to 10k. Documents that are too large will cause errors during ingestion. To avoid this issue, please split your documents into roughly 1MB parts before ingestion. ## ELSER semantic search is limited to 512 tokens per field that inference is applied to [ml-nlp-elser-v1-limit-512] diff --git a/explore-analyze/machine-learning/nlp/ml-nlp-model-ref.md b/explore-analyze/machine-learning/nlp/ml-nlp-model-ref.md index 0d02b4e11..85c43c483 100644 --- a/explore-analyze/machine-learning/nlp/ml-nlp-model-ref.md +++ b/explore-analyze/machine-learning/nlp/ml-nlp-model-ref.md @@ -70,7 +70,7 @@ Sparse embedding models should be configured with the `text_expansion` task type Text Embedding models are designed to work with specific scoring functions for calculating the similarity between the embeddings they produce. Examples of typical scoring functions are: `cosine`, `dot product` and `euclidean distance` (also known as `l2_norm`). -The embeddings produced by these models should be indexed in {{es}} using the [dense vector field type](https://www.elastic.co/guide/en/elasticsearch/reference/current/dense-vector.html) with an appropriate [similarity function](https://www.elastic.co/guide/en/elasticsearch/reference/current/dense-vector.html#dense-vector-params) chosen for the model. +The embeddings produced by these models should be indexed in {{es}} using the [dense vector field type](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/dense-vector.md) with an appropriate [similarity function](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/dense-vector.md#dense-vector-params) chosen for the model. To find similar embeddings in {{es}} use the efficient [Approximate k-nearest neighbor (kNN)](../../../solutions/search/vector/knn.md#approximate-knn) search API with a text embedding as the query vector. Approximate kNN search uses the similarity function defined in the dense vector field mapping is used to calculate the relevance. For the best results the function must be one of the suitable similarity functions for the model. diff --git a/explore-analyze/machine-learning/nlp/ml-nlp-ner-example.md b/explore-analyze/machine-learning/nlp/ml-nlp-ner-example.md index 143b05b61..2112b8ebe 100644 --- a/explore-analyze/machine-learning/nlp/ml-nlp-ner-example.md +++ b/explore-analyze/machine-learning/nlp/ml-nlp-ner-example.md @@ -113,7 +113,7 @@ Using the example text "Elastic is headquartered in Mountain View, California.", ## Add the NER model to an {{infer}} ingest pipeline [ex-ner-ingest] -You can perform bulk {{infer}} on documents as they are ingested by using an [{{infer}} processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/inference-processor.html) in your ingest pipeline. The novel *Les Misérables* by Victor Hugo is used as an example for {{infer}} in the following example. [Download](https://github.com/elastic/stack-docs/blob/8.5/docs/en/stack/ml/nlp/data/les-miserables-nd.json) the novel text split by paragraph as a JSON file, then upload it by using the [Data Visualizer](../../../manage-data/ingest/upload-data-files.md). Give the new index the name `les-miserables` when uploading the file. +You can perform bulk {{infer}} on documents as they are ingested by using an [{{infer}} processor](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/inference-processor.md) in your ingest pipeline. The novel *Les Misérables* by Victor Hugo is used as an example for {{infer}} in the following example. [Download](https://github.com/elastic/stack-docs/blob/8.5/docs/en/stack/ml/nlp/data/les-miserables-nd.json) the novel text split by paragraph as a JSON file, then upload it by using the [Data Visualizer](../../../manage-data/ingest/upload-data-files.md). Give the new index the name `les-miserables` when uploading the file. Now create an ingest pipeline either in the [Stack management UI](ml-nlp-inference.md#ml-nlp-inference-processor) or by using the API: diff --git a/explore-analyze/machine-learning/nlp/ml-nlp-overview.md b/explore-analyze/machine-learning/nlp/ml-nlp-overview.md index 0e029e865..bbc0adc39 100644 --- a/explore-analyze/machine-learning/nlp/ml-nlp-overview.md +++ b/explore-analyze/machine-learning/nlp/ml-nlp-overview.md @@ -20,7 +20,7 @@ The [{{infer}} API](https://www.elastic.co/docs/api/doc/elasticsearch/group/endp You can **upload and manage NLP models** using the Eland client and the [{{stack}}](ml-nlp-deploy-models.md). Find the [list of recommended and compatible models here](ml-nlp-model-ref.md). Refer to [*Examples*](ml-nlp-examples.md) to learn more about how to use {{ml}} models deployed in your cluster. -You can **store embeddings in your {{es}} vector database** if you generate [dense vector](https://www.elastic.co/guide/en/elasticsearch/reference/current/dense-vector.html) or [sparse vector](https://www.elastic.co/guide/en/elasticsearch/reference/current/sparse-vector.html) model embeddings outside of {{es}}. +You can **store embeddings in your {{es}} vector database** if you generate [dense vector](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/dense-vector.md) or [sparse vector](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/sparse-vector.md) model embeddings outside of {{es}}. ## What is NLP? [what-is-nlp] diff --git a/explore-analyze/machine-learning/nlp/ml-nlp-rerank.md b/explore-analyze/machine-learning/nlp/ml-nlp-rerank.md index 5acb7df82..6384482c3 100644 --- a/explore-analyze/machine-learning/nlp/ml-nlp-rerank.md +++ b/explore-analyze/machine-learning/nlp/ml-nlp-rerank.md @@ -166,7 +166,7 @@ For a file-based access, follow these steps: * English language only * Maximum context window of 512 tokens - When using the [`semantic_text` field type](https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-text.html), text is divided into chunks. By default, each chunk contains 250 words (approximately 400 tokens). Be cautious when increasing the chunk size - if the combined length of your query and chunk text exceeds 512 tokens, the model won’t have access to the full content. + When using the [`semantic_text` field type](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/semantic-text.md), text is divided into chunks. By default, each chunk contains 250 words (approximately 400 tokens). Be cautious when increasing the chunk size - if the combined length of your query and chunk text exceeds 512 tokens, the model won’t have access to the full content. When the combined inputs exceed the 512 token limit, a balanced truncation strategy is used. If both the query and input text are longer than 255 tokens each then both are truncated, otherwise the longest is truncated. diff --git a/explore-analyze/machine-learning/nlp/ml-nlp-search-compare.md b/explore-analyze/machine-learning/nlp/ml-nlp-search-compare.md index 60f7e6b23..91b641aa2 100644 --- a/explore-analyze/machine-learning/nlp/ml-nlp-search-compare.md +++ b/explore-analyze/machine-learning/nlp/ml-nlp-search-compare.md @@ -17,7 +17,7 @@ The {{stack-ml-features}} can generate embeddings, which you can use to search i Text embedding is a task which produces a mathematical representation of text called an embedding. The {{ml}} model turns the text into an array of numerical values (also known as a *vector*). Pieces of content with similar meaning have similar representations. This means it is possible to determine whether different pieces of text are either semantically similar, different, or even opposite by using a mathematical similarity function. -This task is responsible for producing only the embedding. When the embedding is created, it can be stored in a [dense_vector](https://www.elastic.co/guide/en/elasticsearch/reference/current/dense-vector.html) field and used at search time. For example, you can use these vectors in a [k-nearest neighbor (kNN) search](../../../solutions/search/vector/knn.md) to achieve semantic search capabilities. +This task is responsible for producing only the embedding. When the embedding is created, it can be stored in a [dense_vector](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/dense-vector.md) field and used at search time. For example, you can use these vectors in a [k-nearest neighbor (kNN) search](../../../solutions/search/vector/knn.md) to achieve semantic search capabilities. The following is an example of producing a text embedding: diff --git a/explore-analyze/machine-learning/nlp/ml-nlp-text-emb-vector-search-example.md b/explore-analyze/machine-learning/nlp/ml-nlp-text-emb-vector-search-example.md index a2885dac1..ef323708a 100644 --- a/explore-analyze/machine-learning/nlp/ml-nlp-text-emb-vector-search-example.md +++ b/explore-analyze/machine-learning/nlp/ml-nlp-text-emb-vector-search-example.md @@ -112,7 +112,7 @@ Upload the file by using the [Data Visualizer](../../../manage-data/ingest/uploa ## Add the text embedding model to an {{infer}} ingest pipeline [ex-text-emb-ingest] -Process the initial data with an [{{infer}} processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/inference-processor.html). It adds an embedding for each passage. For this, create a text embedding ingest pipeline and then reindex the initial data with this pipeline. +Process the initial data with an [{{infer}} processor](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/inference-processor.md). It adds an embedding for each passage. For this, create a text embedding ingest pipeline and then reindex the initial data with this pipeline. Now create an ingest pipeline either in the [{{stack-manage-app}} UI](ml-nlp-inference.md#ml-nlp-inference-processor) or by using the API: diff --git a/explore-analyze/machine-learning/setting-up-machine-learning.md b/explore-analyze/machine-learning/setting-up-machine-learning.md index e86708a74..6402734f4 100644 --- a/explore-analyze/machine-learning/setting-up-machine-learning.md +++ b/explore-analyze/machine-learning/setting-up-machine-learning.md @@ -14,8 +14,8 @@ mapped_pages: To use the {{stack}} {{ml-features}}, you must have: * the [appropriate subscription](https://www.elastic.co/subscriptions) level or the free trial period activated -* `xpack.ml.enabled` set to its default value of `true` on every node in the cluster (refer to [{{ml-cap}} settings in {{es}}](https://www.elastic.co/guide/en/elasticsearch/reference/current/ml-settings.html)) -* `ml` value defined in the list of `node.roles` on the [{{ml}} nodes](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#ml-node) +* `xpack.ml.enabled` set to its default value of `true` on every node in the cluster (refer to [{{ml-cap}} settings in {{es}}](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/machine-learning-settings.md)) +* `ml` value defined in the list of `node.roles` on the [{{ml}} nodes](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md#ml-node) * {{ml}} features visible in the {{kib}} space * security privileges assigned to the user that: diff --git a/explore-analyze/numeral-formatting.md b/explore-analyze/numeral-formatting.md index f8b661f9e..25b5b5620 100644 --- a/explore-analyze/numeral-formatting.md +++ b/explore-analyze/numeral-formatting.md @@ -12,7 +12,7 @@ Numeral formatting in {{kib}} is done through a pattern-based syntax. These patt Numeral formatting patterns are used in multiple places in {{kib}}, including: -* [Advanced settings](https://www.elastic.co/guide/en/kibana/current/advanced-options.html) +* [Advanced settings](asciidocalypse://docs/kibana/docs/reference/advanced-settings.md) * [Data view formatters](find-and-organize/data-views.md#field-formatters-numeric) * [**TSVB**](visualize/legacy-editors/tsvb.md) * [**Canvas**](visualize/canvas.md) @@ -28,7 +28,7 @@ Thousands separator Accounting notation : Putting parentheses around your format like `(0.00)` will use accounting notation to show negative numbers. -The display of these patterns is affected by the [advanced setting](https://www.elastic.co/guide/en/kibana/current/advanced-options.html#kibana-general-settings) `format:number:defaultLocale`. The default locale is `en`, but some examples will specify that they are using an alternate locale. +The display of these patterns is affected by the [advanced setting](asciidocalypse://docs/kibana/docs/reference/advanced-settings.md#kibana-general-settings) `format:number:defaultLocale`. The default locale is `en`, but some examples will specify that they are using an alternate locale. Most basic examples: diff --git a/explore-analyze/query-filter/aggregations.md b/explore-analyze/query-filter/aggregations.md index c2905f81e..ca9e63897 100644 --- a/explore-analyze/query-filter/aggregations.md +++ b/explore-analyze/query-filter/aggregations.md @@ -17,13 +17,13 @@ An aggregation summarizes your data as metrics, statistics, or other analytics. {{es}} organizes aggregations into three categories: -* [Metric](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics.html) aggregations that calculate metrics, such as a sum or average, from field values. -* [Bucket](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket.html) aggregations that group documents into buckets, also called bins, based on field values, ranges, or other criteria. -* [Pipeline](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline.html) aggregations that take input from other aggregations instead of documents or fields. +* [Metric](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/metrics.md) aggregations that calculate metrics, such as a sum or average, from field values. +* [Bucket](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/bucket.md) aggregations that group documents into buckets, also called bins, based on field values, ranges, or other criteria. +* [Pipeline](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/pipeline.md) aggregations that take input from other aggregations instead of documents or fields. ## Run an aggregation [run-an-agg] -You can run aggregations as part of a [search](../../solutions/search/querying-for-search.md) by specifying the [search API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-search)'s `aggs` parameter. The following search runs a [terms aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html) on `my-field`: +You can run aggregations as part of a [search](../../solutions/search/querying-for-search.md) by specifying the [search API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-search)'s `aggs` parameter. The following search runs a [terms aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-terms-aggregation.md) on `my-field`: ```console GET /my-index-000001/_search @@ -137,7 +137,7 @@ GET /my-index-000001/_search ## Run sub-aggregations [run-sub-aggs] -Bucket aggregations support bucket or metric sub-aggregations. For example, a terms aggregation with an [avg](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-avg-aggregation.html) sub-aggregation calculates an average value for each bucket of documents. There is no level or depth limit for nesting sub-aggregations. +Bucket aggregations support bucket or metric sub-aggregations. For example, a terms aggregation with an [avg](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-avg-aggregation.md) sub-aggregation calculates an average value for each bucket of documents. There is no level or depth limit for nesting sub-aggregations. ```console GET /my-index-000001/_search @@ -244,7 +244,7 @@ GET /my-index-000001/_search?typed_keys The response returns the aggregation type as a prefix to the aggregation’s name. ::::{important} -Some aggregations return a different aggregation type from the type in the request. For example, the terms, [significant terms](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-significantterms-aggregation.html), and [percentiles](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-percentile-aggregation.html) aggregations return different aggregations types depending on the data type of the aggregated field. +Some aggregations return a different aggregation type from the type in the request. For example, the terms, [significant terms](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-significantterms-aggregation.md), and [percentiles](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-percentile-aggregation.md) aggregations return different aggregations types depending on the data type of the aggregated field. :::: ```console-result @@ -284,14 +284,14 @@ GET /my-index-000001/_search?size=0 } ``` -Scripts calculate field values dynamically, which adds a little overhead to the aggregation. In addition to the time spent calculating, some aggregations like [`terms`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html) and [`filters`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filters-aggregation.html) can’t use some of their optimizations with runtime fields. In total, performance costs for using a runtime field varies from aggregation to aggregation. +Scripts calculate field values dynamically, which adds a little overhead to the aggregation. In addition to the time spent calculating, some aggregations like [`terms`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-terms-aggregation.md) and [`filters`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-filters-aggregation.md) can’t use some of their optimizations with runtime fields. In total, performance costs for using a runtime field varies from aggregation to aggregation. ## Aggregation caches [agg-caches] -For faster responses, {{es}} caches the results of frequently run aggregations in the [shard request cache](https://www.elastic.co/guide/en/elasticsearch/reference/current/shard-request-cache.html). To get cached results, use the same [`preference` string](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-shard-routing.html#shard-and-node-preference) for each search. If you don’t need search hits, [set `size` to `0`](#return-only-agg-results) to avoid filling the cache. +For faster responses, {{es}} caches the results of frequently run aggregations in the [shard request cache](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/shard-request-cache-settings.md). To get cached results, use the same [`preference` string](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/search-shard-routing.md#shard-and-node-preference) for each search. If you don’t need search hits, [set `size` to `0`](#return-only-agg-results) to avoid filling the cache. {{es}} routes searches with the same preference string to the same shards. If the shards' data doesn’t change between searches, the shards return cached aggregation results. ## Limits for `long` values [limits-for-long-values] -When running aggregations, {{es}} uses [`double`](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) values to hold and represent numeric data. As a result, aggregations on [`long`](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) numbers greater than `253` are approximate. +When running aggregations, {{es}} uses [`double`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) values to hold and represent numeric data. As a result, aggregations on [`long`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) numbers greater than `253` are approximate. diff --git a/explore-analyze/query-filter/aggregations/tutorial-analyze-ecommerce-data-with-aggregations-using-query-dsl.md b/explore-analyze/query-filter/aggregations/tutorial-analyze-ecommerce-data-with-aggregations-using-query-dsl.md index fc66dc8a9..f81a3352c 100644 --- a/explore-analyze/query-filter/aggregations/tutorial-analyze-ecommerce-data-with-aggregations-using-query-dsl.md +++ b/explore-analyze/query-filter/aggregations/tutorial-analyze-ecommerce-data-with-aggregations-using-query-dsl.md @@ -268,19 +268,19 @@ The response shows the field mappings for the `kibana_sample_data_ecommerce` ind :::: -The sample data includes the following [field data types](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html): +The sample data includes the following [field data types](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/field-data-types.md): -* [`text`](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html) and [`keyword`](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html) for text fields - * Most `text` fields have a `.keyword` subfield for exact matching using [multi-fields](https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html) +* [`text`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md) and [`keyword`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md) for text fields + * Most `text` fields have a `.keyword` subfield for exact matching using [multi-fields](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/multi-fields.md) -* [`date`](https://www.elastic.co/guide/en/elasticsearch/reference/current/date.html) for date fields -* 3 [numeric](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) types: +* [`date`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/date.md) for date fields +* 3 [numeric](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) types: * `integer` for whole numbers * `long` for large whole numbers * `half_float` for floating-point numbers -* [`geo_point`](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html) for geographic coordinates -* [`object`](https://www.elastic.co/guide/en/elasticsearch/reference/current/object.html) for nested structures such as `products`, `geoip`, `event` +* [`geo_point`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-point.md) for geographic coordinates +* [`object`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/object.md) for nested structures such as `products`, `geoip`, `event` Now that we understand the structure of our sample data, let’s start analyzing it. @@ -290,7 +290,7 @@ Let’s start by calculating important metrics about orders and customers. ### Get average order size [aggregations-tutorial-order-value] -Calculate the average order value across all orders in the dataset using the [`avg`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-avg-aggregation.html) aggregation. +Calculate the average order value across all orders in the dataset using the [`avg`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-avg-aggregation.md) aggregation. ```console GET kibana_sample_data_ecommerce/_search @@ -347,7 +347,7 @@ GET kibana_sample_data_ecommerce/_search ### Get multiple order statistics at once [aggregations-tutorial-order-stats] -Calculate multiple statistics about orders in one request using the [`stats`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-stats-aggregation.html) aggregation. +Calculate multiple statistics about orders in one request using the [`stats`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-stats-aggregation.md) aggregation. ```console GET kibana_sample_data_ecommerce/_search @@ -391,7 +391,7 @@ GET kibana_sample_data_ecommerce/_search :::: ::::{tip} -The [stats aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-stats-aggregation.html) is more efficient than running individual min, max, avg, and sum aggregations. +The [stats aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-stats-aggregation.md) is more efficient than running individual min, max, avg, and sum aggregations. :::: @@ -401,7 +401,7 @@ Let’s group orders in different ways to understand sales patterns. ### Break down sales by category [aggregations-tutorial-category-breakdown] -Group orders by category to see which product categories are most popular, using the [`terms`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html) aggregation. +Group orders by category to see which product categories are most popular, using the [`terms`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-terms-aggregation.md) aggregation. ```console GET kibana_sample_data_ecommerce/_search @@ -421,7 +421,7 @@ GET kibana_sample_data_ecommerce/_search 1. Name reflecting the business purpose of this breakdown 2. `terms` aggregation groups documents by field values -3. Use [`.keyword`](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html) field for exact matching on text fields +3. Use [`.keyword`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md) field for exact matching on text fields 4. Limit to top 5 categories 5. Order by number of orders (descending) @@ -476,7 +476,7 @@ GET kibana_sample_data_ecommerce/_search } ``` -1. Due to Elasticsearch’s distributed architecture, when [terms aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html) run across multiple shards, the doc counts may have a small margin of error. This value indicates the maximum possible error in the counts. +1. Due to Elasticsearch’s distributed architecture, when [terms aggregations](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-terms-aggregation.md) run across multiple shards, the doc counts may have a small margin of error. This value indicates the maximum possible error in the counts. 2. Count of documents in categories beyond the requested size. 3. Array of category buckets, ordered by count. 4. Category name. @@ -486,7 +486,7 @@ GET kibana_sample_data_ecommerce/_search ### Track daily sales patterns [aggregations-tutorial-daily-sales] -Group orders by day to track daily sales patterns using the [`date_histogram`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-datehistogram-aggregation.html) aggregation. +Group orders by day to track daily sales patterns using the [`date_histogram`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-datehistogram-aggregation.md) aggregation. ```console GET kibana_sample_data_ecommerce/_search @@ -507,8 +507,8 @@ GET kibana_sample_data_ecommerce/_search 1. Descriptive name for the time-series aggregation results. 2. The `date_histogram` aggregation groups documents into time-based buckets, similar to terms aggregation but for dates. -3. Uses [calendar and fixed time intervals](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-datehistogram-aggregation.html#calendar_and_fixed_intervals) to handle months with different lengths. `"day"` ensures consistent daily grouping regardless of timezone. -4. Formats dates in response using [date patterns](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html) (e.g. "yyyy-MM-dd"). Refer to [date math expressions](https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#date-math) for additional options. +3. Uses [calendar and fixed time intervals](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-datehistogram-aggregation.md#calendar_and_fixed_intervals) to handle months with different lengths. `"day"` ensures consistent daily grouping regardless of timezone. +4. Formats dates in response using [date patterns](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-date-format.md) (e.g. "yyyy-MM-dd"). Refer to [date math expressions](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/common-options.md#date-math) for additional options. 5. When `min_doc_count` is 0, returns buckets for days with no orders, useful for continuous time series visualization. ::::{dropdown} Example response @@ -705,7 +705,7 @@ GET kibana_sample_data_ecommerce/_search ## Combine metrics with groupings [aggregations-tutorial-combined-analysis] -Now let’s calculate [metrics](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics.html) within each group to get deeper insights. +Now let’s calculate [metrics](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/metrics.md) within each group to get deeper insights. ### Compare category performance [aggregations-tutorial-category-metrics] @@ -827,7 +827,7 @@ GET kibana_sample_data_ecommerce/_search ``` 1. Daily revenue -2. Uses the [`cardinality`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html) aggregation to count unique customers per day +2. Uses the [`cardinality`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-cardinality-aggregation.md) aggregation to count unique customers per day 3. Average number of items per order ::::{dropdown} Example response @@ -1297,11 +1297,11 @@ GET kibana_sample_data_ecommerce/_search ## Track trends and patterns [aggregations-tutorial-trends] -You can use [pipeline aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline.html) on the results of other aggregations. Let’s analyze how metrics change over time. +You can use [pipeline aggregations](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/pipeline.md) on the results of other aggregations. Let’s analyze how metrics change over time. ### Smooth out daily fluctuations [aggregations-tutorial-moving-average] -Moving averages help identify trends by reducing day-to-day noise in the data. Let’s observe sales trends more clearly by smoothing daily revenue variations, using the [Moving Function](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-movfn-aggregation.html) aggregation. +Moving averages help identify trends by reducing day-to-day noise in the data. Let’s observe sales trends more clearly by smoothing daily revenue variations, using the [Moving Function](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-pipeline-movfn-aggregation.md) aggregation. ```console GET kibana_sample_data_ecommerce/_search @@ -1724,7 +1724,7 @@ Notice how the smoothed values lag behind the actual values - this is because th ### Track running totals [aggregations-tutorial-cumulative] -Track running totals over time using the [`cumulative_sum`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-cumulative-sum-aggregation.html) aggregation. +Track running totals over time using the [`cumulative_sum`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-pipeline-cumulative-sum-aggregation.md) aggregation. ```console GET kibana_sample_data_ecommerce/_search diff --git a/explore-analyze/query-filter/filtering.md b/explore-analyze/query-filter/filtering.md index d8583c60f..74352aaa1 100644 --- a/explore-analyze/query-filter/filtering.md +++ b/explore-analyze/query-filter/filtering.md @@ -26,7 +26,7 @@ Some apps provide more options, such as [Dashboards](../dashboards.md). ## Time filter [set-time-filter] -Display data within a specified time range when your index contains time-based events, and a time-field is configured for the selected [{{data-source}}](../find-and-organize/data-views.md). The default time range is 15 minutes, but you can customize it in [Advanced Settings](https://www.elastic.co/guide/en/kibana/current/advanced-options.html). +Display data within a specified time range when your index contains time-based events, and a time-field is configured for the selected [{{data-source}}](../find-and-organize/data-views.md). The default time range is 15 minutes, but you can customize it in [Advanced Settings](asciidocalypse://docs/kibana/docs/reference/advanced-settings.md). 1. Click ![calendar icon](../../images/kibana-time-filter-icon.png). 2. Choose one of the following: diff --git a/explore-analyze/query-filter/languages/eql.md b/explore-analyze/query-filter/languages/eql.md index 218c26252..d3a76fcfd 100644 --- a/explore-analyze/query-filter/languages/eql.md +++ b/explore-analyze/query-filter/languages/eql.md @@ -18,7 +18,7 @@ Event Query Language (EQL) is a query language for event-based time series data, ## Advantages of EQL [eql-advantages] * **EQL lets you express relationships between events.**
Many query languages allow you to match single events. EQL lets you match a sequence of events across different event categories and time spans. -* **EQL has a low learning curve.**
[EQL syntax](https://www.elastic.co/guide/en/elasticsearch/reference/current/eql-syntax.html) looks like other common query languages, such as SQL. EQL lets you write and read queries intuitively, which makes for quick, iterative searching. +* **EQL has a low learning curve.**
[EQL syntax](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/eql-syntax.md) looks like other common query languages, such as SQL. EQL lets you write and read queries intuitively, which makes for quick, iterative searching. * **EQL is designed for security use cases.**
While you can use it for any event-based data, we created EQL for threat hunting. EQL not only supports indicator of compromise (IOC) searches but can describe activity that goes beyond IOCs. @@ -26,7 +26,7 @@ Event Query Language (EQL) is a query language for event-based time series data, With the exception of sample queries, EQL searches require that the searched data stream or index contains a *timestamp* field. By default, EQL uses the `@timestamp` field from the [Elastic Common Schema (ECS)](https://www.elastic.co/guide/en/ecs/current). -EQL searches also require an *event category* field, unless you use the [`any` keyword](https://www.elastic.co/guide/en/elasticsearch/reference/current/eql-syntax.html#eql-syntax-match-any-event-category) to search for documents without an event category field. By default, EQL uses the ECS `event.category` field. +EQL searches also require an *event category* field, unless you use the [`any` keyword](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/eql-syntax.md#eql-syntax-match-any-event-category) to search for documents without an event category field. By default, EQL uses the ECS `event.category` field. To use a different timestamp or event category field, see [Specify a timestamp or event category field](#specify-a-timestamp-or-event-category-field). @@ -38,7 +38,7 @@ While no schema is required to use EQL, we recommend using the [ECS](https://www ## Run an EQL search [run-an-eql-search] -Use the [EQL search API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-eql-search) to run a [basic EQL query](https://www.elastic.co/guide/en/elasticsearch/reference/current/eql-syntax.html#eql-basic-syntax). +Use the [EQL search API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-eql-search) to run a [basic EQL query](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/eql-syntax.md#eql-basic-syntax). ```console GET /my-data-stream/_eql/search @@ -119,7 +119,7 @@ GET /my-data-stream/_eql/search ## Search for a sequence of events [eql-search-sequence] -Use EQL’s [sequence syntax](https://www.elastic.co/guide/en/elasticsearch/reference/current/eql-syntax.html#eql-sequences) to search for a series of ordered events. List the event items in ascending chronological order, with the most recent event listed last: +Use EQL’s [sequence syntax](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/eql-syntax.md#eql-sequences) to search for a series of ordered events. List the event items in ascending chronological order, with the most recent event listed last: ```console GET /my-data-stream/_eql/search @@ -188,7 +188,7 @@ The response’s `hits.sequences` property contains the 10 most recent matching } ``` -Use [`with maxspan`](https://www.elastic.co/guide/en/elasticsearch/reference/current/eql-syntax.html#eql-with-maxspan-keywords) to constrain matching sequences to a timespan: +Use [`with maxspan`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/eql-syntax.md#eql-with-maxspan-keywords) to constrain matching sequences to a timespan: ```console GET /my-data-stream/_eql/search @@ -201,7 +201,7 @@ GET /my-data-stream/_eql/search } ``` -Use `!` to match [missing events](https://www.elastic.co/guide/en/elasticsearch/reference/current/eql-syntax.html#eql-missing-events): events in a sequence that do not meet a condition within a given timespan: +Use `!` to match [missing events](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/eql-syntax.md#eql-missing-events): events in a sequence that do not meet a condition within a given timespan: ```console GET /my-data-stream/_eql/search @@ -276,7 +276,7 @@ Missing events are indicated in the response as `missing": true`: } ``` -Use the [`by` keyword](https://www.elastic.co/guide/en/elasticsearch/reference/current/eql-syntax.html#eql-by-keyword) to match events that share the same field values: +Use the [`by` keyword](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/eql-syntax.md#eql-by-keyword) to match events that share the same field values: ```console GET /my-data-stream/_eql/search @@ -320,7 +320,7 @@ The `hits.sequences.join_keys` property contains the shared field values. } ``` -Use the [`until` keyword](https://www.elastic.co/guide/en/elasticsearch/reference/current/eql-syntax.html#eql-until-keyword) to specify an expiration event for sequences. Matching sequences must end before this event. +Use the [`until` keyword](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/eql-syntax.md#eql-until-keyword) to specify an expiration event for sequences. Matching sequences must end before this event. ```console GET /my-data-stream/_eql/search @@ -337,7 +337,7 @@ GET /my-data-stream/_eql/search ## Sample chronologically unordered events [eql-search-sample] -Use EQL’s [sample syntax](https://www.elastic.co/guide/en/elasticsearch/reference/current/eql-syntax.html#eql-samples) to search for events that match one or more join keys and a set of filters. Samples are similar to sequences, but do not return events in chronological order. In fact, sample queries can run on data without a timestamp. Sample queries can be useful to find correlations in events that don’t always occur in the same sequence, or that occur across long time spans. +Use EQL’s [sample syntax](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/eql-syntax.md#eql-samples) to search for events that match one or more join keys and a set of filters. Samples are similar to sequences, but do not return events in chronological order. In fact, sample queries can run on data without a timestamp. Sample queries can be useful to find correlations in events that don’t always occur in the same sequence, or that occur across long time spans. ::::{dropdown} Click to show the sample data used in the examples below ```console @@ -553,7 +553,7 @@ POST /my-index-000003/_bulk?refresh :::: -A sample query specifies at least one join key, using the [`by` keyword](https://www.elastic.co/guide/en/elasticsearch/reference/current/eql-syntax.html#eql-by-keyword), and up to five filters: +A sample query specifies at least one join key, using the [`by` keyword](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/eql-syntax.md#eql-by-keyword), and up to five filters: ```console GET /my-index*/_eql/search @@ -871,7 +871,7 @@ GET /my-index*/_eql/search By default, each hit in the search response includes the document `_source`, which is the entire JSON object that was provided when indexing the document. -You can use the [`filter_path`](https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#common-options-response-filtering) query parameter to filter the API response. For example, the following search returns only the timestamp and PID from the `_source` of each matching event. +You can use the [`filter_path`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/common-options.md#common-options-response-filtering) query parameter to filter the API response. For example, the following search returns only the timestamp and PID from the `_source` of each matching event. ```console GET /my-data-stream/_eql/search?filter_path=hits.events._source.@timestamp,hits.events._source.process.pid @@ -909,12 +909,12 @@ The API returns the following response. } ``` -You can also use the `fields` parameter to retrieve and format specific fields in the response. This field is identical to the search API’s [`fields` parameter](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-fields.html). +You can also use the `fields` parameter to retrieve and format specific fields in the response. This field is identical to the search API’s [`fields` parameter](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/retrieve-selected-fields.md). Because it consults the index mappings, the `fields` parameter provides several advantages over referencing the `_source` directly. Specifically, the `fields` parameter: * Returns each value in a standardized way that matches its mapping type -* Accepts [multi-fields](https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html) and [field aliases](https://www.elastic.co/guide/en/elasticsearch/reference/current/field-alias.html) +* Accepts [multi-fields](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/multi-fields.md) and [field aliases](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/field-alias.md) * Formats dates and spatial data types * Retrieves [runtime field values](../../../manage-data/data-store/mapping/retrieve-runtime-field.md) * Returns fields calculated by a script at index time @@ -1055,7 +1055,7 @@ GET /my-data-stream/_eql/search } ``` -The event category field must be mapped as a [`keyword`](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html) family field type. The timestamp field should be mapped as a [`date`](https://www.elastic.co/guide/en/elasticsearch/reference/current/date.html) field type. [`date_nanos`](https://www.elastic.co/guide/en/elasticsearch/reference/current/date_nanos.html) timestamp fields are not supported. You cannot use a [`nested`](https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html) field or the sub-fields of a `nested` field as the timestamp or event category field. +The event category field must be mapped as a [`keyword`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md) family field type. The timestamp field should be mapped as a [`date`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/date.md) field type. [`date_nanos`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/date_nanos.md) timestamp fields are not supported. You cannot use a [`nested`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/nested.md) field or the sub-fields of a `nested` field as the timestamp or event category field. ## Specify a sort tiebreaker [eql-search-specify-a-sort-tiebreaker] @@ -1286,5 +1286,5 @@ GET /cluster_one:my-data-stream,cluster_two:my-data-stream/_eql/search ## EQL circuit breaker settings [eql-circuit-breaker] -The relevant circuit breaker settings can be found in the [Circuit Breakers page](https://www.elastic.co/guide/en/elasticsearch/reference/current/circuit-breaker.html#circuit-breakers-page-eql). +The relevant circuit breaker settings can be found in the [Circuit Breakers page](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/circuit-breaker-settings.md#circuit-breakers-page-eql). diff --git a/explore-analyze/query-filter/languages/esql-cross-clusters.md b/explore-analyze/query-filter/languages/esql-cross-clusters.md index 69b1842b0..682337d36 100644 --- a/explore-analyze/query-filter/languages/esql-cross-clusters.md +++ b/explore-analyze/query-filter/languages/esql-cross-clusters.md @@ -22,17 +22,17 @@ With {{esql}}, you can execute a single query across multiple clusters. ## Prerequisites [esql-ccs-prerequisites] -* {{ccs-cap}} requires remote clusters. To set up remote clusters on {{ess}}, see [configure remote clusters on {{ess}}](https://www.elastic.co/guide/en/cloud/current/ec-enable-ccs.html). If you run {{es}} on your own hardware, see [*Remote clusters*](../../../deploy-manage/remote-clusters.md). +* {{ccs-cap}} requires remote clusters. To set up remote clusters on {{ess}}, see [configure remote clusters on {{ess}}](/deploy-manage/remote-clusters/ec-enable-ccs.md). If you run {{es}} on your own hardware, see [*Remote clusters*](../../../deploy-manage/remote-clusters.md). To ensure your remote cluster configuration supports {{ccs}}, see [Supported {{ccs}} configurations](../../../solutions/search/cross-cluster-search.md#ccs-supported-configurations). * For full {{ccs}} capabilities, the local and remote cluster must be on the same [subscription level](https://www.elastic.co/subscriptions). * The local coordinating node must have the [`remote_cluster_client`](../../../deploy-manage/distributed-architecture/clusters-nodes-shards/node-roles.md#remote-node) node role. -* If you use [sniff mode](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#sniff-mode), the local coordinating node must be able to connect to seed and gateway nodes on the remote cluster. +* If you use [sniff mode](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#sniff-mode), the local coordinating node must be able to connect to seed and gateway nodes on the remote cluster. We recommend using gateway nodes capable of serving as coordinating nodes. The seed nodes can be a subset of these gateway nodes. -* If you use [proxy mode](https://www.elastic.co/guide/en/elasticsearch/reference/current/remote-clusters.html#proxy-mode), the local coordinating node must be able to connect to the configured `proxy_address`. The proxy at this address must be able to route connections to gateway and coordinating nodes on the remote cluster. +* If you use [proxy mode](/deploy-manage/remote-clusters/remote-clusters-self-managed.md#proxy-mode), the local coordinating node must be able to connect to the configured `proxy_address`. The proxy at this address must be able to route connections to gateway and coordinating nodes on the remote cluster. * {{ccs-cap}} requires different security privileges on the local cluster and remote cluster. See [Configure privileges for {{ccs}}](../../../deploy-manage/remote-clusters/remote-clusters-cert.md#remote-clusters-privileges-ccs) and [*Remote clusters*](../../../deploy-manage/remote-clusters.md). @@ -361,7 +361,7 @@ Which returns: ## Enrich across clusters [ccq-enrich] -Enrich in {{esql}} across clusters operates similarly to [local enrich](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-enrich). If the enrich policy and its enrich indices are consistent across all clusters, simply write the enrich command as you would without remote clusters. In this default mode, {{esql}} can execute the enrich command on either the local cluster or the remote clusters, aiming to minimize computation or inter-cluster data transfer. Ensuring that the policy exists with consistent data on both the local cluster and the remote clusters is critical for ES|QL to produce a consistent query result. +Enrich in {{esql}} across clusters operates similarly to [local enrich](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-enrich). If the enrich policy and its enrich indices are consistent across all clusters, simply write the enrich command as you would without remote clusters. In this default mode, {{esql}} can execute the enrich command on either the local cluster or the remote clusters, aiming to minimize computation or inter-cluster data transfer. Ensuring that the policy exists with consistent data on both the local cluster and the remote clusters is critical for ES|QL to produce a consistent query result. ::::{tip} Enrich in {{esql}} across clusters using the API key based security model was introduced in version **8.15.0**. Cross cluster API keys created in versions prior to 8.15.0 will need to replaced or updated to use the new required permissions. Refer to the example in the [API key authentication](#esql-ccs-security-model-api-key) section. @@ -417,7 +417,7 @@ FROM my-index-000001,cluster_one:my-index-000001,cluster_two:my-index-000001 | LIMIT 10 ``` -A `_remote` enrich cannot be executed after a [stats](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-stats-by) command. The following example would result in an error: +A `_remote` enrich cannot be executed after a [stats](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-stats-by) command. The following example would result in an error: ```esql FROM my-index-000001,cluster_one:my-index-000001,cluster_two:my-index-000001 diff --git a/explore-analyze/query-filter/languages/esql-getting-started.md b/explore-analyze/query-filter/languages/esql-getting-started.md index 3e9a97fd7..0e923b254 100644 --- a/explore-analyze/query-filter/languages/esql-getting-started.md +++ b/explore-analyze/query-filter/languages/esql-getting-started.md @@ -117,13 +117,13 @@ You can adjust the editor’s height by dragging its bottom border to your likin ## Your first {{esql}} query [esql-getting-started-first-query] -Each {{esql}} query starts with a [source command](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-source-commands). A source command produces a table, typically with data from {{es}}. +Each {{esql}} query starts with a [source command](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-source-commands). A source command produces a table, typically with data from {{es}}. :::{image} ../../../images/elasticsearch-reference-source-command.svg :alt: A source command producing a table from {{es}} ::: -The [`FROM`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-from) source command returns a table with documents from a data stream, index, or alias. Each row in the resulting table represents a document. This query returns up to 1000 documents from the `sample_data` index: +The [`FROM`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-from) source command returns a table with documents from a data stream, index, or alias. Each row in the resulting table represents a document. This query returns up to 1000 documents from the `sample_data` index: ```esql FROM sample_data @@ -144,13 +144,13 @@ from sample_data ## Processing commands [esql-getting-started-limit] -A source command can be followed by one or more [processing commands](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-processing-commands), separated by a pipe character: `|`. Processing commands change an input table by adding, removing, or changing rows and columns. Processing commands can perform filtering, projection, aggregation, and more. +A source command can be followed by one or more [processing commands](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-processing-commands), separated by a pipe character: `|`. Processing commands change an input table by adding, removing, or changing rows and columns. Processing commands can perform filtering, projection, aggregation, and more. :::{image} ../../../images/elasticsearch-reference-esql-limit.png :alt: A processing command changing an input table ::: -For example, you can use the [`LIMIT`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-limit) command to limit the number of rows that are returned, up to a maximum of 10,000 rows: +For example, you can use the [`LIMIT`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-limit) command to limit the number of rows that are returned, up to a maximum of 10,000 rows: ```esql FROM sample_data @@ -174,7 +174,7 @@ FROM sample_data | LIMIT 3 :alt: A processing command sorting an input table ::: -Another processing command is the [`SORT`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-sort) command. By default, the rows returned by `FROM` don’t have a defined sort order. Use the `SORT` command to sort rows on one or more columns: +Another processing command is the [`SORT`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-sort) command. By default, the rows returned by `FROM` don’t have a defined sort order. Use the `SORT` command to sort rows on one or more columns: ```esql FROM sample_data @@ -184,14 +184,14 @@ FROM sample_data ### Query the data [esql-getting-started-where] -Use the [`WHERE`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-where) command to query the data. For example, to find all events with a duration longer than 5ms: +Use the [`WHERE`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-where) command to query the data. For example, to find all events with a duration longer than 5ms: ```esql FROM sample_data | WHERE event_duration > 5000000 ``` -`WHERE` supports several [operators](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-functions-operators.html#esql-operators). For example, you can use [`LIKE`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-functions-operators.html#esql-like-operator) to run a wildcard query against the `message` column: +`WHERE` supports several [operators](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-functions-operators.md#esql-operators). For example, you can use [`LIKE`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-functions-operators.md#esql-like-operator) to run a wildcard query against the `message` column: ```esql FROM sample_data @@ -201,7 +201,7 @@ FROM sample_data ### More processing commands [esql-getting-started-more-commands] -There are many other processing commands, like [`KEEP`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-keep) and [`DROP`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-drop) to keep or drop columns, [`ENRICH`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-enrich) to enrich a table with data from indices in {{es}}, and [`DISSECT`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-dissect) and [`GROK`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-grok) to process data. Refer to [Processing commands](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-processing-commands) for an overview of all processing commands. +There are many other processing commands, like [`KEEP`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-keep) and [`DROP`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-drop) to keep or drop columns, [`ENRICH`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-enrich) to enrich a table with data from indices in {{es}}, and [`DISSECT`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-dissect) and [`GROK`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-grok) to process data. Refer to [Processing commands](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-processing-commands) for an overview of all processing commands. ## Chain processing commands [esql-getting-started-chaining] @@ -228,14 +228,14 @@ The order of processing commands is important. First limiting the result set to ## Compute values [esql-getting-started-eval] -Use the [`EVAL`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-eval) command to append columns to a table, with calculated values. For example, the following query appends a `duration_ms` column. The values in the column are computed by dividing `event_duration` by 1,000,000. In other words: `event_duration` converted from nanoseconds to milliseconds. +Use the [`EVAL`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-eval) command to append columns to a table, with calculated values. For example, the following query appends a `duration_ms` column. The values in the column are computed by dividing `event_duration` by 1,000,000. In other words: `event_duration` converted from nanoseconds to milliseconds. ```esql FROM sample_data | EVAL duration_ms = event_duration/1000000.0 ``` -`EVAL` supports several [functions](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-functions-operators.html#esql-functions). For example, to round a number to the closest number with the specified number of digits, use the [`ROUND`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-functions-operators.html#esql-round) function: +`EVAL` supports several [functions](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-functions-operators.md#esql-functions). For example, to round a number to the closest number with the specified number of digits, use the [`ROUND`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-functions-operators.md#esql-round) function: ```esql FROM sample_data @@ -245,7 +245,7 @@ FROM sample_data ## Calculate statistics [esql-getting-started-stats] -{{esql}} can not only be used to query your data, you can also use it to aggregate your data. Use the [`STATS`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-stats-by) command to calculate statistics. For example, the median duration: +{{esql}} can not only be used to query your data, you can also use it to aggregate your data. Use the [`STATS`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-stats-by) command to calculate statistics. For example, the median duration: ```esql FROM sample_data @@ -269,7 +269,7 @@ FROM sample_data ## Access columns [esql-getting-started-access-columns] -You can access columns by their name. If a name contains special characters, [it needs to be quoted](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-syntax.html#esql-identifiers) with backticks (```). +You can access columns by their name. If a name contains special characters, [it needs to be quoted](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-syntax.md#esql-identifiers) with backticks (```). Assigning an explicit name to a column created by `EVAL` or `STATS` is optional. If you don’t provide a name, the new column name is equal to the function expression. For example: @@ -289,9 +289,9 @@ FROM sample_data ## Create a histogram [esql-getting-started-histogram] -To track statistics over time, {{esql}} enables you to create histograms using the [`BUCKET`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-functions-operators.html#esql-bucket) function. `BUCKET` creates human-friendly bucket sizes and returns a value for each row that corresponds to the resulting bucket the row falls into. +To track statistics over time, {{esql}} enables you to create histograms using the [`BUCKET`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-functions-operators.md#esql-bucket) function. `BUCKET` creates human-friendly bucket sizes and returns a value for each row that corresponds to the resulting bucket the row falls into. -Combine `BUCKET` with [`STATS`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-stats-by) to create a histogram. For example, to count the number of events per hour: +Combine `BUCKET` with [`STATS`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-stats-by) to create a histogram. For example, to count the number of events per hour: ```esql FROM sample_data @@ -309,13 +309,13 @@ FROM sample_data ## Enrich data [esql-getting-started-enrich] -{{esql}} enables you to [enrich](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-enrich-data.html) a table with data from indices in {{es}}, using the [`ENRICH`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-enrich) command. +{{esql}} enables you to [enrich](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-enrich-data.md) a table with data from indices in {{es}}, using the [`ENRICH`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-enrich) command. :::{image} ../../../images/elasticsearch-reference-esql-enrich.png :alt: esql enrich ::: -Before you can use `ENRICH`, you first need to [create](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-enrich-data.html#esql-create-enrich-policy) and [execute](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-enrich-data.html#esql-execute-enrich-policy) an [enrich policy](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-enrich-data.html#esql-enrich-policy). +Before you can use `ENRICH`, you first need to [create](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-enrich-data.md#esql-create-enrich-policy) and [execute](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-enrich-data.md#esql-execute-enrich-policy) an [enrich policy](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-enrich-data.md#esql-enrich-policy). :::::::{tab-set} @@ -386,12 +386,12 @@ FROM sample_data | STATS median_duration = MEDIAN(event_duration) BY env ``` -For more about data enrichment with {{esql}}, refer to [Data enrichment](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-enrich-data.html). +For more about data enrichment with {{esql}}, refer to [Data enrichment](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-enrich-data.md). ## Process data [esql-getting-started-process-data] -Your data may contain unstructured strings that you want to [structure](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-process-data-with-dissect-and-grok.html) to make it easier to analyze the data. For example, the sample data contains log messages like: +Your data may contain unstructured strings that you want to [structure](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-process-data-with-dissect-grok.md) to make it easier to analyze the data. For example, the sample data contains log messages like: ```txt "Connected to 10.1.0.3" @@ -399,7 +399,7 @@ Your data may contain unstructured strings that you want to [structure](https:// By extracting the IP address from these messages, you can determine which IP has accepted the most client connections. -To structure unstructured strings at query time, you can use the {{esql}} [`DISSECT`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-dissect) and [`GROK`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-grok) commands. `DISSECT` works by breaking up a string using a delimiter-based pattern. `GROK` works similarly, but uses regular expressions. This makes `GROK` more powerful, but generally also slower. +To structure unstructured strings at query time, you can use the {{esql}} [`DISSECT`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-dissect) and [`GROK`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-grok) commands. `DISSECT` works by breaking up a string using a delimiter-based pattern. `GROK` works similarly, but uses regular expressions. This makes `GROK` more powerful, but generally also slower. In this case, no regular expressions are needed, as the `message` is straightforward: "Connected to ", followed by the server IP. To match this string, you can use the following `DISSECT` command: @@ -419,10 +419,10 @@ FROM sample_data | STATS COUNT(*) BY server_ip ``` -For more about data processing with {{esql}}, refer to [Data processing with DISSECT and GROK](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-process-data-with-dissect-and-grok.html). +For more about data processing with {{esql}}, refer to [Data processing with DISSECT and GROK](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-process-data-with-dissect-grok.md). ## Learn more [esql-getting-learn-more] -To learn more about {{esql}}, refer to [{{esql}} reference](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-language.html). +To learn more about {{esql}}, refer to [{{esql}} reference](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql.md). diff --git a/explore-analyze/query-filter/languages/esql-kibana.md b/explore-analyze/query-filter/languages/esql-kibana.md index c8fd9f5dc..7a8504eea 100644 --- a/explore-analyze/query-filter/languages/esql-kibana.md +++ b/explore-analyze/query-filter/languages/esql-kibana.md @@ -21,7 +21,7 @@ This guide shows you how to use {{esql}} in Kibana. To follow along with the que ## Enable or disable {{esql}} [esql-kibana-enable] -{{esql}} is enabled by default in {{kib}}. It can be disabled using the `enableESQL` setting from the [Advanced Settings](https://www.elastic.co/guide/en/kibana/current/advanced-options.html). +{{esql}} is enabled by default in {{kib}}. It can be disabled using the `enableESQL` setting from the [Advanced Settings](asciidocalypse://docs/kibana/docs/reference/advanced-settings.md). This will hide the {{esql}} user interface from various applications. However, users will be able to access existing {{esql}} artifacts like saved searches and visualizations. @@ -39,9 +39,9 @@ After switching to {{esql}} mode, the query bar shows a sample query. For exampl from kibana_sample_data_logs | limit 10 ``` -Every query starts with a [source command](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html). In this query, the source command is [`FROM`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-from). `FROM` retrieves data from data streams, indices, or aliases. In this example, the data is retrieved from `kibana_sample_data_logs`. +Every query starts with a [source command](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md). In this query, the source command is [`FROM`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-from). `FROM` retrieves data from data streams, indices, or aliases. In this example, the data is retrieved from `kibana_sample_data_logs`. -A source command can be followed by one or more [processing commands](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html). In this query, the processing command is [`LIMIT`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-limit). `LIMIT` limits the number of rows that are retrieved. +A source command can be followed by one or more [processing commands](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md). In this query, the processing command is [`LIMIT`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-limit). `LIMIT` limits the number of rows that are retrieved. ::::{tip} Click the **ES|QL help** button to open the in-product reference documentation for all commands and functions or to get recommended queries that will help you get started. @@ -129,7 +129,7 @@ the 10,000 row limit only applies to the number of rows that are retrieved by th :::: -Each row shows two columns for the example query: a column with the `@timestamp` field and a column with the full document. To display specific fields from the documents, use the [`KEEP`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-keep) command: +Each row shows two columns for the example query: a column with the `@timestamp` field and a column with the full document. To display specific fields from the documents, use the [`KEEP`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-keep) command: ```esql FROM kibana_sample_data_logs @@ -151,7 +151,7 @@ The maximum number of columns in Discover is 50. If a query returns more than 50 ### Sorting [_sorting] -To sort on one of the columns, click the column name you want to sort on and select the sort order. Note that this performs client-side sorting. It only sorts the rows that were retrieved by the query, which may not be the full dataset because of the (implicit) limit. To sort the full data set, use the [`SORT`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-sort) command: +To sort on one of the columns, click the column name you want to sort on and select the sort order. Note that this performs client-side sorting. It only sorts the rows that were retrieved by the query, which may not be the full dataset because of the (implicit) limit. To sort the full data set, use the [`SORT`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-sort) command: ```esql FROM kibana_sample_data_logs @@ -179,7 +179,7 @@ FROM my_index | WHERE custom_timestamp >= ?_tstart AND custom_timestamp < ?_tend ``` -You can also use the `?_tstart` and `?_tend` parameters with the [`BUCKET`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-functions-operators.html#esql-bucket) function to create auto-incrementing time buckets in {{esql}} [visualizations](#esql-kibana-visualizations). For example: +You can also use the `?_tstart` and `?_tend` parameters with the [`BUCKET`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-functions-operators.md#esql-bucket) function to create auto-incrementing time buckets in {{esql}} [visualizations](#esql-kibana-visualizations). For example: ```esql FROM kibana_sample_data_logs @@ -191,7 +191,7 @@ This example uses `50` buckets, which is the maximum number of buckets. #### WHERE command [_where_command] -You can also limit the time range using the [`WHERE`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-where) command and the [`NOW`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-functions-operators.html#esql-now) function. For example, if the timestamp field is called `timestamp`, to query the last 15 minutes of data: +You can also limit the time range using the [`WHERE`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-where) command and the [`NOW`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-functions-operators.md#esql-now) function. For example, if the timestamp field is called `timestamp`, to query the last 15 minutes of data: ```esql FROM kibana_sample_data_logs @@ -254,7 +254,7 @@ You can also edit the {{esql}} visualization from here. Click the options button ## Create an enrich policy [esql-kibana-enrich] -The {{esql}} [`ENRICH`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-enrich) command enables you to [enrich](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-enrich-data.html) your query dataset with fields from another dataset. Before you can use `ENRICH`, you need to [create and execute an enrich policy](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-enrich-data.html#esql-set-up-enrich-policy). If a policy exists, it will be suggested by auto-complete. If not, click **Click to create** to create one. +The {{esql}} [`ENRICH`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-enrich) command enables you to [enrich](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-enrich-data.md) your query dataset with fields from another dataset. Before you can use `ENRICH`, you need to [create and execute an enrich policy](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-enrich-data.md#esql-set-up-enrich-policy). If a policy exists, it will be suggested by auto-complete. If not, click **Click to create** to create one. :::{image} ../../../images/elasticsearch-reference-esql-kibana-enrich-autocomplete.png :alt: esql kibana enrich autocomplete @@ -296,8 +296,8 @@ You can use {{esql}} queries to create alerts. From Discover, click **Alerts** a ## Limitations [esql-kibana-limitations] -* The user interface to filter data is not enabled when Discover is in {{esql}} mode. To filter data, write a query that uses the [`WHERE`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-where) command instead. +* The user interface to filter data is not enabled when Discover is in {{esql}} mode. To filter data, write a query that uses the [`WHERE`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-where) command instead. * Discover shows no more than 10,000 rows. This limit only applies to the number of rows that are retrieved by the query and displayed in Discover. Queries and aggregations run on the full data set. * Discover shows no more than 50 columns. If a query returns more than 50 columns, Discover only shows the first 50. * CSV export from Discover shows no more than 10,000 rows. This limit only applies to the number of rows that are retrieved by the query and displayed in Discover. Queries and aggregations run on the full data set. -* Querying many indices at once without any filters can cause an error in kibana which looks like `[esql] > Unexpected error from Elasticsearch: The content length (536885793) is bigger than the maximum allowed string (536870888)`. The response from {{esql}} is too long. Use [`DROP`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-drop) or [`KEEP`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-keep) to limit the number of fields returned. +* Querying many indices at once without any filters can cause an error in kibana which looks like `[esql] > Unexpected error from Elasticsearch: The content length (536885793) is bigger than the maximum allowed string (536870888)`. The response from {{esql}} is too long. Use [`DROP`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-drop) or [`KEEP`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-keep) to limit the number of fields returned. diff --git a/explore-analyze/query-filter/languages/esql-multi-index.md b/explore-analyze/query-filter/languages/esql-multi-index.md index 39be1b8c8..eb4c21312 100644 --- a/explore-analyze/query-filter/languages/esql-multi-index.md +++ b/explore-analyze/query-filter/languages/esql-multi-index.md @@ -113,9 +113,9 @@ This functionality is in technical preview and may be changed or removed in a fu :::: -{{esql}} has a way to handle [field type mismatches](#esql-multi-index-invalid-mapping). When the same field is mapped to multiple types in multiple indices, the type of the field is understood to be a *union* of the various types in the index mappings. As seen in the preceding examples, this *union type* cannot be used in the results, and cannot be referred to by the query — except in `KEEP`, `DROP` or when it’s passed to a type conversion function that accepts all the types in the *union* and converts the field to a single type. {{esql}} offers a suite of [type conversion functions](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-functions-operators.html#esql-type-conversion-functions) to achieve this. +{{esql}} has a way to handle [field type mismatches](#esql-multi-index-invalid-mapping). When the same field is mapped to multiple types in multiple indices, the type of the field is understood to be a *union* of the various types in the index mappings. As seen in the preceding examples, this *union type* cannot be used in the results, and cannot be referred to by the query — except in `KEEP`, `DROP` or when it’s passed to a type conversion function that accepts all the types in the *union* and converts the field to a single type. {{esql}} offers a suite of [type conversion functions](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-functions-operators.md#esql-type-conversion-functions) to achieve this. -In the above examples, the query can use a command like `EVAL client_ip = TO_IP(client_ip)` to resolve the union of `ip` and `keyword` to just `ip`. You can also use the type-conversion syntax `EVAL client_ip = client_ip::IP`. Alternatively, the query could use [`TO_STRING`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-functions-operators.html#esql-to_string) to convert all supported types into `KEYWORD`. +In the above examples, the query can use a command like `EVAL client_ip = TO_IP(client_ip)` to resolve the union of `ip` and `keyword` to just `ip`. You can also use the type-conversion syntax `EVAL client_ip = client_ip::IP`. Alternatively, the query could use [`TO_STRING`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-functions-operators.md#esql-to_string) to convert all supported types into `KEYWORD`. For example, the [query](#query-unsupported) that returned `client_ip:unsupported` with `null` values can be improved using the `TO_IP` function or the equivalent `field::ip` syntax. These changes also resolve the error message. As long as the only reference to the original field is to pass it to a conversion function that resolves the type ambiguity, no error results. @@ -139,7 +139,7 @@ FROM events_* ## Index metadata [esql-multi-index-index-metadata] -It can be helpful to know the particular index from which each row is sourced. To get this information, use the [`METADATA`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-metadata-fields.html) option on the [`FROM`](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-from) command. +It can be helpful to know the particular index from which each row is sourced. To get this information, use the [`METADATA`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-metadata-fields.md) option on the [`FROM`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-from) command. ```esql FROM events_* METADATA _index diff --git a/explore-analyze/query-filter/languages/esql.md b/explore-analyze/query-filter/languages/esql.md index dd3da84f7..b99b6fc8d 100644 --- a/explore-analyze/query-filter/languages/esql.md +++ b/explore-analyze/query-filter/languages/esql.md @@ -28,7 +28,7 @@ mapped_urls: **Elasticsearch Query Language ({{esql}})** is a piped query language for filtering, transforming, and analyzing data. -You can author {{esql}} queries to find specific events, perform statistical analysis, and generate visualizations. It supports a wide range of [commands, functions and operators](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-functions-operators.html) to perform various data operations, such as filtering, aggregation, time-series analysis, and more. Today, it supports a subset of the features available in Query DSL, but it is rapidly evolving. +You can author {{esql}} queries to find specific events, perform statistical analysis, and generate visualizations. It supports a wide range of [commands, functions and operators](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-functions-operators.md) to perform various data operations, such as filtering, aggregation, time-series analysis, and more. Today, it supports a subset of the features available in Query DSL, but it is rapidly evolving. ::::{note} **{{esql}}'s compute architecture** @@ -52,10 +52,10 @@ You can use it: ## Next steps Find more details about {{esql}} in the following documentation pages: -- [{{esql}} reference](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-language.html): - - Reference documentation for the [{{esql}} syntax](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-syntax.html), [commands](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html), and [functions and operators](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-functions-operators.html). - - Information about working with [metadata fields](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-metadata-fields.html) and [multivalued fields](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-multivalued-fields.html). - - Guidance for [data processing with DISSECT and GROK](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-process-data-with-dissect-and-grok.html) and [data enrichment with ENRICH](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-enrich-data.html). +- [{{esql}} reference](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql.md): + - Reference documentation for the [{{esql}} syntax](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-syntax.md), [commands](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md), and [functions and operators](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-functions-operators.md). + - Information about working with [metadata fields](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-metadata-fields.md) and [multivalued fields](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-multivalued-fields.md). + - Guidance for [data processing with DISSECT and GROK](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-process-data-with-dissect-grok.md) and [data enrichment with ENRICH](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-enrich-data.md). - Using {{esql}}: - An overview of using the [`_query` API endpoint](/explore-analyze/query-filter/languages/esql-rest.md). @@ -64,7 +64,7 @@ Find more details about {{esql}} in the following documentation pages: - [Using {{esql}} across clusters](/explore-analyze/query-filter/languages/esql-cross-clusters.md). - [Task management](/explore-analyze/query-filter/languages/esql-task-management.md). -- [Limitations](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-limitations.html): The current limitations of {{esql}}. +- [Limitations](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/limitations.md): The current limitations of {{esql}}. - [Examples](/explore-analyze/query-filter/languages/esql.md): A few examples of what you can do with {{esql}}. diff --git a/explore-analyze/query-filter/languages/example-detect-threats-with-eql.md b/explore-analyze/query-filter/languages/example-detect-threats-with-eql.md index 3cb614926..3a4c3bb0e 100644 --- a/explore-analyze/query-filter/languages/example-detect-threats-with-eql.md +++ b/explore-analyze/query-filter/languages/example-detect-threats-with-eql.md @@ -207,7 +207,7 @@ The query matches an event, confirming `scrobj.dll` was loaded. ## Determine the likelihood of success [eql-ex-detemine-likelihood-of-success] -In many cases, attackers use malicious scripts to connect to remote servers or download other files. Use an [EQL sequence query](https://www.elastic.co/guide/en/elasticsearch/reference/current/eql-syntax.html#eql-sequences) to check for the following series of events: +In many cases, attackers use malicious scripts to connect to remote servers or download other files. Use an [EQL sequence query](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/eql-syntax.md#eql-sequences) to check for the following series of events: 1. A `regsvr32.exe` process 2. A load of the `scrobj.dll` library by the same process diff --git a/explore-analyze/query-filter/languages/kql.md b/explore-analyze/query-filter/languages/kql.md index 987ea41de..15fff1786 100644 --- a/explore-analyze/query-filter/languages/kql.md +++ b/explore-analyze/query-filter/languages/kql.md @@ -101,7 +101,7 @@ You can also use range syntax for string values, IP addresses, and timestamps. F @timestamp < now-2w ``` -For more examples on acceptable date formats, refer to [Date Math](https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#date-math). +For more examples on acceptable date formats, refer to [Date Math](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/common-options.md#date-math). ## Filter for documents using wildcards [_filter_for_documents_using_wildcards] @@ -112,7 +112,7 @@ To search for documents matching a pattern, use the wildcard syntax. For example http.response.status_code: 4* ``` -By default, leading wildcards are not allowed for performance reasons. You can modify this with the [`query:allowLeadingWildcards`](https://www.elastic.co/guide/en/kibana/current/advanced-options.html#query-allowleadingwildcards) advanced setting. +By default, leading wildcards are not allowed for performance reasons. You can modify this with the [`query:allowLeadingWildcards`](asciidocalypse://docs/kibana/docs/reference/advanced-settings.md#query-allowleadingwildcards) advanced setting. ::::{note} Only `*` is currently supported. This matches zero or more characters. @@ -173,7 +173,7 @@ When using wildcards to query multiple fields, errors might occur if the fields ## Querying nested fields [_querying_nested_fields] -Querying [nested fields](https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html) requires a special syntax. Consider the following document, where `user` is a nested field: +Querying [nested fields](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/nested.md) requires a special syntax. Consider the following document, where `user` is a nested field: ```yaml { diff --git a/explore-analyze/query-filter/languages/lucene-query-syntax.md b/explore-analyze/query-filter/languages/lucene-query-syntax.md index 3420a56ad..4dc8d61cf 100644 --- a/explore-analyze/query-filter/languages/lucene-query-syntax.md +++ b/explore-analyze/query-filter/languages/lucene-query-syntax.md @@ -8,7 +8,7 @@ mapped_pages: # Lucene query syntax [lucene-query] -Lucene query syntax is available to {{kib}} users who opt out of the [{{kib}} Query Language](kql.md). Full documentation for this syntax is available as part of {{es}} [query string syntax](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#query-string-syntax). +Lucene query syntax is available to {{kib}} users who opt out of the [{{kib}} Query Language](kql.md). Full documentation for this syntax is available as part of {{es}} [query string syntax](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-query-string-query.md#query-string-syntax). The main reason to use the Lucene query syntax in {{kib}} is for advanced Lucene features, such as regular expressions or fuzzy term matching. However, Lucene syntax is not able to search nested objects or scripted fields. diff --git a/explore-analyze/query-filter/languages/querydsl.md b/explore-analyze/query-filter/languages/querydsl.md index 6e207eaeb..ec377859a 100644 --- a/explore-analyze/query-filter/languages/querydsl.md +++ b/explore-analyze/query-filter/languages/querydsl.md @@ -39,10 +39,10 @@ The [`_search` endpoint](../../../solutions/search/querying-for-search.md) accep Query DSL support a wide range of search techniques, including the following: * [**Full-text search**](/solutions/search/full-text.md): Search text that has been analyzed and indexed to support phrase or proximity queries, fuzzy matches, and more. -* [**Keyword search**](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html): Search for exact matches using `keyword` fields. +* [**Keyword search**](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md): Search for exact matches using `keyword` fields. * [**Semantic search**](/solutions/search/semantic-search/semantic-search-semantic-text.md): Search `semantic_text` fields using dense or sparse vector search on embeddings generated in your {{es}} cluster. * [**Vector search**](/solutions/search/vector/knn.md): Search for similar dense vectors using the kNN algorithm for embeddings generated outside of {{es}}. -* [**Geospatial search**](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-queries.html): Search for locations and calculate spatial relationships using geospatial queries. +* [**Geospatial search**](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/geo-queries.md): Search for locations and calculate spatial relationships using geospatial queries. You can also filter data using Query DSL. Filters enable you to include or exclude documents by retrieving documents that match specific field-level criteria. A query that uses the `filter` parameter indicates [filter context](#filter-context). @@ -54,9 +54,9 @@ Because aggregations leverage the same data structures used for search, they are The following aggregation types are available: -* [Metric](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics.html): Calculate metrics, such as a sum or average, from field values. -* [Bucket](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket.html): Group documents into buckets based on field values, ranges, or other criteria. -* [Pipeline](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline.html): Run aggregations on the results of other aggregations. +* [Metric](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/metrics.md): Calculate metrics, such as a sum or average, from field values. +* [Bucket](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/bucket.md): Group documents into buckets based on field values, ranges, or other criteria. +* [Pipeline](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/pipeline.md): Run aggregations on the results of other aggregations. Run aggregations by specifying the [search API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-search)'s `aggs` parameter. Learn more in [Run an aggregation](/explore-analyze/query-filter/aggregations.md#run-an-agg). @@ -65,9 +65,9 @@ Run aggregations by specifying the [search API](https://www.elastic.co/docs/api/ Think of the Query DSL as an AST (Abstract Syntax Tree) of queries, consisting of two types of clauses: -**Leaf query clauses**: Leaf query clauses look for a particular value in a particular field, such as the [`match`](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html), [`term`](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html) or [`range`](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html) queries. These queries can be used by themselves. +**Leaf query clauses**: Leaf query clauses look for a particular value in a particular field, such as the [`match`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-match-query.md), [`term`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-term-query.md) or [`range`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-range-query.md) queries. These queries can be used by themselves. -**Compound query clauses**: Compound query clauses wrap other leaf **or** compound queries and are used to combine multiple queries in a logical fashion (such as the [`bool`](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html) or [`dis_max`](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-dis-max-query.html) query), or to alter their behavior (such as the [`constant_score`](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-constant-score-query.html) query). +**Compound query clauses**: Compound query clauses wrap other leaf **or** compound queries and are used to combine multiple queries in a logical fashion (such as the [`bool`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-bool-query.md) or [`dis_max`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-dis-max-query.md) query), or to alter their behavior (such as the [`constant_score`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-constant-score-query.md) query). Query clauses behave differently depending on whether they are used in [query context or filter context](#query-filter-context). @@ -77,22 +77,22 @@ $$$query-dsl-allow-expensive-queries$$$ - Queries that need to do linear scans to identify matches: - - [`script` queries](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-script-query.html) - - queries on [numeric](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html), [date](https://www.elastic.co/guide/en/elasticsearch/reference/current/date.html), [boolean](https://www.elastic.co/guide/en/elasticsearch/reference/current/boolean.html), [ip](https://www.elastic.co/guide/en/elasticsearch/reference/current/ip.html), [geo_point](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html) or [keyword](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html) fields that are not indexed but have [doc values](https://www.elastic.co/guide/en/elasticsearch/reference/current/doc-values.html) enabled + - [`script` queries](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-script-query.md) + - queries on [numeric](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md), [date](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/date.md), [boolean](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/boolean.md), [ip](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/ip.md), [geo_point](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-point.md) or [keyword](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md) fields that are not indexed but have [doc values](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/doc-values.md) enabled - Queries that have a high up-front cost: - - [`fuzzy` queries](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html) (except on [`wildcard`](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html#wildcard-field-type) fields) - - [`regexp` queries](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html) (except on [`wildcard`](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html#wildcard-field-type) fields) - - [`prefix` queries](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-prefix-query.html) (except on [`wildcard`](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html#wildcard-field-type) fields or those without [`index_prefixes`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-prefixes.html)) - - [`wildcard` queries](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html) (except on [`wildcard`](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html#wildcard-field-type) fields) - - [`range` queries](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html) on [`text`](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html) and [`keyword`](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html) fields + - [`fuzzy` queries](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-fuzzy-query.md) (except on [`wildcard`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md#wildcard-field-type) fields) + - [`regexp` queries](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-regexp-query.md) (except on [`wildcard`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md#wildcard-field-type) fields) + - [`prefix` queries](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-prefix-query.md) (except on [`wildcard`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md#wildcard-field-type) fields or those without [`index_prefixes`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/index-prefixes.md)) + - [`wildcard` queries](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-wildcard-query.md) (except on [`wildcard`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md#wildcard-field-type) fields) + - [`range` queries](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-range-query.md) on [`text`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md) and [`keyword`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md) fields - - [Joining queries](https://www.elastic.co/guide/en/elasticsearch/reference/current/joining-queries.html) + - [Joining queries](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/joining-queries.md) - Queries that may have a high per-document cost: - - [`script_score` queries](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-script-score-query.html) - - [`percolate` queries](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-percolate-query.html) + - [`script_score` queries](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-script-score-query.md) + - [`percolate` queries](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-percolate-query.md) The execution of such queries can be prevented by setting the value of the `search.allow_expensive_queries` setting to `false` (defaults to `true`). @@ -142,9 +142,9 @@ Common filter applications include: Filter context applies when a query clause is passed to a `filter` parameter, such as: -* `filter` or `must_not` parameters in [`bool`](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html) queries -* `filter` parameter in [`constant_score`](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-constant-score-query.html) queries -* [`filter`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filter-aggregation.html) aggregations +* `filter` or `must_not` parameters in [`bool`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-bool-query.md) queries +* `filter` parameter in [`constant_score`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-constant-score-query.md) queries +* [`filter`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-filter-aggregation.md) aggregations Filters optimize query performance and efficiency, especially for structured data queries and when combined with full-text searches. diff --git a/explore-analyze/query-filter/languages/sql-cli.md b/explore-analyze/query-filter/languages/sql-cli.md index 871b0ac51..7becabafa 100644 --- a/explore-analyze/query-filter/languages/sql-cli.md +++ b/explore-analyze/query-filter/languages/sql-cli.md @@ -83,7 +83,7 @@ fetch separator set to "---------------------" ``` `lenient = ` (default `false`) -: If `false`, Elasticsearch SQL returns an error for fields containing [array values](https://www.elastic.co/guide/en/elasticsearch/reference/current/array.html). If `true`, Elasticsearch SQL returns the first value from the array with no guarantee of consistent results. +: If `false`, Elasticsearch SQL returns an error for fields containing [array values](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/array.md). If `true`, Elasticsearch SQL returns the first value from the array with no guarantee of consistent results. ```sql sql> lenient = true; diff --git a/explore-analyze/query-filter/languages/sql-data-types.md b/explore-analyze/query-filter/languages/sql-data-types.md index 7f7d4ca73..ac02643ec 100644 --- a/explore-analyze/query-filter/languages/sql-data-types.md +++ b/explore-analyze/query-filter/languages/sql-data-types.md @@ -12,31 +12,31 @@ mapped_pages: | --- | --- | --- | --- | | **{{es}} type** | **Elasticsearch SQL type** | **SQL type** | **SQL precision** | | Core types | -| [`null`](https://www.elastic.co/guide/en/elasticsearch/reference/current/null-value.html) | `null` | NULL | 0 | -| [`boolean`](https://www.elastic.co/guide/en/elasticsearch/reference/current/boolean.html) | `boolean` | BOOLEAN | 1 | -| [`byte`](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) | `byte` | TINYINT | 3 | -| [`short`](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) | `short` | SMALLINT | 5 | -| [`integer`](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) | `integer` | INTEGER | 10 | -| [`long`](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) | `long` | BIGINT | 19 | -| [`unsigned_long`](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) | `[preview] unsigned_long` | BIGINT | 20 | -| [`double`](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) | `double` | DOUBLE | 15 | -| [`float`](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) | `float` | REAL | 7 | -| [`half_float`](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) | `half_float` | FLOAT | 3 | -| [`scaled_float`](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) | `scaled_float` | DOUBLE | 15 | -| [keyword type family](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html) | `keyword` | VARCHAR | 32,766 | -| [`text`](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html) | `text` | VARCHAR | 2,147,483,647 | -| [`binary`](https://www.elastic.co/guide/en/elasticsearch/reference/current/binary.html) | `binary` | VARBINARY | 2,147,483,647 | -| [`date`](https://www.elastic.co/guide/en/elasticsearch/reference/current/date.html) | `datetime` | TIMESTAMP | 29 | -| [`ip`](https://www.elastic.co/guide/en/elasticsearch/reference/current/ip.html) | `ip` | VARCHAR | 39 | -| [`version`](https://www.elastic.co/guide/en/elasticsearch/reference/current/version.html) | `version` | VARCHAR | 32,766 | +| [`null`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/null-value.md) | `null` | NULL | 0 | +| [`boolean`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/boolean.md) | `boolean` | BOOLEAN | 1 | +| [`byte`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) | `byte` | TINYINT | 3 | +| [`short`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) | `short` | SMALLINT | 5 | +| [`integer`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) | `integer` | INTEGER | 10 | +| [`long`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) | `long` | BIGINT | 19 | +| [`unsigned_long`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) | `[preview] unsigned_long` | BIGINT | 20 | +| [`double`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) | `double` | DOUBLE | 15 | +| [`float`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) | `float` | REAL | 7 | +| [`half_float`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) | `half_float` | FLOAT | 3 | +| [`scaled_float`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) | `scaled_float` | DOUBLE | 15 | +| [keyword type family](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md) | `keyword` | VARCHAR | 32,766 | +| [`text`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md) | `text` | VARCHAR | 2,147,483,647 | +| [`binary`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/binary.md) | `binary` | VARBINARY | 2,147,483,647 | +| [`date`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/date.md) | `datetime` | TIMESTAMP | 29 | +| [`ip`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/ip.md) | `ip` | VARCHAR | 39 | +| [`version`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/version.md) | `version` | VARCHAR | 32,766 | | Complex types | -| [`object`](https://www.elastic.co/guide/en/elasticsearch/reference/current/object.html) | `object` | STRUCT | 0 | -| [`nested`](https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html) | `nested` | STRUCT | 0 | +| [`object`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/object.md) | `object` | STRUCT | 0 | +| [`nested`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/nested.md) | `nested` | STRUCT | 0 | | Unsupported types | | *types not mentioned above* | `unsupported` | OTHER | 0 | ::::{note} -Most of {{es}} [data types](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html) are available in Elasticsearch SQL, as indicated above. As one can see, all of {{es}} [data types](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html) are mapped to the data type with the same name in Elasticsearch SQL, with the exception of **date** data type which is mapped to **datetime** in Elasticsearch SQL. This is to avoid confusion with the ANSI SQL types **DATE** (date only) and **TIME** (time only), which are also supported by Elasticsearch SQL in queries (with the use of [`CAST`](sql-functions-type-conversion.md#sql-functions-type-conversion-cast)/[`CONVERT`](sql-functions-type-conversion.md#sql-functions-type-conversion-convert)), but don’t correspond to an actual mapping in {{es}} (see the [`table`](#es-sql-only-types) below). +Most of {{es}} [data types](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/field-data-types.md) are available in Elasticsearch SQL, as indicated above. As one can see, all of {{es}} [data types](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/field-data-types.md) are mapped to the data type with the same name in Elasticsearch SQL, with the exception of **date** data type which is mapped to **datetime** in Elasticsearch SQL. This is to avoid confusion with the ANSI SQL types **DATE** (date only) and **TIME** (time only), which are also supported by Elasticsearch SQL in queries (with the use of [`CAST`](sql-functions-type-conversion.md#sql-functions-type-conversion-cast)/[`CONVERT`](sql-functions-type-conversion.md#sql-functions-type-conversion-convert)), but don’t correspond to an actual mapping in {{es}} (see the [`table`](#es-sql-only-types) below). :::: @@ -72,9 +72,9 @@ The table below indicates these types: ## SQL and multi-fields [sql-multi-field] -A core concept in {{es}} is that of an `analyzed` field, that is a full-text value that is interpreted in order to be effectively indexed. These fields are of type [`text`](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html) and are not used for sorting or aggregations as their actual value depends on the [`analyzer`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analyzer.html) used hence why {{es}} also offers the [`keyword`](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html) type for storing the *exact* value. +A core concept in {{es}} is that of an `analyzed` field, that is a full-text value that is interpreted in order to be effectively indexed. These fields are of type [`text`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md) and are not used for sorting or aggregations as their actual value depends on the [`analyzer`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/analyzer.md) used hence why {{es}} also offers the [`keyword`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md) type for storing the *exact* value. -In most case, and the default actually, is to use both types for strings which {{es}} supports through [multi-fields](https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html), that is the ability to index the same string in multiple ways; for example index it both as `text` for search but also as `keyword` for sorting and aggregations. +In most case, and the default actually, is to use both types for strings which {{es}} supports through [multi-fields](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/multi-fields.md), that is the ability to index the same string in multiple ways; for example index it both as `text` for search but also as `keyword` for sorting and aggregations. As SQL requires exact values, when encountering a `text` field Elasticsearch SQL will search for an exact multi-field that it can use for comparisons, sorting and aggregations. To do that, it will search for the first `keyword` that it can find that is *not* normalized and use that as the original field *exact* value. diff --git a/explore-analyze/query-filter/languages/sql-functions-aggs.md b/explore-analyze/query-filter/languages/sql-functions-aggs.md index 4337d4a32..76fc002e0 100644 --- a/explore-analyze/query-filter/languages/sql-functions-aggs.md +++ b/explore-analyze/query-filter/languages/sql-functions-aggs.md @@ -249,7 +249,7 @@ M |emzi ::::{note} -`FIRST` cannot be used with columns of type [`text`](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html) unless the field is also [saved as a keyword](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html#before-enabling-fielddata). +`FIRST` cannot be used with columns of type [`text`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md) unless the field is also [saved as a keyword](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md#before-enabling-fielddata). :::: @@ -370,7 +370,7 @@ M |lari ::::{note} -`LAST` cannot be used with columns of type [`text`](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html) unless the field is also [`saved as a keyword`](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html#before-enabling-fielddata). +`LAST` cannot be used with columns of type [`text`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md) unless the field is also [`saved as a keyword`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md#before-enabling-fielddata). :::: @@ -407,7 +407,7 @@ SELECT MAX(ABS(salary / -12.0)) AS max FROM emp; ``` ::::{note} -`MAX` on a field of type [`text`](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html) or [`keyword`](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html) is translated into [`LAST/LAST_VALUE`](#sql-functions-aggs-last) and therefore, it cannot be used in `HAVING` clause. +`MAX` on a field of type [`text`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md) or [`keyword`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md) is translated into [`LAST/LAST_VALUE`](#sql-functions-aggs-last) and therefore, it cannot be used in `HAVING` clause. :::: @@ -436,7 +436,7 @@ SELECT MIN(salary) AS min FROM emp; ``` ::::{note} -`MIN` on a field of type [`text`](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html) or [`keyword`](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html) is translated into [`FIRST/FIRST_VALUE`](#sql-functions-aggs-first) and therefore, it cannot be used in `HAVING` clause. +`MIN` on a field of type [`text`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md) or [`keyword`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md) is translated into [`FIRST/FIRST_VALUE`](#sql-functions-aggs-first) and therefore, it cannot be used in `HAVING` clause. :::: @@ -560,8 +560,8 @@ PERCENTILE( 1. a numeric field. If this field contains only `null` values, the function returns `null`. Otherwise, the function ignores `null` values in this field. 2. a numeric expression (must be a constant and not based on a field). If `null`, the function returns `null`. -3. optional string literal for the [percentile algorithm](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-percentile-aggregation.html#search-aggregations-metrics-percentile-aggregation-approximation). Possible values: `tdigest` or `hdr`. Defaults to `tdigest`. -4. optional numeric literal that configures the [percentile algorithm](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-percentile-aggregation.html#search-aggregations-metrics-percentile-aggregation-approximation). Configures `compression` for `tdigest` or `number_of_significant_value_digits` for `hdr`. The default is the same as that of the backing algorithm. +3. optional string literal for the [percentile algorithm](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-percentile-aggregation.md#search-aggregations-metrics-percentile-aggregation-approximation). Possible values: `tdigest` or `hdr`. Defaults to `tdigest`. +4. optional numeric literal that configures the [percentile algorithm](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-percentile-aggregation.md#search-aggregations-metrics-percentile-aggregation-approximation). Configures `compression` for `tdigest` or `number_of_significant_value_digits` for `hdr`. The default is the same as that of the backing algorithm. **Output**: `double` numeric value @@ -631,8 +631,8 @@ PERCENTILE_RANK( 1. a numeric field. If this field contains only `null` values, the function returns `null`. Otherwise, the function ignores `null` values in this field. 2. a numeric expression (must be a constant and not based on a field). If `null`, the function returns `null`. -3. optional string literal for the [percentile algorithm](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-percentile-aggregation.html#search-aggregations-metrics-percentile-aggregation-approximation). Possible values: `tdigest` or `hdr`. Defaults to `tdigest`. -4. optional numeric literal that configures the [percentile algorithm](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-percentile-aggregation.html#search-aggregations-metrics-percentile-aggregation-approximation). Configures `compression` for `tdigest` or `number_of_significant_value_digits` for `hdr`. The default is the same as that of the backing algorithm. +3. optional string literal for the [percentile algorithm](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-percentile-aggregation.md#search-aggregations-metrics-percentile-aggregation-approximation). Possible values: `tdigest` or `hdr`. Defaults to `tdigest`. +4. optional numeric literal that configures the [percentile algorithm](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-percentile-aggregation.md#search-aggregations-metrics-percentile-aggregation-approximation). Configures `compression` for `tdigest` or `number_of_significant_value_digits` for `hdr`. The default is the same as that of the backing algorithm. **Output**: `double` numeric value diff --git a/explore-analyze/query-filter/languages/sql-functions-datetime.md b/explore-analyze/query-filter/languages/sql-functions-datetime.md index 77a74112c..c61ab549c 100644 --- a/explore-analyze/query-filter/languages/sql-functions-datetime.md +++ b/explore-analyze/query-filter/languages/sql-functions-datetime.md @@ -14,7 +14,7 @@ Elasticsearch SQL offers a wide range of facilities for performing date/time man A common requirement when dealing with date/time in general revolves around the notion of `interval`, a topic that is worth exploring in the context of {{es}} and Elasticsearch SQL. -{{es}} has comprehensive support for [date math](https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#date-math) both inside [index names](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#api-date-math-index-names) and [queries](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html). Inside Elasticsearch SQL the former is supported as is by passing the expression in the table name, while the latter is supported through the standard SQL `INTERVAL`. +{{es}} has comprehensive support for [date math](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/common-options.md#date-math) both inside [index names](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#api-date-math-index-names) and [queries](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-date-format.md). Inside Elasticsearch SQL the former is supported as is by passing the expression in the table name, while the latter is supported through the standard SQL `INTERVAL`. The table below shows the mapping between {{es}} and Elasticsearch SQL: @@ -56,7 +56,7 @@ Example of the possible combinations below: ## Comparison [_comparison] -Date/time fields can be compared to [date math](https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#date-math) expressions with the equality (`=`) and `IN` operators: +Date/time fields can be compared to [date math](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/common-options.md#date-math) expressions with the equality (`=`) and `IN` operators: ```sql SELECT hire_date FROM emp WHERE hire_date = '1987-03-01||+4y/y'; diff --git a/explore-analyze/query-filter/languages/sql-functions-geo.md b/explore-analyze/query-filter/languages/sql-functions-geo.md index 325bc253b..032c7fe17 100644 --- a/explore-analyze/query-filter/languages/sql-functions-geo.md +++ b/explore-analyze/query-filter/languages/sql-functions-geo.md @@ -17,7 +17,7 @@ The geo functions work with geometries stored in `geo_point`, `geo_shape` and `s ## Limitations [_limitations_4] -[`geo_point`](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html), [`geo_shape`](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-shape.html) and [`shape`](https://www.elastic.co/guide/en/elasticsearch/reference/current/shape.html) and types are represented in SQL as geometry and can be used interchangeably with the following exceptions: +[`geo_point`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-point.md), [`geo_shape`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-shape.md) and [`shape`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/shape.md) and types are represented in SQL as geometry and can be used interchangeably with the following exceptions: * `geo_shape` and `shape` fields don’t have doc values, therefore these fields cannot be used for filtering, grouping or sorting. * `geo_points` fields are indexed and have doc values by default, however only latitude and longitude are stored and indexed with some loss of precision from the original values (4.190951585769653E-8 for the latitude and 8.381903171539307E-8 for longitude). The altitude component is accepted but not stored in doc values nor indexed. Therefore calling `ST_Z` function in the filtering, grouping or sorting will return `null`. diff --git a/explore-analyze/query-filter/languages/sql-functions-grouping.md b/explore-analyze/query-filter/languages/sql-functions-grouping.md index 3da6a85f1..efe488a5b 100644 --- a/explore-analyze/query-filter/languages/sql-functions-grouping.md +++ b/explore-analyze/query-filter/languages/sql-functions-grouping.md @@ -39,7 +39,7 @@ bucket_key = Math.floor(value / interval) * interval ``` ::::{note} -The histogram in SQL does **NOT** return empty buckets for missing intervals as the traditional [histogram](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-histogram-aggregation.html) and [date histogram](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-datehistogram-aggregation.html). Such behavior does not fit conceptually in SQL which treats all missing values as `null`; as such the histogram places all missing values in the `null` group. +The histogram in SQL does **NOT** return empty buckets for missing intervals as the traditional [histogram](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-histogram-aggregation.md) and [date histogram](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-datehistogram-aggregation.md). Such behavior does not fit conceptually in SQL which treats all missing values as `null`; as such the histogram places all missing values in the `null` group. :::: @@ -137,7 +137,7 @@ When the histogram in SQL is applied on **DATE** type instead of **DATETIME**, t ::::{important} -All intervals specified for a date/time HISTOGRAM will use a [fixed interval](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-datehistogram-aggregation.html) in their `date_histogram` aggregation definition, with the notable exceptions of `INTERVAL '1' YEAR`, `INTERVAL '1' MONTH` and `INTERVAL '1' DAY` where a calendar interval is used. The choice for a calendar interval was made for having a more intuitive result for YEAR, MONTH and DAY groupings. In the case of YEAR, for example, the calendar intervals consider a one year bucket as the one starting on January 1st that specific year, whereas a fixed interval one-year-bucket considers one year as a number of milliseconds (for example, `31536000000ms` corresponding to 365 days, 24 hours per day, 60 minutes per hour etc.). With fixed intervals, the day of February 5th, 2019 for example, belongs to a bucket that starts on December 20th, 2018 and {{es}} (and implicitly Elasticsearch SQL) would have returned the year 2018 for a date that’s actually in 2019. With calendar interval this behavior is more intuitive, having the day of February 5th, 2019 actually belonging to the 2019 year bucket. +All intervals specified for a date/time HISTOGRAM will use a [fixed interval](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-datehistogram-aggregation.md) in their `date_histogram` aggregation definition, with the notable exceptions of `INTERVAL '1' YEAR`, `INTERVAL '1' MONTH` and `INTERVAL '1' DAY` where a calendar interval is used. The choice for a calendar interval was made for having a more intuitive result for YEAR, MONTH and DAY groupings. In the case of YEAR, for example, the calendar intervals consider a one year bucket as the one starting on January 1st that specific year, whereas a fixed interval one-year-bucket considers one year as a number of milliseconds (for example, `31536000000ms` corresponding to 365 days, 24 hours per day, 60 minutes per hour etc.). With fixed intervals, the day of February 5th, 2019 for example, belongs to a bucket that starts on December 20th, 2018 and {{es}} (and implicitly Elasticsearch SQL) would have returned the year 2018 for a date that’s actually in 2019. With calendar interval this behavior is more intuitive, having the day of February 5th, 2019 actually belonging to the 2019 year bucket. :::: diff --git a/explore-analyze/query-filter/languages/sql-functions-search.md b/explore-analyze/query-filter/languages/sql-functions-search.md index 11fbbb080..5c839719f 100644 --- a/explore-analyze/query-filter/languages/sql-functions-search.md +++ b/explore-analyze/query-filter/languages/sql-functions-search.md @@ -10,7 +10,7 @@ mapped_pages: Search functions should be used when performing full-text search, namely when the `MATCH` or `QUERY` predicates are being used. Outside a, so-called, search context, these functions will return default values such as `0` or `NULL`. -Elasticsearch SQL optimizes all queries executed against {{es}} depending on the scoring needs. Using [`track_scores`](https://www.elastic.co/guide/en/elasticsearch/reference/current/sort-search-results.html#_track_scores) on the search request or [`_doc` sorting](https://www.elastic.co/guide/en/elasticsearch/reference/current/sort-search-results.html) that disables scores calculation, Elasticsearch SQL instructs {{es}} not to compute scores when these are not needed. For example, every time a `SCORE()` function is encountered in the SQL query, the scores are computed. +Elasticsearch SQL optimizes all queries executed against {{es}} depending on the scoring needs. Using [`track_scores`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/sort-search-results.md#_track_scores) on the search request or [`_doc` sorting](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/sort-search-results.md) that disables scores calculation, Elasticsearch SQL instructs {{es}} not to compute scores when these are not needed. For example, every time a `SCORE()` function is encountered in the SQL query, the scores are computed. ## `MATCH` [sql-functions-search-match] @@ -28,7 +28,7 @@ MATCH( 3. additional parameters; optional -**Description**: A full-text search option, in the form of a predicate, available in Elasticsearch SQL that gives the user control over powerful [match](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html) and [multi_match](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html) {{es}} queries. +**Description**: A full-text search option, in the form of a predicate, available in Elasticsearch SQL that gives the user control over powerful [match](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-match-query.md) and [multi_match](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-multi-match-query.md) {{es}} queries. The first parameter is the field or fields to match against. In case it receives one value only, Elasticsearch SQL will use a `match` query to perform the search: @@ -57,7 +57,7 @@ Frank Herbert |God Emperor of Dune|7.0029488 ``` ::::{note} -The `multi_match` query in {{es}} has the option of [per-field boosting](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html) that gives preferential weight (in terms of scoring) to fields being searched in, using the `^` character. In the example above, the `name` field has a greater weight in the final score than the `author` field when searching for `frank dune` text in both of them. +The `multi_match` query in {{es}} has the option of [per-field boosting](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-multi-match-query.md) that gives preferential weight (in terms of scoring) to fields being searched in, using the `^` character. In the example above, the `name` field has a greater weight in the final score than the `author` field when searching for `frank dune` text in both of them. :::: @@ -98,7 +98,7 @@ QUERY( 2. additional parameters; optional -**Description**: Just like `MATCH`, `QUERY` is a full-text search predicate that gives the user control over the [query_string](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html) query in {{es}}. +**Description**: Just like `MATCH`, `QUERY` is a full-text search predicate that gives the user control over the [query_string](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-query-string-query.md) query in {{es}}. The first parameter is basically the input that will be passed as is to the `query_string` query, which means that anything that `query_string` accepts in its `query` field can be used here as well: @@ -159,7 +159,7 @@ SCORE() **Description**: Returns the [relevance](https://www.elastic.co/guide/en/elasticsearch/guide/2.x/relevance-intro.html) of a given input to the executed query. The higher score, the more relevant the data. ::::{note} -When doing multiple text queries in the `WHERE` clause then, their scores will be combined using the same rules as {{es}}'s [bool query](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html). +When doing multiple text queries in the `WHERE` clause then, their scores will be combined using the same rules as {{es}}'s [bool query](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-bool-query.md). :::: diff --git a/explore-analyze/query-filter/languages/sql-index-patterns.md b/explore-analyze/query-filter/languages/sql-index-patterns.md index 96fec0d4f..fd2e82d53 100644 --- a/explore-analyze/query-filter/languages/sql-index-patterns.md +++ b/explore-analyze/query-filter/languages/sql-index-patterns.md @@ -13,7 +13,7 @@ Elasticsearch SQL supports two types of patterns for matching multiple indices o ## {{es}} multi-target syntax [sql-index-patterns-multi] -The {{es}} notation for enumerating, including or excluding [multi-target syntax](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#api-multi-index) is supported *as long* as it is quoted or escaped as a table identifier. +The {{es}} notation for enumerating, including or excluding [multi-target syntax](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#api-multi-index) is supported *as long* as it is quoted or escaped as a table identifier. For example: diff --git a/explore-analyze/query-filter/languages/sql-lexical-structure.md b/explore-analyze/query-filter/languages/sql-lexical-structure.md index 6559b4daf..20ec99b20 100644 --- a/explore-analyze/query-filter/languages/sql-lexical-structure.md +++ b/explore-analyze/query-filter/languages/sql-lexical-structure.md @@ -43,7 +43,7 @@ Identifiers can be of two types: *quoted* and *unquoted*: SELECT ip_address FROM "hosts-*" ``` -This query has two identifiers, `ip_address` and `hosts-*` (an [index pattern](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#api-multi-index)). As `ip_address` does not clash with any key words it can be used verbatim, `hosts-*` on the other hand cannot as it clashes with `-` (minus operation) and `*` hence the double quotes. +This query has two identifiers, `ip_address` and `hosts-*` (an [index pattern](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#api-multi-index)). As `ip_address` does not clash with any key words it can be used verbatim, `hosts-*` on the other hand cannot as it clashes with `-` (minus operation) and `*` hence the double quotes. Another example: @@ -51,7 +51,7 @@ Another example: SELECT "from" FROM "" ``` -The first identifier from needs to quoted as otherwise it clashes with the `FROM` key word (which is case insensitive as thus can be written as `from`) while the second identifier using {{es}} [Date math support in index and index alias names](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#api-date-math-index-names) would have otherwise confuse the parser. +The first identifier from needs to quoted as otherwise it clashes with the `FROM` key word (which is case insensitive as thus can be written as `from`) while the second identifier using {{es}} [Date math support in index and index alias names](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#api-date-math-index-names) would have otherwise confuse the parser. Hence why in general, **especially** when dealing with user input it is **highly** recommended to use quotes for identifiers. It adds minimal increase to your queries and in return offers clarity and disambiguation. diff --git a/explore-analyze/query-filter/languages/sql-like-rlike-operators.md b/explore-analyze/query-filter/languages/sql-like-rlike-operators.md index 97d8e6c2d..1e0fc51e3 100644 --- a/explore-analyze/query-filter/languages/sql-like-rlike-operators.md +++ b/explore-analyze/query-filter/languages/sql-like-rlike-operators.md @@ -11,7 +11,7 @@ mapped_pages: `LIKE` and `RLIKE` operators are commonly used to filter data based on string patterns. They usually act on a field placed on the left-hand side of the operator, but can also act on a constant (literal) expression. The right-hand side of the operator represents the pattern. Both can be used in the `WHERE` clause of the `SELECT` statement, but `LIKE` can also be used in other places, such as defining an [index pattern](sql-index-patterns.md) or across various [SHOW commands](sql-commands.md). This section covers only the `SELECT ... WHERE ...` usage. ::::{note} -One significant difference between `LIKE`/`RLIKE` and the [full-text search predicates](sql-functions-search.md) is that the former act on [exact fields](sql-data-types.md#sql-multi-field) while the latter also work on [analyzed](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html) fields. If the field used with `LIKE`/`RLIKE` doesn’t have an exact not-normalized sub-field (of [keyword](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html) type) Elasticsearch SQL will not be able to run the query. If the field is either exact or has an exact sub-field, it will use it as is, or it will automatically use the exact sub-field even if it wasn’t explicitly specified in the statement. +One significant difference between `LIKE`/`RLIKE` and the [full-text search predicates](sql-functions-search.md) is that the former act on [exact fields](sql-data-types.md#sql-multi-field) while the latter also work on [analyzed](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md) fields. If the field used with `LIKE`/`RLIKE` doesn’t have an exact not-normalized sub-field (of [keyword](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md) type) Elasticsearch SQL will not be able to run the query. If the field is either exact or has an exact sub-field, it will use it as is, or it will automatically use the exact sub-field even if it wasn’t explicitly specified in the statement. :::: @@ -73,7 +73,7 @@ RLIKE constant_exp <2> **Description**: This operator is similar to `LIKE`, but the user is not limited to search for a string based on a fixed pattern with the percent sign (`%`) and underscore (`_`); the pattern in this case is a regular expression which allows the construction of more flexible patterns. -For supported syntax, see [*Regular expression syntax*](https://www.elastic.co/guide/en/elasticsearch/reference/current/regexp-syntax.html). +For supported syntax, see [*Regular expression syntax*](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/regexp-syntax.md). ```sql SELECT author, name FROM library WHERE name RLIKE 'Child.* Dune'; diff --git a/explore-analyze/query-filter/languages/sql-limitations.md b/explore-analyze/query-filter/languages/sql-limitations.md index d306762bf..f7b3f8d8a 100644 --- a/explore-analyze/query-filter/languages/sql-limitations.md +++ b/explore-analyze/query-filter/languages/sql-limitations.md @@ -134,7 +134,7 @@ But, if the sub-select would include a `GROUP BY` or `HAVING` or the enclosing ` ## Using [`FIRST`](sql-functions-aggs.md#sql-functions-aggs-first)/[`LAST`](sql-functions-aggs.md#sql-functions-aggs-last) aggregation functions in `HAVING` clause [first-last-agg-functions-having-clause] -Using `FIRST` and `LAST` in the `HAVING` clause is not supported. The same applies to [`MIN`](sql-functions-aggs.md#sql-functions-aggs-min) and [`MAX`](sql-functions-aggs.md#sql-functions-aggs-max) when their target column is of type [`keyword`](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html) or [`unsigned_long`](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) as they are internally translated to `FIRST` and `LAST`. +Using `FIRST` and `LAST` in the `HAVING` clause is not supported. The same applies to [`MIN`](sql-functions-aggs.md#sql-functions-aggs-min) and [`MAX`](sql-functions-aggs.md#sql-functions-aggs-max) when their target column is of type [`keyword`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md) or [`unsigned_long`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) as they are internally translated to `FIRST` and `LAST`. ## Using TIME data type in GROUP BY or [`HISTOGRAM`](sql-functions-grouping.md#sql-functions-grouping-histogram) [group-by-time] @@ -167,7 +167,7 @@ By default,`geo_points` fields are indexed and have doc values. However only lat ## Retrieving using the `fields` search parameter [using-fields-api] -Elasticsearch SQL retrieves column values using the [search API’s `fields` parameter](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-fields.html#search-fields-param). Any limitations on the `fields` parameter also apply to Elasticsearch SQL queries. For example, if `_source` is disabled for any of the returned fields or at index level, the values cannot be retrieved. +Elasticsearch SQL retrieves column values using the [search API’s `fields` parameter](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/retrieve-selected-fields.md#search-fields-param). Any limitations on the `fields` parameter also apply to Elasticsearch SQL queries. For example, if `_source` is disabled for any of the returned fields or at index level, the values cannot be retrieved. ## Aggregations in the [`PIVOT`](sql-syntax-select.md#sql-syntax-pivot) clause [aggs-in-pivot] diff --git a/explore-analyze/query-filter/languages/sql-pagination.md b/explore-analyze/query-filter/languages/sql-pagination.md index 168a6139a..ed52963f7 100644 --- a/explore-analyze/query-filter/languages/sql-pagination.md +++ b/explore-analyze/query-filter/languages/sql-pagination.md @@ -34,7 +34,7 @@ Which looks like: Note that the `columns` object is only part of the first page. -You’ve reached the last page when there is no `cursor` returned in the results. Like Elasticsearch’s [scroll](https://www.elastic.co/guide/en/elasticsearch/reference/current/paginate-search-results.html#scroll-search-results), SQL may keep state in Elasticsearch to support the cursor. Unlike scroll, receiving the last page is enough to guarantee that the Elasticsearch state is cleared. +You’ve reached the last page when there is no `cursor` returned in the results. Like Elasticsearch’s [scroll](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/paginate-search-results.md#scroll-search-results), SQL may keep state in Elasticsearch to support the cursor. Unlike scroll, receiving the last page is enough to guarantee that the Elasticsearch state is cleared. To clear the state earlier, use the [clear cursor API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-sql-clear-cursor): diff --git a/explore-analyze/query-filter/languages/sql-rest-filtering.md b/explore-analyze/query-filter/languages/sql-rest-filtering.md index a8db4eaf3..a94a05833 100644 --- a/explore-analyze/query-filter/languages/sql-rest-filtering.md +++ b/explore-analyze/query-filter/languages/sql-rest-filtering.md @@ -35,7 +35,7 @@ Douglas Adams |The Hitchhiker's Guide to the Galaxy|180 |1979-10-12T ``` ::::{tip} -A useful and less obvious usage for standard Query DSL filtering is to search documents by a specific [routing key](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-shard-routing.html#search-routing). Because Elasticsearch SQL does not support a `routing` parameter, one can specify a [`terms` filter for the `_routing` field](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-routing-field.html) instead: +A useful and less obvious usage for standard Query DSL filtering is to search documents by a specific [routing key](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/search-shard-routing.md#search-routing). Because Elasticsearch SQL does not support a `routing` parameter, one can specify a [`terms` filter for the `_routing` field](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-routing-field.md) instead: ```console POST /_sql?format=txt diff --git a/explore-analyze/query-filter/languages/sql-syntax-select.md b/explore-analyze/query-filter/languages/sql-syntax-select.md index 4b5ebc42b..edff250eb 100644 --- a/explore-analyze/query-filter/languages/sql-syntax-select.md +++ b/explore-analyze/query-filter/languages/sql-syntax-select.md @@ -133,7 +133,7 @@ SELECT * FROM "emp" LIMIT 1; 1953-09-02T00:00:00Z|10001 |Georgi |M |1986-06-26T00:00:00.000Z|2 |Facello |Georgi Facello |57305 ``` -The name can be a [pattern](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#api-multi-index) pointing to multiple indices (likely requiring quoting as mentioned above) with the restriction that **all** resolved concrete tables have **exact mapping**. +The name can be a [pattern](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#api-multi-index) pointing to multiple indices (likely requiring quoting as mentioned above) with the restriction that **all** resolved concrete tables have **exact mapping**. ```sql SELECT emp_no FROM "e*p" LIMIT 1; @@ -507,7 +507,7 @@ Ordering by aggregation is possible for up to **10000** entries for memory consu When doing full-text queries in the `WHERE` clause, results can be returned based on their [score](https://www.elastic.co/guide/en/elasticsearch/guide/2.x/relevance-intro.html) or *relevance* to the given query. ::::{note} -When doing multiple text queries in the `WHERE` clause then, their scores will be combined using the same rules as {{es}}'s [bool query](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html). +When doing multiple text queries in the `WHERE` clause then, their scores will be combined using the same rules as {{es}}'s [bool query](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-bool-query.md). :::: diff --git a/explore-analyze/query-filter/languages/sql-syntax-show-tables.md b/explore-analyze/query-filter/languages/sql-syntax-show-tables.md index 9fbc6c639..29f5e0fd0 100644 --- a/explore-analyze/query-filter/languages/sql-syntax-show-tables.md +++ b/explore-analyze/query-filter/languages/sql-syntax-show-tables.md @@ -38,7 +38,7 @@ javaRestTest |employees |VIEW |ALIAS javaRestTest |library |TABLE |INDEX ``` -Match multiple indices by using {{es}} [multi-target syntax](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#api-multi-index) notation: +Match multiple indices by using {{es}} [multi-target syntax](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#api-multi-index) notation: ```sql SHOW TABLES "*,-l*"; diff --git a/explore-analyze/query-filter/languages/sql-translate.md b/explore-analyze/query-filter/languages/sql-translate.md index 77860281c..f720d8ef8 100644 --- a/explore-analyze/query-filter/languages/sql-translate.md +++ b/explore-analyze/query-filter/languages/sql-translate.md @@ -52,7 +52,7 @@ Which returns: } ``` -Which is the request that SQL will run to provide the results. In this case, SQL will use the [scroll](https://www.elastic.co/guide/en/elasticsearch/reference/current/paginate-search-results.html#scroll-search-results) API. If the result contained an aggregation then SQL would use the normal [search API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-search). +Which is the request that SQL will run to provide the results. In this case, SQL will use the [scroll](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/paginate-search-results.md#scroll-search-results) API. If the result contained an aggregation then SQL would use the normal [search API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-search). The request body accepts the same [parameters](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-sql-query) as the [SQL search API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-sql-query), excluding `cursor`. diff --git a/explore-analyze/query-filter/tools/console.md b/explore-analyze/query-filter/tools/console.md index 8d7160143..794a72826 100644 --- a/explore-analyze/query-filter/tools/console.md +++ b/explore-analyze/query-filter/tools/console.md @@ -26,7 +26,7 @@ $$$configuring-console$$$ $$$import-export-console-requests$$$ -**Console** is an interactive UI for sending requests to [{{es}} APIs](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html) and [{{kib}} APIs](https://www.elastic.co/docs/api) and viewing their responses. +**Console** is an interactive UI for sending requests to [{{es}} APIs](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/index.md) and [{{kib}} APIs](https://www.elastic.co/docs/api) and viewing their responses. :::{image} ../../../images/kibana-console.png :alt: Console diff --git a/explore-analyze/query-filter/tools/grok-debugger.md b/explore-analyze/query-filter/tools/grok-debugger.md index d3f5e0fc1..2bbba17b3 100644 --- a/explore-analyze/query-filter/tools/grok-debugger.md +++ b/explore-analyze/query-filter/tools/grok-debugger.md @@ -10,7 +10,7 @@ mapped_pages: You can build and debug grok patterns in the {{kib}} **Grok Debugger** before you use them in your data processing pipelines. Grok is a pattern matching syntax that you can use to parse arbitrary text and structure it. Grok is good for parsing syslog, apache, and other webserver logs, mysql logs, and in general, any log format that is written for human consumption. -Grok patterns are supported in {{es}} [runtime fields](../../../manage-data/data-store/mapping/runtime-fields.md), the {{es}} [grok ingest processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/grok-processor.html), and the {{ls}} [grok filter](https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html). For syntax, see [Grokking grok](../../scripting/grok.md). +Grok patterns are supported in {{es}} [runtime fields](../../../manage-data/data-store/mapping/runtime-fields.md), the {{es}} [grok ingest processor](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/grok-processor.md), and the {{ls}} [grok filter](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-filters-grok.md). For syntax, see [Grokking grok](../../scripting/grok.md). The {{stack}} ships with more than 120 reusable grok patterns. For a complete list of patterns, see [{{es}} grok patterns](https://github.com/elastic/elasticsearch/tree/master/libs/grok/src/main/resources/patterns) and [{{ls}} grok patterns](https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns). diff --git a/explore-analyze/report-and-share.md b/explore-analyze/report-and-share.md index 3a699a3cd..89bca27e6 100644 --- a/explore-analyze/report-and-share.md +++ b/explore-analyze/report-and-share.md @@ -132,7 +132,7 @@ To work around the limitations, use filters to create multiple smaller reports, For more information on using Elasticsearch APIs directly, see [Scroll API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-scroll), [Point in time API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-open-point-in-time), [ES|QL](/explore-analyze/query-filter/languages/esql-rest.md) or [SQL](/explore-analyze/query-filter/languages/sql-rest-format.md#_csv) with CSV response data format. We recommend that you use an official Elastic language client: details for each programming language library that Elastic provides are in the [{{es}} Client documentation](https://www.elastic.co/guide/en/elasticsearch/client/index.html). -[Reporting parameters](https://www.elastic.co/guide/en/kibana/current/reporting-settings-kb.html) can be adjusted to overcome some of these limiting scenarios. Results are dependent on data size, availability, and latency factors and are not guaranteed. +[Reporting parameters](asciidocalypse://docs/kibana/docs/reference/configuration-reference/reporting-settings.md) can be adjusted to overcome some of these limiting scenarios. Results are dependent on data size, availability, and latency factors and are not guaranteed. ### PNG/PDF report limitations [pdf-limitations] diff --git a/explore-analyze/report-and-share/reporting-troubleshooting-csv.md b/explore-analyze/report-and-share/reporting-troubleshooting-csv.md index b015c8f45..ab925ce8c 100644 --- a/explore-analyze/report-and-share/reporting-troubleshooting-csv.md +++ b/explore-analyze/report-and-share/reporting-troubleshooting-csv.md @@ -26,7 +26,7 @@ To work around the limitations, use filters to create multiple smaller reports, For more information on using Elasticsearch APIs directly, see [Scroll API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-scroll), [Point in time API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-open-point-in-time), [ES|QL](../query-filter/languages/esql-rest.md) or [SQL](../query-filter/languages/sql-rest-format.md#_csv) with CSV response data format. We recommend that you use an official Elastic language client: details for each programming language library that Elastic provides are in the [{{es}} Client documentation](https://www.elastic.co/guide/en/elasticsearch/client/index.html). -[Reporting parameters](https://www.elastic.co/guide/en/kibana/current/reporting-settings-kb.html) can be adjusted to overcome some of these limiting scenarios. Results are dependent on data size, availability, and latency factors and are not guaranteed. +[Reporting parameters](asciidocalypse://docs/kibana/docs/reference/configuration-reference/reporting-settings.md) can be adjusted to overcome some of these limiting scenarios. Results are dependent on data size, availability, and latency factors and are not guaranteed. :::: @@ -43,7 +43,7 @@ The Kibana CSV export feature collects all of the data from Elasticsearch by usi 1. Permissions to read data aliases alone will not work: the permissions are needed on the underlying indices or data streams. 2. In cases where data shards are unavailable or time out, the export will be empty rather than returning partial data. -Some users may benefit from using the [scroll API](https://www.elastic.co/guide/en/elasticsearch/reference/current/paginate-search-results.html#scroll-search-results), an alternative to paging through the data. The behavior of this API does not have the limitations of point in time API, however it has its own limitations: +Some users may benefit from using the [scroll API](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/paginate-search-results.md#scroll-search-results), an alternative to paging through the data. The behavior of this API does not have the limitations of point in time API, however it has its own limitations: 1. Search is limited to 500 shards at the very most. 2. In cases where the data shards are unavailable or time out, the export may return partial data. @@ -54,7 +54,7 @@ If you prefer the internal implementation of CSV export to use the scroll API, y xpack.reporting.csv.scroll.strategy: scroll ``` -For more details about CSV export settings, go to [CSV settings](https://www.elastic.co/guide/en/kibana/current/reporting-settings-kb.html#reporting-csv-settings). +For more details about CSV export settings, go to [CSV settings](asciidocalypse://docs/kibana/docs/reference/configuration-reference/reporting-settings.md#reporting-csv-settings). ## Socket hangups [reporting-troubleshooting-csv-socket-hangup] diff --git a/explore-analyze/report-and-share/reporting-troubleshooting.md b/explore-analyze/report-and-share/reporting-troubleshooting.md index 422d992ad..1d198b30d 100644 --- a/explore-analyze/report-and-share/reporting-troubleshooting.md +++ b/explore-analyze/report-and-share/reporting-troubleshooting.md @@ -49,9 +49,9 @@ These messages alone don’t indicate a problem. They show normal events that ha There are two primary causes for a "Max attempts reached" error: * You’re creating a PDF of a visualization or dashboard that spans a large amount of data and Kibana is hitting the `xpack.reporting.queue.timeout` -* Kibana is hosted behind a reverse-proxy, and the [Kibana server settings](https://www.elastic.co/guide/en/kibana/current/reporting-settings-kb.html#reporting-kibana-server-settings) are not configured correctly +* Kibana is hosted behind a reverse-proxy, and the [Kibana server settings](asciidocalypse://docs/kibana/docs/reference/configuration-reference/reporting-settings.md#reporting-kibana-server-settings) are not configured correctly -Create a Markdown visualization and then create a PDF report. If this succeeds, increase the `xpack.reporting.queue.timeout` setting. If the PDF report fails with "Max attempts reached," check your [Kibana server settings](https://www.elastic.co/guide/en/kibana/current/reporting-settings-kb.html#reporting-kibana-server-settings). +Create a Markdown visualization and then create a PDF report. If this succeeds, increase the `xpack.reporting.queue.timeout` setting. If the PDF report fails with "Max attempts reached," check your [Kibana server settings](asciidocalypse://docs/kibana/docs/reference/configuration-reference/reporting-settings.md#reporting-kibana-server-settings). ## Verbose logging [reporting-troubleshooting-verbose-logs] diff --git a/explore-analyze/scripting/dissect.md b/explore-analyze/scripting/dissect.md index a04777216..388a622b3 100644 --- a/explore-analyze/scripting/dissect.md +++ b/explore-analyze/scripting/dissect.md @@ -55,7 +55,7 @@ Now that you have a dissect pattern, how do you test and use it? ## Test dissect patterns with Painless [dissect-patterns-test] -You can incorporate dissect patterns into Painless scripts to extract data. To test your script, use either the [field contexts](https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-execute-api.html#painless-execute-runtime-field-context) of the Painless execute API or create a runtime field that includes the script. Runtime fields offer greater flexibility and accept multiple documents, but the Painless execute API is a great option if you don’t have write access on a cluster where you’re testing a script. +You can incorporate dissect patterns into Painless scripts to extract data. To test your script, use either the [field contexts](asciidocalypse://docs/elasticsearch/docs/reference/scripting-languages/painless/painless-api-examples.md#painless-execute-runtime-field-context) of the Painless execute API or create a runtime field that includes the script. Runtime fields offer greater flexibility and accept multiple documents, but the Painless execute API is a great option if you don’t have write access on a cluster where you’re testing a script. For example, test your dissect pattern with the Painless execute API by including your Painless script and a single document that matches your data. Start by indexing the `message` field as a `wildcard` data type: diff --git a/explore-analyze/scripting/grok.md b/explore-analyze/scripting/grok.md index 16e7ce5ee..3cd6a11f2 100644 --- a/explore-analyze/scripting/grok.md +++ b/explore-analyze/scripting/grok.md @@ -46,14 +46,14 @@ The first value is a number, followed by what appears to be an IP address. You c To ease migration to the [Elastic Common Schema (ECS)](https://www.elastic.co/guide/en/ecs/current), a new set of ECS-compliant patterns is available in addition to the existing patterns. The new ECS pattern definitions capture event field names that are compliant with the schema. -The ECS pattern set has all of the pattern definitions from the legacy set, and is a drop-in replacement. Use the [`ecs-compatability`](https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html#plugins-filters-grok-ecs_compatibility) setting to switch modes. +The ECS pattern set has all of the pattern definitions from the legacy set, and is a drop-in replacement. Use the [`ecs-compatability`](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-filters-grok.md#plugins-filters-grok-ecs_compatibility) setting to switch modes. New features and enhancements will be added to the ECS-compliant files. The legacy patterns may still receive bug fixes which are backwards compatible. ## Use grok patterns in Painless scripts [grok-patterns] -You can incorporate predefined grok patterns into Painless scripts to extract data. To test your script, use either the [field contexts](https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-execute-api.html#painless-execute-runtime-field-context) of the Painless execute API or create a runtime field that includes the script. Runtime fields offer greater flexibility and accept multiple documents, but the Painless execute API is a great option if you don’t have write access on a cluster where you’re testing a script. +You can incorporate predefined grok patterns into Painless scripts to extract data. To test your script, use either the [field contexts](asciidocalypse://docs/elasticsearch/docs/reference/scripting-languages/painless/painless-api-examples.md#painless-execute-runtime-field-context) of the Painless execute API or create a runtime field that includes the script. Runtime fields offer greater flexibility and accept multiple documents, but the Painless execute API is a great option if you don’t have write access on a cluster where you’re testing a script. ::::{tip} If you need help building grok patterns to match your data, use the [Grok Debugger](../query-filter/tools/grok-debugger.md) tool in {{kib}}. @@ -67,7 +67,7 @@ For example, if you’re working with Apache log data, you can use the `%{{COMMO [30/Apr/2020:14:30:17 -0500] \"GET /images/hm_bg.jpg HTTP/1.0\" 200 24736" ``` -To extract the IP address from the `message` field, you can write a Painless script that incorporates the `%{{COMMONAPACHELOG}}` syntax. You can test this script using the [`ip` field context](https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-execute-api.html#painless-runtime-ip) of the Painless execute API, but let’s use a runtime field instead. +To extract the IP address from the `message` field, you can write a Painless script that incorporates the `%{{COMMONAPACHELOG}}` syntax. You can test this script using the [`ip` field context](asciidocalypse://docs/elasticsearch/docs/reference/scripting-languages/painless/painless-api-examples.md#painless-runtime-ip) of the Painless execute API, but let’s use a runtime field instead. Based on the sample document, index the `@timestamp` and `message` fields. To remain flexible, use `wildcard` as the field type for `message`: @@ -154,7 +154,7 @@ GET my-index/_search ## Return calculated results [grok-pattern-results] -Using the `http.clientip` runtime field, you can define a simple query to run a search for a specific IP address and return all related fields. The [`fields`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-fields.html) parameter on the `_search` API works for all fields, even those that weren’t sent as part of the original `_source`: +Using the `http.clientip` runtime field, you can define a simple query to run a search for a specific IP address and return all related fields. The [`fields`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/retrieve-selected-fields.md) parameter on the `_search` API works for all fields, even those that weren’t sent as part of the original `_source`: ```console GET my-index/_search diff --git a/explore-analyze/scripting/modules-scripting-engine.md b/explore-analyze/scripting/modules-scripting-engine.md index 47fe7ae43..060760baf 100644 --- a/explore-analyze/scripting/modules-scripting-engine.md +++ b/explore-analyze/scripting/modules-scripting-engine.md @@ -10,7 +10,7 @@ mapped_pages: A `ScriptEngine` is a backend for implementing a scripting language. It may also be used to write scripts that need to use advanced internals of scripting. For example, a script that wants to use term frequencies while scoring. -The plugin [documentation](https://www.elastic.co/guide/en/elasticsearch/plugins/current/plugin-authors.html) has more information on how to write a plugin so that Elasticsearch will properly load it. To register the `ScriptEngine`, your plugin should implement the `ScriptPlugin` interface and override the `getScriptEngine(Settings settings)` method. +The plugin [documentation](asciidocalypse://docs/elasticsearch/docs/extend/create-elasticsearch-plugins/index.md) has more information on how to write a plugin so that Elasticsearch will properly load it. To register the `ScriptEngine`, your plugin should implement the `ScriptPlugin` interface and override the `getScriptEngine(Settings settings)` method. The following is an example of a custom `ScriptEngine` which uses the language name `expert_scripts`. It implements a single script called `pure_df` which may be used as a search script to override each document’s score as the document frequency of a provided term. diff --git a/explore-analyze/scripting/modules-scripting-fields.md b/explore-analyze/scripting/modules-scripting-fields.md index 0ac0ed411..d59711127 100644 --- a/explore-analyze/scripting/modules-scripting-fields.md +++ b/explore-analyze/scripting/modules-scripting-fields.md @@ -16,29 +16,29 @@ Depending on where a script is used, it will have access to certain special vari A script used in the [update](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-update), [update-by-query](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-update-by-query), or [reindex](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-reindex) API will have access to the `ctx` variable which exposes: `ctx._source` -: Access to the document [`_source` field](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html). +: Access to the document [`_source` field](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md). `ctx.op` : The operation that should be applied to the document: `index` or `delete`. `ctx._index` etc -: Access to [document metadata fields](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-fields.html), some of which may be read-only. +: Access to [document metadata fields](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/document-metadata-fields.md), some of which may be read-only. These scripts do not have access to the `doc` variable and have to use `ctx` to access the documents they operate on. ## Search and aggregation scripts [_search_and_aggregation_scripts] -With the exception of [script fields](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-fields.html#script-fields) which are executed once per search hit, scripts used in search and aggregations will be executed once for every document which might match a query or an aggregation. Depending on how many documents you have, this could mean millions or billions of executions: these scripts need to be fast! +With the exception of [script fields](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/retrieve-selected-fields.md#script-fields) which are executed once per search hit, scripts used in search and aggregations will be executed once for every document which might match a query or an aggregation. Depending on how many documents you have, this could mean millions or billions of executions: these scripts need to be fast! Field values can be accessed from a script using [doc-values](#modules-scripting-doc-vals), [the `_source` field](#modules-scripting-source), or [stored fields](#modules-scripting-stored), each of which is explained below. ### Accessing the score of a document within a script [scripting-score] -Scripts used in the [`function_score` query](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html), in [script-based sorting](https://www.elastic.co/guide/en/elasticsearch/reference/current/sort-search-results.html), or in [aggregations](../query-filter/aggregations.md) have access to the `_score` variable which represents the current relevance score of a document. +Scripts used in the [`function_score` query](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-function-score-query.md), in [script-based sorting](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/sort-search-results.md), or in [aggregations](../query-filter/aggregations.md) have access to the `_score` variable which represents the current relevance score of a document. -Here’s an example of using a script in a [`function_score` query](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html) to alter the relevance `_score` of each document: +Here’s an example of using a script in a [`function_score` query](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-function-score-query.md) to alter the relevance `_score` of each document: ```console PUT my-index-000001/_doc/1?refresh @@ -76,9 +76,9 @@ GET my-index-000001/_search ### Accessing term statistics of a document within a script [scripting-term-statistics] -Scripts used in a [`script_score`](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-script-score-query.html) query have access to the `_termStats` variable which provides statistical information about the terms in the child query. +Scripts used in a [`script_score`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-script-score-query.md) query have access to the `_termStats` variable which provides statistical information about the terms in the child query. -In the following example, `_termStats` is used within a [`script_score`](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-script-score-query.html) query to retrieve the average term frequency for the terms `quick`, `brown`, and `fox` in the `text` field: +In the following example, `_termStats` is used within a [`script_score`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-script-score-query.md) query to retrieve the average term frequency for the terms `quick`, `brown`, and `fox` in the `text` field: ```console PUT my-index-000001/_doc/1?refresh @@ -143,7 +143,7 @@ The `_termStats` variable is only available when using the [Painless](modules-sc ### Doc values [modules-scripting-doc-vals] -By far the fastest most efficient way to access a field value from a script is to use the `doc['field_name']` syntax, which retrieves the field value from [doc values](https://www.elastic.co/guide/en/elasticsearch/reference/current/doc-values.html). Doc values are a columnar field value store, enabled by default on all fields except for [analyzed `text` fields](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html). +By far the fastest most efficient way to access a field value from a script is to use the `doc['field_name']` syntax, which retrieves the field value from [doc values](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/doc-values.md). Doc values are a columnar field value store, enabled by default on all fields except for [analyzed `text` fields](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md). ```console PUT my-index-000001/_doc/1?refresh @@ -180,7 +180,7 @@ The `doc['field']` will throw an error if `field` is missing from the mappings. ::::{admonition} Doc values and `text` fields :class: note -The `doc['field']` syntax can also be used for [analyzed `text` fields](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html) if [`fielddata`](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html#fielddata-mapping-param) is enabled, but **BEWARE**: enabling fielddata on a `text` field requires loading all of the terms into the JVM heap, which can be very expensive both in terms of memory and CPU. It seldom makes sense to access `text` fields from scripts. +The `doc['field']` syntax can also be used for [analyzed `text` fields](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md) if [`fielddata`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md#fielddata-mapping-param) is enabled, but **BEWARE**: enabling fielddata on a `text` field requires loading all of the terms into the JVM heap, which can be very expensive both in terms of memory and CPU. It seldom makes sense to access `text` fields from scripts. :::: @@ -188,14 +188,14 @@ The `doc['field']` syntax can also be used for [analyzed `text` fields](https:// ### The document `_source` [modules-scripting-source] -The document [`_source`](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html) can be accessed using the `_source.field_name` syntax. The `_source` is loaded as a map-of-maps, so properties within object fields can be accessed as, for example, `_source.name.first`. +The document [`_source`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md) can be accessed using the `_source.field_name` syntax. The `_source` is loaded as a map-of-maps, so properties within object fields can be accessed as, for example, `_source.name.first`. ::::{admonition} Prefer doc-values to _source :class: important Accessing the `_source` field is much slower than using doc-values. The _source field is optimised for returning several fields per result, while doc values are optimised for accessing the value of a specific field in many documents. -It makes sense to use `_source` when generating a [script field](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-fields.html#script-fields) for the top ten hits from a search result but, for other search and aggregation use cases, always prefer using doc values. +It makes sense to use `_source` when generating a [script field](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/retrieve-selected-fields.md#script-fields) for the top ten hits from a search result but, for other search and aggregation use cases, always prefer using doc values. :::: @@ -239,7 +239,7 @@ GET my-index-000001/_search ### Stored fields [modules-scripting-stored] -*Stored fields* — fields explicitly marked as [`"store": true`](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-store.html) in the mapping — can be accessed using the `_fields['field_name'].value` or `_fields['field_name']` syntax: +*Stored fields* — fields explicitly marked as [`"store": true`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-store.md) in the mapping — can be accessed using the `_fields['field_name'].value` or `_fields['field_name']` syntax: ```console PUT my-index-000001 diff --git a/explore-analyze/scripting/modules-scripting-painless.md b/explore-analyze/scripting/modules-scripting-painless.md index e1e457cf9..a0da4eda7 100644 --- a/explore-analyze/scripting/modules-scripting-painless.md +++ b/explore-analyze/scripting/modules-scripting-painless.md @@ -22,4 +22,4 @@ Painless provides numerous capabilities that center around the following core pr Ready to start scripting with Painless? Learn how to [write your first script](modules-scripting-using.md). -If you’re already familiar with Painless, see the [Painless Language Specification](https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-lang-spec.html) for a detailed description of the Painless syntax and language features. +If you’re already familiar with Painless, see the [Painless Language Specification](asciidocalypse://docs/elasticsearch/docs/reference/scripting-languages/painless/painless-language-specification.md) for a detailed description of the Painless syntax and language features. diff --git a/explore-analyze/scripting/modules-scripting-security.md b/explore-analyze/scripting/modules-scripting-security.md index b06d04ee3..400d8a2dd 100644 --- a/explore-analyze/scripting/modules-scripting-security.md +++ b/explore-analyze/scripting/modules-scripting-security.md @@ -16,9 +16,9 @@ The second layer of security is the [Java Security Manager](https://www.oracle.c {{es}} uses [seccomp](https://en.wikipedia.org/wiki/Seccomp) in Linux, [Seatbelt](https://www.chromium.org/developers/design-documents/sandbox/osx-sandboxing-design) in macOS, and [ActiveProcessLimit](https://msdn.microsoft.com/en-us/library/windows/desktop/ms684147) on Windows as additional security layers to prevent {{es}} from forking or running other processes. -Finally, scripts used in [scripted metrics aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-scripted-metric-aggregation.html) can be restricted to a defined list of scripts, or forbidden altogether. This can prevent users from running particularly slow or resource intensive aggregation queries. +Finally, scripts used in [scripted metrics aggregations](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-scripted-metric-aggregation.md) can be restricted to a defined list of scripts, or forbidden altogether. This can prevent users from running particularly slow or resource intensive aggregation queries. -You can modify the following script settings to restrict the type of scripts that are allowed to run, and control the available [contexts](https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-contexts.html) that scripts can run in. To implement additional layers in your defense in depth strategy, follow the [{{es}} security principles](../../deploy-manage/security.md). +You can modify the following script settings to restrict the type of scripts that are allowed to run, and control the available [contexts](asciidocalypse://docs/elasticsearch/docs/reference/scripting-languages/painless/painless-contexts.md) that scripts can run in. To implement additional layers in your defense in depth strategy, follow the [{{es}} security principles](../../deploy-manage/security.md). ## Allowed script types setting [allowed-script-types-setting] @@ -50,7 +50,7 @@ script.allowed_contexts: score, update ## Allowed scripts in scripted metrics aggregations [allowed-script-in-aggs-settings] -By default, all scripts are permitted in [scripted metrics aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-scripted-metric-aggregation.html). To restrict the set of allowed scripts, set [`search.aggs.only_allowed_metric_scripts`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-settings.html#search-settings-only-allowed-scripts) to `true` and provide the allowed scripts using [`search.aggs.allowed_inline_metric_scripts`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-settings.html#search-settings-allowed-inline-scripts) and/or [`search.aggs.allowed_stored_metric_scripts`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-settings.html#search-settings-allowed-stored-scripts). +By default, all scripts are permitted in [scripted metrics aggregations](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-scripted-metric-aggregation.md). To restrict the set of allowed scripts, set [`search.aggs.only_allowed_metric_scripts`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/search-settings.md#search-settings-only-allowed-scripts) to `true` and provide the allowed scripts using [`search.aggs.allowed_inline_metric_scripts`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/search-settings.md#search-settings-allowed-inline-scripts) and/or [`search.aggs.allowed_stored_metric_scripts`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/search-settings.md#search-settings-allowed-stored-scripts). To disallow certain script types, omit the corresponding script list (`search.aggs.allowed_inline_metric_scripts` or `search.aggs.allowed_stored_metric_scripts`) or set it to an empty array. When both script lists are not empty, the given stored scripts and the given inline scripts will be allowed. diff --git a/explore-analyze/scripting/modules-scripting-using.md b/explore-analyze/scripting/modules-scripting-using.md index b56848ea1..23832aa54 100644 --- a/explore-analyze/scripting/modules-scripting-using.md +++ b/explore-analyze/scripting/modules-scripting-using.md @@ -34,7 +34,7 @@ Wherever scripting is supported in the {{es}} APIs, the syntax follows the same A Painless script is structured as one or more statements and optionally has one or more user-defined functions at the beginning. A script must always have at least one statement. -The [Painless execute API](https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-execute-api.html) provides the ability to test a script with simple user-defined parameters and receive a result. Let’s start with a complete script and review its constituent parts. +The [Painless execute API](asciidocalypse://docs/elasticsearch/docs/reference/scripting-languages/painless/painless-api-examples.md) provides the ability to test a script with simple user-defined parameters and receive a result. Let’s start with a complete script and review its constituent parts. First, index a document with a single field so that we have some data to work with: @@ -45,7 +45,7 @@ PUT my-index-000001/_doc/1 } ``` -We can then construct a script that operates on that field and run evaluate the script as part of a query. The following query uses the [`script_fields`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-fields.html#script-fields) parameter of the search API to retrieve a script valuation. There’s a lot happening here, but we’ll break it down the components to understand them individually. For now, you only need to understand that this script takes `my_field` and operates on it. +We can then construct a script that operates on that field and run evaluate the script as part of a query. The following query uses the [`script_fields`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/retrieve-selected-fields.md#script-fields) parameter of the search API to retrieve a script valuation. There’s a lot happening here, but we’ll break it down the components to understand them individually. For now, you only need to understand that this script takes `my_field` and operates on it. ```console GET my-index-000001/_search diff --git a/explore-analyze/scripting/scripting-field-extraction.md b/explore-analyze/scripting/scripting-field-extraction.md index 9a97dcab6..6bf983c52 100644 --- a/explore-analyze/scripting/scripting-field-extraction.md +++ b/explore-analyze/scripting/scripting-field-extraction.md @@ -246,7 +246,7 @@ The following pattern tells dissect to return the term `used`, a blank space, th emit("used" + ' ' + gc.usize + ', ' + "capacity" + ' ' + gc.csize + ', ' + "committed" + ' ' + gc.comsize) ``` -Putting it all together, you can create a runtime field named `gc_size` in a search request. Using the [`fields` option](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-fields.html#search-fields-param), you can retrieve all values for the `gc_size` runtime field. This query also includes a bucket aggregation to group your data. +Putting it all together, you can create a runtime field named `gc_size` in a search request. Using the [`fields` option](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/retrieve-selected-fields.md#search-fields-param), you can retrieve all values for the `gc_size` runtime field. This query also includes a bucket aggregation to group your data. ```console GET my-index/_search diff --git a/explore-analyze/scripting/scripts-search-speed.md b/explore-analyze/scripting/scripts-search-speed.md index c14c6c552..a07899afb 100644 --- a/explore-analyze/scripting/scripts-search-speed.md +++ b/explore-analyze/scripting/scripts-search-speed.md @@ -72,7 +72,7 @@ PUT /my_test_scores/_mapping } ``` -Next, use an [ingest pipeline](../../manage-data/ingest/transform-enrich/ingest-pipelines.md) containing the [script processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/script-processor.html) to calculate the sum of `math_score` and `verbal_score` and index it in the `total_score` field. +Next, use an [ingest pipeline](../../manage-data/ingest/transform-enrich/ingest-pipelines.md) containing the [script processor](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/script-processor.md) to calculate the sum of `math_score` and `verbal_score` and index it in the `total_score` field. ```console PUT _ingest/pipeline/my_test_scores_pipeline diff --git a/explore-analyze/transforms/ecommerce-transforms.md b/explore-analyze/transforms/ecommerce-transforms.md index 6d65038ef..bd9ce7039 100644 --- a/explore-analyze/transforms/ecommerce-transforms.md +++ b/explore-analyze/transforms/ecommerce-transforms.md @@ -8,7 +8,7 @@ mapped_pages: # Tutorial: Transforming the eCommerce sample data [ecommerce-transforms] -[{{transforms-cap}}](../transforms.md) enable you to retrieve information from an {{es}} index, transform it, and store it in another index. Let’s use the [{{kib}} sample data](https://www.elastic.co/guide/en/kibana/current/get-started.html) to demonstrate how you can pivot and summarize your data with {{transforms}}. +[{{transforms-cap}}](../transforms.md) enable you to retrieve information from an {{es}} index, transform it, and store it in another index. Let’s use the [{{kib}} sample data](/explore-analyze/index.md) to demonstrate how you can pivot and summarize your data with {{transforms}}. 1. Verify that your environment is set up properly to use {{transforms}}. If the {{es}} {{security-features}} are enabled, to complete this tutorial you need a user that has authority to preview and create {{transforms}}. You must also have specific index privileges for the source and destination indices. See [Setup](transform-setup.md). 2. Choose your *source index*. @@ -27,7 +27,7 @@ mapped_pages: :class: screenshot ::: - Group the data by customer ID and add one or more aggregations to learn more about each customer’s orders. For example, let’s calculate the sum of products they purchased, the total price of their purchases, the maximum number of products that they purchased in a single order, and their total number of orders. We’ll accomplish this by using the [`sum` aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-sum-aggregation.html) on the `total_quantity` and `taxless_total_price` fields, the [`max` aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-max-aggregation.html) on the `total_quantity` field, and the [`cardinality` aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html) on the `order_id` field: + Group the data by customer ID and add one or more aggregations to learn more about each customer’s orders. For example, let’s calculate the sum of products they purchased, the total price of their purchases, the maximum number of products that they purchased in a single order, and their total number of orders. We’ll accomplish this by using the [`sum` aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-sum-aggregation.md) on the `total_quantity` and `taxless_total_price` fields, the [`max` aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-max-aggregation.md) on the `total_quantity` field, and the [`cardinality` aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-cardinality-aggregation.md) on the `order_id` field: :::{image} ../../images/elasticsearch-reference-ecommerce-pivot2.png :alt: Adding multiple aggregations to a {{transform}} in {{kib}} @@ -171,7 +171,7 @@ mapped_pages: :::: 5. Optional: Create the destination index. - If the destination index does not exist, it is created the first time you start your {{transform}}. A pivot transform deduces the mappings for the destination index from the source indices and the transform aggregations. If there are fields in the destination index that are derived from scripts (for example, if you use [`scripted_metrics`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-scripted-metric-aggregation.html) or [`bucket_scripts`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-bucket-script-aggregation.html) aggregations), they’re created with [dynamic mappings](../../manage-data/data-store/mapping/dynamic-mapping.md). You can use the preview {{transform}} API to preview the mappings it will use for the destination index. In {{kib}}, if you copied the API request to your clipboard, paste it into the console, then refer to the `generated_dest_index` object in the API response. + If the destination index does not exist, it is created the first time you start your {{transform}}. A pivot transform deduces the mappings for the destination index from the source indices and the transform aggregations. If there are fields in the destination index that are derived from scripts (for example, if you use [`scripted_metrics`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-scripted-metric-aggregation.md) or [`bucket_scripts`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-pipeline-bucket-script-aggregation.md) aggregations), they’re created with [dynamic mappings](../../manage-data/data-store/mapping/dynamic-mapping.md). You can use the preview {{transform}} API to preview the mappings it will use for the destination index. In {{kib}}, if you copied the API request to your clipboard, paste it into the console, then refer to the `generated_dest_index` object in the API response. ::::{note} {{transforms-cap}} might have more configuration options provided by the APIs than the options available in {{kib}}. For example, you can set an ingest pipeline for `dest` by calling the [Create {{transform}}](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-transform-put-transform). For all the {{transform}} configuration options, refer to the [documentation](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-transform). :::: diff --git a/explore-analyze/transforms/transform-checkpoints.md b/explore-analyze/transforms/transform-checkpoints.md index caaea2441..0f6c58a72 100644 --- a/explore-analyze/transforms/transform-checkpoints.md +++ b/explore-analyze/transforms/transform-checkpoints.md @@ -39,9 +39,9 @@ If the cluster experiences unsuitable performance degradation due to the {{trans ## Using the ingest timestamp for syncing the {{transform}} [sync-field-ingest-timestamp] -In most cases, it is strongly recommended to use the ingest timestamp of the source indices for syncing the {{transform}}. This is the most optimal way for {{transforms}} to be able to identify new changes. If your data source follows the [ECS standard](https://www.elastic.co/guide/en/ecs/current/ecs-reference.html), you might already have an [`event.ingested`](https://www.elastic.co/guide/en/ecs/current/ecs-event.html#field-event-ingested) field. In this case, use `event.ingested` as the `sync`.`time`.`field` property of your {{transform}}. +In most cases, it is strongly recommended to use the ingest timestamp of the source indices for syncing the {{transform}}. This is the most optimal way for {{transforms}} to be able to identify new changes. If your data source follows the [ECS standard](asciidocalypse://docs/ecs/docs/reference/ecs/index.md), you might already have an [`event.ingested`](asciidocalypse://docs/ecs/docs/reference/ecs/ecs-event.md#field-event-ingested) field. In this case, use `event.ingested` as the `sync`.`time`.`field` property of your {{transform}}. -If you don’t have a `event.ingested` field or it isn’t populated, you can set it by using an ingest pipeline. Create an ingest pipeline either using the [ingest pipeline API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ingest-put-pipeline) (like the example below) or via {{kib}} under **Stack Management > Ingest Pipelines**. Use a [`set` processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/set-processor.html) to set the field and associate it with the value of the ingest timestamp. +If you don’t have a `event.ingested` field or it isn’t populated, you can set it by using an ingest pipeline. Create an ingest pipeline either using the [ingest pipeline API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ingest-put-pipeline) (like the example below) or via {{kib}} under **Stack Management > Ingest Pipelines**. Use a [`set` processor](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/set-processor.md) to set the field and associate it with the value of the ingest timestamp. ```console PUT _ingest/pipeline/set_ingest_time diff --git a/explore-analyze/transforms/transform-examples.md b/explore-analyze/transforms/transform-examples.md index 45e9b67d2..8dbef30bd 100644 --- a/explore-analyze/transforms/transform-examples.md +++ b/explore-analyze/transforms/transform-examples.md @@ -9,7 +9,7 @@ mapped_pages: # Examples [transform-examples] -These examples demonstrate how to use {{transforms}} to derive useful insights from your data. All the examples use one of the [{{kib}} sample datasets](https://www.elastic.co/guide/en/kibana/current/get-started.html). For a more detailed, step-by-step example, see [Tutorial: Transforming the eCommerce sample data](ecommerce-transforms.md). +These examples demonstrate how to use {{transforms}} to derive useful insights from your data. All the examples use one of the [{{kib}} sample datasets](/explore-analyze/index.md). For a more detailed, step-by-step example, see [Tutorial: Transforming the eCommerce sample data](ecommerce-transforms.md). * [Finding your best customers](#example-best-customers) * [Finding air carriers with the most delays](#example-airline) @@ -94,7 +94,7 @@ It’s possible to answer these questions using aggregations alone, however {{tr ## Finding air carriers with the most delays [example-airline] -This example uses the Flights sample data set to find out which air carrier had the most delays. First, filter the source data such that it excludes all the cancelled flights by using a query filter. Then transform the data to contain the distinct number of flights, the sum of delayed minutes, and the sum of the flight minutes by air carrier. Finally, use a [`bucket_script`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-bucket-script-aggregation.html) to determine what percentage of the flight time was actually delay. +This example uses the Flights sample data set to find out which air carrier had the most delays. First, filter the source data such that it excludes all the cancelled flights by using a query filter. Then transform the data to contain the distinct number of flights, the sum of delayed minutes, and the sum of the flight minutes by air carrier. Finally, use a [`bucket_script`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-pipeline-bucket-script-aggregation.md) to determine what percentage of the flight time was actually delay. ```console POST _transform/_preview @@ -415,9 +415,9 @@ This {{transform}} makes it easier to answer questions such as: ## Finding client IPs that sent the most bytes to the server [example-bytes] -This example uses the web log sample data set to find the client IP that sent the most bytes to the server in every hour. The example uses a `pivot` {{transform}} with a [`top_metrics`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-top-metrics.html) aggregation. +This example uses the web log sample data set to find the client IP that sent the most bytes to the server in every hour. The example uses a `pivot` {{transform}} with a [`top_metrics`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-top-metrics.md) aggregation. -Group the data by a [date histogram](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-composite-aggregation.html#_date_histogram) on the time field with an interval of one hour. Use a [max aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-max-aggregation.html) on the `bytes` field to get the maximum amount of data that is sent to the server. Without the `max` aggregation, the API call still returns the client IP that sent the most bytes, however, the amount of bytes that it sent is not returned. In the `top_metrics` property, specify `clientip` and `geo.src`, then sort them by the `bytes` field in descending order. The {{transform}} returns the client IP that sent the biggest amount of data and the 2-letter ISO code of the corresponding location. +Group the data by a [date histogram](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-composite-aggregation.md#_date_histogram) on the time field with an interval of one hour. Use a [max aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-max-aggregation.md) on the `bytes` field to get the maximum amount of data that is sent to the server. Without the `max` aggregation, the API call still returns the client IP that sent the most bytes, however, the amount of bytes that it sent is not returned. In the `top_metrics` property, specify `clientip` and `geo.src`, then sort them by the `bytes` field in descending order. The {{transform}} returns the client IP that sent the biggest amount of data and the 2-letter ISO code of the corresponding location. ```console POST _transform/_preview diff --git a/explore-analyze/transforms/transform-limitations.md b/explore-analyze/transforms/transform-limitations.md index 9cea4ef14..ef1f6d535 100644 --- a/explore-analyze/transforms/transform-limitations.md +++ b/explore-analyze/transforms/transform-limitations.md @@ -49,7 +49,7 @@ A {{ctransform}} periodically checks for changes to source data. The functionali ### Aggregation responses may be incompatible with destination index mappings [transform-aggresponse-limitations] -When a pivot {{transform}} is first started, it will deduce the mappings required for the destination index. This process is based on the field types of the source index and the aggregations used. If the fields are derived from [`scripted_metrics`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-scripted-metric-aggregation.html) or [`bucket_scripts`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-bucket-script-aggregation.html), [dynamic mappings](../../manage-data/data-store/mapping/dynamic-mapping.md) will be used. In some instances the deduced mappings may be incompatible with the actual data. For example, numeric overflows might occur or dynamically mapped fields might contain both numbers and strings. Please check {{es}} logs if you think this may have occurred. +When a pivot {{transform}} is first started, it will deduce the mappings required for the destination index. This process is based on the field types of the source index and the aggregations used. If the fields are derived from [`scripted_metrics`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-scripted-metric-aggregation.md) or [`bucket_scripts`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-pipeline-bucket-script-aggregation.md), [dynamic mappings](../../manage-data/data-store/mapping/dynamic-mapping.md) will be used. In some instances the deduced mappings may be incompatible with the actual data. For example, numeric overflows might occur or dynamically mapped fields might contain both numbers and strings. Please check {{es}} logs if you think this may have occurred. You can view the deduced mappings by using the [preview transform API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-transform-preview-transform). See the `generated_dest_index` object in the API response. @@ -57,7 +57,7 @@ If it’s required, you may define custom mappings prior to starting the {{trans ### Batch {{transforms}} may not account for changed documents [transform-batch-limitations] -A batch {{transform}} uses a [composite aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-composite-aggregation.html) which allows efficient pagination through all buckets. Composite aggregations do not yet support a search context, therefore if the source data is changed (deleted, updated, added) while the batch {{dataframe}} is in progress, then the results may not include these changes. +A batch {{transform}} uses a [composite aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-composite-aggregation.md) which allows efficient pagination through all buckets. Composite aggregations do not yet support a search context, therefore if the source data is changed (deleted, updated, added) while the batch {{dataframe}} is in progress, then the results may not include these changes. ### {{ctransform-cap}} consistency does not account for deleted or updated documents [transform-consistency-limitations] @@ -77,7 +77,7 @@ When deleting a {{transform}} using `DELETE _transform/index` neither the destin During the development of {{transforms}}, control was favoured over performance. In the design considerations, it is preferred for the {{transform}} to take longer to complete quietly in the background rather than to finish quickly and take precedence in resource consumption. -Composite aggregations are well suited for high cardinality data enabling pagination through results. If a [circuit breaker](https://www.elastic.co/guide/en/elasticsearch/reference/current/circuit-breaker.html) memory exception occurs when performing the composite aggregated search then we try again reducing the number of buckets requested. This circuit breaker is calculated based upon all activity within the cluster, not just activity from {{transforms}}, so it therefore may only be a temporary resource availability issue. +Composite aggregations are well suited for high cardinality data enabling pagination through results. If a [circuit breaker](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/circuit-breaker-settings.md) memory exception occurs when performing the composite aggregated search then we try again reducing the number of buckets requested. This circuit breaker is calculated based upon all activity within the cluster, not just activity from {{transforms}}, so it therefore may only be a temporary resource availability issue. For a batch {{transform}}, the number of buckets requested is only ever adjusted downwards. The lowering of value may result in a longer duration for the {{transform}} checkpoint to complete. For {{ctransforms}}, the number of buckets requested is reset back to its default at the start of every checkpoint and it is possible for circuit breaker exceptions to occur repeatedly in the {{es}} logs. @@ -85,11 +85,11 @@ The {{transform}} retrieves data in batches which means it calculates several bu ### Handling dynamic adjustments for many terms [transform-dynamic-adjustments-limitations] -For each checkpoint, entities are identified that have changed since the last time the check was performed. This list of changed entities is supplied as a [terms query](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html) to the {{transform}} composite aggregation, one page at a time. Then updates are applied to the destination index for each page of entities. +For each checkpoint, entities are identified that have changed since the last time the check was performed. This list of changed entities is supplied as a [terms query](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-terms-query.md) to the {{transform}} composite aggregation, one page at a time. Then updates are applied to the destination index for each page of entities. The page `size` is defined by `max_page_search_size` which is also used to define the number of buckets returned by the composite aggregation search. The default value is 500, the minimum is 10. -The index setting [`index.max_terms_count`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#dynamic-index-settings) defines the maximum number of terms that can be used in a terms query. The default value is 65536. If `max_page_search_size` exceeds `index.max_terms_count` the {{transform}} will fail. +The index setting [`index.max_terms_count`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#dynamic-index-settings) defines the maximum number of terms that can be used in a terms query. The default value is 65536. If `max_page_search_size` exceeds `index.max_terms_count` the {{transform}} will fail. Using smaller values for `max_page_search_size` may result in a longer duration for the {{transform}} checkpoint to complete. @@ -109,7 +109,7 @@ If using a `sync.time.field` that represents the data ingest time and using a ze ### Support for date nanoseconds data type [transform-date-nanos] -If your data uses the [date nanosecond data type](https://www.elastic.co/guide/en/elasticsearch/reference/current/date_nanos.html), aggregations are nonetheless on millisecond resolution. This limitation also affects the aggregations in your {{transforms}}. +If your data uses the [date nanosecond data type](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/date_nanos.md), aggregations are nonetheless on millisecond resolution. This limitation also affects the aggregations in your {{transforms}}. ### Data streams as destination indices are not supported [transform-data-streams-destination] @@ -119,7 +119,7 @@ If your data uses the [date nanosecond data type](https://www.elastic.co/guide/e [ILM](../../manage-data/lifecycle/index-lifecycle-management.md) is not recommended to use as a {{transform}} destination index. {{transforms-cap}} update documents in the current destination, and cannot delete documents in the indices previously used by ILM. This may lead to duplicated documents when you use {{transforms}} combined with ILM in case of a rollover. -If you use ILM to have time-based indices, please consider using the [Date index name](https://www.elastic.co/guide/en/elasticsearch/reference/current/date-index-name-processor.html) instead. The processor works without duplicated documents if your {{transform}} contains a `group_by` based on `date_histogram`. +If you use ILM to have time-based indices, please consider using the [Date index name](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/date-index-name-processor.md) instead. The processor works without duplicated documents if your {{transform}} contains a `group_by` based on `date_histogram`. ## Limitations in {{kib}} [transform-ui-limitations] diff --git a/explore-analyze/transforms/transform-painless-examples.md b/explore-analyze/transforms/transform-painless-examples.md index 6ef9b2a15..59881c7e8 100644 --- a/explore-analyze/transforms/transform-painless-examples.md +++ b/explore-analyze/transforms/transform-painless-examples.md @@ -13,7 +13,7 @@ mapped_pages: The examples that use the `scripted_metric` aggregation are not supported on {{es}} Serverless. :::: -These examples demonstrate how to use Painless in {{transforms}}. You can learn more about the Painless scripting language in the [Painless guide](https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-guide.html). +These examples demonstrate how to use Painless in {{transforms}}. You can learn more about the Painless scripting language in the [Painless guide](asciidocalypse://docs/elasticsearch/docs/reference/scripting-languages/painless/painless.md). * [Getting top hits by using scripted metric aggregation](#painless-top-hits) * [Getting time features by using aggregations](#painless-time-features) @@ -31,7 +31,7 @@ These examples demonstrate how to use Painless in {{transforms}}. You can learn ## Getting top hits by using scripted metric aggregation [painless-top-hits] -This snippet shows how to find the latest document, in other words the document with the latest timestamp. From a technical perspective, it helps to achieve the function of a [Top hits](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-top-hits-aggregation.html) by using scripted metric aggregation in a {{transform}}, which provides a metric output. +This snippet shows how to find the latest document, in other words the document with the latest timestamp. From a technical perspective, it helps to achieve the function of a [Top hits](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-top-hits-aggregation.md) by using scripted metric aggregation in a {{transform}}, which provides a metric output. ::::{important} This example uses a `scripted_metric` aggregation which is not supported on {{es}} Serverless. @@ -66,7 +66,7 @@ This example uses a `scripted_metric` aggregation which is not supported on {{es 3. The `combine_script` returns `state` from each shard. 4. The `reduce_script` iterates through the value of `s.timestamp_latest` returned by each shard and returns the document with the latest timestamp (`last_doc`). In the response, the top hit (in other words, the `latest_doc`) is nested below the `latest_doc` field. -Check the [scope of scripts](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-scripted-metric-aggregation.html#scripted-metric-aggregation-scope) for detailed explanation on the respective scripts. +Check the [scope of scripts](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-scripted-metric-aggregation.md#scripted-metric-aggregation-scope) for detailed explanation on the respective scripts. You can retrieve the last value in a similar way: @@ -215,7 +215,7 @@ This snippet shows how to extract time based features by using Painless in a {{t ## Getting duration by using bucket script [painless-bucket-script] -This example shows you how to get the duration of a session by client IP from a data log by using [bucket script](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-bucket-script-aggregation.html). The example uses the {{kib}} sample web logs dataset. +This example shows you how to get the duration of a session by client IP from a data log by using [bucket script](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-pipeline-bucket-script-aggregation.md). The example uses the {{kib}} sample web logs dataset. ```console PUT _transform/data_log diff --git a/explore-analyze/transforms/transform-scale.md b/explore-analyze/transforms/transform-scale.md index 9671fe8ae..75a762499 100644 --- a/explore-analyze/transforms/transform-scale.md +++ b/explore-analyze/transforms/transform-scale.md @@ -55,7 +55,7 @@ Imagine your {{ctransform}} is configured to group by `IP` and calculate the sum To limit which historical indices are accessed, exclude certain tiers (for example `"must_not": { "terms": { "_tier": [ "data_frozen", "data_cold" ] } }` and/or use an absolute time value as a date range filter in your source query (for example, greater than 2024-01-01T00:00:00). If you use a relative time value (for example, gte now-30d/d) then ensure date rounding is applied to take advantage of query caching and ensure that the relative time is much larger than the largest of `frequency` or `time.sync.delay` or the date histogram bucket, otherwise data may be missed. Do not use date filters which are less than a date value (for example, `lt`: less than or `lte`: less than or equal to) as this conflicts with the logic applied at each checkpoint execution and data may be missed. -Consider using [date math](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#api-date-math-index-names) in your index names to reduce the number of indices to resolve in your queries. Add a date pattern - for example, `yyyy-MM-dd` - to your index names and use it to limit your query to a specific date. The example below queries indices only from yesterday and today: +Consider using [date math](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#api-date-math-index-names) in your index names to reduce the number of indices to resolve in your queries. Add a date pattern - for example, `yyyy-MM-dd` - to your index names and use it to limit your query to a specific date. The example below queries indices only from yesterday and today: ```js "source": { @@ -88,10 +88,10 @@ Index sorting enables you to store documents on disk in a specific order which c ## 9. Disable the `_source` field on the destination index (storage) [disable-source-dest] -The [`_source` field](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html) contains the original JSON document body that was passed at index time. The `_source` field itself is not indexed (and thus is not searchable), but it is still stored in the index and incurs a storage overhead. Consider disabling `_source` to save storage space if you have a large destination index. Disabling `_source` is only possible during index creation. +The [`_source` field](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md) contains the original JSON document body that was passed at index time. The `_source` field itself is not indexed (and thus is not searchable), but it is still stored in the index and incurs a storage overhead. Consider disabling `_source` to save storage space if you have a large destination index. Disabling `_source` is only possible during index creation. ::::{note} -When the `_source` field is disabled, a number of features are not supported. Consult [Disabling the `_source` field](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#disable-source-field) to understand the consequences before disabling it. +When the `_source` field is disabled, a number of features are not supported. Consult [Disabling the `_source` field](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md#disable-source-field) to understand the consequences before disabling it. :::: ## Further reading [_further_reading] diff --git a/explore-analyze/transforms/transform-usage.md b/explore-analyze/transforms/transform-usage.md index c2ba2a430..5b8bca583 100644 --- a/explore-analyze/transforms/transform-usage.md +++ b/explore-analyze/transforms/transform-usage.md @@ -18,11 +18,11 @@ You might want to consider using {{transforms}} instead of aggregations when: In {{ml}}, you often need a complete set of behavioral features rather just the top-N. For example, if you are predicting customer churn, you might look at features such as the number of website visits in the last week, the total number of sales, or the number of emails sent. The {{stack}} {{ml-features}} create models based on this multi-dimensional feature space, so they benefit from the full feature indices that are created by {{transforms}}. - This scenario also applies when you are trying to search across the results of an aggregation or multiple aggregations. Aggregation results can be ordered or filtered, but there are [limitations to ordering](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#search-aggregations-bucket-terms-aggregation-order) and [filtering by bucket selector](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-bucket-selector-aggregation.html) is constrained by the maximum number of buckets returned. If you want to search all aggregation results, you need to create the complete {{dataframe}}. If you need to sort or filter the aggregation results by multiple fields, {{transforms}} are particularly useful. + This scenario also applies when you are trying to search across the results of an aggregation or multiple aggregations. Aggregation results can be ordered or filtered, but there are [limitations to ordering](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-terms-aggregation.md#search-aggregations-bucket-terms-aggregation-order) and [filtering by bucket selector](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-pipeline-bucket-selector-aggregation.md) is constrained by the maximum number of buckets returned. If you want to search all aggregation results, you need to create the complete {{dataframe}}. If you need to sort or filter the aggregation results by multiple fields, {{transforms}} are particularly useful. * You need to sort aggregation results by a pipeline aggregation. - [Pipeline aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline.html) cannot be used for sorting. Technically, this is because pipeline aggregations are run during the reduce phase after all other aggregations have already completed. If you create a {{transform}}, you can effectively perform multiple passes over the data. + [Pipeline aggregations](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/pipeline.md) cannot be used for sorting. Technically, this is because pipeline aggregations are run during the reduce phase after all other aggregations have already completed. If you create a {{transform}}, you can effectively perform multiple passes over the data. * You want to create summary tables to optimize queries. diff --git a/explore-analyze/visualize.md b/explore-analyze/visualize.md index a0911fb6a..f3bbdbc3e 100644 --- a/explore-analyze/visualize.md +++ b/explore-analyze/visualize.md @@ -18,7 +18,7 @@ $$$panels-editors$$$ | --- | --- | --- | | Visualizations | | | | [Lens](visualize/lens.md) | The default editor for creating powerful [charts](visualize/supported-chart-types.md) in {{kib}} | -| [ES|QL](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-kibana.html) | Create visualizations from ES|QL queries | +| [ES|QL](/explore-analyze/query-filter/languages/esql-kibana.md) | Create visualizations from ES|QL queries | | [Maps](visualize/maps.md) | Create beautiful displays of your geographical data | | [Field statistics](visualize/field-statistics.md) | Add a field statistics view of your data to your dashboards | | [Custom visualizations](visualize/custom-visualizations-with-vega.md) | Use Vega to create new types of visualizations | @@ -32,9 +32,9 @@ $$$panels-editors$$$ | [Single metric viewer](machine-learning/machine-learning-in-kibana/xpack-ml-anomalies.md) | Display an anomaly chart from the **Single Metric Viewer** | | [Change point detection](machine-learning/machine-learning-in-kibana/xpack-ml-aiops.md#change-point-detection) | Display a chart to visualize change points in your data | | Observability | | | -| [SLO overview](https://www.elastic.co/guide/en/observability/current/slo.html) | Visualize a selected SLO’s health, including name, current SLI value, target, and status | -| [SLO Alerts](https://www.elastic.co/guide/en/observability/current/slo.html) | Visualize one or more SLO alerts, including status, rule name, duration, and reason. In addition, configure and update alerts, or create cases directly from the panel | -| [SLO Error Budget](https://www.elastic.co/guide/en/observability/current/slo.html) | Visualize the consumption of your SLO’s error budget | +| [SLO overview](/solutions/observability/incident-management/service-level-objectives-slos.md) | Visualize a selected SLO’s health, including name, current SLI value, target, and status | +| [SLO Alerts](/solutions/observability/incident-management/service-level-objectives-slos.md) | Visualize one or more SLO alerts, including status, rule name, duration, and reason. In addition, configure and update alerts, or create cases directly from the panel | +| [SLO Error Budget](/solutions/observability/incident-management/service-level-objectives-slos.md) | Visualize the consumption of your SLO’s error budget | | Legacy | | | | [Log stream](https://www.elastic.co/guide/en/kibana/current/observability.html#logs-app) (deprecated) | Display a table of live streaming logs | | [Aggregation based](visualize/legacy-editors/aggregation-based.md) | While these panel types are still available, we recommend to use [Lens](visualize/lens.md) | diff --git a/explore-analyze/visualize/canvas/canvas-function-reference.md b/explore-analyze/visualize/canvas/canvas-function-reference.md index 8e1fef5bd..bb8751ec6 100644 --- a/explore-analyze/visualize/canvas/canvas-function-reference.md +++ b/explore-analyze/visualize/canvas/canvas-function-reference.md @@ -1302,7 +1302,7 @@ Interprets a `TinyMath` math expression using a `number` or `datatable` as *cont | Argument | Type | Description | | --- | --- | --- | -| *Unnamed*
Alias: `expression` | `string` | An evaluated `TinyMath` expression. See [canvas-tinymath-functions.md](https://www.elastic.co/guide/en/kibana/current/canvas-tinymath-functions.html). | +| *Unnamed*
Alias: `expression` | `string` | An evaluated `TinyMath` expression. See [canvas-tinymath-functions.md](asciidocalypse://docs/docs-content/docs/reference/data-analysis/kibana/tinymath-functions.md). | | `onError` | `string` | In case the `TinyMath` evaluation fails or returns NaN, the return value is specified by onError. When `'throw'`, it will throw an exception, terminating expression execution (default). | **Returns:** Depends on your input and arguments @@ -1317,7 +1317,7 @@ Adds a column by evaluating `TinyMath` on each row. This function is optimized f | Argument | Type | Description | | --- | --- | --- | | *Unnamed* *****
Aliases: `column`, `name` | `string` | The name of the resulting column. Names are not required to be unique. | -| *Unnamed*
Alias: `expression` | `string` | An evaluated `TinyMath` expression. See [canvas-tinymath-functions.md](https://www.elastic.co/guide/en/kibana/current/canvas-tinymath-functions.html). | +| *Unnamed*
Alias: `expression` | `string` | An evaluated `TinyMath` expression. See [canvas-tinymath-functions.md](asciidocalypse://docs/docs-content/docs/reference/data-analysis/kibana/tinymath-functions.md). | | `castColumns` † | `string` | The column ids that are cast to numbers before the formula is applied. | | `copyMetaFrom` | `string`, `null` | If set, the meta object from the specified column id is copied over to the specified target column. If the column doesn’t exist it silently fails.
Default: `null` | | `id` ***** | `string` | id of the resulting column. Must be unique. | @@ -1437,7 +1437,7 @@ Subdivides a `datatable` by the unique values of the specified columns, and pass ### `pointseries` [pointseries_fn] -Turn a `datatable` into a point series model. Currently we differentiate measure from dimensions by looking for a `TinyMath` expression. See [canvas-tinymath-functions.md](https://www.elastic.co/guide/en/kibana/current/canvas-tinymath-functions.html). If you enter a `TinyMath` expression in your argument, we treat that argument as a measure, otherwise it is a dimension. Dimensions are combined to create unique keys. Measures are then deduplicated by those keys using the specified `TinyMath` function +Turn a `datatable` into a point series model. Currently we differentiate measure from dimensions by looking for a `TinyMath` expression. See [canvas-tinymath-functions.md](asciidocalypse://docs/docs-content/docs/reference/data-analysis/kibana/tinymath-functions.md). If you enter a `TinyMath` expression in your argument, we treat that argument as a measure, otherwise it is a dimension. Dimensions are combined to create unique keys. Measures are then deduplicated by those keys using the specified `TinyMath` function **Accepts:** `datatable` diff --git a/explore-analyze/visualize/canvas/canvas-tutorial.md b/explore-analyze/visualize/canvas/canvas-tutorial.md index 601674ecb..735488757 100644 --- a/explore-analyze/visualize/canvas/canvas-tutorial.md +++ b/explore-analyze/visualize/canvas/canvas-tutorial.md @@ -118,7 +118,7 @@ To focus your data on a specific time range, add the time filter. 2. Click **Display** 3. To use the date time field from the sample data, enter `order_date` in the **Column** field, then click **Set**. -% image doesn't exist (also broken in asciidoc https://www.elastic.co/guide/en/kibana/current/canvas-tutorial.html#_show_how_your_data_changes_over_time) +% image doesn't exist (also broken in asciidoc /explore-analyze/visualize/canvas/canvas-tutorial.md#_show_how_your_data_changes_over_time) % :::{image} ../../../images/kibana-canvas_tutorialCustomTimeFilter_7.17.0.png % :alt: Custom time filter added to the workpad @@ -136,6 +136,6 @@ Now that you know the basics, you’re ready to explore on your own. Here are some things to try: -* Play with the [sample Canvas workpads](https://www.elastic.co/guide/en/kibana/current/get-started.html). +* Play with the [sample Canvas workpads](/explore-analyze/index.md). * Build presentations of your own data with [workpads](../canvas.md#create-workpads). * Deep dive into the [expression language and functions](canvas-function-reference.md) that drive **Canvas**. diff --git a/explore-analyze/visualize/custom-visualizations-with-vega.md b/explore-analyze/visualize/custom-visualizations-with-vega.md index d7ddf7f67..d999bf586 100644 --- a/explore-analyze/visualize/custom-visualizations-with-vega.md +++ b/explore-analyze/visualize/custom-visualizations-with-vega.md @@ -116,7 +116,7 @@ POST kibana_sample_data_ecommerce/_search } ``` -Add the [terms aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html), then click **Click to send request**: +Add the [terms aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-terms-aggregation.md), then click **Click to send request**: ```js POST kibana_sample_data_ecommerce/_search diff --git a/explore-analyze/visualize/esorql.md b/explore-analyze/visualize/esorql.md index 78172334b..5a8338c9a 100644 --- a/explore-analyze/visualize/esorql.md +++ b/explore-analyze/visualize/esorql.md @@ -24,7 +24,7 @@ You can then **Save** and add it to an existing or a new dashboard using the sav 2. Choose **ES|QL** under **Visualizations**. An ES|QL editor appears and lets you configure your query and its associated visualization. The **Suggestions** panel can help you find alternative ways to configure the visualization. ::::{tip} - Check the [ES|QL reference](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-language.html) to get familiar with the syntax and optimize your query. + Check the [ES|QL reference](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql.md) to get familiar with the syntax and optimize your query. :::: 3. When editing your query or its configuration, run the query to update the preview of the visualization. diff --git a/explore-analyze/visualize/field-statistics.md b/explore-analyze/visualize/field-statistics.md index aef78fb92..48e30af2a 100644 --- a/explore-analyze/visualize/field-statistics.md +++ b/explore-analyze/visualize/field-statistics.md @@ -14,7 +14,7 @@ mapped_pages: 2. Choose **Field statistics** under **Visualizations**. An ES|QL editor appears and lets you configure your query with the fields and information that you want to show. ::::{tip} - Check the [ES|QL reference](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-language.html) to get familiar with the syntax and optimize your query. + Check the [ES|QL reference](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql.md) to get familiar with the syntax and optimize your query. :::: 3. When editing your query or its configuration, run the query to update the preview of the visualization. diff --git a/explore-analyze/visualize/graph/graph-troubleshooting.md b/explore-analyze/visualize/graph/graph-troubleshooting.md index 9f79dcc98..41844185f 100644 --- a/explore-analyze/visualize/graph/graph-troubleshooting.md +++ b/explore-analyze/visualize/graph/graph-troubleshooting.md @@ -35,7 +35,7 @@ With the default setting of `use_significance` set to `true`, the Graph API perf If your data is noisy and you need to filter based on significance, you can reduce the number of frequency checks by: * Reducing the `sample_size`. Considering fewer documents can actually be better when the quality of matches is quite variable. -* Avoiding noisy documents that have a large number of terms. You can do this by either allowing ranking to naturally favor shorter documents in the top-results sample (see [enabling norms](https://www.elastic.co/guide/en/elasticsearch/reference/current/norms.html)) or by explicitly excluding large documents with your seed and guiding queries. +* Avoiding noisy documents that have a large number of terms. You can do this by either allowing ranking to naturally favor shorter documents in the top-results sample (see [enabling norms](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/norms.md)) or by explicitly excluding large documents with your seed and guiding queries. * Increasing the frequency threshold. Many many terms occur very infrequently so even increasing the frequency threshold by one can massively reduce the number of candidate terms whose background frequencies are checked. Keep in mind that all of these options reduce the scope of information analyzed and can increase the potential to miss what could be interesting details. However, the information that’s lost tends to be associated with lower-quality documents with lower-frequency terms, which can be an acceptable trade-off. diff --git a/explore-analyze/visualize/legacy-editors/timelion.md b/explore-analyze/visualize/legacy-editors/timelion.md index 82e37eb28..06bec73fc 100644 --- a/explore-analyze/visualize/legacy-editors/timelion.md +++ b/explore-analyze/visualize/legacy-editors/timelion.md @@ -80,7 +80,7 @@ You collected data from your operating system using Metricbeat, and you want to Set up Metricbeat, then create the dashboard. -1. To set up Metricbeat, go to [Metricbeat quick start: installation and configuration](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-installation-configuration.html) +1. To set up Metricbeat, go to [Metricbeat quick start: installation and configuration](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/metricbeat-installation-configuration.md) 2. Go to **Dashboards**. 3. On the **Dashboards** page, click **Create dashboard**. diff --git a/explore-analyze/visualize/legacy-editors/tsvb.md b/explore-analyze/visualize/legacy-editors/tsvb.md index 42412bc8a..783965a7c 100644 --- a/explore-analyze/visualize/legacy-editors/tsvb.md +++ b/explore-analyze/visualize/legacy-editors/tsvb.md @@ -37,7 +37,7 @@ When you use only {{data-sources}}, you are able to: ::::{important} :name: tsvb-index-patterns-mode -Creating **TSVB** visualizations with an {{es}} index string is deprecated and will be removed in a future release. By default, you create **TSVB** visualizations with only {{data-sources}}. To use an {{es}} index string, contact your administrator, or go to [Advanced Settings](https://www.elastic.co/guide/en/kibana/current/advanced-options.html) and set `metrics:allowStringIndices` to `true`. +Creating **TSVB** visualizations with an {{es}} index string is deprecated and will be removed in a future release. By default, you create **TSVB** visualizations with only {{data-sources}}. To use an {{es}} index string, contact your administrator, or go to [Advanced Settings](asciidocalypse://docs/kibana/docs/reference/advanced-settings.md) and set `metrics:allowStringIndices` to `true`. :::: diff --git a/explore-analyze/visualize/link-panels.md b/explore-analyze/visualize/link-panels.md index fee33b105..f566d60c9 100644 --- a/explore-analyze/visualize/link-panels.md +++ b/explore-analyze/visualize/link-panels.md @@ -8,7 +8,7 @@ mapped_pages: # Link panels [dashboard-links] -You can use **Links** panels to create links to other dashboards or external websites. When creating links to other dashboards, you have the option to carry the time range, query, and filters to apply over to the linked dashboard. Links to external websites follow the [`externalUrl.policy`](https://www.elastic.co/guide/en/kibana/current/url-drilldown-settings-kb.html#external-URL-policy) settings. **Links** panels support vertical and horizontal layouts and may be saved to the **Library** for use in other dashboards. +You can use **Links** panels to create links to other dashboards or external websites. When creating links to other dashboards, you have the option to carry the time range, query, and filters to apply over to the linked dashboard. Links to external websites follow the [`externalUrl.policy`](asciidocalypse://docs/kibana/docs/reference/configuration-reference/url-drilldown-settings.md#external-URL-policy) settings. **Links** panels support vertical and horizontal layouts and may be saved to the **Library** for use in other dashboards. :::{image} ../../images/kibana-dashboard_links_panel.png :alt: A screenshot displaying the new links panel diff --git a/explore-analyze/visualize/maps/asset-tracking-tutorial.md b/explore-analyze/visualize/maps/asset-tracking-tutorial.md index 769f867fd..0b7afc7f8 100644 --- a/explore-analyze/visualize/maps/asset-tracking-tutorial.md +++ b/explore-analyze/visualize/maps/asset-tracking-tutorial.md @@ -32,7 +32,7 @@ When you complete this tutorial, you’ll have a map that looks like this: * If you don’t already have {{kib}}, sign up for [a free Elastic Cloud trial](https://www.elastic.co/cloud/elasticsearch-service/signup?baymax=docs-body&elektra=docs) and create a hosted deployment. When creating it, download the deployment credentials. * Obtain an API key for [TriMet web services](https://developer.trimet.org/) at [https://developer.trimet.org/appid/registration/](https://developer.trimet.org/appid/registration/). -* [Fleet](https://www.elastic.co/guide/en/fleet/current/fleet-overview.html) is enabled on your cluster, and one or more [{{agent}}s](https://www.elastic.co/guide/en/fleet/current/elastic-agent-installation.html) is enrolled. +* [Fleet](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/index.md) is enabled on your cluster, and one or more [{{agent}}s](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/install-elastic-agents.md) is enrolled. ## Part 1: Ingest the Portland public transport data [_part_1_ingest_the_portland_public_transport_data] @@ -725,7 +725,7 @@ For this example, you will set the rule to check every minute. However, when run 16. Click **Save**. -The **TriMet Alerts connector** is added to the **{{connectors-ui}}** page. For more information on common connectors, refer to the [Slack](https://www.elastic.co/guide/en/kibana/current/slack-action-type.html) and [Email](https://www.elastic.co/guide/en/kibana/current/email-action-type.html) connectors. +The **TriMet Alerts connector** is added to the **{{connectors-ui}}** page. For more information on common connectors, refer to the [Slack](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/slack-action-type.md) and [Email](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/email-action-type.md) connectors. ### Step 3. View alerts in real time [_step_3_view_alerts_in_real_time] diff --git a/explore-analyze/visualize/maps/heatmap-layer.md b/explore-analyze/visualize/maps/heatmap-layer.md index db233e0ed..c7d88e56c 100644 --- a/explore-analyze/visualize/maps/heatmap-layer.md +++ b/explore-analyze/visualize/maps/heatmap-layer.md @@ -15,7 +15,7 @@ Heat map layers cluster point data to show locations with higher densities. :class: screenshot ::: -To add a heat map layer to your map, click **Add layer**, then select **Heat map**. The index must contain at least one field mapped as [geo_point](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html) or [geo_shape](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-shape.html). +To add a heat map layer to your map, click **Add layer**, then select **Heat map**. The index must contain at least one field mapped as [geo_point](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-point.md) or [geo_shape](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-shape.md). ::::{note} Only count, sum, unique count metric aggregations are available with the grid aggregation source and heat map layers. Average, min, and max are turned off because the heat map will blend nearby values. Blending two average values would make the cluster more prominent, even though it just might literally mean that these nearby areas are average. diff --git a/explore-analyze/visualize/maps/import-geospatial-data.md b/explore-analyze/visualize/maps/import-geospatial-data.md index fa12c1533..9a5c3bef8 100644 --- a/explore-analyze/visualize/maps/import-geospatial-data.md +++ b/explore-analyze/visualize/maps/import-geospatial-data.md @@ -8,7 +8,7 @@ mapped_pages: # Import geospatial data [import-geospatial-data] -To import geospatical data into the Elastic Stack, the data must be indexed as [geo_point](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html) or [geo_shape](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-shape.html). Geospatial data comes in many formats. Choose an import tool based on the format of your geospatial data. +To import geospatical data into the Elastic Stack, the data must be indexed as [geo_point](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-point.md) or [geo_shape](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-shape.md). Geospatial data comes in many formats. Choose an import tool based on the format of your geospatial data. ## Security privileges [import-geospatial-privileges] @@ -114,7 +114,7 @@ To draw features: ## Upload data with IP addresses [_upload_data_with_ip_addresses] -The GeoIP processor adds information about the geographical location of IP addresses. See [GeoIP processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/geoip-processor.html) for details. For private IP addresses, see [Enriching data with GeoIPs from internal, private IP addresses](https://www.elastic.co/blog/enriching-elasticsearch-data-geo-ips-internal-private-ip-addresses). +The GeoIP processor adds information about the geographical location of IP addresses. See [GeoIP processor](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/geoip-processor.md) for details. For private IP addresses, see [Enriching data with GeoIPs from internal, private IP addresses](https://www.elastic.co/blog/enriching-elasticsearch-data-geo-ips-internal-private-ip-addresses). ## Upload data with GDAL [_upload_data_with_gdal] diff --git a/explore-analyze/visualize/maps/indexing-geojson-data-tutorial.md b/explore-analyze/visualize/maps/indexing-geojson-data-tutorial.md index 14b7a3c9c..add2fe2ee 100644 --- a/explore-analyze/visualize/maps/indexing-geojson-data-tutorial.md +++ b/explore-analyze/visualize/maps/indexing-geojson-data-tutorial.md @@ -50,7 +50,7 @@ For each GeoJSON file you downloaded, complete the following steps: 2. From the list of layer types, click **Upload file**. 3. Using the File Picker, upload the GeoJSON file. - Depending on the geometry type of your features, this will auto-populate **Index type** with either [geo_point](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html) or [geo_shape](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-shape.html) and **Index name** with ``. + Depending on the geometry type of your features, this will auto-populate **Index type** with either [geo_point](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-point.md) or [geo_shape](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-shape.md) and **Index name** with ``. 4. Click **Import file**. @@ -72,12 +72,12 @@ For each GeoJSON file you downloaded, complete the following steps: ## Add a heatmap aggregation layer [_add_a_heatmap_aggregation_layer] -Looking at the `Lightning detected` layer, it’s clear where lightning has struck. What’s less clear, is if there have been more lightning strikes in some areas than others, in other words, where the lightning hot spots are. An advantage of having indexed [geo_point](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html) data for the lightning strikes is that you can perform aggregations on the data. +Looking at the `Lightning detected` layer, it’s clear where lightning has struck. What’s less clear, is if there have been more lightning strikes in some areas than others, in other words, where the lightning hot spots are. An advantage of having indexed [geo_point](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-point.md) data for the lightning strikes is that you can perform aggregations on the data. 1. Click **Add layer**. 2. From the list of layer types, click **Heat map**. - Because you indexed `lightning_detected.geojson` using the index name and pattern `lightning_detected`, that data is available as a [geo_point](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html) aggregation. + Because you indexed `lightning_detected.geojson` using the index name and pattern `lightning_detected`, that data is available as a [geo_point](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-point.md) aggregation. 3. Select `lightning_detected`. 4. Click **Add layer** to add the heat map layer "Lightning intensity". diff --git a/explore-analyze/visualize/maps/maps-create-filter-from-map.md b/explore-analyze/visualize/maps/maps-create-filter-from-map.md index 92f0b7bd3..c5ad13896 100644 --- a/explore-analyze/visualize/maps/maps-create-filter-from-map.md +++ b/explore-analyze/visualize/maps/maps-create-filter-from-map.md @@ -35,7 +35,7 @@ A spatial filter narrows search results to documents that either intersect with, Spatial filters have the following properties: * **Geometry label** enables you to provide a meaningful name for your spatial filter. -* **Spatial relation** determines the [spatial relation operator](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-shape-query.html#geo-shape-spatial-relations) to use at search time. +* **Spatial relation** determines the [spatial relation operator](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-geo-shape-query.md#geo-shape-spatial-relations) to use at search time. * **Action** specifies whether to apply the filter to the current view or to a drilldown action. ::::{note} diff --git a/explore-analyze/visualize/maps/maps-grid-aggregation.md b/explore-analyze/visualize/maps/maps-grid-aggregation.md index 06291ead3..e46a71e46 100644 --- a/explore-analyze/visualize/maps/maps-grid-aggregation.md +++ b/explore-analyze/visualize/maps/maps-grid-aggregation.md @@ -8,21 +8,21 @@ mapped_pages: # Clusters [maps-grid-aggregation] -Clusters use [Geotile grid aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geotilegrid-aggregation.html) or [Geohex grid aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geohexgrid-aggregation.html) to group your documents into grids. You can calculate metrics for each gridded cell. +Clusters use [Geotile grid aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-geotilegrid-aggregation.md) or [Geohex grid aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-geohexgrid-aggregation.md) to group your documents into grids. You can calculate metrics for each gridded cell. Symbolize cluster metrics as: **Clusters** -: Uses [Geotile grid aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geotilegrid-aggregation.html) to group your documents into grids. Creates a [vector layer](vector-layer.md) with a cluster symbol for each gridded cell. The cluster location is the weighted centroid for all documents in the gridded cell. +: Uses [Geotile grid aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-geotilegrid-aggregation.md) to group your documents into grids. Creates a [vector layer](vector-layer.md) with a cluster symbol for each gridded cell. The cluster location is the weighted centroid for all documents in the gridded cell. **Grids** -: Uses [Geotile grid aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geotilegrid-aggregation.html) to group your documents into grids. Creates a [vector layer](vector-layer.md) with a bounding box polygon for each gridded cell. +: Uses [Geotile grid aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-geotilegrid-aggregation.md) to group your documents into grids. Creates a [vector layer](vector-layer.md) with a bounding box polygon for each gridded cell. **Heat map** -: Uses [Geotile grid aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geotilegrid-aggregation.html) to group your documents into grids. Creates a [heat map layer](heatmap-layer.md) that clusters the weighted centroids for each gridded cell. +: Uses [Geotile grid aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-geotilegrid-aggregation.md) to group your documents into grids. Creates a [heat map layer](heatmap-layer.md) that clusters the weighted centroids for each gridded cell. **Hexbins** -: Uses [Geohex grid aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geohexgrid-aggregation.html) to group your documents into H3 hexagon grids. Creates a [vector layer](vector-layer.md) with a hexagon polygon for each gridded cell. +: Uses [Geohex grid aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-geohexgrid-aggregation.md) to group your documents into H3 hexagon grids. Creates a [vector layer](vector-layer.md) with a hexagon polygon for each gridded cell. To enable a clusters layer: diff --git a/explore-analyze/visualize/maps/maps-search-across-multiple-indices.md b/explore-analyze/visualize/maps/maps-search-across-multiple-indices.md index ee002ab8c..24c642b89 100644 --- a/explore-analyze/visualize/maps/maps-search-across-multiple-indices.md +++ b/explore-analyze/visualize/maps/maps-search-across-multiple-indices.md @@ -20,9 +20,9 @@ One strategy for eliminating unintentional empty layers from a cross index searc ## Use _index in a search [maps-add-index-search] -Add [_index](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-index-field.html) to your search to include documents from indices that do not contain a search field. +Add [_index](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-index-field.md) to your search to include documents from indices that do not contain a search field. -For example, suppose you have a vector layer showing the `kibana_sample_data_logs` documents and another vector layer with `kibana_sample_data_flights` documents. (See [adding sample data](https://www.elastic.co/guide/en/kibana/current/get-started.html) to install the `kibana_sample_data_logs` and `kibana_sample_data_flights` indices.) +For example, suppose you have a vector layer showing the `kibana_sample_data_logs` documents and another vector layer with `kibana_sample_data_flights` documents. (See [adding sample data](/explore-analyze/index.md) to install the `kibana_sample_data_logs` and `kibana_sample_data_flights` indices.) If you query for diff --git a/explore-analyze/visualize/maps/maps-top-hits-aggregation.md b/explore-analyze/visualize/maps/maps-top-hits-aggregation.md index 66aa15451..05a984571 100644 --- a/explore-analyze/visualize/maps/maps-top-hits-aggregation.md +++ b/explore-analyze/visualize/maps/maps-top-hits-aggregation.md @@ -8,7 +8,7 @@ mapped_pages: # Display the most relevant documents per entity [maps-top-hits-aggregation] -Use **Top hits per entity** to display the most relevant documents per entity, for example, the most recent GPS tracks per flight route. To get this data, {{es}} first groups your data using a [terms aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html), then accumulates the most relevant documents based on sort order for each entry using a [top hits metric aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-top-hits-aggregation.html). +Use **Top hits per entity** to display the most relevant documents per entity, for example, the most recent GPS tracks per flight route. To get this data, {{es}} first groups your data using a [terms aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-terms-aggregation.md), then accumulates the most relevant documents based on sort order for each entry using a [top hits metric aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-top-hits-aggregation.md). To enable top hits: diff --git a/explore-analyze/visualize/maps/maps-troubleshooting.md b/explore-analyze/visualize/maps/maps-troubleshooting.md index 25a6d0e07..b40ea002b 100644 --- a/explore-analyze/visualize/maps/maps-troubleshooting.md +++ b/explore-analyze/visualize/maps/maps-troubleshooting.md @@ -35,7 +35,7 @@ Maps uses the [{{es}} vector tile search API](https://www.elastic.co/docs/api/do ### Data view not listed when adding layer [_data_view_not_listed_when_adding_layer] -* Verify your geospatial data is correctly mapped as [geo_point](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html) or [geo_shape](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-shape.html). +* Verify your geospatial data is correctly mapped as [geo_point](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-point.md) or [geo_shape](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-shape.md). * Run `GET myIndexName/_field_caps?fields=myGeoFieldName` in [Console](../../query-filter/tools/console.md), replacing `myIndexName` and `myGeoFieldName` with your index and geospatial field name. * Ensure response specifies `type` as `geo_point` or `geo_shape`. diff --git a/explore-analyze/visualize/maps/point-to-point.md b/explore-analyze/visualize/maps/point-to-point.md index 80590c70f..6f9b29133 100644 --- a/explore-analyze/visualize/maps/point-to-point.md +++ b/explore-analyze/visualize/maps/point-to-point.md @@ -10,7 +10,7 @@ mapped_pages: A point-to-point connection plots aggregated data paths between the source and the destination. Thicker, darker lines symbolize more connections between a source and destination, and thinner, lighter lines symbolize less connections. -Point to point uses an {{es}} [terms aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html) to group your documents by destination. Then, a nested [GeoTile grid aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geotilegrid-aggregation.html) groups sources for each destination into grids. A line connects each source grid centroid to each destination. +Point to point uses an {{es}} [terms aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-terms-aggregation.md) to group your documents by destination. Then, a nested [GeoTile grid aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-geotilegrid-aggregation.md) groups sources for each destination into grids. A line connects each source grid centroid to each destination. Point-to-point layers are used in several common use cases: diff --git a/explore-analyze/visualize/maps/reverse-geocoding-tutorial.md b/explore-analyze/visualize/maps/reverse-geocoding-tutorial.md index 578dc6fec..78dfe73ca 100644 --- a/explore-analyze/visualize/maps/reverse-geocoding-tutorial.md +++ b/explore-analyze/visualize/maps/reverse-geocoding-tutorial.md @@ -17,7 +17,7 @@ In this tutorial, you’ll use reverse geocoding to visualize United States Cens You’ll learn to: * Upload custom regions. -* Reverse geocode with the {{es}} [enrich processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/enrich-processor.html). +* Reverse geocode with the {{es}} [enrich processor](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/enrich-processor.md). * Create a map and visualize CSA regions by web traffic. When you complete this tutorial, you’ll have a map that looks like this: @@ -32,7 +32,7 @@ When you complete this tutorial, you’ll have a map that looks like this: GeoIP is a common way of transforming an IP address to a longitude and latitude. GeoIP is roughly accurate on the city level globally and neighborhood level in selected countries. It’s not as good as an actual GPS location from your phone, but it’s much more precise than just a country, state, or province. -You’ll use the [web logs sample data set](../../index.md#gs-get-data-into-kibana) that comes with Kibana for this tutorial. Web logs sample data set has longitude and latitude. If your web log data does not contain longitude and latitude, use [GeoIP processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/geoip-processor.html) to transform an IP address into a [geo_point](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html) field. +You’ll use the [web logs sample data set](../../index.md#gs-get-data-into-kibana) that comes with Kibana for this tutorial. Web logs sample data set has longitude and latitude. If your web log data does not contain longitude and latitude, use [GeoIP processor](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/geoip-processor.md) to transform an IP address into a [geo_point](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-point.md) field. ## Step 2: Index Combined Statistical Area (CSA) regions [_step_2_index_combined_statistical_area_csa_regions] @@ -75,7 +75,7 @@ Looking at the map, you get a sense of what constitutes a metro area in the eyes ## Step 3: Reverse geocoding [_step_3_reverse_geocoding] -To visualize CSA regions by web log traffic, the web log traffic must contain a CSA region identifier. You’ll use {{es}} [enrich processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/enrich-processor.html) to add CSA region identifiers to the web logs sample data set. You can skip this step if your source data already contains region identifiers. +To visualize CSA regions by web log traffic, the web log traffic must contain a CSA region identifier. You’ll use {{es}} [enrich processor](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/enrich-processor.md) to add CSA region identifiers to the web logs sample data set. You can skip this step if your source data already contains region identifiers. 1. Go to **Developer tools** using the navigation menu or the [global search field](/explore-analyze/find-and-organize/find-apps-and-objects.md). 2. In **Console**, create a [geo_match enrichment policy](../../../manage-data/ingest/transform-enrich/example-enrich-data-based-on-geolocation.md): diff --git a/explore-analyze/visualize/maps/terms-join.md b/explore-analyze/visualize/maps/terms-join.md index 003b05bfc..677ab890b 100644 --- a/explore-analyze/visualize/maps/terms-join.md +++ b/explore-analyze/visualize/maps/terms-join.md @@ -62,7 +62,7 @@ In the following example, **iso2** property defines the shared key for the left The right source uses the Kibana sample data set "Sample web logs". In this data set, the **geo.src** field contains the ISO 3166-1 alpha-2 code of the country of origin. -A [terms aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html) groups the sample web log documents by **geo.src** and calculates metrics for each term. +A [terms aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-terms-aggregation.md) groups the sample web log documents by **geo.src** and calculates metrics for each term. The METRICS configuration defines two metric aggregations: diff --git a/explore-analyze/visualize/maps/vector-layer.md b/explore-analyze/visualize/maps/vector-layer.md index 5e2ce4e72..33e6c726e 100644 --- a/explore-analyze/visualize/maps/vector-layer.md +++ b/explore-analyze/visualize/maps/vector-layer.md @@ -21,18 +21,18 @@ To add a vector layer to your map, click **Add layer**, then select one of the f : Shaded areas to compare statistics across boundaries. **Clusters** -: Geospatial data grouped in grids with metrics for each gridded cell. The index must contain at least one field mapped as [geo_point](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html) or [geo_shape](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-shape.html). +: Geospatial data grouped in grids with metrics for each gridded cell. The index must contain at least one field mapped as [geo_point](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-point.md) or [geo_shape](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-shape.md). **Create index** : Draw shapes on the map and index in Elasticsearch. **Documents** -: Points, lines, and polyons from Elasticsearch. The index must contain at least one field mapped as [geo_point](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html) or [geo_shape](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-shape.html). +: Points, lines, and polyons from Elasticsearch. The index must contain at least one field mapped as [geo_point](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-point.md) or [geo_shape](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-shape.md). Results are limited to the `index.max_result_window` index setting, which defaults to 10000. Select the appropriate **Scaling** option for your use case. * **Limit results to 10,000** The layer displays features from the first `index.max_result_window` documents. Results exceeding `index.max_result_window` are not displayed. - * **Show clusters when results exceed 10,000** When results exceed `index.max_result_window`, the layer uses [GeoTile grid aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geotilegrid-aggregation.html) to group your documents into clusters and displays metrics for each cluster. When results are less then `index.max_result_window`, the layer displays features from individual documents. + * **Show clusters when results exceed 10,000** When results exceed `index.max_result_window`, the layer uses [GeoTile grid aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-geotilegrid-aggregation.md) to group your documents into clusters and displays metrics for each cluster. When results are less then `index.max_result_window`, the layer displays features from individual documents. * **Use vector tiles.** Vector tiles partition your map into tiles. Each tile request is limited to the `index.max_result_window` index setting. When a tile exceeds `index.max_result_window`, results exceeding `index.max_result_window` are not contained in the tile and a dashed rectangle outlining the bounding box containing all geo values within the tile is displayed. @@ -43,13 +43,13 @@ To add a vector layer to your map, click **Add layer**, then select one of the f : Points and lines associated with anomalies. The {{anomaly-job}} must use a `lat_long` function. Go to [Detecting anomalous locations in geographic data](../../machine-learning/anomaly-detection/geographic-anomalies.md) for an example. **Point to point** -: Aggregated data paths between the source and destination. The index must contain at least 2 fields mapped as [geo_point](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html), source and destination. +: Aggregated data paths between the source and destination. The index must contain at least 2 fields mapped as [geo_point](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-point.md), source and destination. **Top hits per entity** -: The layer displays the [most relevant documents per entity](maps-top-hits-aggregation.md). The index must contain at least one field mapped as [geo_point](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html) or [geo_shape](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-shape.html). +: The layer displays the [most relevant documents per entity](maps-top-hits-aggregation.md). The index must contain at least one field mapped as [geo_point](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-point.md) or [geo_shape](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-shape.md). **Tracks** -: Create lines from points. The index must contain at least one field mapped as [geo_point](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html). +: Create lines from points. The index must contain at least one field mapped as [geo_point](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-point.md). **Upload Geojson** : Index GeoJSON data in Elasticsearch. diff --git a/explore-analyze/visualize/maps/vector-style.md b/explore-analyze/visualize/maps/vector-style.md index 545f9e67d..716d6d861 100644 --- a/explore-analyze/visualize/maps/vector-style.md +++ b/explore-analyze/visualize/maps/vector-style.md @@ -15,7 +15,7 @@ When styling a vector layer, you can customize your data by property, such as si Use static styling to specify a constant value for a style property. -This image shows an example of static styling using the [Kibana sample web logs](https://www.elastic.co/guide/en/kibana/current/get-started.html) data set. The **kibana_sample_data_logs** layer uses static styling for all properties. +This image shows an example of static styling using the [Kibana sample web logs](/explore-analyze/index.md) data set. The **kibana_sample_data_logs** layer uses static styling for all properties. :::{image} ../../../images/kibana-vector_style_static.png :alt: vector style static @@ -27,7 +27,7 @@ This image shows an example of static styling using the [Kibana sample web logs] Use data driven styling to symbolize features by property values. To enable data driven styling for a style property, change the selected value from **Fixed** or **Solid** to **By value**. -This image shows an example of data driven styling using the [Kibana sample web logs](https://www.elastic.co/guide/en/kibana/current/get-started.html) data set. The **kibana_sample_data_logs** layer uses data driven styling for fill color and symbol size style properties. +This image shows an example of data driven styling using the [Kibana sample web logs](/explore-analyze/index.md) data set. The **kibana_sample_data_logs** layer uses data driven styling for fill color and symbol size style properties. * The `hour_of_day` property determines the fill color for each feature based on where the value fits on a linear scale. Light green circles symbolize documents that occur earlier in the day, and dark green circles symbolize documents that occur later in the day. * The `bytes` property determines the size of each symbol based on where the value fits on a linear scale. Smaller circles symbolize documents with smaller payloads, and larger circles symbolize documents with larger payloads. @@ -42,7 +42,7 @@ This image shows an example of data driven styling using the [Kibana sample web Quantitative data driven styling symbolizes features from a range of numeric property values. -Property values are fit from the domain range to the style range on a linear scale. For example, let’s symbolize [Kibana sample web log](https://www.elastic.co/guide/en/kibana/current/get-started.html) documents by size. The sample web logs `bytes` field ranges from 0 to 18,000. This is the domain range. The smallest feature has a symbol radius of 1, and the largest feature has a symbol radius of 24. This is the style range. The `bytes` property value for each feature will fit on a linear scale from the range of 0 to 18,000 to the style range of 1 to 24. +Property values are fit from the domain range to the style range on a linear scale. For example, let’s symbolize [Kibana sample web log](/explore-analyze/index.md) documents by size. The sample web logs `bytes` field ranges from 0 to 18,000. This is the domain range. The smallest feature has a symbol radius of 1, and the largest feature has a symbol radius of 24. This is the style range. The `bytes` property value for each feature will fit on a linear scale from the range of 0 to 18,000 to the style range of 1 to 24. For color styles, values are fit from the domain range to the color ramp with one of the following: @@ -74,7 +74,7 @@ Qualitative data driven styling is available for the following styling propertie * **Label color** * **Label border color** -This image shows an example of quantitative data driven styling using the [Kibana sample web logs](https://www.elastic.co/guide/en/kibana/current/get-started.html) data set. The `machine.os.keyword` property determines the color of each symbol based on category. +This image shows an example of quantitative data driven styling using the [Kibana sample web logs](/explore-analyze/index.md) data set. The `machine.os.keyword` property determines the color of each symbol based on category. :::{image} ../../../images/kibana-quantitative_data_driven_styling.png :alt: quantitative data driven styling @@ -86,7 +86,7 @@ This image shows an example of quantitative data driven styling using the [Kiban Class styling symbolizes features by class and requires multiple layers. Use [layer filtering](maps-layer-based-filtering.md) to define the class for each layer, and [static styling](#maps-vector-style-static) to symbolize each class. -This image shows an example of class styling using the [Kibana sample web logs](https://www.elastic.co/guide/en/kibana/current/get-started.html) data set. +This image shows an example of class styling using the [Kibana sample web logs](/explore-analyze/index.md) data set. * The **Mac OS requests** layer applies the filter `machine.os : osx` so the layer only contains Mac OS requests. The fill color is a static value of green. * The **Window OS requests** layer applies the filter `machine.os : win*` so the layer only contains Window OS requests. The fill color is a static value of red. diff --git a/explore-analyze/visualize/supported-chart-types.md b/explore-analyze/visualize/supported-chart-types.md index 7403b4446..3ffbf0fab 100644 --- a/explore-analyze/visualize/supported-chart-types.md +++ b/explore-analyze/visualize/supported-chart-types.md @@ -89,7 +89,7 @@ Metric aggregations are calculated from the values in the aggregated documents. | Value count | ✓ | | ✓ | ✓ | | Variance | ✓ | ✓ | | ✓ | -For information about {{es}} metrics aggregations, refer to [Metrics aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics.html). +For information about {{es}} metrics aggregations, refer to [Metrics aggregations](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/metrics.md). ## Bucket aggregations [bucket-aggregations] @@ -110,7 +110,7 @@ Bucket aggregations group, or bucket, documents based on the aggregation type. T | Terms | ✓ | ✓ | ✓ | ✓ | | Significant terms | ✓ | | ✓ | ✓ | -For information about {{es}} bucket aggregations, refer to [Bucket aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket.html). +For information about {{es}} bucket aggregations, refer to [Bucket aggregations](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/bucket.md). ## Pipeline aggregations [pipeline-aggregations] @@ -130,5 +130,5 @@ Pipeline aggregations are dependent on the outputs calculated from other aggrega | Bucket selector | | | | ✓ | | Serial differencing | | ✓ | ✓ | ✓ | -For information about {{es}} pipeline aggregations, refer to [Pipeline aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline.html). +For information about {{es}} pipeline aggregations, refer to [Pipeline aggregations](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/pipeline.md). diff --git a/get-started/deployment-options.md b/get-started/deployment-options.md index 8b79fd9d3..c5ee31b0f 100644 --- a/get-started/deployment-options.md +++ b/get-started/deployment-options.md @@ -19,5 +19,5 @@ To use {{es}}, you need a running instance of the {{es}} service. You can deploy **Advanced options** * [**Self-managed**](../deploy-manage/deploy/self-managed/installing-elasticsearch.md#elasticsearch-deployment-options): Install, configure, and run {{es}} on your own premises. -* [**Elastic Cloud Enterprise**](https://www.elastic.co/guide/en/cloud-enterprise/current/Elastic-Cloud-Enterprise-overview.html): Deploy Elastic Cloud on public or private clouds, virtual machines, or your own premises. +* [**Elastic Cloud Enterprise**](/deploy-manage/deploy/cloud-enterprise.md): Deploy Elastic Cloud on public or private clouds, virtual machines, or your own premises. * [**Elastic Cloud on Kubernetes**](../deploy-manage/deploy/cloud-on-k8s.md): Deploy Elastic Cloud on Kubernetes. diff --git a/get-started/installing-elastic-stack.md b/get-started/installing-elastic-stack.md index a1a142386..eb90ffd87 100644 --- a/get-started/installing-elastic-stack.md +++ b/get-started/installing-elastic-stack.md @@ -29,12 +29,12 @@ For more information on supported network configurations, refer to [{{es}} Inges Install the Elastic Stack products you want to use in the following order: -1. [Elasticsearch](https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html) -2. [Kibana](https://www.elastic.co/guide/en/kibana/current/install.html) -3. [Logstash](https://www.elastic.co/guide/en/logstash/current/installing-logstash.html) -4. [Elastic Agent](https://www.elastic.co/guide/en/fleet/current/elastic-agent-installation.html) or [Beats](https://www.elastic.co/guide/en/beats/libbeat/current/getting-started.html) +1. [Elasticsearch](/deploy-manage/deploy/self-managed/installing-elasticsearch.md) +2. [Kibana](/deploy-manage/deploy/self-managed/install-kibana.md) +3. [Logstash](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/installing-logstash.md) +4. [Elastic Agent](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/install-elastic-agents.md) or [Beats](asciidocalypse://docs/beats/docs/reference/ingestion-tools/index.md) 5. [APM](https://www.elastic.co/guide/en/apm/guide/current/apm-quick-start.html) -6. [Elasticsearch Hadoop](https://www.elastic.co/guide/en/elasticsearch/hadoop/current/install.html) +6. [Elasticsearch Hadoop](asciidocalypse://docs/elasticsearch-hadoop/docs/reference/ingestion-tools/elasticsearch-hadoop/installation.md) Installing in this order ensures that the components each product depends on are in place. diff --git a/get-started/introduction.md b/get-started/introduction.md index b39e5479c..cf0c03377 100644 --- a/get-started/introduction.md +++ b/get-started/introduction.md @@ -100,7 +100,7 @@ Don’t worry if you have hundreds of dashboards that need to be tagged. Use [** ## Secure {{kib}} [intro-kibana-Security] -{{kib}} offers a range of security features for you to control who has access to what. [Security is enabled automatically](../deploy-manage/security/security-certificates-keys.md) when you enroll {{kib}} with a secured {{es}} cluster. For a description of all available configuration options, refer to [Security settings in {{kib}}](https://www.elastic.co/guide/en/kibana/current/security-settings-kb.html). +{{kib}} offers a range of security features for you to control who has access to what. [Security is enabled automatically](../deploy-manage/security/security-certificates-keys.md) when you enroll {{kib}} with a secured {{es}} cluster. For a description of all available configuration options, refer to [Security settings in {{kib}}](asciidocalypse://docs/kibana/docs/reference/configuration-reference/security-settings.md). ### Log in [_log_in] diff --git a/get-started/the-stack.md b/get-started/the-stack.md index 984e142a6..d6b5a16fc 100644 --- a/get-started/the-stack.md +++ b/get-started/the-stack.md @@ -25,7 +25,7 @@ Elastic provides a number of components that ingest data. Collect and ship logs, If you want to transform or enrich data before it’s stored, you can use {{es}} ingest pipelines or {{ls}}. -Trying to decide which ingest component to use? Refer to [Adding data to {{es}}](https://www.elastic.co/guide/en/cloud/current/ec-cloud-ingest-data.html) to help you decide. +Trying to decide which ingest component to use? Refer to [Adding data to {{es}}](/manage-data/ingest.md) to help you decide. $$$stack-components-agent$$$ @@ -34,7 +34,7 @@ $$$stack-components-agent$$$ {{fleet}} enables you to centrally manage {{agents}} and their policies. Use {{fleet}} to monitor the state of all your {{agents}}, manage agent policies, and upgrade {{agent}} binaries or integrations. - [Learn more about {{fleet}} and {{agent}}](https://www.elastic.co/guide/en/fleet/current/fleet-overview.html). + [Learn more about {{fleet}} and {{agent}}](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/index.md). $$$stack-components-apm$$$ @@ -45,17 +45,17 @@ APM $$$stack-components-beats$$$ {{beats}} -: {{beats}} are data shippers that you install as agents on your servers to send operational data to {{es}}. {{beats}} are available for many standard observability data scenarios, including audit data, log files and journals, cloud data, availability, metrics, network traffic, and Windows event logs. [Learn more about {{beats}}](https://www.elastic.co/guide/en/beats/libbeat/current/beats-reference.html). +: {{beats}} are data shippers that you install as agents on your servers to send operational data to {{es}}. {{beats}} are available for many standard observability data scenarios, including audit data, log files and journals, cloud data, availability, metrics, network traffic, and Windows event logs. [Learn more about {{beats}}](asciidocalypse://docs/beats/docs/reference/ingestion-tools/index.md). $$$stack-components-ingest-pipelines$$$ {{es}} ingest pipelines -: Ingest pipelines let you perform common transformations on your data before indexing them into {{es}}. You can configure one or more "processor" tasks to run sequentially, making specific changes to your documents before storing them in {{es}}. [Learn more about ingest pipelines](https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest.html). +: Ingest pipelines let you perform common transformations on your data before indexing them into {{es}}. You can configure one or more "processor" tasks to run sequentially, making specific changes to your documents before storing them in {{es}}. [Learn more about ingest pipelines](/manage-data/ingest/transform-enrich/ingest-pipelines.md). $$$stack-components-logstash$$$ {{ls}} -: {{ls}} is a data collection engine with real-time pipelining capabilities. It can dynamically unify data from disparate sources and normalize the data into destinations of your choice. {{ls}} supports a broad array of input, filter, and output plugins, with many native codecs further simplifying the ingestion process. [Learn more about {{ls}}](https://www.elastic.co/guide/en/logstash/current/introduction.html). +: {{ls}} is a data collection engine with real-time pipelining capabilities. It can dynamically unify data from disparate sources and normalize the data into destinations of your choice. {{ls}} supports a broad array of input, filter, and output plugins, with many native codecs further simplifying the ingestion process. [Learn more about {{ls}}](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/index.md). ### Store [_store] @@ -73,7 +73,7 @@ Use {{kib}} to query and visualize the data that’s stored in {{es}}. Or, use t $$$stack-components-kibana$$$ {{kib}} -: {{kib}} is the tool to harness your {{es}} data and to manage the {{stack}}. Use it to analyze and visualize the data that’s stored in {{es}}. {{kib}} is also the home for the Search, Observability and Security solutions. [Learn more about {{kib}}](https://www.elastic.co/guide/en/kibana/current/introduction.html). +: {{kib}} is the tool to harness your {{es}} data and to manage the {{stack}}. Use it to analyze and visualize the data that’s stored in {{es}}. {{kib}} is also the home for the Search, Observability and Security solutions. [Learn more about {{kib}}](/get-started/the-stack.md). $$$stack-components-elasticsearch-clients$$$ diff --git a/manage-data/data-store/aliases.md b/manage-data/data-store/aliases.md index 4d3773a55..cebbc995f 100644 --- a/manage-data/data-store/aliases.md +++ b/manage-data/data-store/aliases.md @@ -313,7 +313,7 @@ Filters are only applied when using the [Query DSL](../../explore-analyze/query- ## Routing [alias-routing] -Use the `routing` option to [route](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-routing-field.html) requests for an alias to a specific shard. This lets you take advantage of [shard caches](https://www.elastic.co/guide/en/elasticsearch/reference/current/shard-request-cache.html) to speed up searches. Data stream aliases do not support routing options. +Use the `routing` option to [route](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-routing-field.md) requests for an alias to a specific shard. This lets you take advantage of [shard caches](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/shard-request-cache-settings.md) to speed up searches. Data stream aliases do not support routing options. ```console POST _aliases diff --git a/manage-data/data-store/data-streams.md b/manage-data/data-store/data-streams.md index 36d9a7593..fdddeb792 100644 --- a/manage-data/data-store/data-streams.md +++ b/manage-data/data-store/data-streams.md @@ -32,7 +32,7 @@ Keep in mind that some features such as [Time Series Data Streams (TSDS)](../dat ## Backing indices [backing-indices] -A data stream consists of one or more [hidden](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-hidden), auto-generated backing indices. +A data stream consists of one or more [hidden](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#index-hidden), auto-generated backing indices. :::{image} ../../images/elasticsearch-reference-data-streams-diagram.svg :alt: data streams diagram @@ -40,7 +40,7 @@ A data stream consists of one or more [hidden](https://www.elastic.co/guide/en/e A data stream requires a matching [index template](templates.md). The template contains the mappings and settings used to configure the stream’s backing indices. -Every document indexed to a data stream must contain a `@timestamp` field, mapped as a [`date`](https://www.elastic.co/guide/en/elasticsearch/reference/current/date.html) or [`date_nanos`](https://www.elastic.co/guide/en/elasticsearch/reference/current/date_nanos.html) field type. If the index template doesn’t specify a mapping for the `@timestamp` field, {{es}} maps `@timestamp` as a `date` field with default options. +Every document indexed to a data stream must contain a `@timestamp` field, mapped as a [`date`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/date.md) or [`date_nanos`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/date_nanos.md) field type. If the index template doesn’t specify a mapping for the `@timestamp` field, {{es}} maps `@timestamp` as a `date` field with default options. The same index template can be used for multiple data streams. You cannot delete an index template in use by a data stream. diff --git a/manage-data/data-store/data-streams/downsampling-time-series-data-stream.md b/manage-data/data-store/data-streams/downsampling-time-series-data-stream.md index 795c2e6a3..d3fc351d2 100644 --- a/manage-data/data-store/data-streams/downsampling-time-series-data-stream.md +++ b/manage-data/data-store/data-streams/downsampling-time-series-data-stream.md @@ -83,7 +83,7 @@ POST /my-time-series-index/_downsample/my-downsampled-time-series-index } ``` -To downsample time series data as part of ILM, include a [Downsample action](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-downsample.html) in your ILM policy and set `fixed_interval` to the level of granularity that you’d like: +To downsample time series data as part of ILM, include a [Downsample action](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-downsample.md) in your ILM policy and set `fixed_interval` to the level of granularity that you’d like: ```console PUT _ilm/policy/my_policy @@ -115,12 +115,12 @@ The result of a time based histogram aggregation is in a uniform bucket size and There are a few things to note about querying downsampled indices: * When you run queries in {{kib}} and through Elastic solutions, a normal response is returned without notification that some of the queried indices are downsampled. -* For [date histogram aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-datehistogram-aggregation.html), only `fixed_intervals` (and not calendar-aware intervals) are supported. +* For [date histogram aggregations](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-datehistogram-aggregation.md), only `fixed_intervals` (and not calendar-aware intervals) are supported. * Timezone support comes with caveats: * Date histograms at intervals that are multiples of an hour are based on values generated at UTC. This works well for timezones that are on the hour, e.g. +5:00 or -3:00, but requires offsetting the reported time buckets, e.g. `2020-01-01T10:30:00.000` instead of `2020-03-07T10:00:00.000` for timezone +5:30 (India), if downsampling aggregates values per hour. In this case, the results include the field `downsampled_results_offset: true`, to indicate that the time buckets are shifted. This can be avoided if a downsampling interval of 15 minutes is used, as it allows properly calculating hourly values for the shifted buckets. * Date histograms at intervals that are multiples of a day are similarly affected, in case downsampling aggregates values per day. In this case, the beginning of each day is always calculated at UTC when generated the downsampled values, so the time buckets need to be shifted, e.g. reported as `2020-03-07T19:00:00.000` instead of `2020-03-07T00:00:00.000` for timezone `America/New_York`. The field `downsampled_results_offset: true` is added in this case too. - * Daylight savings and similar peculiarities around timezones affect reported results, as [documented](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-datehistogram-aggregation.html#datehistogram-aggregation-time-zone) for date histogram aggregation. Besides, downsampling at daily interval hinders tracking any information related to daylight savings changes. + * Daylight savings and similar peculiarities around timezones affect reported results, as [documented](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-datehistogram-aggregation.md#datehistogram-aggregation-time-zone) for date histogram aggregation. Besides, downsampling at daily interval hinders tracking any information related to daylight savings changes. @@ -133,9 +133,9 @@ The following restrictions and limitations apply for downsampling: * Within a data stream, a downsampled index replaces the original index and the original index is deleted. Only one index can exist for a given time period. * A source index must be in read-only mode for the downsampling process to succeed. Check the [Run downsampling manually](./run-downsampling-manually.md) example for details. * Downsampling data for the same period many times (downsampling of a downsampled index) is supported. The downsampling interval must be a multiple of the interval of the downsampled index. -* Downsampling is provided as an ILM action. See [Downsample](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-downsample.html). +* Downsampling is provided as an ILM action. See [Downsample](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-downsample.md). * The new, downsampled index is created on the data tier of the original index and it inherits its settings (for example, the number of shards and replicas). -* The numeric `gauge` and `counter` [metric types](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-field-meta.html) are supported. +* The numeric `gauge` and `counter` [metric types](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-field-meta.md) are supported. * The downsampling configuration is extracted from the time series data stream [index mapping](./set-up-tsds.md#create-tsds-index-template). The only additional required setting is the downsampling `fixed_interval`. diff --git a/manage-data/data-store/data-streams/logs-data-stream.md b/manage-data/data-store/data-streams/logs-data-stream.md index 37c993431..59d823aaa 100644 --- a/manage-data/data-store/data-streams/logs-data-stream.md +++ b/manage-data/data-store/data-streams/logs-data-stream.md @@ -44,13 +44,13 @@ You can also set the index mode and adjust other template settings in [the Elast ## Synthetic source [logsdb-synthetic-source] -If you have the required [subscription](https://www.elastic.co/subscriptions), `logsdb` index mode uses [synthetic `_source`](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#synthetic-source), which omits storing the original `_source` field. Instead, the document source is synthesized from doc values or stored fields upon document retrieval. +If you have the required [subscription](https://www.elastic.co/subscriptions), `logsdb` index mode uses [synthetic `_source`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md#synthetic-source), which omits storing the original `_source` field. Instead, the document source is synthesized from doc values or stored fields upon document retrieval. If you don’t have the required [subscription](https://www.elastic.co/subscriptions), `logsdb` mode uses the original `_source` field. -Before using synthetic source, make sure to review the [restrictions](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#synthetic-source-restrictions). +Before using synthetic source, make sure to review the [restrictions](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md#synthetic-source-restrictions). -When working with multi-value fields, the `index.mapping.synthetic_source_keep` setting controls how field values are preserved for [synthetic source](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#synthetic-source) reconstruction. In `logsdb`, the default value is `arrays`, which retains both duplicate values and the order of entries. However, the exact structure of array elements and objects is not necessarily retained. Preserving duplicates and ordering can be critical for some log fields, such as DNS A records, HTTP headers, and log entries that represent sequential or repeated events. +When working with multi-value fields, the `index.mapping.synthetic_source_keep` setting controls how field values are preserved for [synthetic source](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md#synthetic-source) reconstruction. In `logsdb`, the default value is `arrays`, which retains both duplicate values and the order of entries. However, the exact structure of array elements and objects is not necessarily retained. Preserving duplicates and ordering can be critical for some log fields, such as DNS A records, HTTP headers, and log entries that represent sequential or repeated events. ## Index sort settings [logsdb-sort-settings] @@ -65,7 +65,7 @@ In `logsdb` index mode, indices are sorted by the fields `host.name` and `@times * To prioritize the latest data, `host.name` is sorted in ascending order and `@timestamp` is sorted in descending order. -You can override the default sort settings by manually configuring `index.sort.field` and `index.sort.order`. For more details, see [*Index Sorting*](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-index-sorting.html). +You can override the default sort settings by manually configuring `index.sort.field` and `index.sort.order`. For more details, see [*Index Sorting*](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index-sorting-settings.md). To modify the sort configuration of an existing data stream, update the data stream’s component templates, and then perform or wait for a [rollover](../data-streams.md#data-streams-rollover). @@ -83,7 +83,7 @@ To avoid mapping conflicts, consider these options: * **Adjust mappings:** Check your existing mappings to ensure that `host.name` is mapped as a keyword. * **Change sorting:** If needed, you can remove `host.name` from the sort settings and use a different set of fields. Sorting by `@timestamp` can be a good fallback. -* **Switch to a different [index mode](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-mode-setting)**: If resolving `host.name` mapping conflicts is not feasible, you can choose not to use `logsdb` mode. +* **Switch to a different [index mode](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#index-mode-setting)**: If resolving `host.name` mapping conflicts is not feasible, you can choose not to use `logsdb` mode. ::::{important} On existing data streams, `logsdb` mode is applied on [rollover](../data-streams.md#data-streams-rollover) (automatic or manual). @@ -100,15 +100,15 @@ In benchmarks, routing optimizations reduced storage requirements by 20% compare To configure a routing optimization: * Include the index setting `[index.logsdb.route_on_sort_fields:true]` in the data stream configuration. -* [Configure index sorting](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-index-sorting.html) with two or more fields, in addition to `@timestamp`. -* Make sure the [`_id`](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-id-field.html) field is not populated in ingested documents. It should be auto-generated instead. +* [Configure index sorting](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index-sorting-settings.md) with two or more fields, in addition to `@timestamp`. +* Make sure the [`_id`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-id-field.md) field is not populated in ingested documents. It should be auto-generated instead. A custom sort configuration is required, to improve storage efficiency and to minimize hotspots from logging spikes that may route documents to a single shard. For best results, use a few sort fields that have a relatively low cardinality and don’t co-vary (for example, `host.name` and `host.id` are not optimal). ## Specialized codecs [logsdb-specialized-codecs] -By default, `logsdb` index mode uses the `best_compression` [codec](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-codec), which applies [ZSTD](https://en.wikipedia.org/wiki/Zstd) compression to stored fields. You can switch to the `default` codec for faster compression with a slightly larger storage footprint. +By default, `logsdb` index mode uses the `best_compression` [codec](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#index-codec), which applies [ZSTD](https://en.wikipedia.org/wiki/Zstd) compression to stored fields. You can switch to the `default` codec for faster compression with a slightly larger storage footprint. The `logsdb` index mode also automatically applies specialized codecs for numeric doc values, in order to optimize storage usage. Numeric fields are encoded using the following sequence of codecs: @@ -155,7 +155,7 @@ When automatically injected, `host.name` and `@timestamp` count toward the limit ## Fields without `doc_values` [logsdb-nodocvalue-fields] -When the `logsdb` index mode uses synthetic `_source` and `doc_values` are disabled for a field in the mapping, {{es}} might set the `store` setting to `true` for that field. This ensures that the field’s data remains accessible for reconstructing the document’s source when using [synthetic source](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#synthetic-source). +When the `logsdb` index mode uses synthetic `_source` and `doc_values` are disabled for a field in the mapping, {{es}} might set the `store` setting to `true` for that field. This ensures that the field’s data remains accessible for reconstructing the document’s source when using [synthetic source](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md#synthetic-source). For example, this adjustment occurs with text fields when `store` is `false` and no suitable multi-field is available for reconstructing the original value. diff --git a/manage-data/data-store/data-streams/modify-data-stream.md b/manage-data/data-store/data-streams/modify-data-stream.md index 6385d1d85..0efd8bd15 100644 --- a/manage-data/data-store/data-streams/modify-data-stream.md +++ b/manage-data/data-store/data-streams/modify-data-stream.md @@ -20,7 +20,7 @@ If you later need to change the mappings or settings for a data stream, you have * [Change a static index setting for a data stream](../data-streams/modify-data-stream.md#change-static-index-setting-for-a-data-stream) ::::{tip} -If your changes include modifications to existing field mappings or [static index settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-modules-settings), a reindex is often required to apply the changes to a data stream’s backing indices. If you are already performing a reindex, you can use the same process to add new field mappings and change [dynamic index settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-modules-settings). See [Use reindex to change mappings or settings](../data-streams/modify-data-stream.md#data-streams-use-reindex-to-change-mappings-settings). +If your changes include modifications to existing field mappings or [static index settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#index-modules-settings), a reindex is often required to apply the changes to a data stream’s backing indices. If you are already performing a reindex, you can use the same process to add new field mappings and change [dynamic index settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#index-modules-settings). See [Use reindex to change mappings or settings](../data-streams/modify-data-stream.md#data-streams-use-reindex-to-change-mappings-settings). :::: @@ -89,13 +89,13 @@ To add a mapping for a new field to a data stream, following these steps: ### Change an existing field mapping in a data stream [change-existing-field-mapping-in-a-data-stream] -The documentation for each [mapping parameter](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-params.html) indicates whether you can update it for an existing field using the [update mapping API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-put-mapping). To update these parameters for an existing field, follow these steps: +The documentation for each [mapping parameter](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-parameters.md) indicates whether you can update it for an existing field using the [update mapping API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-put-mapping). To update these parameters for an existing field, follow these steps: 1. Update the index template used by the data stream. This ensures the updated field mapping is added to future backing indices created for the stream. For example, `my-data-stream-template` is an existing index template used by `my-data-stream`. - The following [create or update index template](../templates.md) request changes the argument for the `host.ip` field’s [`ignore_malformed`](https://www.elastic.co/guide/en/elasticsearch/reference/current/ignore-malformed.html) mapping parameter to `true`. + The following [create or update index template](../templates.md) request changes the argument for the `host.ip` field’s [`ignore_malformed`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/ignore-malformed.md) mapping parameter to `true`. ```console PUT /_index_template/my-data-stream-template @@ -170,7 +170,7 @@ If you need to change the mapping of an existing field, create a new data stream ### Change a dynamic index setting for a data stream [change-dynamic-index-setting-for-a-data-stream] -To change a [dynamic index setting](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-modules-settings) for a data stream, follow these steps: +To change a [dynamic index setting](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#index-modules-settings) for a data stream, follow these steps: 1. Update the index template used by the data stream. This ensures the setting is applied to future backing indices created for the stream. @@ -216,7 +216,7 @@ To change the `index.lifecycle.name` setting, first use the [remove policy API]( ### Change a static index setting for a data stream [change-static-index-setting-for-a-data-stream] -[Static index settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-modules-settings) can only be set when a backing index is created. You cannot update static index settings using the [update index settings API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-put-settings). +[Static index settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#index-modules-settings) can only be set when a backing index is created. You cannot update static index settings using the [update index settings API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-put-settings). To apply a new static setting to future backing indices, update the index template used by the data stream. The setting is automatically applied to any backing index created after the update. @@ -423,7 +423,7 @@ Follow these steps: You can also use a query to reindex only a subset of documents with each request. - The following [reindex API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-reindex) request copies documents from `my-data-stream` to `new-data-stream`. The request uses a [`range` query](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html) to only reindex documents with a timestamp within the last week. Note the request’s `op_type` is `create`. + The following [reindex API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-reindex) request copies documents from `my-data-stream` to `new-data-stream`. The request uses a [`range` query](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-range-query.md) to only reindex documents with a timestamp within the last week. Note the request’s `op_type` is `create`. ```console POST /_reindex diff --git a/manage-data/data-store/data-streams/reindex-tsds.md b/manage-data/data-store/data-streams/reindex-tsds.md index af2a9c5a8..4ea1e1bc2 100644 --- a/manage-data/data-store/data-streams/reindex-tsds.md +++ b/manage-data/data-store/data-streams/reindex-tsds.md @@ -264,5 +264,5 @@ POST /k9s/_rollover/ This creates a new backing index with the updated index settings. The destination data stream is now ready to accept new documents. -Note that the initial backing index can still accept documents within the range of timestamps derived from the source data stream. If this is not desired, mark it as [read-only](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-blocks.html#index-blocks-read-only) explicitly. +Note that the initial backing index can still accept documents within the range of timestamps derived from the source data stream. If this is not desired, mark it as [read-only](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index-block-settings.md#index-blocks-read-only) explicitly. diff --git a/manage-data/data-store/data-streams/run-downsampling-using-data-stream-lifecycle.md b/manage-data/data-store/data-streams/run-downsampling-using-data-stream-lifecycle.md index eccbb9ec5..d416a1e61 100644 --- a/manage-data/data-store/data-streams/run-downsampling-using-data-stream-lifecycle.md +++ b/manage-data/data-store/data-streams/run-downsampling-using-data-stream-lifecycle.md @@ -314,7 +314,7 @@ POST /datastream/_rollover/ ## View downsampling results [downsampling-dsl-view-results] -By default, data stream lifecycle actions are executed every five minutes. Downsampling takes place after the index is rolled over and the [index time series end time](https://www.elastic.co/guide/en/elasticsearch/reference/current/tsds-index-settings.html#index-time-series-end-time) has lapsed as the source index is still expected to receive major writes until then. Index is now rolled over after previous step but its time series range end is likely still in the future. Once index time series range is in the past, re-run the `GET _data_stream` request. +By default, data stream lifecycle actions are executed every five minutes. Downsampling takes place after the index is rolled over and the [index time series end time](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/time-series-index-settings.md#index-time-series-end-time) has lapsed as the source index is still expected to receive major writes until then. Index is now rolled over after previous step but its time series range end is likely still in the future. Once index time series range is in the past, re-run the `GET _data_stream` request. ```console GET _data_stream diff --git a/manage-data/data-store/data-streams/run-downsampling-with-ilm.md b/manage-data/data-store/data-streams/run-downsampling-with-ilm.md index 8161b333f..e403bb8af 100644 --- a/manage-data/data-store/data-streams/run-downsampling-with-ilm.md +++ b/manage-data/data-store/data-streams/run-downsampling-with-ilm.md @@ -29,9 +29,9 @@ Before running this example you may want to try the [Run downsampling manually]( Create an ILM policy for your time series data. While not required, an ILM policy is recommended to automate the management of your time series data stream indices. -To enable downsampling, add a [Downsample action](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-downsample.html) and set [`fixed_interval`](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-downsample.html#ilm-downsample-options) to the downsampling interval at which you want to aggregate the original time series data. +To enable downsampling, add a [Downsample action](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-downsample.md) and set [`fixed_interval`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-downsample.md#ilm-downsample-options) to the downsampling interval at which you want to aggregate the original time series data. -In this example, an ILM policy is configured for the `hot` phase. The downsample takes place after the index is rolled over and the [index time series end time](https://www.elastic.co/guide/en/elasticsearch/reference/current/tsds-index-settings.html#index-time-series-end-time) has lapsed as the source index is still expected to receive major writes until then. {{ilm-cap}} will not proceed with any action that expects the index to not receive writes anymore until the [index’s end time](https://www.elastic.co/guide/en/elasticsearch/reference/current/tsds-index-settings.html#index-time-series-end-time) has passed. The {{ilm-cap}} actions that wait on the end time before proceeding are: - [Delete](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-delete.html) - [Downsample](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-downsample.html) - [Force merge](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-forcemerge.html) - [Read only](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-readonly.html) - [Searchable snapshot](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-searchable-snapshot.html) - [Shrink](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-shrink.html) +In this example, an ILM policy is configured for the `hot` phase. The downsample takes place after the index is rolled over and the [index time series end time](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/time-series-index-settings.md#index-time-series-end-time) has lapsed as the source index is still expected to receive major writes until then. {{ilm-cap}} will not proceed with any action that expects the index to not receive writes anymore until the [index’s end time](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/time-series-index-settings.md#index-time-series-end-time) has passed. The {{ilm-cap}} actions that wait on the end time before proceeding are: - [Delete](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-delete.md) - [Downsample](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-downsample.md) - [Force merge](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-forcemerge.md) - [Read only](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-readonly.md) - [Searchable snapshot](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-searchable-snapshot.md) - [Shrink](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-shrink.md) ```console PUT _ilm/policy/datastream_policy diff --git a/manage-data/data-store/data-streams/set-up-data-stream.md b/manage-data/data-store/data-streams/set-up-data-stream.md index db7836e9a..612d03c13 100644 --- a/manage-data/data-store/data-streams/set-up-data-stream.md +++ b/manage-data/data-store/data-streams/set-up-data-stream.md @@ -18,7 +18,7 @@ You can also [convert an index alias to a data stream](#convert-index-alias-to-d ::::{important} If you use {{fleet}}, {{agent}}, or {{ls}}, skip this tutorial. They all set up data streams for you. -For {{fleet}} and {{agent}}, check out this [data streams documentation](https://www.elastic.co/guide/en/fleet/current/data-streams.html). For {{ls}}, check out the [data streams settings](https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html#plugins-outputs-elasticsearch-data_stream) for the `elasticsearch output` plugin. +For {{fleet}} and {{agent}}, check out this [data streams documentation](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/data-streams.md). For {{ls}}, check out the [data streams settings](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-outputs-elasticsearch.md#plugins-outputs-elasticsearch-data_stream) for the `elasticsearch output` plugin. :::: @@ -89,13 +89,13 @@ A data stream requires a matching index template. In most cases, you compose thi When creating your component templates, include: -* A [`date`](https://www.elastic.co/guide/en/elasticsearch/reference/current/date.html) or [`date_nanos`](https://www.elastic.co/guide/en/elasticsearch/reference/current/date_nanos.html) mapping for the `@timestamp` field. If you don’t specify a mapping, {{es}} maps `@timestamp` as a `date` field with default options. +* A [`date`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/date.md) or [`date_nanos`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/date_nanos.md) mapping for the `@timestamp` field. If you don’t specify a mapping, {{es}} maps `@timestamp` as a `date` field with default options. * Your lifecycle policy in the `index.lifecycle.name` index setting. ::::{tip} Use the [Elastic Common Schema (ECS)](https://www.elastic.co/guide/en/ecs/current) when mapping your fields. ECS fields integrate with several {{stack}} features by default. -If you’re unsure how to map your fields, use [runtime fields](../mapping/define-runtime-fields-in-search-request.md) to extract fields from [unstructured content](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html#mapping-unstructured-content) at search time. For example, you can index a log message to a `wildcard` field and later extract IP addresses and other data from this field during a search. +If you’re unsure how to map your fields, use [runtime fields](../mapping/define-runtime-fields-in-search-request.md) to extract fields from [unstructured content](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md#mapping-unstructured-content) at search time. For example, you can index a log message to a `wildcard` field and later extract IP addresses and other data from this field during a search. :::: @@ -147,7 +147,7 @@ PUT _component_template/my-settings Use your component templates to create an index template. Specify: -* One or more index patterns that match the data stream’s name. We recommend using our [data stream naming scheme](https://www.elastic.co/guide/en/fleet/current/data-streams.html#data-streams-naming-scheme). +* One or more index patterns that match the data stream’s name. We recommend using our [data stream naming scheme](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/data-streams.md#data-streams-naming-scheme). * That the template is data stream enabled. * Any component templates that contain your mappings and index settings. * A priority higher than `200` to avoid collisions with built-in templates. See [Avoid index pattern collisions](../templates.md#avoid-index-pattern-collisions). diff --git a/manage-data/data-store/data-streams/set-up-tsds.md b/manage-data/data-store/data-streams/set-up-tsds.md index 7af463718..66a3ed10e 100644 --- a/manage-data/data-store/data-streams/set-up-tsds.md +++ b/manage-data/data-store/data-streams/set-up-tsds.md @@ -90,11 +90,11 @@ PUT _ilm/policy/my-weather-sensor-lifecycle-policy To setup a TSDS create an index template with the following details: -* One or more index patterns that match the TSDS’s name. We recommend using our [data stream naming scheme](https://www.elastic.co/guide/en/fleet/current/data-streams.html#data-streams-naming-scheme). +* One or more index patterns that match the TSDS’s name. We recommend using our [data stream naming scheme](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/data-streams.md#data-streams-naming-scheme). * Enable data streams. * Specify a mapping that defines your dimensions and metrics: - * One or more [dimension fields](time-series-data-stream-tsds.md#time-series-dimension) with a `time_series_dimension` value of `true`. Alternatively, one or more [pass-through](https://www.elastic.co/guide/en/elasticsearch/reference/current/passthrough.html#passthrough-dimensions) fields configured as dimension containers, provided that they will contain at least one sub-field (mapped statically or dynamically). + * One or more [dimension fields](time-series-data-stream-tsds.md#time-series-dimension) with a `time_series_dimension` value of `true`. Alternatively, one or more [pass-through](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/passthrough.md#passthrough-dimensions) fields configured as dimension containers, provided that they will contain at least one sub-field (mapped statically or dynamically). * One or more [metric fields](time-series-data-stream-tsds.md#time-series-metric), marked using the `time_series_metric` mapping parameter. * Optional: A `date` or `date_nanos` mapping for the `@timestamp` field. If you don’t specify a mapping, Elasticsearch maps `@timestamp` as a `date` field with default options. @@ -102,7 +102,7 @@ To setup a TSDS create an index template with the following details: * Set `index.mode` setting to `time_series`. * Your lifecycle policy in the `index.lifecycle.name` index setting. - * Optional: Other index settings, such as [`index.number_of_replicas`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#dynamic-index-number-of-replicas), for your TSDS’s backing indices. + * Optional: Other index settings, such as [`index.number_of_replicas`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#dynamic-index-number-of-replicas), for your TSDS’s backing indices. * A priority higher than `200` to avoid collisions with built-in templates. See [Avoid index pattern collisions](../templates.md#avoid-index-pattern-collisions). * Optional: Component templates containing your mappings and other index settings. diff --git a/manage-data/data-store/data-streams/time-series-data-stream-tsds.md b/manage-data/data-store/data-streams/time-series-data-stream-tsds.md index a4723873a..3ba5bee0e 100644 --- a/manage-data/data-store/data-streams/time-series-data-stream-tsds.md +++ b/manage-data/data-store/data-streams/time-series-data-stream-tsds.md @@ -29,9 +29,9 @@ A TSDS works like a regular data stream with some key differences: * {{es}} generates a hidden [`_tsid`](#tsid) metadata field for each document in a TSDS. * A TSDS uses [time-bound backing indices](#time-bound-indices) to store data from the same time period in the same backing index. * The matching index template for a TSDS must contain the `index.routing_path` index setting. A TSDS uses this setting to perform [dimension-based routing](#dimension-based-routing). -* A TSDS uses internal [index sorting](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-index-sorting.html) to order shard segments by `_tsid` and `@timestamp`. +* A TSDS uses internal [index sorting](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index-sorting-settings.md) to order shard segments by `_tsid` and `@timestamp`. * TSDS documents only support auto-generated document `_id` values. For TSDS documents, the document `_id` is a hash of the document’s dimensions and `@timestamp`. A TSDS doesn’t support custom document `_id` values. -* A TSDS uses [synthetic `_source`](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#synthetic-source), and as a result is subject to some [restrictions](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#synthetic-source-restrictions) and [modifications](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#synthetic-source-modifications) applied to the `_source` field. +* A TSDS uses [synthetic `_source`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md#synthetic-source), and as a result is subject to some [restrictions](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md#synthetic-source-restrictions) and [modifications](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md#synthetic-source-modifications) applied to the `_source` field. ::::{note} A time series index can contain fields other than dimensions or metrics. @@ -63,18 +63,18 @@ A TSDS document is uniquely identified by its time series and timestamp, both of You mark a field as a dimension using the boolean `time_series_dimension` mapping parameter. The following field types support the `time_series_dimension` parameter: -* [`keyword`](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html#keyword-field-type) -* [`ip`](https://www.elastic.co/guide/en/elasticsearch/reference/current/ip.html) -* [`byte`](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) -* [`short`](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) -* [`integer`](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) -* [`long`](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) -* [`unsigned_long`](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) -* [`boolean`](https://www.elastic.co/guide/en/elasticsearch/reference/current/boolean.html) +* [`keyword`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md#keyword-field-type) +* [`ip`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/ip.md) +* [`byte`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) +* [`short`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) +* [`integer`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) +* [`long`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) +* [`unsigned_long`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) +* [`boolean`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/boolean.md) -For a flattened field, use the `time_series_dimensions` parameter to configure an array of fields as dimensions. For details refer to [`flattened`](https://www.elastic.co/guide/en/elasticsearch/reference/current/flattened.html#flattened-params). +For a flattened field, use the `time_series_dimensions` parameter to configure an array of fields as dimensions. For details refer to [`flattened`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/flattened.md#flattened-params). -Dimension definitions can be simplified through [pass-through](https://www.elastic.co/guide/en/elasticsearch/reference/current/passthrough.html#passthrough-dimensions) fields. +Dimension definitions can be simplified through [pass-through](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/passthrough.md#passthrough-dimensions) fields. ### Metrics [time-series-metric] @@ -85,9 +85,9 @@ Metrics differ from dimensions in that while dimensions generally remain constan To mark a field as a metric, you must specify a metric type using the `time_series_metric` mapping parameter. The following field types support the `time_series_metric` parameter: -* [`aggregate_metric_double`](https://www.elastic.co/guide/en/elasticsearch/reference/current/aggregate-metric-double.html) -* [`histogram`](https://www.elastic.co/guide/en/elasticsearch/reference/current/histogram.html) -* All [numeric field types](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) +* [`aggregate_metric_double`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/aggregate-metric-double.md) +* [`histogram`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/histogram.md) +* All [numeric field types](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) Accepted metric types vary based on the field type: @@ -120,7 +120,7 @@ Due to the cumulative nature of counter fields, the following aggregations are s ## Time series mode [time-series-mode] -The matching index template for a TSDS must contain a `data_stream` object with the `index_mode: time_series` option. This option ensures the TSDS creates backing indices with an [`index.mode`](https://www.elastic.co/guide/en/elasticsearch/reference/current/tsds-index-settings.html#index-mode) setting of `time_series`. This setting enables most TSDS-related functionality in the backing indices. +The matching index template for a TSDS must contain a `data_stream` object with the `index_mode: time_series` option. This option ensures the TSDS creates backing indices with an [`index.mode`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/time-series-index-settings.md#index-mode) setting of `time_series`. This setting enables most TSDS-related functionality in the backing indices. If you convert an existing data stream to a TSDS, only backing indices created after the conversion have an `index.mode` of `time_series`. You can’t change the `index.mode` of an existing backing index. @@ -129,7 +129,7 @@ If you convert an existing data stream to a TSDS, only backing indices created a When you add a document to a TSDS, {{es}} automatically generates a `_tsid` metadata field for the document. The `_tsid` is an object containing the document’s dimensions. Documents in the same TSDS with the same `_tsid` are part of the same time series. -The `_tsid` field is not queryable or updatable. You also can’t retrieve a document’s `_tsid` using a [get document](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-get) request. However, you can use the `_tsid` field in aggregations and retrieve the `_tsid` value in searches using the [`fields` parameter](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-fields.html#search-fields-param). +The `_tsid` field is not queryable or updatable. You also can’t retrieve a document’s `_tsid` using a [get document](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-get) request. However, you can use the `_tsid` field in aggregations and retrieve the `_tsid` value in searches using the [`fields` parameter](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/retrieve-selected-fields.md#search-fields-param). ::::{warning} The format of the `_tsid` field shouldn’t be relied upon. It may change from version to version. @@ -139,7 +139,7 @@ The format of the `_tsid` field shouldn’t be relied upon. It may change from v ### Time-bound indices [time-bound-indices] -In a TSDS, each backing index, including the most recent backing index, has a range of accepted `@timestamp` values. This range is defined by the [`index.time_series.start_time`](https://www.elastic.co/guide/en/elasticsearch/reference/current/tsds-index-settings.html#index-time-series-start-time) and [`index.time_series.end_time`](https://www.elastic.co/guide/en/elasticsearch/reference/current/tsds-index-settings.html#index-time-series-end-time) index settings. +In a TSDS, each backing index, including the most recent backing index, has a range of accepted `@timestamp` values. This range is defined by the [`index.time_series.start_time`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/time-series-index-settings.md#index-time-series-start-time) and [`index.time_series.end_time`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/time-series-index-settings.md#index-time-series-end-time) index settings. When you add a document to a TSDS, {{es}} adds the document to the appropriate backing index based on its `@timestamp` value. As a result, a TSDS can add documents to any TSDS backing index that can receive writes. This applies even if the index isn’t the most recent backing index. @@ -148,7 +148,7 @@ When you add a document to a TSDS, {{es}} adds the document to the appropriate b ::: ::::{tip} -Some {{ilm-init}} actions mark the source index as read-only, or expect the index to not be actively written anymore in order to provide good performance. These actions are: - [Delete](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-delete.html) - [Downsample](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-downsample.html) - [Force merge](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-forcemerge.html) - [Read only](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-readonly.html) - [Searchable snapshot](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-searchable-snapshot.html) - [Shrink](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-shrink.html) {{ilm-cap}} will **not** proceed with executing these actions until the upper time-bound for accepting writes, represented by the [`index.time_series.end_time`](https://www.elastic.co/guide/en/elasticsearch/reference/current/tsds-index-settings.html#index-time-series-end-time) index setting, has lapsed. +Some {{ilm-init}} actions mark the source index as read-only, or expect the index to not be actively written anymore in order to provide good performance. These actions are: - [Delete](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-delete.md) - [Downsample](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-downsample.md) - [Force merge](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-forcemerge.md) - [Read only](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-readonly.md) - [Searchable snapshot](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-searchable-snapshot.md) - [Shrink](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-shrink.md) {{ilm-cap}} will **not** proceed with executing these actions until the upper time-bound for accepting writes, represented by the [`index.time_series.end_time`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/time-series-index-settings.md#index-time-series-end-time) index setting, has lapsed. :::: @@ -159,7 +159,7 @@ If no backing index can accept a document’s `@timestamp` value, {{es}} rejects ### Look-ahead time [tsds-look-ahead-time] -Use the [`index.look_ahead_time`](https://www.elastic.co/guide/en/elasticsearch/reference/current/tsds-index-settings.html#index-look-ahead-time) index setting to configure how far into the future you can add documents to an index. When you create a new write index for a TSDS, {{es}} calculates the index’s `index.time_series.end_time` value as: +Use the [`index.look_ahead_time`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/time-series-index-settings.md#index-look-ahead-time) index setting to configure how far into the future you can add documents to an index. When you create a new write index for a TSDS, {{es}} calculates the index’s `index.time_series.end_time` value as: `now + index.look_ahead_time` @@ -172,7 +172,7 @@ This process continues until the write index rolls over. When the index rolls ov ### Look-back time [tsds-look-back-time] -Use the [`index.look_back_time`](https://www.elastic.co/guide/en/elasticsearch/reference/current/tsds-index-settings.html#index-look-back-time) index setting to configure how far in the past you can add documents to an index. When you create a data stream for a TSDS, {{es}} calculates the index’s `index.time_series.start_time` value as: +Use the [`index.look_back_time`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/time-series-index-settings.md#index-look-back-time) index setting to configure how far in the past you can add documents to an index. When you create a data stream for a TSDS, {{es}} calculates the index’s `index.time_series.start_time` value as: `now - index.look_back_time` @@ -193,24 +193,24 @@ You can use the [get data stream API](https://www.elastic.co/docs/api/doc/elasti ### Dimension-based routing [dimension-based-routing] -Within each TSDS backing index, {{es}} uses the [`index.routing_path`](https://www.elastic.co/guide/en/elasticsearch/reference/current/tsds-index-settings.html#index-routing-path) index setting to route documents with the same dimensions to the same shards. +Within each TSDS backing index, {{es}} uses the [`index.routing_path`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/time-series-index-settings.md#index-routing-path) index setting to route documents with the same dimensions to the same shards. When you create the matching index template for a TSDS, you must specify one or more dimensions in the `index.routing_path` setting. Each document in a TSDS must contain one or more dimensions that match the `index.routing_path` setting. The `index.routing_path` setting accepts wildcard patterns (for example `dim.*`) and can dynamically match new fields. However, {{es}} will reject any mapping updates that add scripted, runtime, or non-dimension fields that match the `index.routing_path` value. -[Pass-through](https://www.elastic.co/guide/en/elasticsearch/reference/current/passthrough.html#passthrough-dimensions) fields may be configured as dimension containers. In this case, their sub-fields get included to the routing path automatically. +[Pass-through](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/passthrough.md#passthrough-dimensions) fields may be configured as dimension containers. In this case, their sub-fields get included to the routing path automatically. TSDS documents don’t support a custom `_routing` value. Similarly, you can’t require a `_routing` value in mappings for a TSDS. ### Index sorting [tsds-index-sorting] -{{es}} uses [compression algorithms](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-codec) to compress repeated values. This compression works best when repeated values are stored near each other — in the same index, on the same shard, and side-by-side in the same shard segment. +{{es}} uses [compression algorithms](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#index-codec) to compress repeated values. This compression works best when repeated values are stored near each other — in the same index, on the same shard, and side-by-side in the same shard segment. Most time series data contains repeated values. Dimensions are repeated across documents in the same time series. The metric values of a time series may also change slowly over time. -Internally, each TSDS backing index uses [index sorting](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-index-sorting.html) to order its shard segments by `_tsid` and `@timestamp`. This makes it more likely that these repeated values are stored near each other for better compression. A TSDS doesn’t support any [`index.sort.*`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-index-sorting.html) index settings. +Internally, each TSDS backing index uses [index sorting](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index-sorting-settings.md) to order its shard segments by `_tsid` and `@timestamp`. This makes it more likely that these repeated values are stored near each other for better compression. A TSDS doesn’t support any [`index.sort.*`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index-sorting-settings.md) index settings. ## What’s next? [tsds-whats-next] diff --git a/manage-data/data-store/data-streams/use-data-stream.md b/manage-data/data-store/data-streams/use-data-stream.md index 14ccb8cff..311837a13 100644 --- a/manage-data/data-store/data-streams/use-data-stream.md +++ b/manage-data/data-store/data-streams/use-data-stream.md @@ -165,9 +165,9 @@ POST /my-data-stream/_delete_by_query If needed, you can update or delete documents in a data stream by sending requests to the backing index containing the document. You’ll need: -* The [document ID](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-id-field.html) +* The [document ID](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-id-field.md) * The name of the backing index containing the document -* If updating the document, its [sequence number and primary term](https://www.elastic.co/guide/en/elasticsearch/reference/current/optimistic-concurrency-control.html) +* If updating the document, its [sequence number and primary term](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/optimistic-concurrency-control.md) To get this information, use a [search request](#search-a-data-stream): diff --git a/manage-data/data-store/index-basics.md b/manage-data/data-store/index-basics.md index ddadfdc60..60d4148d7 100644 --- a/manage-data/data-store/index-basics.md +++ b/manage-data/data-store/index-basics.md @@ -52,7 +52,7 @@ A simple {{es}} document might look like this: ### Metadata fields [elasticsearch-intro-documents-fields-data-metadata] -An indexed document contains data and metadata. [Metadata fields](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-fields.html) are system fields that store information about the documents. In {{es}}, metadata fields are prefixed with an underscore. For example, the following fields are metadata fields: +An indexed document contains data and metadata. [Metadata fields](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/document-metadata-fields.md) are system fields that store information about the documents. In {{es}}, metadata fields are prefixed with an underscore. For example, the following fields are metadata fields: * `_index`: The name of the index where the document is stored. * `_id`: The document’s ID. IDs must be unique per index. @@ -60,7 +60,7 @@ An indexed document contains data and metadata. [Metadata fields](https://www.el ### Mappings and data types [elasticsearch-intro-documents-fields-mappings] -Each index has a [mapping](/manage-data/data-store/mapping.md) or schema for how the fields in your documents are indexed. A mapping defines the [data type](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html) for each field, how the field should be indexed, and how it should be stored. +Each index has a [mapping](/manage-data/data-store/mapping.md) or schema for how the fields in your documents are indexed. A mapping defines the [data type](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/field-data-types.md) for each field, how the field should be indexed, and how it should be stored. ## Index management @@ -79,7 +79,7 @@ Investigate your indices and perform operations from the **Indices** view. * To show details and perform operations, click the index name. To perform operations on multiple indices, select their checkboxes and then open the **Manage** menu. For more information on managing indices, refer to [Index APIs](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices.html). * To filter the list of indices, use the search bar or click a badge. Badges indicate if an index is a [follower index](https://www.elastic.co/guide/en/elasticsearch/reference/current/ccr-put-follow.html), a [rollup index](https://www.elastic.co/guide/en/elasticsearch/reference/current/rollup-get-rollup-index-caps.html), or [frozen](https://www.elastic.co/guide/en/elasticsearch/reference/current/unfreeze-index-api.html). -* To drill down into the index [mappings](/manage-data/data-store/mapping.md), [settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-modules-settings), and statistics, click an index name. From this view, you can navigate to **Discover** to further explore the documents in the index. +* To drill down into the index [mappings](/manage-data/data-store/mapping.md), [settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#index-modules-settings), and statistics, click an index name. From this view, you can navigate to **Discover** to further explore the documents in the index. * To create new indices, use the **Create index** wizard. ### Manage data streams @@ -132,7 +132,7 @@ Create, edit, clone, and delete your component templates in the **Component Temp ### Manage enrich policies -An [enrich policy](https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest-enriching-data.html#enrich-policy) is a set of configuration options used to add the right enrich data to the right incoming documents. +An [enrich policy](/manage-data/ingest/transform-enrich/data-enrichment.md#enrich-policy) is a set of configuration options used to add the right enrich data to the right incoming documents. Add data from your existing indices to incoming documents using the **Enrich Policies** view. diff --git a/manage-data/data-store/mapping.md b/manage-data/data-store/mapping.md index 5c53a96f7..6ecca8abd 100644 --- a/manage-data/data-store/mapping.md +++ b/manage-data/data-store/mapping.md @@ -32,7 +32,7 @@ $$$mapping-explicit$$$ Mapping is the process of defining how a document and the fields it contains are stored and indexed. -Each document is a collection of fields, which each have their own [data type](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html). When mapping your data, you create a mapping definition, which contains a list of fields that are pertinent to the document. A mapping definition also includes [metadata fields](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-fields.html), like the `_source` field, which customize how a document’s associated metadata is handled. +Each document is a collection of fields, which each have their own [data type](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/field-data-types.md). When mapping your data, you create a mapping definition, which contains a list of fields that are pertinent to the document. A mapping definition also includes [metadata fields](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/document-metadata-fields.md), like the `_source` field, which customize how a document’s associated metadata is handled. Depending on where you are in your data journey, use *dynamic mapping* and *explicit mapping* to define your data. For example, you can explicitly map fields where you don’t want to use the defaults, or to gain greater control over which fields are created. Then you can allow {{es}} to dynamically map other fields. Using a combination of dynamic and explicit mapping on the same index is especially useful when you have a mix of known and unknown fields in your data. @@ -42,7 +42,7 @@ Before 7.0.0, the mapping definition included a type name. {{es}} 7.0.0 and late ## Dynamic mapping [mapping-dynamic] -When you use [dynamic mapping](/manage-data/data-store/mapping/dynamic-mapping.md), {{es}} automatically detects the data types of fields in your documents and creates mappings for you. If you index additional documents with new fields, {{es}} will add these fields automatically. You can add fields to the top-level mapping, and to inner [`object`](https://www.elastic.co/guide/en/elasticsearch/reference/current/object.html) and [`nested`](https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html) fields. Dynamic mapping helps you get started quickly, but might yield suboptimal results for your specific use case due to automatic field type inference. +When you use [dynamic mapping](/manage-data/data-store/mapping/dynamic-mapping.md), {{es}} automatically detects the data types of fields in your documents and creates mappings for you. If you index additional documents with new fields, {{es}} will add these fields automatically. You can add fields to the top-level mapping, and to inner [`object`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/object.md) and [`nested`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/nested.md) fields. Dynamic mapping helps you get started quickly, but might yield suboptimal results for your specific use case due to automatic field type inference. Use [dynamic templates](/manage-data/data-store/mapping/dynamic-templates.md) to define custom mappings that are applied to dynamically added fields based on the matching condition. @@ -55,7 +55,7 @@ Defining your own mappings enables you to: * Define which string fields should be treated as full-text fields. * Define which fields contain numbers, dates, or geolocations. * Use data types that cannot be automatically detected (such as `geo_point` and `geo_shape`.) -* Choose date value [formats](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html), including custom date formats. +* Choose date value [formats](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-date-format.md), including custom date formats. * Create custom rules to control the mapping for [dynamically added fields](/manage-data/data-store/mapping/dynamic-mapping.md). * Optimize fields for partial matching. * Perform language-specific text analysis. @@ -84,11 +84,11 @@ In most cases, you can’t change mappings for fields that are already mapped. T However, you can update mappings under certain conditions: * You can add new fields to an existing mapping at any time, dynamically or explicitly. -* You can add new [multi-fields](https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html) for existing fields. +* You can add new [multi-fields](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/multi-fields.md) for existing fields. * Documents indexed before the mapping update will not have values for the new multi-fields until they are updated or reindexed. Documents indexed after the mapping change will automatically have values for the new multi-fields. -* Some [mapping parameters](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-params.html) can be updated for existing fields of certain [data types](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html). +* Some [mapping parameters](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-parameters.md) can be updated for existing fields of certain [data types](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/field-data-types.md). ## Prevent mapping explosions [mapping-limit-settings] @@ -97,4 +97,4 @@ Defining too many fields in an index can lead to a mapping explosion, which can Consider a situation where every new document inserted introduces new fields, such as with [dynamic mapping](/manage-data/data-store/mapping/dynamic-mapping.md). Each new field is added to the index mapping, which can become a problem as the mapping grows. -Use the [mapping limit settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-settings-limit.html) to limit the number of field mappings (created manually or dynamically) and prevent documents from causing a mapping explosion. \ No newline at end of file +Use the [mapping limit settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/mapping-limit-settings.md) to limit the number of field mappings (created manually or dynamically) and prevent documents from causing a mapping explosion. \ No newline at end of file diff --git a/manage-data/data-store/mapping/define-runtime-fields-in-search-request.md b/manage-data/data-store/mapping/define-runtime-fields-in-search-request.md index b4b4f4276..1ae307555 100644 --- a/manage-data/data-store/mapping/define-runtime-fields-in-search-request.md +++ b/manage-data/data-store/mapping/define-runtime-fields-in-search-request.md @@ -71,7 +71,7 @@ PUT my-index-000001/_mapping Runtime fields take precedence over fields defined with the same name in the index mappings. This flexibility allows you to shadow existing fields and calculate a different value, without modifying the field itself. If you made a mistake in your index mapping, you can use runtime fields to calculate values that [override values](override-field-values-at-query-time.md) in the mapping during the search request. -Now, you can easily run an [average aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-avg-aggregation.html) on the `measures.start` and `measures.end` fields: +Now, you can easily run an [average aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-avg-aggregation.md) on the `measures.start` and `measures.end` fields: ```console GET my-index-000001/_search @@ -106,7 +106,7 @@ The response includes the aggregation results without changing the values for th } ``` -Further, you can define a runtime field as part of a search query that calculates a value, and then run a [stats aggregation](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-stats-aggregation.html) on that field *in the same query*. +Further, you can define a runtime field as part of a search query that calculates a value, and then run a [stats aggregation](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-stats-aggregation.md) on that field *in the same query*. The `duration` runtime field doesn’t exist in the index mapping, but we can still search and aggregate on that field. The following query returns the calculated value for the `duration` field and runs a stats aggregation to compute statistics over numeric values extracted from the aggregated documents. diff --git a/manage-data/data-store/mapping/dynamic-field-mapping.md b/manage-data/data-store/mapping/dynamic-field-mapping.md index 0d8c88b89..1e78b7ab1 100644 --- a/manage-data/data-store/mapping/dynamic-field-mapping.md +++ b/manage-data/data-store/mapping/dynamic-field-mapping.md @@ -5,12 +5,12 @@ mapped_pages: # Dynamic field mapping [dynamic-field-mapping] -When {{es}} detects a new field in a document, it *dynamically* adds the field to the type mapping by default. The [`dynamic`](https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic.html) parameter controls this behavior. +When {{es}} detects a new field in a document, it *dynamically* adds the field to the type mapping by default. The [`dynamic`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/dynamic.md) parameter controls this behavior. You can explicitly instruct {{es}} to dynamically create fields based on incoming documents by setting the `dynamic` parameter to `true` or `runtime`. When dynamic field mapping is enabled, {{es}} uses the rules in the following table to determine how to map data types for each field. ::::{note} -The field data types in the following table are the only [field data types](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html) that {{es}} detects dynamically. You must explicitly map all other data types. +The field data types in the following table are the only [field data types](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/field-data-types.md) that {{es}} detects dynamically. You must explicitly map all other data types. :::: @@ -30,7 +30,7 @@ $$$dynamic-field-mapping-types$$$ | `string` that passes [numeric detection](#numeric-detection) | `float` or `long` | `double` or `long` | | `string` that doesn’t pass `date` detection or `numeric` detection | `text` with a `.keyword` sub-field | `keyword` | -You can disable dynamic mapping, both at the document and at the [`object`](https://www.elastic.co/guide/en/elasticsearch/reference/current/object.html) level. Setting the `dynamic` parameter to `false` ignores new fields, and `strict` rejects the document if {{es}} encounters an unknown field. +You can disable dynamic mapping, both at the document and at the [`object`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/object.md) level. Setting the `dynamic` parameter to `false` ignores new fields, and `strict` rejects the document if {{es}} encounters an unknown field. ::::{tip} Use the [update mapping API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-put-mapping) to update the `dynamic` setting on existing fields. @@ -41,11 +41,11 @@ You can customize dynamic field mapping rules for [date detection](#date-detecti ## Date detection [date-detection] -If `date_detection` is enabled (default), then new string fields are checked to see whether their contents match any of the date patterns specified in `dynamic_date_formats`. If a match is found, a new [`date`](https://www.elastic.co/guide/en/elasticsearch/reference/current/date.html) field is added with the corresponding format. +If `date_detection` is enabled (default), then new string fields are checked to see whether their contents match any of the date patterns specified in `dynamic_date_formats`. If a match is found, a new [`date`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/date.md) field is added with the corresponding format. The default value for `dynamic_date_formats` is: -[ [`"strict_date_optional_time"`](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html#strict-date-time),`"yyyy/MM/dd HH:mm:ss Z||yyyy/MM/dd Z"`] +[ [`"strict_date_optional_time"`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-date-format.md#strict-date-time),`"yyyy/MM/dd HH:mm:ss Z||yyyy/MM/dd Z"`] For example: @@ -58,7 +58,7 @@ PUT my-index-000001/_doc/1 GET my-index-000001/_mapping <1> ``` -1. The `create_date` field has been added as a [`date`](https://www.elastic.co/guide/en/elasticsearch/reference/current/date.html) field with the [`format`](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html):
`"yyyy/MM/dd HH:mm:ss Z||yyyy/MM/dd Z"`. +1. The `create_date` field has been added as a [`date`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/date.md) field with the [`format`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-date-format.md):
`"yyyy/MM/dd HH:mm:ss Z||yyyy/MM/dd Z"`. ### Disabling date detection [_disabling_date_detection] @@ -79,13 +79,13 @@ PUT my-index-000001/_doc/1 <1> } ``` -1. The `create_date` field has been added as a [`text`](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html) field. +1. The `create_date` field has been added as a [`text`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md) field. ### Customizing detected date formats [_customizing_detected_date_formats] -Alternatively, the `dynamic_date_formats` can be customized to support your own [date formats](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html): +Alternatively, the `dynamic_date_formats` can be customized to support your own [date formats](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-date-format.md): ```console PUT my-index-000001 @@ -205,8 +205,8 @@ PUT my-index-000001/_doc/1 } ``` -1. The `my_float` field is added as a [`float`](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) field. -2. The `my_integer` field is added as a [`long`](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) field. +1. The `my_float` field is added as a [`float`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) field. +2. The `my_integer` field is added as a [`long`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) field. diff --git a/manage-data/data-store/mapping/dynamic-templates.md b/manage-data/data-store/mapping/dynamic-templates.md index 928cbba10..041310ca0 100644 --- a/manage-data/data-store/mapping/dynamic-templates.md +++ b/manage-data/data-store/mapping/dynamic-templates.md @@ -171,7 +171,7 @@ PUT my-index-000001/_doc/1 ``` 1. The `my_integer` field is mapped as an `integer`. -2. The `my_string` field is mapped as a `text`, with a `keyword` [multi-field](https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html). +2. The `my_string` field is mapped as a `text`, with a `keyword` [multi-field](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/multi-fields.md). 3. The `my_boolean` field is mapped as a `keyword`. 4. The `field.count` field is mapped as a `long`. @@ -356,7 +356,7 @@ PUT my-index-000001/_doc/2 ## Template variables [template-variables] -The `{{name}}` and `{{dynamic_type}}` placeholders are replaced in the `mapping` with the field name and detected dynamic type. The following example sets all string fields to use an [`analyzer`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analyzer.html) with the same name as the field, and disables [`doc_values`](https://www.elastic.co/guide/en/elasticsearch/reference/current/doc-values.html) for all non-string fields: +The `{{name}}` and `{{dynamic_type}}` placeholders are replaced in the `mapping` with the field name and detected dynamic type. The following example sets all string fields to use an [`analyzer`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/analyzer.md) with the same name as the field, and disables [`doc_values`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/doc-values.md) for all non-string fields: ```console PUT my-index-000001 diff --git a/manage-data/data-store/mapping/explicit-mapping.md b/manage-data/data-store/mapping/explicit-mapping.md index 2b915ff2f..7654e2131 100644 --- a/manage-data/data-store/mapping/explicit-mapping.md +++ b/manage-data/data-store/mapping/explicit-mapping.md @@ -27,9 +27,9 @@ PUT /my-index-000001 } ``` -1. Creates `age`, an [`integer`](https://www.elastic.co/guide/en/elasticsearch/reference/current/number.html) field -2. Creates `email`, a [`keyword`](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html) field -3. Creates `name`, a [`text`](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html) field +1. Creates `age`, an [`integer`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/number.md) field +2. Creates `email`, a [`keyword`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md) field +3. Creates `name`, a [`text`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md) field @@ -37,7 +37,7 @@ PUT /my-index-000001 You can use the [update mapping](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-put-mapping) API to add one or more new fields to an existing index. -The following example adds `employee-id`, a `keyword` field with an [`index`](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-index.html) mapping parameter value of `false`. This means values for the `employee-id` field are stored but not indexed or available for search. +The following example adds `employee-id`, a `keyword` field with an [`index`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-index.md) mapping parameter value of `false`. This means values for the `employee-id` field are stored but not indexed or available for search. ```console PUT /my-index-000001/_mapping @@ -54,13 +54,13 @@ PUT /my-index-000001/_mapping ## Update the mapping of a field [update-mapping] -Except for supported [mapping parameters](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-params.html), you can’t change the mapping or field type of an existing field. Changing an existing field could invalidate data that’s already indexed. +Except for supported [mapping parameters](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-parameters.md), you can’t change the mapping or field type of an existing field. Changing an existing field could invalidate data that’s already indexed. If you need to change the mapping of a field in a data stream’s backing indices, see [Change mappings and settings for a data stream](../data-streams/modify-data-stream.md#data-streams-change-mappings-and-settings). If you need to change the mapping of a field in other indices, create a new index with the correct mapping and [reindex](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-reindex) your data into that index. -Renaming a field would invalidate data already indexed under the old field name. Instead, add an [`alias`](https://www.elastic.co/guide/en/elasticsearch/reference/current/field-alias.html) field to create an alternate field name. +Renaming a field would invalidate data already indexed under the old field name. Instead, add an [`alias`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/field-alias.md) field to create an alternate field name. ## View the mapping of an index [view-mapping] diff --git a/manage-data/data-store/mapping/explore-data-with-runtime-fields.md b/manage-data/data-store/mapping/explore-data-with-runtime-fields.md index 7ab9c82a8..e1f818461 100644 --- a/manage-data/data-store/mapping/explore-data-with-runtime-fields.md +++ b/manage-data/data-store/mapping/explore-data-with-runtime-fields.md @@ -235,7 +235,7 @@ If the script didn’t include this condition, the query would fail on any shard ### Search for documents in a specific range [runtime-examples-grok-range] -You can also run a [range query](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html) that operates on the `timestamp` field. The following query returns any documents where the `timestamp` is greater than or equal to `2020-04-30T14:31:27-05:00`: +You can also run a [range query](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-range-query.md) that operates on the `timestamp` field. The following query returns any documents where the `timestamp` is greater than or equal to `2020-04-30T14:31:27-05:00`: ```console GET my-index-000001/_search @@ -289,7 +289,7 @@ The response includes the document where the log format doesn’t match, but the ## Define a runtime field with a dissect pattern [runtime-examples-dissect] -If you don’t need the power of regular expressions, you can use [dissect patterns](https://www.elastic.co/guide/en/elasticsearch/reference/current/dissect-processor.html) instead of grok patterns. Dissect patterns match on fixed delimiters but are typically faster than grok. +If you don’t need the power of regular expressions, you can use [dissect patterns](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/dissect-processor.md) instead of grok patterns. Dissect patterns match on fixed delimiters but are typically faster than grok. You can use dissect to achieve the same results as parsing the Apache logs with a [grok pattern](#runtime-examples-grok). Instead of matching on a log pattern, you include the parts of the string that you want to discard. Paying special attention to the parts of the string you want to discard will help build successful dissect patterns. diff --git a/manage-data/data-store/mapping/index-runtime-field.md b/manage-data/data-store/mapping/index-runtime-field.md index f8b41b0fb..f411d6215 100644 --- a/manage-data/data-store/mapping/index-runtime-field.md +++ b/manage-data/data-store/mapping/index-runtime-field.md @@ -82,7 +82,7 @@ PUT my-index-000001/_mapping } ``` -You retrieve the calculated values using the [`fields`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-fields.html) parameter on the `_search` API: +You retrieve the calculated values using the [`fields`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/retrieve-selected-fields.md) parameter on the `_search` API: ```console GET my-index-000001/_search @@ -154,7 +154,7 @@ POST my-index-000001/_bulk?refresh=true { "timestamp": 1516297294000, "temperature": 202, "voltage": 4.0, "node": "c"} ``` -You can now retrieve calculated values in a search query, and find documents based on precise values. The following range query returns all documents where the calculated `voltage_corrected` is greater than or equal to `16`, but less than or equal to `20`. Again, use the [`fields`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-fields.html) parameter on the `_search` API to retrieve the fields you want: +You can now retrieve calculated values in a search query, and find documents based on precise values. The following range query returns all documents where the calculated `voltage_corrected` is greater than or equal to `16`, but less than or equal to `20`. Again, use the [`fields`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/retrieve-selected-fields.md) parameter on the `_search` API to retrieve the fields you want: ```console POST my-index-000001/_search diff --git a/manage-data/data-store/mapping/map-runtime-field.md b/manage-data/data-store/mapping/map-runtime-field.md index f78b63009..fa5a56902 100644 --- a/manage-data/data-store/mapping/map-runtime-field.md +++ b/manage-data/data-store/mapping/map-runtime-field.md @@ -8,7 +8,7 @@ mapped_pages: You map runtime fields by adding a `runtime` section under the mapping definition and defining [a Painless script](../../../explore-analyze/scripting/modules-scripting-using.md). This script has access to the entire context of a document, including the original `_source` via `params._source` and any mapped fields plus their values. At query time, the script runs and generates values for each scripted field that is required for the query. ::::{admonition} Emitting runtime field values -When defining a Painless script to use with runtime fields, you must include the [`emit` method](https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-runtime-fields-context.html) to emit calculated values. +When defining a Painless script to use with runtime fields, you must include the [`emit` method](asciidocalypse://docs/elasticsearch/docs/reference/scripting-languages/painless/painless-runtime-fields-context.md) to emit calculated values. :::: @@ -46,7 +46,7 @@ The `runtime` section can be any of these data types: * `long` * [`lookup`](retrieve-runtime-field.md#lookup-runtime-fields) -Runtime fields with a `type` of `date` can accept the [`format`](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html) parameter exactly as the `date` field type. +Runtime fields with a `type` of `date` can accept the [`format`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-date-format.md) parameter exactly as the `date` field type. Runtime fields with a `type` of `lookup` allow retrieving fields from related indices. See [`retrieve fields from related indices`](retrieve-runtime-field.md#lookup-runtime-fields). @@ -85,7 +85,7 @@ PUT my-index-000001/ When no script is provided, {{es}} implicitly looks in `_source` at query time for a field with the same name as the runtime field, and returns a value if one exists. If a field with the same name doesn’t exist, the response doesn’t include any values for that runtime field. -In most cases, retrieve field values through [`doc_values`](https://www.elastic.co/guide/en/elasticsearch/reference/current/doc-values.html) whenever possible. Accessing `doc_values` with a runtime field is faster than retrieving values from `_source` because of how data is loaded from Lucene. +In most cases, retrieve field values through [`doc_values`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/doc-values.md) whenever possible. Accessing `doc_values` with a runtime field is faster than retrieving values from `_source` because of how data is loaded from Lucene. However, there are cases where retrieving fields from `_source` is necessary. For example, `text` fields do not have `doc_values` available by default, so you have to retrieve values from `_source`. In other instances, you might choose to disable `doc_values` on a specific field. diff --git a/manage-data/data-store/mapping/override-field-values-at-query-time.md b/manage-data/data-store/mapping/override-field-values-at-query-time.md index 982c0eb15..46e0d3161 100644 --- a/manage-data/data-store/mapping/override-field-values-at-query-time.md +++ b/manage-data/data-store/mapping/override-field-values-at-query-time.md @@ -83,7 +83,7 @@ The response includes indexed values for documents matching model number `HG537P The following request defines a runtime field where the script evaluates the `model_number` field where the value is `HG537PU`. For each match, the script multiplies the value for the `voltage` field by `1.7`. -Using the [`fields`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-fields.html) parameter on the `_search` API, you can retrieve the value that the script calculates for the `measures.voltage` field for documents matching the search request: +Using the [`fields`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/retrieve-selected-fields.md) parameter on the `_search` API, you can retrieve the value that the script calculates for the `measures.voltage` field for documents matching the search request: ```console POST my-index-000001/_search diff --git a/manage-data/data-store/mapping/retrieve-runtime-field.md b/manage-data/data-store/mapping/retrieve-runtime-field.md index 2bd383fbd..ea82df907 100644 --- a/manage-data/data-store/mapping/retrieve-runtime-field.md +++ b/manage-data/data-store/mapping/retrieve-runtime-field.md @@ -5,7 +5,7 @@ mapped_pages: # Retrieve a runtime field [runtime-retrieving-fields] -Use the [`fields`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-fields.html) parameter on the `_search` API to retrieve the values of runtime fields. Runtime fields won’t display in `_source`, but the `fields` API works for all fields, even those that were not sent as part of the original `_source`. +Use the [`fields`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/retrieve-selected-fields.md) parameter on the `_search` API to retrieve the values of runtime fields. Runtime fields won’t display in `_source`, but the `fields` API works for all fields, even those that were not sent as part of the original `_source`. ## Define a runtime field to calculate the day of week [runtime-define-field-dayofweek] @@ -152,7 +152,7 @@ This time, the response includes only two hits. The value for `day_of_week` (`Su ## Retrieve fields from related indices [lookup-runtime-fields] -The [`fields`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-fields.html) parameter on the `_search` API can also be used to retrieve fields from the related indices via runtime fields with a type of `lookup`. +The [`fields`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/retrieve-selected-fields.md) parameter on the `_search` API can also be used to retrieve fields from the related indices via runtime fields with a type of `lookup`. ::::{note} Fields that are retrieved by runtime fields of type `lookup` can be used to enrich the hits in a search response. It’s not possible to query or aggregate on these fields. @@ -199,11 +199,11 @@ POST logs/_search } ``` -1. Define a runtime field in the main search request with a type of `lookup` that retrieves fields from the target index using the [`term`](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html) queries. +1. Define a runtime field in the main search request with a type of `lookup` that retrieves fields from the target index using the [`term`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-term-query.md) queries. 2. The target index where the lookup query executes against 3. A field on the main index whose values are used as the input values of the lookup term query 4. A field on the lookup index which the lookup query searches against -5. A list of fields to retrieve from the lookup index. See the [`fields`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-fields.html) parameter of a search request. +5. A list of fields to retrieve from the lookup index. See the [`fields`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/retrieve-selected-fields.md) parameter of a search request. The above search returns the country and city from the `ip_location` index for each ip address of the returned search hits. diff --git a/manage-data/data-store/mapping/runtime-fields.md b/manage-data/data-store/mapping/runtime-fields.md index 613fb7c9a..6378b6939 100644 --- a/manage-data/data-store/mapping/runtime-fields.md +++ b/manage-data/data-store/mapping/runtime-fields.md @@ -14,7 +14,7 @@ A *runtime field* is a field that is evaluated at query time. Runtime fields ena You access runtime fields from the search API like any other field, and {{es}} sees runtime fields no differently. You can define runtime fields in the [index mapping](map-runtime-field.md) or in the [search request](define-runtime-fields-in-search-request.md). Your choice, which is part of the inherent flexibility of runtime fields. -Use the [`fields`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-fields.html) parameter on the `_search` API to [retrieve the values of runtime fields](retrieve-runtime-field.md). Runtime fields won’t display in `_source`, but the `fields` API works for all fields, even those that were not sent as part of the original `_source`. +Use the [`fields`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/retrieve-selected-fields.md) parameter on the `_search` API to [retrieve the values of runtime fields](retrieve-runtime-field.md). Runtime fields won’t display in `_source`, but the `fields` API works for all fields, even those that were not sent as part of the original `_source`. Runtime fields are useful when working with log data (see [examples](explore-data-with-runtime-fields.md)), especially when you’re unsure about the data structure. Your search speed decreases, but your index size is much smaller and you can more quickly process logs without having to index them. @@ -32,11 +32,11 @@ At its core, the most important benefit of runtime fields is the ability to add Runtime fields can replace many of the ways you can use scripting with the `_search` API. How you use a runtime field is impacted by the number of documents that the included script runs against. For example, if you’re using the `fields` parameter on the `_search` API to [retrieve the values of a runtime field](retrieve-runtime-field.md), the script runs only against the top hits just like script fields do. -You can use [script fields](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-fields.html#script-fields) to access values in `_source` and return calculated values based on a script valuation. Runtime fields have the same capabilities, but provide greater flexibility because you can query and aggregate on runtime fields in a search request. Script fields can only fetch values. +You can use [script fields](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/retrieve-selected-fields.md#script-fields) to access values in `_source` and return calculated values based on a script valuation. Runtime fields have the same capabilities, but provide greater flexibility because you can query and aggregate on runtime fields in a search request. Script fields can only fetch values. -Similarly, you could write a [script query](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-script-query.html) that filters documents in a search request based on a script. Runtime fields provide a very similar feature that is more flexible. You write a script to create field values and they are available everywhere, such as [`fields`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-fields.html), [all queries](../../../explore-analyze/query-filter/languages/querydsl.md), and [aggregations](../../../explore-analyze/query-filter/aggregations.md). +Similarly, you could write a [script query](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-script-query.md) that filters documents in a search request based on a script. Runtime fields provide a very similar feature that is more flexible. You write a script to create field values and they are available everywhere, such as [`fields`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/retrieve-selected-fields.md), [all queries](../../../explore-analyze/query-filter/languages/querydsl.md), and [aggregations](../../../explore-analyze/query-filter/aggregations.md). -You can also use scripts to [sort search results](https://www.elastic.co/guide/en/elasticsearch/reference/current/sort-search-results.html#script-based-sorting), but that same script works exactly the same in a runtime field. +You can also use scripts to [sort search results](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/sort-search-results.md#script-based-sorting), but that same script works exactly the same in a runtime field. If you move a script from any of these sections in a search request to a runtime field that is computing values from the same number of documents, the performance should be about the same. The performance for these features is largely dependent upon the calculations that the included script is running and how many documents the script runs against. diff --git a/manage-data/data-store/templates.md b/manage-data/data-store/templates.md index 01187b6b6..f5b2c1cd2 100644 --- a/manage-data/data-store/templates.md +++ b/manage-data/data-store/templates.md @@ -34,11 +34,11 @@ The following conditions apply to index templates: * `profiling-*` * `security_solution-*-*` -[{{agent}}](https://www.elastic.co/guide/en/fleet/current/fleet-overview.html) uses these templates to create data streams. Index templates created by {{fleet}} integrations use similar overlapping index patterns and have a priority up to `200`. +[{{agent}}](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/index.md) uses these templates to create data streams. Index templates created by {{fleet}} integrations use similar overlapping index patterns and have a priority up to `200`. If you use {{fleet}} or {{agent}}, assign your index templates a priority lower than `100` to avoid overriding these templates. Otherwise, to avoid accidentally applying the templates, do one or more of the following: -* To disable all built-in index and component templates, set [`stack.templates.enabled`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-management-settings.html#stack-templates-enabled) to `false` using the [cluster update settings API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cluster-put-settings). Note, however, that this is not recommended, see the [setting documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-management-settings.html#stack-templates-enabled) for more information. +* To disable all built-in index and component templates, set [`stack.templates.enabled`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-management-settings.md#stack-templates-enabled) to `false` using the [cluster update settings API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cluster-put-settings). Note, however, that this is not recommended, see the [setting documentation](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-management-settings.md#stack-templates-enabled) for more information. * Use a non-overlapping index pattern. * Assign templates with an overlapping pattern a `priority` higher than `500`. For example, if you don’t use {{fleet}} or {{agent}} and want to create a template for the `logs-*` index pattern, assign your template a priority of `500`. This ensures your template is applied instead of the built-in template for `logs-*-*`. * To avoid naming collisions with built-in and Fleet-managed index templates, avoid using `@` as part of the name of your own index templates. diff --git a/manage-data/data-store/templates/index-template-management.md b/manage-data/data-store/templates/index-template-management.md index 413a3df5f..91eaa0434 100644 --- a/manage-data/data-store/templates/index-template-management.md +++ b/manage-data/data-store/templates/index-template-management.md @@ -52,7 +52,7 @@ In this tutorial, you’ll create an index template and use it to configure two ::: 2. Define index settings. These are optional. For this tutorial, leave this section blank. -3. Define a mapping that contains an [object](https://www.elastic.co/guide/en/elasticsearch/reference/current/object.html) field named `geo` with a child [`geo_point`](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html) field named `coordinates`: +3. Define a mapping that contains an [object](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/object.md) field named `geo` with a child [`geo_point`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-point.md) field named `coordinates`: :::{image} ../../../images/elasticsearch-reference-management-index-templates-mappings.png :alt: Mapped fields page diff --git a/manage-data/data-store/text-analysis.md b/manage-data/data-store/text-analysis.md index 3f3355dc3..e6c43b759 100644 --- a/manage-data/data-store/text-analysis.md +++ b/manage-data/data-store/text-analysis.md @@ -11,7 +11,7 @@ _Text analysis_ is the process of converting unstructured text, like the body of Text analysis enables {{es}} to perform full-text search, where the search returns all *relevant* results rather than just exact matches. For example, if you search for `Quick fox jumps`, you probably want the document that contains `A quick brown fox jumps over the lazy dog`, and you might also want documents that contain related words like `fast fox` or `foxes leap`. -{{es}} performs text analysis when indexing or searching [`text`](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html) fields. If your index does _not_ contain `text` fields, no further setup is needed; you can skip the pages in this section. If you _do_ use `text` fields or your text searches aren’t returning results as expected, configuring text analysis can often help. You should also look into analysis configuration if you’re using {{es}} to: +{{es}} performs text analysis when indexing or searching [`text`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md) fields. If your index does _not_ contain `text` fields, no further setup is needed; you can skip the pages in this section. If you _do_ use `text` fields or your text searches aren’t returning results as expected, configuring text analysis can often help. You should also look into analysis configuration if you’re using {{es}} to: * Build a search engine * Mine unstructured data @@ -44,9 +44,9 @@ To ensure search terms match these words as intended, you can apply the same tok Text analysis is performed by an [*analyzer*](/manage-data/data-store/text-analysis/anatomy-of-an-analyzer.md), a set of rules that govern the entire process. -{{es}} includes a default analyzer, called the [standard analyzer](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-standard-analyzer.html), which works well for most use cases right out of the box. +{{es}} includes a default analyzer, called the [standard analyzer](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-standard-analyzer.md), which works well for most use cases right out of the box. -If you want to tailor your search experience, you can choose a different [built-in analyzer](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.html) or even [configure a custom one](/manage-data/data-store/text-analysis/create-custom-analyzer.md). A custom analyzer gives you control over each step of the analysis process, including: +If you want to tailor your search experience, you can choose a different [built-in analyzer](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analyzer-reference.md) or even [configure a custom one](/manage-data/data-store/text-analysis/create-custom-analyzer.md). A custom analyzer gives you control over each step of the analysis process, including: * Changes to the text *before* tokenization * How text is converted to tokens diff --git a/manage-data/data-store/text-analysis/anatomy-of-an-analyzer.md b/manage-data/data-store/text-analysis/anatomy-of-an-analyzer.md index 3a7ce86a9..914094750 100644 --- a/manage-data/data-store/text-analysis/anatomy-of-an-analyzer.md +++ b/manage-data/data-store/text-analysis/anatomy-of-an-analyzer.md @@ -7,30 +7,30 @@ mapped_pages: An *analyzer*  — whether built-in or custom — is just a package which contains three lower-level building blocks: *character filters*, *tokenizers*, and *token filters*. -The built-in [analyzers](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.html) pre-package these building blocks into analyzers suitable for different languages and types of text. Elasticsearch also exposes the individual building blocks so that they can be combined to define new [`custom`](create-custom-analyzer.md) analyzers. +The built-in [analyzers](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analyzer-reference.md) pre-package these building blocks into analyzers suitable for different languages and types of text. Elasticsearch also exposes the individual building blocks so that they can be combined to define new [`custom`](create-custom-analyzer.md) analyzers. ## Character filters [analyzer-anatomy-character-filters] A *character filter* receives the original text as a stream of characters and can transform the stream by adding, removing, or changing characters. For instance, a character filter could be used to convert Hindu-Arabic numerals (٠‎١٢٣٤٥٦٧٨‎٩‎) into their Arabic-Latin equivalents (0123456789), or to strip HTML elements like `` from the stream. -An analyzer may have **zero or more** [character filters](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-charfilters.html), which are applied in order. +An analyzer may have **zero or more** [character filters](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/character-filter-reference.md), which are applied in order. ## Tokenizer [analyzer-anatomy-tokenizer] -A *tokenizer* receives a stream of characters, breaks it up into individual *tokens* (usually individual words), and outputs a stream of *tokens*. For instance, a [`whitespace`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-whitespace-tokenizer.html) tokenizer breaks text into tokens whenever it sees any whitespace. It would convert the text `"Quick brown fox!"` into the terms `[Quick, brown, fox!]`. +A *tokenizer* receives a stream of characters, breaks it up into individual *tokens* (usually individual words), and outputs a stream of *tokens*. For instance, a [`whitespace`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-whitespace-tokenizer.md) tokenizer breaks text into tokens whenever it sees any whitespace. It would convert the text `"Quick brown fox!"` into the terms `[Quick, brown, fox!]`. The tokenizer is also responsible for recording the order or *position* of each term and the start and end *character offsets* of the original word which the term represents. -An analyzer must have **exactly one** [tokenizer](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenizers.html). +An analyzer must have **exactly one** [tokenizer](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/tokenizer-reference.md). ## Token filters [analyzer-anatomy-token-filters] -A *token filter* receives the token stream and may add, remove, or change tokens. For example, a [`lowercase`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lowercase-tokenfilter.html) token filter converts all tokens to lowercase, a [`stop`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-stop-tokenfilter.html) token filter removes common words (*stop words*) like `the` from the token stream, and a [`synonym`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-synonym-tokenfilter.html) token filter introduces synonyms into the token stream. +A *token filter* receives the token stream and may add, remove, or change tokens. For example, a [`lowercase`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-lowercase-tokenfilter.md) token filter converts all tokens to lowercase, a [`stop`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-stop-tokenfilter.md) token filter removes common words (*stop words*) like `the` from the token stream, and a [`synonym`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-synonym-tokenfilter.md) token filter introduces synonyms into the token stream. Token filters are not allowed to change the position or character offsets of each token. -An analyzer may have **zero or more** [token filters](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenfilters.html), which are applied in order. +An analyzer may have **zero or more** [token filters](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/token-filter-reference.md), which are applied in order. diff --git a/manage-data/data-store/text-analysis/configure-text-analysis.md b/manage-data/data-store/text-analysis/configure-text-analysis.md index e649b5842..2fbf4571e 100644 --- a/manage-data/data-store/text-analysis/configure-text-analysis.md +++ b/manage-data/data-store/text-analysis/configure-text-analysis.md @@ -5,9 +5,9 @@ mapped_pages: # Configure text analysis [configure-text-analysis] -By default, {{es}} uses the [`standard` analyzer](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-standard-analyzer.html) for all text analysis. The `standard` analyzer gives you out-of-the-box support for most natural languages and use cases. If you chose to use the `standard` analyzer as-is, no further configuration is needed. +By default, {{es}} uses the [`standard` analyzer](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-standard-analyzer.md) for all text analysis. The `standard` analyzer gives you out-of-the-box support for most natural languages and use cases. If you chose to use the `standard` analyzer as-is, no further configuration is needed. -If the standard analyzer does not fit your needs, review and test {{es}}'s other built-in [built-in analyzers](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.html). Built-in analyzers don’t require configuration, but some support options that can be used to adjust their behavior. For example, you can configure the `standard` analyzer with a list of custom stop words to remove. +If the standard analyzer does not fit your needs, review and test {{es}}'s other built-in [built-in analyzers](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analyzer-reference.md). Built-in analyzers don’t require configuration, but some support options that can be used to adjust their behavior. For example, you can configure the `standard` analyzer with a list of custom stop words to remove. If no built-in analyzer fits your needs, you can test and create a custom analyzer. Custom analyzers involve selecting and combining different [analyzer components](anatomy-of-an-analyzer.md), giving you greater control over the process. diff --git a/manage-data/data-store/text-analysis/configuring-built-in-analyzers.md b/manage-data/data-store/text-analysis/configuring-built-in-analyzers.md index 78e34e940..94bd4563e 100644 --- a/manage-data/data-store/text-analysis/configuring-built-in-analyzers.md +++ b/manage-data/data-store/text-analysis/configuring-built-in-analyzers.md @@ -5,7 +5,7 @@ mapped_pages: # Configuring built-in analyzers [configuring-analyzers] -The built-in analyzers can be used directly without any configuration. Some of them, however, support configuration options to alter their behaviour. For instance, the [`standard` analyzer](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-standard-analyzer.html) can be configured to support a list of stop words: +The built-in analyzers can be used directly without any configuration. Some of them, however, support configuration options to alter their behaviour. For instance, the [`standard` analyzer](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-standard-analyzer.md) can be configured to support a list of stop words: ```console PUT my-index-000001 diff --git a/manage-data/data-store/text-analysis/create-custom-analyzer.md b/manage-data/data-store/text-analysis/create-custom-analyzer.md index d2e72e047..c9ae66ec1 100644 --- a/manage-data/data-store/text-analysis/create-custom-analyzer.md +++ b/manage-data/data-store/text-analysis/create-custom-analyzer.md @@ -7,9 +7,9 @@ mapped_pages: When the built-in analyzers do not fulfill your needs, you can create a `custom` analyzer which uses the appropriate combination of: -* zero or more [character filters](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-charfilters.html) -* a [tokenizer](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenizers.html) -* zero or more [token filters](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenfilters.html). +* zero or more [character filters](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/character-filter-reference.md) +* a [tokenizer](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/tokenizer-reference.md) +* zero or more [token filters](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/token-filter-reference.md). ## Configuration [_configuration] @@ -17,19 +17,19 @@ When the built-in analyzers do not fulfill your needs, you can create a `custom` The `custom` analyzer accepts the following parameters: `type` -: Analyzer type. Accepts [built-in analyzer types](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.html). For custom analyzers, use `custom` or omit this parameter. +: Analyzer type. Accepts [built-in analyzer types](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analyzer-reference.md). For custom analyzers, use `custom` or omit this parameter. `tokenizer` -: A built-in or customised [tokenizer](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenizers.html). (Required) +: A built-in or customised [tokenizer](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/tokenizer-reference.md). (Required) `char_filter` -: An optional array of built-in or customised [character filters](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-charfilters.html). +: An optional array of built-in or customised [character filters](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/character-filter-reference.md). `filter` -: An optional array of built-in or customised [token filters](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenfilters.html). +: An optional array of built-in or customised [token filters](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/token-filter-reference.md). `position_increment_gap` -: When indexing an array of text values, Elasticsearch inserts a fake "gap" between the last term of one value and the first term of the next value to ensure that a phrase query doesn’t match two terms from different array elements. Defaults to `100`. See [`position_increment_gap`](https://www.elastic.co/guide/en/elasticsearch/reference/current/position-increment-gap.html) for more. +: When indexing an array of text values, Elasticsearch inserts a fake "gap" between the last term of one value and the first term of the next value to ensure that a phrase query doesn’t match two terms from different array elements. Defaults to `100`. See [`position_increment_gap`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/position-increment-gap.md) for more. ## Example configuration [_example_configuration] @@ -37,16 +37,16 @@ The `custom` analyzer accepts the following parameters: Here is an example that combines the following: Character Filter -: * [HTML Strip Character Filter](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-htmlstrip-charfilter.html) +: * [HTML Strip Character Filter](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-htmlstrip-charfilter.md) Tokenizer -: * [Standard Tokenizer](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-standard-tokenizer.html) +: * [Standard Tokenizer](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-standard-tokenizer.md) Token Filters -: * [Lowercase Token Filter](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lowercase-tokenfilter.html) -* [ASCII-Folding Token Filter](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-asciifolding-tokenfilter.html) +: * [Lowercase Token Filter](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-lowercase-tokenfilter.md) +* [ASCII-Folding Token Filter](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-asciifolding-tokenfilter.md) ```console @@ -92,16 +92,16 @@ The previous example used tokenizer, token filters, and character filters with t Here is a more complicated example that combines the following: Character Filter -: * [Mapping Character Filter](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-mapping-charfilter.html), configured to replace `:)` with `_happy_` and `:(` with `_sad_` +: * [Mapping Character Filter](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-mapping-charfilter.md), configured to replace `:)` with `_happy_` and `:(` with `_sad_` Tokenizer -: * [Pattern Tokenizer](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-pattern-tokenizer.html), configured to split on punctuation characters +: * [Pattern Tokenizer](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-pattern-tokenizer.md), configured to split on punctuation characters Token Filters -: * [Lowercase Token Filter](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lowercase-tokenfilter.html) -* [Stop Token Filter](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-stop-tokenfilter.html), configured to use the pre-defined list of English stop words +: * [Lowercase Token Filter](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-lowercase-tokenfilter.md) +* [Stop Token Filter](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-stop-tokenfilter.md), configured to use the pre-defined list of English stop words Here is an example: diff --git a/manage-data/data-store/text-analysis/index-search-analysis.md b/manage-data/data-store/text-analysis/index-search-analysis.md index ca750c0d9..ca5e60010 100644 --- a/manage-data/data-store/text-analysis/index-search-analysis.md +++ b/manage-data/data-store/text-analysis/index-search-analysis.md @@ -8,10 +8,10 @@ mapped_pages: Text analysis occurs at two times: Index time -: When a document is indexed, any [`text`](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html) field values are analyzed. +: When a document is indexed, any [`text`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/text.md) field values are analyzed. Search time -: When running a [full-text search](https://www.elastic.co/guide/en/elasticsearch/reference/current/full-text-queries.html) on a `text` field, the query string (the text the user is searching for) is analyzed. Search time is also called *query time*. +: When running a [full-text search](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/full-text-queries.md) on a `text` field, the query string (the text the user is searching for) is analyzed. Search time is also called *query time*. For more details on text analysis at search time, refer to [Text analysis during search](/solutions/search/full-text/text-analysis-during-search.md). diff --git a/manage-data/data-store/text-analysis/specify-an-analyzer.md b/manage-data/data-store/text-analysis/specify-an-analyzer.md index 197e3b854..cec747dd0 100644 --- a/manage-data/data-store/text-analysis/specify-an-analyzer.md +++ b/manage-data/data-store/text-analysis/specify-an-analyzer.md @@ -28,15 +28,15 @@ If you don’t typically create mappings for your indices, you can use [index te {{es}} determines which index analyzer to use by checking the following parameters in order: -1. The [`analyzer`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analyzer.html) mapping parameter for the field. See [Specify the analyzer for a field](#specify-index-field-analyzer). +1. The [`analyzer`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/analyzer.md) mapping parameter for the field. See [Specify the analyzer for a field](#specify-index-field-analyzer). 2. The `analysis.analyzer.default` index setting. See [Specify the default analyzer for an index](#specify-index-time-default-analyzer). -If none of these parameters are specified, the [`standard` analyzer](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-standard-analyzer.html) is used. +If none of these parameters are specified, the [`standard` analyzer](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-standard-analyzer.md) is used. ## Specify the analyzer for a field [specify-index-field-analyzer] -When mapping an index, you can use the [`analyzer`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analyzer.html) mapping parameter to specify an analyzer for each `text` field. +When mapping an index, you can use the [`analyzer`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/analyzer.md) mapping parameter to specify an analyzer for each `text` field. The following [create index API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-create) request sets the `whitespace` analyzer as the analyzer for the `title` field. @@ -82,26 +82,26 @@ PUT my-index-000001 ::::{warning} In most cases, specifying a different search analyzer is unnecessary. Doing so could negatively impact relevancy and result in unexpected search results. -If you choose to specify a separate search analyzer, we recommend you thoroughly [test your analysis configuration](https://www.elastic.co/guide/en/elasticsearch/reference/current/test-analyzer.html) before deploying in production. +If you choose to specify a separate search analyzer, we recommend you thoroughly [test your analysis configuration](/manage-data/data-store/text-analysis/test-an-analyzer.md) before deploying in production. :::: At search time, {{es}} determines which analyzer to use by checking the following parameters in order: -1. The [`analyzer`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analyzer.html) parameter in the search query. See [Specify the search analyzer for a query](#specify-search-query-analyzer). -2. The [`search_analyzer`](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-analyzer.html) mapping parameter for the field. See [Specify the search analyzer for a field](#specify-search-field-analyzer). +1. The [`analyzer`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/analyzer.md) parameter in the search query. See [Specify the search analyzer for a query](#specify-search-query-analyzer). +2. The [`search_analyzer`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/search-analyzer.md) mapping parameter for the field. See [Specify the search analyzer for a field](#specify-search-field-analyzer). 3. The `analysis.analyzer.default_search` index setting. See [Specify the default search analyzer for an index](#specify-search-default-analyzer). -4. The [`analyzer`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analyzer.html) mapping parameter for the field. See [Specify the analyzer for a field](#specify-index-field-analyzer). +4. The [`analyzer`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/analyzer.md) mapping parameter for the field. See [Specify the analyzer for a field](#specify-index-field-analyzer). -If none of these parameters are specified, the [`standard` analyzer](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-standard-analyzer.html) is used. +If none of these parameters are specified, the [`standard` analyzer](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-standard-analyzer.md) is used. ## Specify the search analyzer for a query [specify-search-query-analyzer] -When writing a [full-text query](https://www.elastic.co/guide/en/elasticsearch/reference/current/full-text-queries.html), you can use the `analyzer` parameter to specify a search analyzer. If provided, this overrides any other search analyzers. +When writing a [full-text query](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/full-text-queries.md), you can use the `analyzer` parameter to specify a search analyzer. If provided, this overrides any other search analyzers. -The following [search API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-search) request sets the `stop` analyzer as the search analyzer for a [`match`](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html) query. +The following [search API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-search) request sets the `stop` analyzer as the search analyzer for a [`match`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-match-query.md) query. ```console GET my-index-000001/_search @@ -120,7 +120,7 @@ GET my-index-000001/_search ## Specify the search analyzer for a field [specify-search-field-analyzer] -When mapping an index, you can use the [`search_analyzer`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analyzer.html) mapping parameter to specify a search analyzer for each `text` field. +When mapping an index, you can use the [`search_analyzer`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/analyzer.md) mapping parameter to specify a search analyzer for each `text` field. If a search analyzer is provided, the index analyzer must also be specified using the `analyzer` parameter. diff --git a/manage-data/data-store/text-analysis/stemming.md b/manage-data/data-store/text-analysis/stemming.md index 3d233fa77..52ead3969 100644 --- a/manage-data/data-store/text-analysis/stemming.md +++ b/manage-data/data-store/text-analysis/stemming.md @@ -41,10 +41,10 @@ However, most algorithmic stemmers only alter the existing text of a word. This The following token filters use algorithmic stemming: -* [`stemmer`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-stemmer-tokenfilter.html), which provides algorithmic stemming for several languages, some with additional variants. -* [`kstem`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-kstem-tokenfilter.html), a stemmer for English that combines algorithmic stemming with a built-in dictionary. -* [`porter_stem`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-porterstem-tokenfilter.html), our recommended algorithmic stemmer for English. -* [`snowball`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-snowball-tokenfilter.html), which uses [Snowball](https://snowballstem.org/)-based stemming rules for several languages. +* [`stemmer`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-stemmer-tokenfilter.md), which provides algorithmic stemming for several languages, some with additional variants. +* [`kstem`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-kstem-tokenfilter.md), a stemmer for English that combines algorithmic stemming with a built-in dictionary. +* [`porter_stem`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-porterstem-tokenfilter.md), our recommended algorithmic stemmer for English. +* [`snowball`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-snowball-tokenfilter.md), which uses [Snowball](https://snowballstem.org/)-based stemming rules for several languages. ## Dictionary stemmers [dictionary-stemmers] @@ -65,10 +65,10 @@ In practice, algorithmic stemmers typically outperform dictionary stemmers. This * **Dictionary quality**
A dictionary stemmer is only as good as its dictionary. To work well, these dictionaries must include a significant number of words, be updated regularly, and change with language trends. Often, by the time a dictionary has been made available, it’s incomplete and some of its entries are already outdated. * **Size and performance**
Dictionary stemmers must load all words, prefixes, and suffixes from its dictionary into memory. This can use a significant amount of RAM. Low-quality dictionaries may also be less efficient with prefix and suffix removal, which can slow the stemming process significantly. -You can use the [`hunspell`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-hunspell-tokenfilter.html) token filter to perform dictionary stemming. +You can use the [`hunspell`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-hunspell-tokenfilter.md) token filter to perform dictionary stemming. ::::{tip} -If available, we recommend trying an algorithmic stemmer for your language before using the [`hunspell`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-hunspell-tokenfilter.html) token filter. +If available, we recommend trying an algorithmic stemmer for your language before using the [`hunspell`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-hunspell-tokenfilter.md) token filter. :::: @@ -80,10 +80,10 @@ Sometimes stemming can produce shared root words that are spelled similarly but To prevent this and better control stemming, you can use the following token filters: -* [`stemmer_override`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-stemmer-override-tokenfilter.html), which lets you define rules for stemming specific tokens. -* [`keyword_marker`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-keyword-marker-tokenfilter.html), which marks specified tokens as keywords. Keyword tokens are not stemmed by subsequent stemmer token filters. -* [`conditional`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-condition-tokenfilter.html), which can be used to mark tokens as keywords, similar to the `keyword_marker` filter. +* [`stemmer_override`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-stemmer-override-tokenfilter.md), which lets you define rules for stemming specific tokens. +* [`keyword_marker`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-keyword-marker-tokenfilter.md), which marks specified tokens as keywords. Keyword tokens are not stemmed by subsequent stemmer token filters. +* [`conditional`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-condition-tokenfilter.md), which can be used to mark tokens as keywords, similar to the `keyword_marker` filter. -For built-in [language analyzers](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lang-analyzer.html), you also can use the [`stem_exclusion`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lang-analyzer.html#_excluding_words_from_stemming) parameter to specify a list of words that won’t be stemmed. +For built-in [language analyzers](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-lang-analyzer.md), you also can use the [`stem_exclusion`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-lang-analyzer.md#_excluding_words_from_stemming) parameter to specify a list of words that won’t be stemmed. diff --git a/manage-data/data-store/text-analysis/token-graphs.md b/manage-data/data-store/text-analysis/token-graphs.md index 657632bcb..a57c24d93 100644 --- a/manage-data/data-store/text-analysis/token-graphs.md +++ b/manage-data/data-store/text-analysis/token-graphs.md @@ -33,10 +33,10 @@ Some token filters can add tokens that span multiple positions. These can includ However, only some token filters, known as *graph token filters*, accurately record the `positionLength` for multi-position tokens. These filters include: -* [`synonym_graph`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-synonym-graph-tokenfilter.html) -* [`word_delimiter_graph`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-word-delimiter-graph-tokenfilter.html) +* [`synonym_graph`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-synonym-graph-tokenfilter.md) +* [`word_delimiter_graph`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-word-delimiter-graph-tokenfilter.md) -Some tokenizers, such as the [`nori_tokenizer`](https://www.elastic.co/guide/en/elasticsearch/plugins/current/analysis-nori-tokenizer.html), also accurately decompose compound tokens into multi-position tokens. +Some tokenizers, such as the [`nori_tokenizer`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch-plugins/analysis-nori-tokenizer.md), also accurately decompose compound tokens into multi-position tokens. In the following graph, `domain name system` and its synonym, `dns`, both have a position of `0`. However, `dns` has a `positionLength` of `3`. Other tokens in the graph have a default `positionLength` of `1`. @@ -48,7 +48,7 @@ In the following graph, `domain name system` and its synonym, `dns`, both have a [Indexing](index-search-analysis.md) ignores the `positionLength` attribute and does not support token graphs containing multi-position tokens. -However, queries, such as the [`match`](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html) or [`match_phrase`](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query-phrase.html) query, can use these graphs to generate multiple sub-queries from a single query string. +However, queries, such as the [`match`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-match-query.md) or [`match_phrase`](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-match-query-phrase.md) query, can use these graphs to generate multiple sub-queries from a single query string. :::::{dropdown} Example A user runs a search for the following phrase using the `match_phrase` query: @@ -78,8 +78,8 @@ This means the query matches documents containing either `dns is fragile` *or* ` The following token filters can add tokens that span multiple positions but only record a default `positionLength` of `1`: -* [`synonym`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-synonym-tokenfilter.html) -* [`word_delimiter`](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-word-delimiter-tokenfilter.html) +* [`synonym`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-synonym-tokenfilter.md) +* [`word_delimiter`](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-word-delimiter-tokenfilter.md) This means these filters will produce invalid token graphs for streams containing such tokens. diff --git a/manage-data/ingest.md b/manage-data/ingest.md index facc81f2c..d62bc0653 100644 --- a/manage-data/ingest.md +++ b/manage-data/ingest.md @@ -27,7 +27,7 @@ Elastic offer tools designed to ingest specific types of general content. The co * To index **documents** directly into {{es}}, use the {{es}} [document APIs](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-document). * To send **application data** directly to {{es}}, use an [{{es}} language client](https://www.elastic.co/guide/en/elasticsearch/client/index.html). * To index **web page content**, use the Elastic [web crawler](https://www.elastic.co/web-crawler). -* To sync **data from third-party sources**, use [connectors](https://www.elastic.co/guide/en/elasticsearch/reference/current/es-connectors.html). A connector syncs content from an original data source to an {{es}} index. Using connectors you can create *searchable*, read-only replicas of your data sources. +* To sync **data from third-party sources**, use [connectors](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/search-connectors/index.md). A connector syncs content from an original data source to an {{es}} index. Using connectors you can create *searchable*, read-only replicas of your data sources. * To index **single files** for testing in a non-production environment, use the {{kib}} [file uploader](ingest/upload-data-files.md). If you would like to try things out before you add your own data, try using our [sample data](ingest/sample-data.md). diff --git a/manage-data/ingest/ingest-reference-architectures.md b/manage-data/ingest/ingest-reference-architectures.md index 30ea0d7a6..88c3f0684 100644 --- a/manage-data/ingest/ingest-reference-architectures.md +++ b/manage-data/ingest/ingest-reference-architectures.md @@ -24,6 +24,6 @@ You can host {{es}} on your own hardware or send your data to {{es}} on {{ecloud | [*{{agent}} to {{ls}} to Elasticsearch*](./ingest-reference-architectures/agent-ls.md)

![Image showing {{agent}} to {{ls}} to {{es}}](../../images/ingest-ea-ls-es.png "") | You need additional capabilities offered by {{ls}}:

* [**enrichment**](./ingest-reference-architectures/ls-enrich.md) between {{agent}} and {{es}}
* [**persistent queue (PQ) buffering**](./ingest-reference-architectures/lspq.md) to accommodate network issues and downstream unavailability
* [**proxying**](./ingest-reference-architectures/ls-networkbridge.md) in cases where {{agent}}s have network restrictions for connecting outside of the {{agent}} network
* data needs to be [**routed to multiple**](./ingest-reference-architectures/ls-multi.md) {{es}} clusters and other destinations depending on the content
| | [*{{agent}} to proxy to Elasticsearch*](./ingest-reference-architectures/agent-proxy.md)

![Image showing connections between {{agent}} and {{es}} using a proxy](../../images/ingest-ea-proxy-es.png "") | Agents have [network restrictions](./ingest-reference-architectures/agent-proxy.md) that prevent connecting outside of the {{agent}} network Note that [{{ls}} as proxy](./ingest-reference-architectures/ls-networkbridge.md) is one option.
| | [*{{agent}} to {{es}} with Kafka as middleware message queue*](./ingest-reference-architectures/agent-kafka-es.md)

![Image showing {{agent}} collecting data and using Kafka as a message queue enroute to {{es}}](../../images/ingest-ea-kafka.png "") | Kafka is your [middleware message queue](./ingest-reference-architectures/agent-kafka-es.md):

* [Kafka ES sink connector](./ingest-reference-architectures/agent-kafka-essink.md) to write from Kafka to {{es}}
* [{{ls}} to read from Kafka and route to {{es}}](./ingest-reference-architectures/agent-kafka-ls.md)
| -| [*{{ls}} to Elasticsearch*](./ingest-reference-architectures/ls-for-input.md)

![Image showing {{ls}} collecting data and sending to {{es}}](../../images/ingest-ls-es.png "") | You need to collect data from a source that {{agent}} can’t read (such as databases, AWS Kinesis). Check out the [{{ls}} input plugins](https://www.elastic.co/guide/en/logstash/current/input-plugins.html).
| +| [*{{ls}} to Elasticsearch*](./ingest-reference-architectures/ls-for-input.md)

![Image showing {{ls}} collecting data and sending to {{es}}](../../images/ingest-ls-es.png "") | You need to collect data from a source that {{agent}} can’t read (such as databases, AWS Kinesis). Check out the [{{ls}} input plugins](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/input-plugins.md).
| | [*Elastic air-gapped architectures*](./ingest-reference-architectures/airgapped-env.md)

![Image showing {{stack}} in an air-gapped environment](../../images/ingest-ea-airgapped.png "") | You want to deploy {{agent}} and {{stack}} in an air-gapped environment (no access to outside networks)
| diff --git a/manage-data/ingest/ingest-reference-architectures/agent-es-airgapped.md b/manage-data/ingest/ingest-reference-architectures/agent-es-airgapped.md index 298081297..898f30b02 100644 --- a/manage-data/ingest/ingest-reference-architectures/agent-es-airgapped.md +++ b/manage-data/ingest/ingest-reference-architectures/agent-es-airgapped.md @@ -25,5 +25,5 @@ Use when Info for air-gapped environments: * [Installing the {{stack}} in an air-gapped environment](../../../deploy-manage/deploy/cloud-enterprise/air-gapped-install.md) -* [Using a proxy server with Elastic Agent and Fleet](https://www.elastic.co/guide/en/fleet/current/fleet-agent-proxy-support.html) +* [Using a proxy server with Elastic Agent and Fleet](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/fleet-agent-proxy-support.md) diff --git a/manage-data/ingest/ingest-reference-architectures/agent-kafka-essink.md b/manage-data/ingest/ingest-reference-architectures/agent-kafka-essink.md index 4e4dcbde1..5376333f7 100644 --- a/manage-data/ingest/ingest-reference-architectures/agent-kafka-essink.md +++ b/manage-data/ingest/ingest-reference-architectures/agent-kafka-essink.md @@ -32,8 +32,8 @@ Info on {{agent}} and agent integrations: Info on {{ls}} and {{ls}} plugins: * [{{ls}} Reference](https://www.elastic.co/guide/en/logstash/current) -* [{{ls}} {{agent}} input](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-elastic_agent.html) -* [{{ls}} Kafka output](https://www.elastic.co/guide/en/logstash/current/plugins-outputs-kafka.html) +* [{{ls}} {{agent}} input](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-elastic_agent.md) +* [{{ls}} Kafka output](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-outputs-kafka.md) Info on {{es}}: diff --git a/manage-data/ingest/ingest-reference-architectures/agent-kafka-ls.md b/manage-data/ingest/ingest-reference-architectures/agent-kafka-ls.md index d7b86c6f5..c6a4c0f7c 100644 --- a/manage-data/ingest/ingest-reference-architectures/agent-kafka-ls.md +++ b/manage-data/ingest/ingest-reference-architectures/agent-kafka-ls.md @@ -32,10 +32,10 @@ Info on {{agent}} and agent integrations: Info on {{ls}} and {{ls}} Kafka plugins: * [{{ls}} Reference](https://www.elastic.co/guide/en/logstash/current) -* [{{ls}} {{agent}} input](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-elastic_agent.html) -* [{{ls}} Kafka input](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-kafka.html) -* [{{ls}} Kafka output](https://www.elastic.co/guide/en/logstash/current/plugins-outputs-kafka.html) -* [{{ls}} Elasticsearch output](https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html) +* [{{ls}} {{agent}} input](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-elastic_agent.md) +* [{{ls}} Kafka input](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-kafka.md) +* [{{ls}} Kafka output](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-outputs-kafka.md) +* [{{ls}} Elasticsearch output](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-outputs-elasticsearch.md) Info on {{es}}: diff --git a/manage-data/ingest/ingest-reference-architectures/agent-ls-airgapped.md b/manage-data/ingest/ingest-reference-architectures/agent-ls-airgapped.md index 595035bbc..5d5933a0a 100644 --- a/manage-data/ingest/ingest-reference-architectures/agent-ls-airgapped.md +++ b/manage-data/ingest/ingest-reference-architectures/agent-ls-airgapped.md @@ -25,10 +25,10 @@ Use when Info for air-gapped environments: * [Installing the {{stack}} in an air-gapped environment](../../../deploy-manage/deploy/cloud-enterprise/air-gapped-install.md) -* [Using a proxy server with Elastic Agent and Fleet](https://www.elastic.co/guide/en/fleet/current/fleet-agent-proxy-support.html) +* [Using a proxy server with Elastic Agent and Fleet](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/fleet-agent-proxy-support.md) ## Geoip database management in air-gapped environments [ls-geoip] -The [{{ls}} geoip filter](https://www.elastic.co/guide/en/logstash/current/plugins-filters-geoip.html) requires regular database updates to remain up-to-date with the latest information. If you are using the {{ls}} geoip filter plugin in an air-gapped environment, you can manage updates through a proxy, a custom endpoint, or manually. Check out [Manage your own database updates](https://www.elastic.co/guide/en/logstash/current/plugins-filters-geoip.html#plugins-filters-geoip-manage_update) for more info. +The [{{ls}} geoip filter](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-filters-geoip.md) requires regular database updates to remain up-to-date with the latest information. If you are using the {{ls}} geoip filter plugin in an air-gapped environment, you can manage updates through a proxy, a custom endpoint, or manually. Check out [Manage your own database updates](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-filters-geoip.md#plugins-filters-geoip-manage_update) for more info. diff --git a/manage-data/ingest/ingest-reference-architectures/agent-proxy.md b/manage-data/ingest/ingest-reference-architectures/agent-proxy.md index cfad026ba..8e713fe28 100644 --- a/manage-data/ingest/ingest-reference-architectures/agent-proxy.md +++ b/manage-data/ingest/ingest-reference-architectures/agent-proxy.md @@ -39,7 +39,7 @@ Info on {{agent}} and agent integrations: Info on using a proxy server: -* [Using a proxy server with {{agent}} and {{fleet}}](https://www.elastic.co/guide/en/fleet/current/fleet-agent-proxy-support.html) +* [Using a proxy server with {{agent}} and {{fleet}}](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/fleet-agent-proxy-support.md) Info on {{es}}: diff --git a/manage-data/ingest/ingest-reference-architectures/ls-enrich.md b/manage-data/ingest/ingest-reference-architectures/ls-enrich.md index 04cdf70f5..6d2f9404f 100644 --- a/manage-data/ingest/ingest-reference-architectures/ls-enrich.md +++ b/manage-data/ingest/ingest-reference-architectures/ls-enrich.md @@ -31,14 +31,14 @@ Examples Info on configuring {{agent}}: * [Fleet and Elastic Agent Guide](https://www.elastic.co/guide/en/fleet/current) -* [Configuring outputs for {{agent}}](https://www.elastic.co/guide/en/fleet/current/elastic-agent-output-configuration.html) +* [Configuring outputs for {{agent}}](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/elastic-agent-output-configuration.md) For info on {{ls}} for enriching data, check out these sections in the [Logstash Reference](https://www.elastic.co/guide/en/logstash/current): -* [{{ls}} {{agent}} input](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-elastic_agent.html) -* [{{ls}} plugins for enriching data](https://www.elastic.co/guide/en/logstash/current/lookup-enrichment.html) -* [Logstash filter plugins](https://www.elastic.co/guide/en/logstash/current/filter-plugins.html) -* [{{ls}} {{es}} output](https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html) +* [{{ls}} {{agent}} input](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-elastic_agent.md) +* [{{ls}} plugins for enriching data](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/lookup-enrichment.md) +* [Logstash filter plugins](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/filter-plugins.md) +* [{{ls}} {{es}} output](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-outputs-elasticsearch.md) Info on {{es}}: diff --git a/manage-data/ingest/ingest-reference-architectures/ls-for-input.md b/manage-data/ingest/ingest-reference-architectures/ls-for-input.md index 554e883f6..3b7c63007 100644 --- a/manage-data/ingest/ingest-reference-architectures/ls-for-input.md +++ b/manage-data/ingest/ingest-reference-architectures/ls-for-input.md @@ -29,8 +29,8 @@ Info on {{ls}} and {{ls}} input and output plugins: * [{{ls}} plugin support matrix](https://www.elastic.co/support/matrix#logstash_plugins) * [{{ls}} Reference](https://www.elastic.co/guide/en/logstash/current) -* [{{ls}} input plugins](https://www.elastic.co/guide/en/logstash/current/input-plugins.html) -* [{{es}} output plugin](https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html) +* [{{ls}} input plugins](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/input-plugins.md) +* [{{es}} output plugin](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-outputs-elasticsearch.md) Info on {{es}} and ingest pipelines: diff --git a/manage-data/ingest/ingest-reference-architectures/ls-multi.md b/manage-data/ingest/ingest-reference-architectures/ls-multi.md index e3b92f27a..a34657703 100644 --- a/manage-data/ingest/ingest-reference-architectures/ls-multi.md +++ b/manage-data/ingest/ingest-reference-architectures/ls-multi.md @@ -57,13 +57,13 @@ output { Info on configuring {{agent}}: * [Fleet and Elastic Agent Guide](https://www.elastic.co/guide/en/fleet/current) -* [Configuring outputs for {{agent}}](https://www.elastic.co/guide/en/fleet/current/elastic-agent-output-configuration.html) +* [Configuring outputs for {{agent}}](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/elastic-agent-output-configuration.md) Info on {{ls}} and {{ls}} outputs: * [{{ls}} Reference](https://www.elastic.co/guide/en/logstash/current) -* [{{ls}} {{es}} output plugin](https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html) -* [{{ls}} output plugins](https://www.elastic.co/guide/en/logstash/current/output-plugins.html) +* [{{ls}} {{es}} output plugin](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-outputs-elasticsearch.md) +* [{{ls}} output plugins](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/output-plugins.md) Info on {{es}}: diff --git a/manage-data/ingest/ingest-reference-architectures/ls-networkbridge.md b/manage-data/ingest/ingest-reference-architectures/ls-networkbridge.md index 3ed9a053b..d44e40b93 100644 --- a/manage-data/ingest/ingest-reference-architectures/ls-networkbridge.md +++ b/manage-data/ingest/ingest-reference-architectures/ls-networkbridge.md @@ -24,12 +24,12 @@ Example Info on configuring {{agent}}: * [Fleet and Elastic Agent Guide](https://www.elastic.co/guide/en/fleet/current) -* [Configuring outputs for {{agent}}](https://www.elastic.co/guide/en/fleet/current/elastic-agent-output-configuration.html) +* [Configuring outputs for {{agent}}](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/elastic-agent-output-configuration.md) Info on {{ls}} and {{ls}} plugins: * [{{ls}} Reference](https://www.elastic.co/guide/en/logstash/current) -* [{{es}} output plugin](https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html) +* [{{es}} output plugin](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-outputs-elasticsearch.md) Info on {{es}}: diff --git a/manage-data/ingest/ingest-reference-architectures/lspq.md b/manage-data/ingest/ingest-reference-architectures/lspq.md index 2816bc03c..21b1cf037 100644 --- a/manage-data/ingest/ingest-reference-architectures/lspq.md +++ b/manage-data/ingest/ingest-reference-architectures/lspq.md @@ -21,16 +21,16 @@ Use when Info on configuring {{agent}}: * [Fleet and Elastic Agent Guide](https://www.elastic.co/guide/en/fleet/current) -* [Configuring outputs for {{agent}}](https://www.elastic.co/guide/en/fleet/current/elastic-agent-output-configuration.html) +* [Configuring outputs for {{agent}}](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/elastic-agent-output-configuration.md) For info on {{ls}} plugins: -* [{{agent}} input](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-elastic_agent.html) -* [{{es}} output plugin](https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html) +* [{{agent}} input](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-elastic_agent.md) +* [{{es}} output plugin](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-outputs-elasticsearch.md) For info on using {{ls}} for buffering and data resiliency, check out this section in the [Logstash Reference](https://www.elastic.co/guide/en/logstash/current): -* [{{ls}} Persistent Queues (PQ)](https://www.elastic.co/guide/en/logstash/current/persistent-queues.html) +* [{{ls}} Persistent Queues (PQ)](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/persistent-queues.md) Info on {{es}}: diff --git a/manage-data/ingest/ingesting-data-for-elastic-solutions.md b/manage-data/ingest/ingesting-data-for-elastic-solutions.md index 014b8bdd7..a30fc5f1e 100644 --- a/manage-data/ingest/ingesting-data-for-elastic-solutions.md +++ b/manage-data/ingest/ingesting-data-for-elastic-solutions.md @@ -14,7 +14,7 @@ To use [Elastic Agent](https://www.elastic.co/guide/en/fleet/current) and [Elast 1. Create an [{{ecloud}}](https://www.elastic.co/cloud) deployment for your solution. If you don’t have an {{ecloud}} account, you can sign up for a [free trial](https://cloud.elastic.co/registration) to get started. 2. Add the [Elastic integration](https://docs.elastic.co/en/integrations) for your data source to the deployment. -3. [Install {{agent}}](https://www.elastic.co/guide/en/fleet/current/elastic-agent-installation.html) on the systems whose data you want to collect. +3. [Install {{agent}}](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/install-elastic-agents.md) on the systems whose data you want to collect. :::: @@ -31,14 +31,14 @@ To use [Elastic Agent](https://www.elastic.co/guide/en/fleet/current) and [Elast **Resources** -* [Install {{agent}}](https://www.elastic.co/guide/en/fleet/current/elastic-agent-installation.html) +* [Install {{agent}}](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/install-elastic-agents.md) * [Elastic Search for integrations](https://www.elastic.co/integrations/data-integrations?solution=search) * [{{es}} Guide](https://www.elastic.co/guide/en/elasticsearch/reference/current) * [{{es}} document APIs](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-document) * [{{es}} language clients](https://www.elastic.co/guide/en/elasticsearch/client/index.html) * [Elastic web crawler](https://www.elastic.co/web-crawler) - * [Elastic connectors](https://www.elastic.co/guide/en/elasticsearch/reference/current/es-connectors.html) + * [Elastic connectors](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/search-connectors/index.md) @@ -49,10 +49,10 @@ With [Elastic Observability](https://www.elastic.co/observability), you can moni **Guides for popular Observability use cases** * [Monitor applications and systems with Elastic Observability](https://www.elastic.co/guide/en/starting-with-the-elasticsearch-platform-and-its-solutions/current/getting-started-observability.html) -* [Get started with logs and metrics](https://www.elastic.co/guide/en/observability/current/logs-metrics-get-started.html) +* [Get started with logs and metrics](/solutions/observability/infra-and-hosts/get-started-with-system-metrics.md) - * [Step 1: Add the {{agent}} System integration](https://www.elastic.co/guide/en/observability/current/logs-metrics-get-started.html#add-system-integration) - * [Step 2: Install and run {{agent}}](https://www.elastic.co/guide/en/observability/current/logs-metrics-get-started.html#add-agent-to-fleet) + * [Step 1: Add the {{agent}} System integration](/solutions/observability/infra-and-hosts/get-started-with-system-metrics.md#add-system-integration) + * [Step 2: Install and run {{agent}}](/solutions/observability/infra-and-hosts/get-started-with-system-metrics.md#add-agent-to-fleet) * [Observability](https://docs.elastic.co/serverless/observability/what-is-observability-serverless) on [{{serverless-full}}](https://docs.elastic.co/serverless): @@ -64,7 +64,7 @@ With [Elastic Observability](https://www.elastic.co/observability), you can moni **Resources** -* [Install {{agent}}](https://www.elastic.co/guide/en/fleet/current/elastic-agent-installation.html) +* [Install {{agent}}](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/install-elastic-agents.md) * [Elastic Observability integrations](https://www.elastic.co/integrations/data-integrations?solution=observability) @@ -79,9 +79,9 @@ You can detect and respond to threats when you use [Elastic Security](https://ww **Resources** -* [Install {{agent}}](https://www.elastic.co/guide/en/fleet/current/elastic-agent-installation.html) +* [Install {{agent}}](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/install-elastic-agents.md) * [Elastic Security integrations](https://www.elastic.co/integrations/data-integrations?solution=search) -* [Elastic Security documentation](https://www.elastic.co/guide/en/security/current/es-overview.html) +* [Elastic Security documentation](/solutions/security.md) ## Ingesting data for your own custom search solution [ingest-for-custom] @@ -92,12 +92,12 @@ Bring your ideas and use {{es}} and the {{stack}} to store, search, and visualiz **Resources** -* [Install {{agent}}](https://www.elastic.co/guide/en/fleet/current/elastic-agent-installation.html) +* [Install {{agent}}](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/install-elastic-agents.md) * [{{es}} Guide](https://www.elastic.co/guide/en/elasticsearch/reference/current) * [{{es}} document APIs](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-document) * [{{es}} language clients](https://www.elastic.co/guide/en/elasticsearch/client/index.html) * [Elastic web crawler](https://www.elastic.co/web-crawler) - * [Elastic connectors](https://www.elastic.co/guide/en/elasticsearch/reference/current/es-connectors.html) + * [Elastic connectors](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/search-connectors/index.md) * [Tutorial: Get started with vector search and generative AI](https://www.elastic.co/guide/en/starting-with-the-elasticsearch-platform-and-its-solutions/current/getting-started-general-purpose.html) diff --git a/manage-data/ingest/ingesting-data-from-applications/ingest-data-from-beats-to-elasticsearch-service-with-logstash-as-proxy.md b/manage-data/ingest/ingesting-data-from-applications/ingest-data-from-beats-to-elasticsearch-service-with-logstash-as-proxy.md index 1cf6cb671..378fe0dfa 100644 --- a/manage-data/ingest/ingesting-data-from-applications/ingest-data-from-beats-to-elasticsearch-service-with-logstash-as-proxy.md +++ b/manage-data/ingest/ingesting-data-from-applications/ingest-data-from-beats-to-elasticsearch-service-with-logstash-as-proxy.md @@ -122,7 +122,7 @@ If you have multiple servers with metrics data, repeat the following steps to co **About Metricbeat modules** -Metricbeat has [many modules](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-modules.html) available that collect common metrics. You can [configure additional modules](https://www.elastic.co/guide/en/beats/metricbeat/current/configuration-metricbeat.html) as needed. For this example we’re using Metricbeat’s default configuration, which has the [System module](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-module-system.html) enabled. The System module allows you to monitor servers with the default set of metrics: *cpu*, *load*, *memory*, *network*, *process*, *process_summary*, *socket_summary*, *filesystem*, *fsstat*, and *uptime*. +Metricbeat has [many modules](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/metricbeat-modules.md) available that collect common metrics. You can [configure additional modules](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/configuration-metricbeat.md) as needed. For this example we’re using Metricbeat’s default configuration, which has the [System module](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/metricbeat-module-system.md) enabled. The System module allows you to monitor servers with the default set of metrics: *cpu*, *load*, *memory*, *network*, *process*, *process_summary*, *socket_summary*, *filesystem*, *fsstat*, and *uptime*. **Load the Metricbeat Kibana dashboards** @@ -144,7 +144,7 @@ sudo ./metricbeat setup \ 1. Specify the Cloud ID of your {{ech}} or {{ece}} deployment. You can include or omit the `:` prefix at the beginning of the Cloud ID. Both versions work fine. Find your Cloud ID by going to the {{kib}} main menu and selecting Management > Integrations, and then selecting View deployment details. 2. Specify the username and password provided to you when creating the deployment. Make sure to keep the colon between ** and **.::::{important} -Depending on variables including the installation location, environment and local permissions, you might need to [change the ownership](https://www.elastic.co/guide/en/beats/libbeat/current/config-file-permissions.html) of the metricbeat.yml. +Depending on variables including the installation location, environment and local permissions, you might need to [change the ownership](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-libbeat/config-file-permissions.md) of the metricbeat.yml. You might encounter similar permissions hurdles as you work through multiple sections of this document. These permission requirements are there for a good reason, a security safeguard to prevent unauthorized access and modification of key Elastic files. @@ -193,7 +193,7 @@ The next step is to configure Filebeat to send operational data to Logstash. As **Enable the Filebeat system module** -Filebeat has [many modules](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-modules.html) available that collect common log types. You can [configure additional modules](https://www.elastic.co/guide/en/beats/filebeat/current/configuration-filebeat-modules.html) as needed. For this example we’re using Filebeat’s [System module](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-system.html). This module reads in the various system log files (with information including login successes or failures, sudo command usage, and other key usage details) based on the detected operating system. For this example, a Linux-based OS is used and Filebeat ingests logs from the */var/log/* folder. It’s important to verify that Filebeat is given permission to access your logs folder through standard file and folder permissions. +Filebeat has [many modules](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-modules.md) available that collect common log types. You can [configure additional modules](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/configuration-filebeat-modules.md) as needed. For this example we’re using Filebeat’s [System module](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-module-system.md). This module reads in the various system log files (with information including login successes or failures, sudo command usage, and other key usage details) based on the detected operating system. For this example, a Linux-based OS is used and Filebeat ingests logs from the */var/log/* folder. It’s important to verify that Filebeat is given permission to access your logs folder through standard file and folder permissions. 1. Go to */filebeat-/modules.d/* where ** is the directory where Filebeat is installed. 2. Filebeat requires at least one fileset to be enabled. In file */filebeat-/modules.d/system.yml.disabled*, under both `syslog` and `auth` set `enabled` to `true`: @@ -232,7 +232,7 @@ sudo ./filebeat setup \ 1. Specify the Cloud ID of your {{ech}} or {{ece}} deployment. You can include or omit the `:` prefix at the beginning of the Cloud ID. Both versions work fine. Find your Cloud ID by going to the {{kib}} main menu and selecting Management > Integrations, and then selecting View deployment details. 2. Specify the username and password provided to you when creating the deployment. Make sure to keep the colon between ** and **.::::{important} -Depending on variables including the installation location, environment, and local permissions, you might need to [change the ownership](https://www.elastic.co/guide/en/beats/libbeat/current/config-file-permissions.html) of the filebeat.yml. +Depending on variables including the installation location, environment, and local permissions, you might need to [change the ownership](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-libbeat/config-file-permissions.md) of the filebeat.yml. :::: @@ -245,7 +245,7 @@ Index setup finished. Loading dashboards (Kibana must be running and reachable) Loaded dashboards Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead. -See more: https://www.elastic.co/guide/en/machine-learning/current/index.html +See more: /explore-analyze/machine-learning.md Loaded machine learning job configurations Loaded Ingest pipelines ``` @@ -295,7 +295,7 @@ Now the Filebeat and Metricbeat are set up, let’s configure a {{ls}} pipeline 1. {{ls}} listens for Beats input on the default port of 5044. Only one line is needed to do this. {{ls}} can handle input from many Beats of the same and also of varying types (Metricbeat, Filebeat, and others). 2. This sends output to the standard output, which displays through your command line interface. This plugin enables you to verify the data before you send it to {{es}}, in a later step. -3. Save the new *beats.conf* file in your Logstash folder. To learn more about the file format and options, check [{{ls}} Configuration Examples](https://www.elastic.co/guide/en/logstash/current/config-examples.html). +3. Save the new *beats.conf* file in your Logstash folder. To learn more about the file format and options, check [{{ls}} Configuration Examples](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/config-examples.md). ## Output {{ls}} data to stdout [ec-beats-logstash-stdout] @@ -437,7 +437,7 @@ In this section, you configure {{ls}} to send the Metricbeat and Filebeat data t ``` 1. Use the Cloud ID of your {{ech}} or {{ece}} deployment. You can include or omit the `:` prefix at the beginning of the Cloud ID. Both versions work fine. Find your Cloud ID by going to the {{kib}} main menu and selecting Management > Integrations, and then selecting View deployment details. - 2. the default usename is `elastic`. It is not recommended to use the `elastic` account for ingesting data as this is a superuser. We recommend using a user with reduced permissions, or an API Key with permissions specific to the indices or data streams that will be written to. Check the [Grant access to secured resources](https://www.elastic.co/guide/en/beats/filebeat/current/feature-roles.html) for information on the writer role and API Keys. Use the password provided when you created the deployment if using the `elastic` user, or the password used when creating a new ingest user with the roles specified in the [Grant access to secured resources](https://www.elastic.co/guide/en/beats/filebeat/current/feature-roles.html) documentation. + 2. the default usename is `elastic`. It is not recommended to use the `elastic` account for ingesting data as this is a superuser. We recommend using a user with reduced permissions, or an API Key with permissions specific to the indices or data streams that will be written to. Check the [Grant access to secured resources](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/feature-roles.md) for information on the writer role and API Keys. Use the password provided when you created the deployment if using the `elastic` user, or the password used when creating a new ingest user with the roles specified in the [Grant access to secured resources](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/feature-roles.md) documentation. Following are some additional details about the configuration file settings: @@ -529,9 +529,9 @@ In this section, you configure {{ls}} to send the Metricbeat and Filebeat data t ::::{note} In this guide, you manually launch each of the Elastic stack applications through the command line interface. In production, you may prefer to configure {{ls}}, Metricbeat, and Filebeat to run as System Services. Check the following pages for the steps to configure each application to run as a service: -* [Running {{ls}} as a service on Debian or RPM](https://www.elastic.co/guide/en/logstash/current/running-logstash.html) -* [Metricbeat and systemd](https://www.elastic.co/guide/en/beats/metricbeat/current/running-with-systemd.html) -* [Start filebeat](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-starting.html) +* [Running {{ls}} as a service on Debian or RPM](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/running-logstash.md) +* [Metricbeat and systemd](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/running-with-systemd.md) +* [Start filebeat](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-starting.md) :::: diff --git a/manage-data/ingest/ingesting-data-from-applications/ingest-data-from-relational-database-into-elasticsearch-service.md b/manage-data/ingest/ingesting-data-from-applications/ingest-data-from-relational-database-into-elasticsearch-service.md index 46400a140..fd78194bf 100644 --- a/manage-data/ingest/ingesting-data-from-applications/ingest-data-from-relational-database-into-elasticsearch-service.md +++ b/manage-data/ingest/ingesting-data-from-applications/ingest-data-from-relational-database-into-elasticsearch-service.md @@ -40,7 +40,7 @@ $$$ece-db-logstash-pipeline$$$ $$$ece-db-logstash-prerequisites$$$ -This guide explains how to ingest data from a relational database into {{ess}} through [{{ls}}](https://www.elastic.co/guide/en/logstash/current/introduction.html), using the Logstash [JDBC input plugin](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html). It demonstrates how Logstash can be used to efficiently copy records and to receive updates from a relational database, and then send them into {{es}} in an {{ech}} or {{ece}} deployment. +This guide explains how to ingest data from a relational database into {{ess}} through [{{ls}}](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/index.md), using the Logstash [JDBC input plugin](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-jdbc.md). It demonstrates how Logstash can be used to efficiently copy records and to receive updates from a relational database, and then send them into {{es}} in an {{ech}} or {{ece}} deployment. The code and methods presented here have been tested with MySQL. They should work with other relational databases. @@ -234,13 +234,13 @@ Let’s set up a sample Logstash input pipeline to ingest data from your new JDB : The Logstash JDBC plugin does not come packaged with JDBC driver libraries. The JDBC driver library must be passed explicitly into the plugin using the `jdbc_driver_library` configuration option. tracking_column - : This parameter specifies the field `unix_ts_in_secs` that tracks the last document read by Logstash from MySQL, stored on disk in [logstash_jdbc_last_run](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html#plugins-inputs-jdbc-last_run_metadata_path). The parameter determines the starting value for documents that Logstash requests in the next iteration of its polling loop. The value stored in `logstash_jdbc_last_run` can be accessed in a SELECT statement as `sql_last_value`. + : This parameter specifies the field `unix_ts_in_secs` that tracks the last document read by Logstash from MySQL, stored on disk in [logstash_jdbc_last_run](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-jdbc.md#plugins-inputs-jdbc-last_run_metadata_path). The parameter determines the starting value for documents that Logstash requests in the next iteration of its polling loop. The value stored in `logstash_jdbc_last_run` can be accessed in a SELECT statement as `sql_last_value`. unix_ts_in_secs : The field generated by the SELECT statement, which contains the `modification_time` as a standard [Unix timestamp](https://en.wikipedia.org/wiki/Unix_time) (seconds since the epoch). The field is referenced by the `tracking column`. A Unix timestamp is used for tracking progress rather than a normal timestamp, as a normal timestamp may cause errors due to the complexity of correctly converting back and forth between UMT and the local timezone. sql_last_value - : This is a [built-in parameter](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html#_predefined_parameters) containing the starting point of the current iteration of the Logstash polling loop, and it is referenced in the SELECT statement line of the JDBC input configuration. This parameter is set to the most recent value of `unix_ts_in_secs`, which is read from `.logstash_jdbc_last_run`. This value is the starting point for documents returned by the MySQL query that is executed in the Logstash polling loop. Including this variable in the query guarantees that we’re not resending data that is already stored in Elasticsearch. + : This is a [built-in parameter](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-jdbc.md#_predefined_parameters) containing the starting point of the current iteration of the Logstash polling loop, and it is referenced in the SELECT statement line of the JDBC input configuration. This parameter is set to the most recent value of `unix_ts_in_secs`, which is read from `.logstash_jdbc_last_run`. This value is the starting point for documents returned by the MySQL query that is executed in the Logstash polling loop. Including this variable in the query guarantees that we’re not resending data that is already stored in Elasticsearch. schedule : This uses cron syntax to specify how often Logstash should poll MySQL for changes. The specification `*/5 * * * * *` tells Logstash to contact MySQL every 5 seconds. Input from this plugin can be scheduled to run periodically according to a specific schedule. This scheduling syntax is powered by [rufus-scheduler](https://github.com/jmettraux/rufus-scheduler). The syntax is cron-like with some extensions specific to Rufus (for example, timezone support). @@ -330,7 +330,7 @@ In this section, we configure Logstash to send the MySQL data to Elasticsearch. ``` 1. Use the Cloud ID of your {{ech}} or {{ece}} deployment. You can include or omit the `:` prefix at the beginning of the Cloud ID. Both versions work fine. Find your Cloud ID by going to the {{kib}} main menu and selecting Management > Integrations, and then selecting View deployment details. - 2. the default username is `elastic`. It is not recommended to use the `elastic` account for ingesting data as this is a superuser. We recommend using a user with reduced permissions, or an API Key with permissions specific to the indices or data streams that will be written to. Check [Configuring security in Logstash](https://www.elastic.co/guide/en/logstash/current/ls-security.html) for information on roles and API Keys. Use the password provided when you created the deployment if using the `elastic` user, or the password used when creating a new ingest user with the roles specified in the [Configuring security in Logstash](https://www.elastic.co/guide/en/logstash/current/ls-security.html) documentation. + 2. the default username is `elastic`. It is not recommended to use the `elastic` account for ingesting data as this is a superuser. We recommend using a user with reduced permissions, or an API Key with permissions specific to the indices or data streams that will be written to. Check [Configuring security in Logstash](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/secure-connection.md) for information on roles and API Keys. Use the password provided when you created the deployment if using the `elastic` user, or the password used when creating a new ingest user with the roles specified in the [Configuring security in Logstash](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/secure-connection.md) documentation. Following are some additional details about the configuration file settings: diff --git a/manage-data/ingest/ingesting-data-from-applications/ingest-data-with-nodejs-on-elasticsearch-service.md b/manage-data/ingest/ingesting-data-from-applications/ingest-data-with-nodejs-on-elasticsearch-service.md index 81f0643e4..ae0b05b82 100644 --- a/manage-data/ingest/ingesting-data-from-applications/ingest-data-with-nodejs-on-elasticsearch-service.md +++ b/manage-data/ingest/ingesting-data-from-applications/ingest-data-with-nodejs-on-elasticsearch-service.md @@ -168,7 +168,7 @@ async function run() { run().catch(console.log) ``` -When using the [client.index](https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#_index) API, the request automatically creates the `game-of-thrones` index if it doesn’t already exist, as well as document IDs for each indexed document if they are not explicitly specified. +When using the [client.index](asciidocalypse://docs/elasticsearch-js/docs/reference/elasticsearch/elasticsearch-client-javascript-api/api-reference.md#_index) API, the request automatically creates the `game-of-thrones` index if it doesn’t already exist, as well as document IDs for each indexed document if they are not explicitly specified. ## Search and modify data [ec_search_and_modify_data] @@ -215,7 +215,7 @@ async function update() { update().catch(console.log) ``` -This [more comprehensive list of API examples](https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/examples.html) includes bulk operations, checking the existence of documents, updating by query, deleting, scrolling, and SQL queries. To learn more, check the complete [API reference](https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html). +This [more comprehensive list of API examples](asciidocalypse://docs/elasticsearch-js/docs/reference/elasticsearch/elasticsearch-client-javascript-api/examples.md) includes bulk operations, checking the existence of documents, updating by query, deleting, scrolling, and SQL queries. To learn more, check the complete [API reference](asciidocalypse://docs/elasticsearch-js/docs/reference/elasticsearch/elasticsearch-client-javascript-api/api-reference.md). ## Switch to API key authentication [ec_switch_to_api_key_authentication] @@ -302,11 +302,11 @@ Security Connections ({{ech}} only) -: If your application connecting to {{ech}} runs under the Java security manager, you should at least disable the caching of positive hostname resolutions. To learn more, check the [Java API Client documentation](https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/_others.html). +: If your application connecting to {{ech}} runs under the Java security manager, you should at least disable the caching of positive hostname resolutions. To learn more, check the [Java API Client documentation](asciidocalypse://docs/elasticsearch-java/docs/reference/elasticsearch/elasticsearch-client-java-api-client/_others.md). Schema : When the example code was run an index mapping was created automatically. The field types were selected by {{es}} based on the content seen when the first record was ingested, and updated as new fields appeared in the data. It would be more efficient to specify the fields and field types in advance to optimize performance. Refer to the Elastic Common Schema documentation and Field Type documentation when you are designing the schema for your production use cases. Ingest -: For more advanced scenarios, this [bulk ingestion](https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/bulk_examples.html) reference gives an example of the `bulk` API that makes it possible to perform multiple operations in a single call. This bulk example also explicitly specifies document IDs. If you have a lot of documents to index, using bulk to batch document operations is significantly faster than submitting requests individually. +: For more advanced scenarios, this [bulk ingestion](asciidocalypse://docs/elasticsearch-js/docs/reference/elasticsearch/elasticsearch-client-javascript-api/bulk_examples.md) reference gives an example of the `bulk` API that makes it possible to perform multiple operations in a single call. This bulk example also explicitly specifies document IDs. If you have a lot of documents to index, using bulk to batch document operations is significantly faster than submitting requests individually. diff --git a/manage-data/ingest/ingesting-data-from-applications/ingest-data-with-python-on-elasticsearch-service.md b/manage-data/ingest/ingesting-data-from-applications/ingest-data-with-python-on-elasticsearch-service.md index 034958325..71109ae44 100644 --- a/manage-data/ingest/ingesting-data-from-applications/ingest-data-with-python-on-elasticsearch-service.md +++ b/manage-data/ingest/ingesting-data-from-applications/ingest-data-with-python-on-elasticsearch-service.md @@ -293,7 +293,7 @@ es.get(index='lord-of-the-rings', id='2EkAzngB_pyHD3p65UMt') 'birthplace': 'The Shire'}} ``` -For frequently used API calls with the Python client, check [Examples](https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/examples.html). +For frequently used API calls with the Python client, check [Examples](asciidocalypse://docs/elasticsearch-py/docs/reference/elasticsearch/elasticsearch-client-python-api/examples.md). ## Switch to API key authentication [ec_switch_to_api_key_authentication_2] @@ -353,7 +353,7 @@ es = Elasticsearch( Check [Create API key API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-security-create-api-key) to learn more about API Keys and [Security privileges](../../../deploy-manage/users-roles/cluster-or-deployment-auth/elasticsearch-privileges.md) to understand which privileges are needed. If you are not sure what the right combination of privileges for your custom application is, you can enable [audit logging](../../../deploy-manage/monitor/logging-configuration/enabling-audit-logs.md) on {{es}} to find out what privileges are being used. To learn more about how logging works on {{ech}} or {{ece}}, check [Monitoring Elastic Cloud deployment logs and metrics](https://www.elastic.co/blog/monitoring-elastic-cloud-deployment-logs-and-metrics). -For more information on refreshing an index, searching, updating, and deleting, check the [elasticsearch-py examples](https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/examples.html). +For more information on refreshing an index, searching, updating, and deleting, check the [elasticsearch-py examples](asciidocalypse://docs/elasticsearch-py/docs/reference/elasticsearch/elasticsearch-client-python-api/examples.md). ### Best practices [ec_best_practices_2] @@ -368,5 +368,5 @@ Schema : When the example code is run, an index mapping is created automatically. The field types are selected by {{es}} based on the content seen when the first record was ingested, and updated as new fields appeared in the data. It would be more efficient to specify the fields and field types in advance to optimize performance. Refer to the Elastic Common Schema documentation and Field Type documentation when you design the schema for your production use cases. Ingest -: For more advanced scenarios, [Bulk helpers](https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/client-helpers.html#bulk-helpers) gives examples for the `bulk` API that makes it possible to perform multiple operations in a single call. If you have a lot of documents to index, using bulk to batch document operations is significantly faster than submitting requests individually. +: For more advanced scenarios, [Bulk helpers](asciidocalypse://docs/elasticsearch-py/docs/reference/elasticsearch/elasticsearch-client-python-api/client-helpers.md#bulk-helpers) gives examples for the `bulk` API that makes it possible to perform multiple operations in a single call. If you have a lot of documents to index, using bulk to batch document operations is significantly faster than submitting requests individually. diff --git a/manage-data/ingest/ingesting-data-from-applications/ingest-logs-from-nodejs-web-application-using-filebeat.md b/manage-data/ingest/ingesting-data-from-applications/ingest-logs-from-nodejs-web-application-using-filebeat.md index 1b5c2e46d..1b17ed3c7 100644 --- a/manage-data/ingest/ingesting-data-from-applications/ingest-logs-from-nodejs-web-application-using-filebeat.md +++ b/manage-data/ingest/ingesting-data-from-applications/ingest-logs-from-nodejs-web-application-using-filebeat.md @@ -49,7 +49,7 @@ $$$ece-node-logs-send-ess$$$ $$$ece-node-logs-view-kibana$$$ -This guide demonstrates how to ingest logs from a Node.js web application and deliver them securely into an {{ech}} or {{ece}} deployment. You’ll set up Filebeat to monitor a JSON-structured log file that has standard Elastic Common Schema (ECS) formatted fields, and you’ll then view real-time visualizations of the log events in Kibana as requests are made to the Node.js server. While Node.js is used for this example, this approach to monitoring log output is applicable across many client types. Check the list of [available ECS logging plugins](https://www.elastic.co/guide/en/ecs-logging/overview/current/intro.html#_get_started). +This guide demonstrates how to ingest logs from a Node.js web application and deliver them securely into an {{ech}} or {{ece}} deployment. You’ll set up Filebeat to monitor a JSON-structured log file that has standard Elastic Common Schema (ECS) formatted fields, and you’ll then view real-time visualizations of the log events in Kibana as requests are made to the Node.js server. While Node.js is used for this example, this approach to monitoring log output is applicable across many client types. Check the list of [available ECS logging plugins](asciidocalypse://docs/ecs-logging/docs/reference/ecs/ecs-logging-overview/intro.md#_get_started). *Time required: 1.5 hours* @@ -71,7 +71,7 @@ For the three following packages, you can create a working directory to install npm install winston ``` -* The [Elastic Common Schema (ECS) formatter](https://www.elastic.co/guide/en/ecs-logging/nodejs/current/winston.html) for the Node.js winston logger - This plugin formats your Node.js logs into an ECS structured JSON format ideally suited for ingestion into Elasticsearch. To install the ECS winston logger, run the following command in your working directory so that the package is installed in the same location as the winston package: +* The [Elastic Common Schema (ECS) formatter](asciidocalypse://docs/ecs-logging-nodejs/docs/reference/ecs/ecs-logging-nodejs/winston.md) for the Node.js winston logger - This plugin formats your Node.js logs into an ECS structured JSON format ideally suited for ingestion into Elasticsearch. To install the ECS winston logger, run the following command in your working directory so that the package is installed in the same location as the winston package: ```sh npm install @elastic/ecs-winston-format @@ -347,7 +347,7 @@ For this example, Filebeat uses the following four decoding options. json.expand_keys: true ``` -To learn more about these settings, check [JSON input configuration options](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-log.html#filebeat-input-log-config-json) and [Decode JSON fields](https://www.elastic.co/guide/en/beats/filebeat/current/decode-json-fields.html) in the Filebeat Reference. +To learn more about these settings, check [JSON input configuration options](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-input-log.md#filebeat-input-log-config-json) and [Decode JSON fields](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/decode-json-fields.md) in the Filebeat Reference. Append the four JSON decoding options to the *Filebeat inputs* section of *filebeat.yml*, so that the section now looks like this: @@ -383,7 +383,7 @@ Filebeat comes with predefined assets for parsing, indexing, and visualizing you ``` ::::{important} -Depending on variables including the installation location, environment, and local permissions, you might need to [change the ownership](https://www.elastic.co/guide/en/beats/libbeat/current/config-file-permissions.html) of filebeat.yml. You can also try running the command as *root*: *sudo ./filebeat setup -e* or you can disable strict permission checks by running the command with the `--strict.perms=false` option. +Depending on variables including the installation location, environment, and local permissions, you might need to [change the ownership](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-libbeat/config-file-permissions.md) of filebeat.yml. You can also try running the command as *root*: *sudo ./filebeat setup -e* or you can disable strict permission checks by running the command with the `--strict.perms=false` option. :::: @@ -484,7 +484,7 @@ In this command: * The *-c* flag specifies the path to the Filebeat config file. ::::{note} -Just in case the command doesn’t work as expected, check the [Filebeat quick start](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation-configuration.html#start) for the detailed command syntax for your operating system. You can also try running the command as *root*: *sudo ./filebeat -e -c filebeat.yml*. +Just in case the command doesn’t work as expected, check the [Filebeat quick start](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-installation-configuration.md#start) for the detailed command syntax for your operating system. You can also try running the command as *root*: *sudo ./filebeat -e -c filebeat.yml*. :::: @@ -567,5 +567,5 @@ You can add titles to the visualizations, resize and position them as you like, 2. As your final step, remember to stop Filebeat, the Node.js web server, and the client. Enter *CTRL + C* in the terminal window for each application to stop them. -You now know how to monitor log files from a Node.js web application, deliver the log event data securely into an {{ech}} or {{ece}} deployment, and then visualize the results in Kibana in real time. Consult the [Filebeat documentation](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html) to learn more about the ingestion and processing options available for your data. You can also explore our [documentation](../../../manage-data/ingest.md) to learn all about ingesting data. +You now know how to monitor log files from a Node.js web application, deliver the log event data securely into an {{ech}} or {{ece}} deployment, and then visualize the results in Kibana in real time. Consult the [Filebeat documentation](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-overview.md) to learn more about the ingestion and processing options available for your data. You can also explore our [documentation](../../../manage-data/ingest.md) to learn all about ingesting data. diff --git a/manage-data/ingest/ingesting-data-from-applications/ingest-logs-from-python-application-using-filebeat.md b/manage-data/ingest/ingesting-data-from-applications/ingest-logs-from-python-application-using-filebeat.md index 54b3f39fb..bfd7a25f5 100644 --- a/manage-data/ingest/ingesting-data-from-applications/ingest-logs-from-python-application-using-filebeat.md +++ b/manage-data/ingest/ingesting-data-from-applications/ingest-logs-from-python-application-using-filebeat.md @@ -33,13 +33,13 @@ $$$ece-python-logs-send-ess$$$ $$$ece-python-logs-view-kibana$$$ -This guide demonstrates how to ingest logs from a Python application and deliver them securely into an Elasticsearch Service deployment. You’ll set up Filebeat to monitor a JSON-structured log file that has standard Elastic Common Schema (ECS) formatted fields, and you’ll then view real-time visualizations of the log events in {{kib}} as they occur. While Python is used for this example, this approach to monitoring log output is applicable across many client types. Check the list of [available ECS logging plugins](https://www.elastic.co/guide/en/ecs-logging/overview/current/intro.html). +This guide demonstrates how to ingest logs from a Python application and deliver them securely into an Elasticsearch Service deployment. You’ll set up Filebeat to monitor a JSON-structured log file that has standard Elastic Common Schema (ECS) formatted fields, and you’ll then view real-time visualizations of the log events in {{kib}} as they occur. While Python is used for this example, this approach to monitoring log output is applicable across many client types. Check the list of [available ECS logging plugins](asciidocalypse://docs/ecs-logging/docs/reference/ecs/ecs-logging-overview/intro.md). *Time required: 1 hour* ## Prerequisites [ec_prerequisites_2] -To complete these steps you need to have [Python](https://www.python.org/) installed on your system as well as the [Elastic Common Schema (ECS) logger](https://www.elastic.co/guide/en/ecs-logging/python/current/installation.html) for the Python logging library. +To complete these steps you need to have [Python](https://www.python.org/) installed on your system as well as the [Elastic Common Schema (ECS) logger](asciidocalypse://docs/ecs-logging-python/docs/reference/ecs/ecs-logging-python/installation.md) for the Python logging library. To install *ecs-logging-python*, run: @@ -140,7 +140,7 @@ In this step, you’ll create a Python script that generates logs in JSON format Having your logs written in a JSON format with ECS fields allows for easy parsing and analysis, and for standardization with other applications. A standard, easily parsible format becomes increasingly important as the volume and type of data captured in your logs expands over time. - Together with the standard fields included for each log entry is an extra *http.request.body.content* field. This extra field is there just to give you some additional, interesting data to work with, and also to demonstrate how you can add optional fields to your log data. Check the [ECS Field Reference](https://www.elastic.co/guide/en/ecs/current/ecs-field-reference.html) for the full list of available fields. + Together with the standard fields included for each log entry is an extra *http.request.body.content* field. This extra field is there just to give you some additional, interesting data to work with, and also to demonstrate how you can add optional fields to your log data. Check the [ECS Field Reference](asciidocalypse://docs/ecs/docs/reference/ecs/ecs-field-reference.md) for the full list of available fields. 2. Let’s give the Python script a test run. Open a terminal instance in the location where you saved *elvis.py* and run the following: @@ -226,7 +226,7 @@ For this example, Filebeat uses the following four decoding options. json.expand_keys: true ``` -To learn more about these settings, check [JSON input configuration options](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-log.html#filebeat-input-log-config-json) and [Decode JSON fields](https://www.elastic.co/guide/en/beats/filebeat/current/decode-json-fields.html) in the Filebeat Reference. +To learn more about these settings, check [JSON input configuration options](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-input-log.md#filebeat-input-log-config-json) and [Decode JSON fields](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/decode-json-fields.md) in the Filebeat Reference. Append the four JSON decoding options to the *Filebeat inputs* section of *filebeat.yml*, so that the section now looks like this: @@ -262,7 +262,7 @@ Filebeat comes with predefined assets for parsing, indexing, and visualizing you ``` ::::{important} -Depending on variables including the installation location, environment, and local permissions, you might need to [change the ownership](https://www.elastic.co/guide/en/beats/libbeat/current/config-file-permissions.html) of filebeat.yml. You can also try running the command as *root*: *sudo ./filebeat setup -e* or you can disable strict permission checks by running the command with the `--strict.perms=false` option. +Depending on variables including the installation location, environment, and local permissions, you might need to [change the ownership](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-libbeat/config-file-permissions.md) of filebeat.yml. You can also try running the command as *root*: *sudo ./filebeat setup -e* or you can disable strict permission checks by running the command with the `--strict.perms=false` option. :::: @@ -368,7 +368,7 @@ In this command: * The *-c* flag specifies the path to the Filebeat config file. ::::{note} -Just in case the command doesn’t work as expected, check the [Filebeat quick start](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation-configuration.html#start) for the detailed command syntax for your operating system. You can also try running the command as *root*: *sudo ./filebeat -e -c filebeat.yml*. +Just in case the command doesn’t work as expected, check the [Filebeat quick start](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-installation-configuration.md#start) for the detailed command syntax for your operating system. You can also try running the command as *root*: *sudo ./filebeat -e -c filebeat.yml*. :::: @@ -446,5 +446,5 @@ You can add titles to the visualizations, resize and position them as you like, 2. As your final step, remember to stop Filebeat and the Python script. Enter *CTRL + C* in both your Filebeat terminal and in your `elvis.py` terminal. -You now know how to monitor log files from a Python application, deliver the log event data securely into an {{ech}} or {{ece}} deployment, and then visualize the results in Kibana in real time. Consult the [Filebeat documentation](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html) to learn more about the ingestion and processing options available for your data. You can also explore our [documentation](../../../manage-data/ingest.md) to learn all about all about ingesting data. +You now know how to monitor log files from a Python application, deliver the log event data securely into an {{ech}} or {{ece}} deployment, and then visualize the results in Kibana in real time. Consult the [Filebeat documentation](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-overview.md) to learn more about the ingestion and processing options available for your data. You can also explore our [documentation](../../../manage-data/ingest.md) to learn all about all about ingesting data. diff --git a/manage-data/ingest/ingesting-timeseries-data.md b/manage-data/ingest/ingesting-timeseries-data.md index 2ca26671a..f41f14d5a 100644 --- a/manage-data/ingest/ingesting-timeseries-data.md +++ b/manage-data/ingest/ingesting-timeseries-data.md @@ -9,30 +9,30 @@ Elastic and others offer tools to help you get your data from the original data In this section, we’ll help you determine which option is best for you. -* [{{agent}} and Elastic integrations](https://www.elastic.co/guide/en/ingest-overview/current/ingest-tools.html#ingest-ea) -* [{{beats}}](https://www.elastic.co/guide/en/ingest-overview/current/ingest-tools.html#ingest-beats) -* [OpenTelemetry (OTel) collectors](https://www.elastic.co/guide/en/ingest-overview/current/ingest-tools.html#ingest-otel) -* [Logstash](https://www.elastic.co/guide/en/ingest-overview/current/ingest-tools.html#ingest-logstash) +* [{{agent}} and Elastic integrations](/manage-data/ingest/ingesting-timeseries-data.md#ingest-ea) +* [{{beats}}](/manage-data/ingest/ingesting-timeseries-data.md#ingest-beats) +* [OpenTelemetry (OTel) collectors](/manage-data/ingest/ingesting-timeseries-data.md#ingest-otel) +* [Logstash](/manage-data/ingest/ingesting-timeseries-data.md#ingest-logstash) ## {{agent}} and Elastic integrations [ingest-ea] -A single [{{agent}}](https://www.elastic.co/guide/en/fleet/current) can collect multiple types of data when it is [installed](https://www.elastic.co/guide/en/fleet/current/elastic-agent-installation.html) on a host computer. You can use standalone {{agent}}s and manage them locally on the systems where they are installed, or you can manage all of your agents and policies with the [Fleet UI in {{kib}}](https://www.elastic.co/guide/en/fleet/current/manage-agents-in-fleet.html). +A single [{{agent}}](https://www.elastic.co/guide/en/fleet/current) can collect multiple types of data when it is [installed](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/install-elastic-agents.md) on a host computer. You can use standalone {{agent}}s and manage them locally on the systems where they are installed, or you can manage all of your agents and policies with the [Fleet UI in {{kib}}](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/manage-elastic-agents-in-fleet.md). Use {{agent}} with one of hundreds of [Elastic integrations](https://docs.elastic.co/en/integrations) to simplify collecting, transforming, and visualizing data. Integrations include default ingestion rules, dashboards, and visualizations to help you start analyzing your data right away. Check out the [Integration quick reference](https://docs.elastic.co/en/integrations/all_integrations) to search for available integrations that can reduce your time to value. -{{agent}} is the best option for collecting timestamped data for most data sources and use cases. If your data requires additional processing before going to {{es}}, you can use [{{agent}} processors](https://www.elastic.co/guide/en/fleet/current/elastic-agent-processor-configuration.html), [{{ls}}](https://www.elastic.co/guide/en/logstash/current), or additional processing features in {{es}}. Check out [additional processing](https://www.elastic.co/guide/en/ingest-overview/current/ingest-addl-proc.html) to see options. +{{agent}} is the best option for collecting timestamped data for most data sources and use cases. If your data requires additional processing before going to {{es}}, you can use [{{agent}} processors](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/agent-processors.md), [{{ls}}](https://www.elastic.co/guide/en/logstash/current), or additional processing features in {{es}}. Check out [additional processing](/manage-data/ingest/transform-enrich.md) to see options. -Ready to try [{{agent}}](https://www.elastic.co/guide/en/fleet/current)? Check out the [installation instructions](https://www.elastic.co/guide/en/fleet/current/elastic-agent-installation.html). +Ready to try [{{agent}}](https://www.elastic.co/guide/en/fleet/current)? Check out the [installation instructions](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/install-elastic-agents.md). ## {{beats}} [ingest-beats] -[Beats](https://www.elastic.co/guide/en/beats/libbeat/current/beats-reference.html) are the original Elastic lightweight data shippers, and their capabilities live on in Elastic Agent. When you use Elastic Agent, you’re getting core Beats functionality, but with more added features. +[Beats](asciidocalypse://docs/beats/docs/reference/ingestion-tools/index.md) are the original Elastic lightweight data shippers, and their capabilities live on in Elastic Agent. When you use Elastic Agent, you’re getting core Beats functionality, but with more added features. Beats require that you install a separate Beat for each type of data you want to collect. A single Elastic Agent installed on a host can collect and transport multiple types of data. -**Best practice:** Use [{{agent}}](https://www.elastic.co/guide/en/fleet/current) whenever possible. If your data source is not yet supported by {{agent}}, use {{beats}}. Check out the {{beats}} and {{agent}} [comparison](https://www.elastic.co/guide/en/fleet/current/beats-agent-comparison.html#additional-capabilities-beats-and-agent) for more info. When you are ready to upgrade, check out [Migrate from {{beats}} to {{agent}}](https://www.elastic.co/guide/en/fleet/current/migrate-beats-to-agent.html). +**Best practice:** Use [{{agent}}](https://www.elastic.co/guide/en/fleet/current) whenever possible. If your data source is not yet supported by {{agent}}, use {{beats}}. Check out the {{beats}} and {{agent}} [comparison](/manage-data/ingest/tools.md#additional-capabilities-beats-and-agent) for more info. When you are ready to upgrade, check out [Migrate from {{beats}} to {{agent}}](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/migrate-from-beats-to-elastic-agent.md). ## OpenTelemetry (OTel) collectors [ingest-otel] @@ -44,10 +44,10 @@ In addition to supporting upstream OTel development, Elastic provides [Elastic D ## Logstash [ingest-logstash] -[{{ls}}](https://www.elastic.co/guide/en/logstash/current) is a versatile open source data ETL (extract, transform, load) engine that can expand your ingest capabilities. {{ls}} can *collect data* from a wide variety of data sources with {{ls}} [input plugins](https://www.elastic.co/guide/en/logstash/current/input-plugins.html), *enrich and transform* the data with {{ls}} [filter plugins](https://www.elastic.co/guide/en/logstash/current/filter-plugins.html), and *output* the data to {{es}} and other destinations with the {{ls}} [output plugins](https://www.elastic.co/guide/en/logstash/current/output-plugins.html). +[{{ls}}](https://www.elastic.co/guide/en/logstash/current) is a versatile open source data ETL (extract, transform, load) engine that can expand your ingest capabilities. {{ls}} can *collect data* from a wide variety of data sources with {{ls}} [input plugins](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/input-plugins.md), *enrich and transform* the data with {{ls}} [filter plugins](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/filter-plugins.md), and *output* the data to {{es}} and other destinations with the {{ls}} [output plugins](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/output-plugins.md). Many users never need to use {{ls}}, but it’s available if you need it for: -* **Data collection** (if an Elastic integration isn’t available). {{agent}} and Elastic [integrations](https://docs.elastic.co/en/integrations/all_integrations) provide many features out-of-the-box, so be sure to search or browse integrations for your data source. If you don’t find an Elastic integration for your data source, check {{ls}} for an [input plugin](https://www.elastic.co/guide/en/logstash/current/input-plugins.html) for your data source. -* **Additional processing.** One of the most common {{ls}} use cases is [extending Elastic integrations](https://www.elastic.co/guide/en/logstash/current/ea-integrations.html). You can take advantage of the extensive, built-in capabilities of Elastic Agent and Elastic Integrations, and then use {{ls}} for additional data processing before sending the data on to {{es}}. -* **Advanced use cases.** {{ls}} can help with advanced use cases, such as when you need [persistence or buffering](https://www.elastic.co/guide/en/ingest/current/lspq.html), additional [data enrichment](https://www.elastic.co/guide/en/ingest/current/ls-enrich.html), [proxying](https://www.elastic.co/guide/en/ingest/current/ls-networkbridge.html) as a way to bridge network connections, or the ability to route data to [multiple destinations](https://www.elastic.co/guide/en/ingest/current/ls-multi.html). +* **Data collection** (if an Elastic integration isn’t available). {{agent}} and Elastic [integrations](https://docs.elastic.co/en/integrations/all_integrations) provide many features out-of-the-box, so be sure to search or browse integrations for your data source. If you don’t find an Elastic integration for your data source, check {{ls}} for an [input plugin](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/input-plugins.md) for your data source. +* **Additional processing.** One of the most common {{ls}} use cases is [extending Elastic integrations](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/using-logstash-with-elastic-integrations.md). You can take advantage of the extensive, built-in capabilities of Elastic Agent and Elastic Integrations, and then use {{ls}} for additional data processing before sending the data on to {{es}}. +* **Advanced use cases.** {{ls}} can help with advanced use cases, such as when you need [persistence or buffering](/manage-data/ingest/ingest-reference-architectures/lspq.md), additional [data enrichment](/manage-data/ingest/ingest-reference-architectures/ls-enrich.md), [proxying](/manage-data/ingest/ingest-reference-architectures/ls-networkbridge.md) as a way to bridge network connections, or the ability to route data to [multiple destinations](/manage-data/ingest/ingest-reference-architectures/ls-multi.md). diff --git a/manage-data/ingest/tools.md b/manage-data/ingest/tools.md index d26ba6aad..5dc784391 100644 --- a/manage-data/ingest/tools.md +++ b/manage-data/ingest/tools.md @@ -25,7 +25,7 @@ mapped_urls: % - [x] https://www.elastic.co/customer-success/data-ingestion % - [x] https://github.com/elastic/ingest-docs/pull/1373 -% Internal links rely on the following IDs being on this page (e.g. as a heading ID, paragraph ID, etc): +% Internal links rely on the following IDs being on this page (e.g. as a heading ID, paragraph ID, etc): % These IDs are from content that I'm not including on this current page. I've resolved them by changing the internal links to anchor links where needed. - Wajiha $$$supported-outputs-beats-and-agent$$$ @@ -38,17 +38,17 @@ Depending on the type of data you want to ingest, you have a number of methods a | Tools | Usage | Links to more information | | ------- | --------------- | ------------------------- | -| Integrations | Ingest data using a variety of Elastic integrations. | [Elastic Integrations](https://www.elastic.co/guide/en/integrations/current/index.html) | +| Integrations | Ingest data using a variety of Elastic integrations. | [Elastic Integrations](asciidocalypse://docs/integration-docs/docs/reference/ingestion-tools/index.md) | | File upload | Upload data from a file and inspect it before importing it into {{es}}. | [Upload data files](/manage-data/ingest/upload-data-files.md) | | APIs | Ingest data through code by using the APIs of one of the language clients or the {{es}} HTTP APIs. | [Document APIs](https://www.elastic.co/guide/en/elasticsearch/reference/current/docs.html) | | OpenTelemetry | Collect and send your telemetry data to Elastic Observability | [Elastic Distributions of OpenTelemetry](https://github.com/elastic/opentelemetry?tab=readme-ov-file#elastic-distributions-of-opentelemetry) | -| Fleet and Elastic Agent | Add monitoring for logs, metrics, and other types of data to a host using Elastic Agent, and centrally manage it using Fleet. | [Fleet and {{agent}} overview](https://www.elastic.co/guide/en/fleet/current/fleet-overview.html)
[{{fleet}} and {{agent}} restrictions (Serverless)](https://www.elastic.co/guide/en/fleet/current/fleet-agent-serverless-restrictions.html)
[{{beats}} and {{agent}} capabilities](https://www.elastic.co/guide/en/fleet/current/beats-agent-comparison.html)|| +| Fleet and Elastic Agent | Add monitoring for logs, metrics, and other types of data to a host using Elastic Agent, and centrally manage it using Fleet. | [Fleet and {{agent}} overview](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/index.md)
[{{fleet}} and {{agent}} restrictions (Serverless)](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/fleet-agent-serverless-restrictions.md)
[{{beats}} and {{agent}} capabilities](/manage-data/ingest/tools.md)|| | {{elastic-defend}} | {{elastic-defend}} provides organizations with prevention, detection, and response capabilities with deep visibility for EPP, EDR, SIEM, and Security Analytics use cases across Windows, macOS, and Linux operating systems running on both traditional endpoints and public cloud environments. | [Configure endpoint protection with {{elastic-defend}}](/solutions/security/configure-elastic-defend.md) | -| {{ls}} | Dynamically unify data from a wide variety of data sources and normalize it into destinations of your choice with {{ls}}. | [Logstash (Serverless)](https://www.elastic.co/guide/en/serverless/current/elasticsearch-ingest-data-through-logstash.html)
[Logstash pipelines](/manage-data/ingest/transform-enrich/logstash-pipelines.md) | -| {{beats}} | Use {{beats}} data shippers to send operational data to Elasticsearch directly or through Logstash. | [{{beats}} (Serverless)](https://www.elastic.co/guide/en/serverless/current/elasticsearch-ingest-data-through-beats.html)
[What are {{beats}}?](https://www.elastic.co/guide/en/beats/libbeat/current/beats-reference.html)
[{{beats}} and {{agent}} capabilities](https://www.elastic.co/guide/en/fleet/current/beats-agent-comparison.html)| +| {{ls}} | Dynamically unify data from a wide variety of data sources and normalize it into destinations of your choice with {{ls}}. | [Logstash (Serverless)](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/index.md)
[Logstash pipelines](/manage-data/ingest/transform-enrich/logstash-pipelines.md) | +| {{beats}} | Use {{beats}} data shippers to send operational data to Elasticsearch directly or through Logstash. | [{{beats}} (Serverless)](asciidocalypse://docs/beats/docs/reference/ingestion-tools/index.md)
[What are {{beats}}?](asciidocalypse://docs/beats/docs/reference/ingestion-tools/index.md)
[{{beats}} and {{agent}} capabilities](/manage-data/ingest/tools.md)| | APM | Collect detailed performance information on response time for incoming requests, database queries, calls to caches, external HTTP requests, and more. | [Application performance monitoring (APM)](/solutions/observability/apps/application-performance-monitoring-apm.md) | | Application logs | Ingest application logs using Filebeat, {{agent}}, or the APM agent, or reformat application logs into Elastic Common Schema (ECS) logs and then ingest them using Filebeat or {{agent}}. | [Stream application logs](/solutions/observability/logs/stream-application-logs.md)
[ECS formatted application logs](/solutions/observability/logs/ecs-formatted-application-logs.md) | -| Elastic Serverless forwarder for AWS | Ship logs from your AWS environment to cloud-hosted, self-managed Elastic environments, or {{ls}}. | [Elastic Serverless Forwarder](https://www.elastic.co/guide/en/esf/current/aws-elastic-serverless-forwarder.html) | +| Elastic Serverless forwarder for AWS | Ship logs from your AWS environment to cloud-hosted, self-managed Elastic environments, or {{ls}}. | [Elastic Serverless Forwarder](asciidocalypse://docs/elastic-serverless-forwarder/docs/reference/ingestion-tools/esf/index.md) | | Connectors | Use connectors to extract data from an original data source and sync it to an {{es}} index. | [Ingest content with Elastic connectors -](https://www.elastic.co/guide/en/elasticsearch/reference/current/es-connectors.html)
[Connector clients](https://www.elastic.co/guide/en/serverless/current/elasticsearch-ingest-data-through-integrations-connector-client.html) | +](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/search-connectors/index.md)
[Connector clients](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/search-connectors/index.md) | | Web crawler | Discover, extract, and index searchable content from websites and knowledge bases using the web crawler. | [Elastic Open Web Crawler](https://github.com/elastic/crawler#readme) | \ No newline at end of file diff --git a/manage-data/ingest/transform-enrich.md b/manage-data/ingest/transform-enrich.md index 70de740bb..c4c597a2e 100644 --- a/manage-data/ingest/transform-enrich.md +++ b/manage-data/ingest/transform-enrich.md @@ -16,7 +16,7 @@ According to your use case, you may want to control the structure of your ingest Finally, to help ensure optimal query results, you may want to customize how text is analyzed and how text fields are defined inside {{es}}. {{agent}} processors -: You can use [{{agent}} processors](https://www.elastic.co/guide/en/fleet/current/elastic-agent-processor-configuration.html) to sanitize or enrich raw data at the source. Use {{agent}} processors if you need to control what data is sent across the wire, or if you need to enrich the raw data with information available on the host. +: You can use [{{agent}} processors](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/agent-processors.md) to sanitize or enrich raw data at the source. Use {{agent}} processors if you need to control what data is sent across the wire, or if you need to enrich the raw data with information available on the host. {{es}} ingest pipelines : You can use [{{es}} ingest pipelines](transform-enrich/ingest-pipelines.md) to enrich incoming data or normalize field data before the data is indexed. {{es}} ingest pipelines enable you to manipulate the data as it comes in. This approach helps you avoid adding processing overhead to the hosts from which you’re collecting data. @@ -33,7 +33,7 @@ Finally, to help ensure optimal query results, you may want to customize how tex {{ls}} and the {{ls}} `elastic_integration filter` : If you're using {{ls}} as your primary ingest tool, you can take advantage of its built-in pipeline capabilities to transform your data. You configure a pipeline by stringing together a series of input, output, filtering, and optional codec plugins to manipulate all incoming data. -: If you're ingesting using {{agent}} with Elastic {{integrations}}, you can use the {{ls}} [`elastic_integration filter`](https://www.elastic.co/guide/en/logstash/current/) and other [{{ls}} filters](https://www.elastic.co/guide/en/logstash/current/filter-plugins.html) to [extend Elastic integrations](https://www.elastic.co/guide/en/logstash/current/ea-integrations.html) by transforming data before it goes to {{es}}. +: If you're ingesting using {{agent}} with Elastic {{integrations}}, you can use the {{ls}} [`elastic_integration filter`](https://www.elastic.co/guide/en/logstash/current/) and other [{{ls}} filters](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/filter-plugins.md) to [extend Elastic integrations](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/using-logstash-with-elastic-integrations.md) by transforming data before it goes to {{es}}. Index mapping : Index mapping lets you control the structure that incoming data has within an {{es}} index. You can define all of the fields that are included in the index and their respective data types. For example, you can set fields for dates, numbers, or geolocations, and define the fields to have specific formats. diff --git a/manage-data/ingest/transform-enrich/example-enrich-data-based-on-exact-values.md b/manage-data/ingest/transform-enrich/example-enrich-data-based-on-exact-values.md index 585eac0f2..6b5c84b6c 100644 --- a/manage-data/ingest/transform-enrich/example-enrich-data-based-on-exact-values.md +++ b/manage-data/ingest/transform-enrich/example-enrich-data-based-on-exact-values.md @@ -5,7 +5,7 @@ mapped_pages: # Example: Enrich your data based on exact values [match-enrich-policy-type] -`match` [enrich policies](data-enrichment.md#enrich-policy) match enrich data to incoming documents based on an exact value, such as a email address or ID, using a [`term` query](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html). +`match` [enrich policies](data-enrichment.md#enrich-policy) match enrich data to incoming documents based on an exact value, such as a email address or ID, using a [`term` query](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-term-query.md). The following example creates a `match` enrich policy that adds user name and contact information to incoming documents based on an email address. It then adds the `match` enrich policy to a processor in an ingest pipeline. @@ -50,7 +50,7 @@ Use the [execute enrich policy API](https://www.elastic.co/docs/api/doc/elastics POST /_enrich/policy/users-policy/_execute?wait_for_completion=false ``` -Use the [create or update pipeline API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ingest-put-pipeline) to create an ingest pipeline. In the pipeline, add an [enrich processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/enrich-processor.html) that includes: +Use the [create or update pipeline API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ingest-put-pipeline) to create an ingest pipeline. In the pipeline, add an [enrich processor](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/enrich-processor.md) that includes: * Your enrich policy. * The `field` of incoming documents used to match documents from the enrich index. diff --git a/manage-data/ingest/transform-enrich/example-enrich-data-based-on-geolocation.md b/manage-data/ingest/transform-enrich/example-enrich-data-based-on-geolocation.md index ddffd2333..51c8cc7d4 100644 --- a/manage-data/ingest/transform-enrich/example-enrich-data-based-on-geolocation.md +++ b/manage-data/ingest/transform-enrich/example-enrich-data-based-on-geolocation.md @@ -5,7 +5,7 @@ mapped_pages: # Example: Enrich your data based on geolocation [geo-match-enrich-policy-type] -`geo_match` [enrich policies](data-enrichment.md#enrich-policy) match enrich data to incoming documents based on a geographic location, using a [`geo_shape` query](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-shape-query.html). +`geo_match` [enrich policies](data-enrichment.md#enrich-policy) match enrich data to incoming documents based on a geographic location, using a [`geo_shape` query](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-geo-shape-query.md). The following example creates a `geo_match` enrich policy that adds postal codes to incoming documents based on a set of coordinates. It then adds the `geo_match` enrich policy to a processor in an ingest pipeline. @@ -63,12 +63,12 @@ Use the [execute enrich policy API](https://www.elastic.co/docs/api/doc/elastics POST /_enrich/policy/postal_policy/_execute?wait_for_completion=false ``` -Use the [create or update pipeline API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ingest-put-pipeline) to create an ingest pipeline. In the pipeline, add an [enrich processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/enrich-processor.html) that includes: +Use the [create or update pipeline API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ingest-put-pipeline) to create an ingest pipeline. In the pipeline, add an [enrich processor](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/enrich-processor.md) that includes: * Your enrich policy. * The `field` of incoming documents used to match the geoshape of documents from the enrich index. * The `target_field` used to store appended enrich data for incoming documents. This field contains the `match_field` and `enrich_fields` specified in your enrich policy. -* The `shape_relation`, which indicates how the processor matches geoshapes in incoming documents to geoshapes in documents from the enrich index. See [Spatial Relations](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-shape-query.html#_spatial_relations) for valid options and more information. +* The `shape_relation`, which indicates how the processor matches geoshapes in incoming documents to geoshapes in documents from the enrich index. See [Spatial Relations](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-shape-query.md#_spatial_relations) for valid options and more information. ```console PUT /_ingest/pipeline/postal_lookup diff --git a/manage-data/ingest/transform-enrich/example-enrich-data-by-matching-value-to-range.md b/manage-data/ingest/transform-enrich/example-enrich-data-by-matching-value-to-range.md index b7d2d6d54..09db701a1 100644 --- a/manage-data/ingest/transform-enrich/example-enrich-data-by-matching-value-to-range.md +++ b/manage-data/ingest/transform-enrich/example-enrich-data-by-matching-value-to-range.md @@ -5,7 +5,7 @@ mapped_pages: # Example: Enrich your data by matching a value to a range [range-enrich-policy-type] -A `range` [enrich policy](data-enrichment.md#enrich-policy) uses a [`term` query](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html) to match a number, date, or IP address in incoming documents to a range of the same type in the enrich index. Matching a range to a range is not supported. +A `range` [enrich policy](data-enrichment.md#enrich-policy) uses a [`term` query](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-term-query.md) to match a number, date, or IP address in incoming documents to a range of the same type in the enrich index. Matching a range to a range is not supported. The following example creates a `range` enrich policy that adds a descriptive network name and responsible department to incoming documents based on an IP address. It then adds the enrich policy to a processor in an ingest pipeline. @@ -60,7 +60,7 @@ Use the [execute enrich policy API](https://www.elastic.co/docs/api/doc/elastics POST /_enrich/policy/networks-policy/_execute?wait_for_completion=false ``` -Use the [create or update pipeline API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ingest-put-pipeline) to create an ingest pipeline. In the pipeline, add an [enrich processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/enrich-processor.html) that includes: +Use the [create or update pipeline API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ingest-put-pipeline) to create an ingest pipeline. In the pipeline, add an [enrich processor](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/enrich-processor.md) that includes: * Your enrich policy. * The `field` of incoming documents used to match documents from the enrich index. diff --git a/manage-data/ingest/transform-enrich/example-parse-logs.md b/manage-data/ingest/transform-enrich/example-parse-logs.md index 6b2f4d08c..30226559a 100644 --- a/manage-data/ingest/transform-enrich/example-parse-logs.md +++ b/manage-data/ingest/transform-enrich/example-parse-logs.md @@ -28,7 +28,7 @@ These logs contain a timestamp, IP address, and user agent. You want to give the 2. Click **Create pipeline > New pipeline**. 3. Set **Name** to `my-pipeline` and optionally add a description for the pipeline. -4. Add a [grok processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/grok-processor.html) to parse the log message: +4. Add a [grok processor](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/grok-processor.md) to parse the log message: 1. Click **Add a processor** and select the **Grok** processor type. 2. Set **Field** to `message` and **Patterns** to the following [grok pattern](../../../explore-analyze/scripting/grok.md): @@ -44,9 +44,9 @@ These logs contain a timestamp, IP address, and user agent. You want to give the | Processor type | Field | Additional options | Description | | --- | --- | --- | --- | - | [**Date**](https://www.elastic.co/guide/en/elasticsearch/reference/current/date-processor.html) | `@timestamp` | **Formats**: `dd/MMM/yyyy:HH:mm:ss Z` | `Format '@timestamp' as 'dd/MMM/yyyy:HH:mm:ss Z'` | - | [**GeoIP**](https://www.elastic.co/guide/en/elasticsearch/reference/current/geoip-processor.html) | `source.ip` | **Target field**: `source.geo` | `Add 'source.geo' GeoIP data for 'source.ip'` | - | [**User agent**](https://www.elastic.co/guide/en/elasticsearch/reference/current/user-agent-processor.html) | `user_agent` | | `Extract fields from 'user_agent'` | + | [**Date**](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/date-processor.md) | `@timestamp` | **Formats**: `dd/MMM/yyyy:HH:mm:ss Z` | `Format '@timestamp' as 'dd/MMM/yyyy:HH:mm:ss Z'` | + | [**GeoIP**](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/geoip-processor.md) | `source.ip` | **Target field**: `source.geo` | `Add 'source.geo' GeoIP data for 'source.ip'` | + | [**User agent**](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/user-agent-processor.md) | `user_agent` | | `Extract fields from 'user_agent'` | Your form should look similar to this: @@ -132,7 +132,7 @@ These logs contain a timestamp, IP address, and user agent. You want to give the } ``` -12. To verify, search the data stream to retrieve the document. The following search uses [`filter_path`](https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#common-options-response-filtering) to return only the [document source](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html). +12. To verify, search the data stream to retrieve the document. The following search uses [`filter_path`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/common-options.md#common-options-response-filtering) to return only the [document source](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md). ```console GET my-data-stream/_search?filter_path=hits.hits._source diff --git a/manage-data/ingest/transform-enrich/ingest-pipelines-serverless.md b/manage-data/ingest/transform-enrich/ingest-pipelines-serverless.md index 3f25cd2fd..85ac848d0 100644 --- a/manage-data/ingest/transform-enrich/ingest-pipelines-serverless.md +++ b/manage-data/ingest/transform-enrich/ingest-pipelines-serverless.md @@ -30,7 +30,7 @@ In **{{project-settings}} → {{manage-app}} → {{ingest-pipelines-app}}**, you To create a pipeline, click **Create pipeline → New pipeline**. For an example tutorial, see [Example: Parse logs](example-parse-logs.md). -The **New pipeline from CSV** option lets you use a file with comma-separated values (CSV) to create an ingest pipeline that maps custom data to the Elastic Common Schema (ECS). Mapping your custom data to ECS makes the data easier to search and lets you reuse visualizations from other data sets. To get started, check [Map custom data to ECS](https://www.elastic.co/guide/en/ecs/current/ecs-converting.html). +The **New pipeline from CSV** option lets you use a file with comma-separated values (CSV) to create an ingest pipeline that maps custom data to the Elastic Common Schema (ECS). Mapping your custom data to ECS makes the data easier to search and lets you reuse visualizations from other data sets. To get started, check [Map custom data to ECS](asciidocalypse://docs/ecs/docs/reference/ecs/ecs-converting.md). ## Test pipelines [ingest-pipelines-test-pipelines] diff --git a/manage-data/ingest/transform-enrich/ingest-pipelines.md b/manage-data/ingest/transform-enrich/ingest-pipelines.md index 0afcb763b..c329f1c3f 100644 --- a/manage-data/ingest/transform-enrich/ingest-pipelines.md +++ b/manage-data/ingest/transform-enrich/ingest-pipelines.md @@ -7,7 +7,7 @@ mapped_urls: {{es}} ingest pipelines let you perform common transformations on your data before indexing. For example, you can use pipelines to remove fields, extract values from text, and enrich your data. -A pipeline consists of a series of configurable tasks called [processors](https://www.elastic.co/guide/en/elasticsearch/reference/current/processors.html). Each processor runs sequentially, making specific changes to incoming documents. After the processors have run, {{es}} adds the transformed documents to your data stream or index. +A pipeline consists of a series of configurable tasks called [processors](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/index.md). Each processor runs sequentially, making specific changes to incoming documents. After the processors have run, {{es}} adds the transformed documents to your data stream or index. :::{image} ../../../images/elasticsearch-reference-ingest-process.svg :alt: Ingest pipeline diagram @@ -42,11 +42,11 @@ In {{kib}}, open the main menu and click **Stack Management > Ingest Pipelines** To create a pipeline, click **Create pipeline > New pipeline**. For an example tutorial, see [Example: Parse logs](example-parse-logs.md). ::::{tip} -The **New pipeline from CSV** option lets you use a CSV to create an ingest pipeline that maps custom data to the [Elastic Common Schema (ECS)](https://www.elastic.co/guide/en/ecs/current). Mapping your custom data to ECS makes the data easier to search and lets you reuse visualizations from other datasets. To get started, check [Map custom data to ECS](https://www.elastic.co/guide/en/ecs/current/ecs-converting.html). +The **New pipeline from CSV** option lets you use a CSV to create an ingest pipeline that maps custom data to the [Elastic Common Schema (ECS)](https://www.elastic.co/guide/en/ecs/current). Mapping your custom data to ECS makes the data easier to search and lets you reuse visualizations from other datasets. To get started, check [Map custom data to ECS](asciidocalypse://docs/ecs/docs/reference/ecs/ecs-converting.md). :::: -You can also use the [ingest APIs](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-ingest) to create and manage pipelines. The following [create pipeline API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ingest-put-pipeline) request creates a pipeline containing two [`set`](https://www.elastic.co/guide/en/elasticsearch/reference/current/set-processor.html) processors followed by a [`lowercase`](https://www.elastic.co/guide/en/elasticsearch/reference/current/lowercase-processor.html) processor. The processors run sequentially in the order specified. +You can also use the [ingest APIs](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-ingest) to create and manage pipelines. The following [create pipeline API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ingest-put-pipeline) request creates a pipeline containing two [`set`](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/set-processor.md) processors followed by a [`lowercase`](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/lowercase-processor.md) processor. The processors run sequentially in the order specified. ```console PUT _ingest/pipeline/my-pipeline @@ -225,12 +225,12 @@ POST _reindex ## Set a default pipeline [set-default-pipeline] -Use the [`index.default_pipeline`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-default-pipeline) index setting to set a default pipeline. {{es}} applies this pipeline to indexing requests if no `pipeline` parameter is specified. +Use the [`index.default_pipeline`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#index-default-pipeline) index setting to set a default pipeline. {{es}} applies this pipeline to indexing requests if no `pipeline` parameter is specified. ## Set a final pipeline [set-final-pipeline] -Use the [`index.final_pipeline`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-final-pipeline) index setting to set a final pipeline. {{es}} applies this pipeline after the request or default pipeline, even if neither is specified. +Use the [`index.final_pipeline`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#index-final-pipeline) index setting to set a final pipeline. {{es}} applies this pipeline after the request or default pipeline, even if neither is specified. ## Pipelines for {{beats}} [pipelines-for-beats] @@ -246,9 +246,9 @@ output.elasticsearch: ## Pipelines for {{fleet}} and {{agent}} [pipelines-for-fleet-elastic-agent] -{{agent}} integrations ship with default ingest pipelines that preprocess and enrich data before indexing. [{{fleet}}](https://www.elastic.co/guide/en/fleet/current/index.html) applies these pipelines using [index templates](../../data-store/templates.md) that include [pipeline index settings](ingest-pipelines.md#set-default-pipeline). {{es}} matches these templates to your {{fleet}} data streams based on the [stream’s naming scheme](https://www.elastic.co/guide/en/fleet/current/data-streams.html#data-streams-naming-scheme). +{{agent}} integrations ship with default ingest pipelines that preprocess and enrich data before indexing. [{{fleet}}](https://www.elastic.co/guide/en/fleet/current/index.html) applies these pipelines using [index templates](../../data-store/templates.md) that include [pipeline index settings](ingest-pipelines.md#set-default-pipeline). {{es}} matches these templates to your {{fleet}} data streams based on the [stream’s naming scheme](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/data-streams.md#data-streams-naming-scheme). -Each default integration pipeline calls a nonexistent, unversioned `*@custom` ingest pipeline. If unaltered, this pipeline call has no effect on your data. However, you can modify this call to create custom pipelines for integrations that persist across upgrades. Refer to [Tutorial: Transform data with custom ingest pipelines](https://www.elastic.co/guide/en/fleet/current/data-streams-pipeline-tutorial.html) to learn more. +Each default integration pipeline calls a nonexistent, unversioned `*@custom` ingest pipeline. If unaltered, this pipeline call has no effect on your data. However, you can modify this call to create custom pipelines for integrations that persist across upgrades. Refer to [Tutorial: Transform data with custom ingest pipelines](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/data-streams-pipeline-tutorial.md) to learn more. {{fleet}} doesn’t provide a default ingest pipeline for the **Custom logs** integration, but you can specify a pipeline for this integration using an [index template](ingest-pipelines.md#pipeline-custom-logs-index-template) or a [custom configuration](ingest-pipelines.md#pipeline-custom-logs-configuration). @@ -267,7 +267,7 @@ $$$pipeline-custom-logs-index-template$$$ } ``` -2. Create an [index template](../../data-store/templates.md) that includes your pipeline in the [`index.default_pipeline`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-default-pipeline) or [`index.final_pipeline`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-final-pipeline) index setting. Ensure the template is [data stream enabled](../../data-store/data-streams/set-up-data-stream.md#create-index-template). The template’s index pattern should match `logs--*`. +2. Create an [index template](../../data-store/templates.md) that includes your pipeline in the [`index.default_pipeline`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#index-default-pipeline) or [`index.final_pipeline`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#index-final-pipeline) index setting. Ensure the template is [data stream enabled](../../data-store/data-streams/set-up-data-stream.md#create-index-template). The template’s index pattern should match `logs--*`. You can create this template using {{kib}}'s [**Index Management**](../../lifecycle/index-lifecycle-management/index-management-in-kibana.md#manage-index-templates) feature or the [create index template API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-put-index-template). @@ -342,12 +342,12 @@ $$$pipeline-custom-logs-configuration$$$ **{{agent}} standalone** -If you run {{agent}} standalone, you can apply pipelines using an [index template](../../data-store/templates.md) that includes the [`index.default_pipeline`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-default-pipeline) or [`index.final_pipeline`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-final-pipeline) index setting. Alternatively, you can specify the `pipeline` policy setting in your `elastic-agent.yml` configuration. See [Install standalone {{agent}}s](https://www.elastic.co/guide/en/fleet/current/install-standalone-elastic-agent.html). +If you run {{agent}} standalone, you can apply pipelines using an [index template](../../data-store/templates.md) that includes the [`index.default_pipeline`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#index-default-pipeline) or [`index.final_pipeline`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#index-final-pipeline) index setting. Alternatively, you can specify the `pipeline` policy setting in your `elastic-agent.yml` configuration. See [Install standalone {{agent}}s](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/install-standalone-elastic-agent.md). ## Pipelines for search indices [pipelines-in-enterprise-search] -When you create Elasticsearch indices for search use cases, for example, using the [web crawler^](https://www.elastic.co/guide/en/enterprise-search/current/crawler.html) or [connectors](https://www.elastic.co/guide/en/elasticsearch/reference/current/es-connectors.html), these indices are automatically set up with specific ingest pipelines. These processors help optimize your content for search. See [*Ingest pipelines in Search*](../../../solutions/search/ingest-for-search.md) for more information. +When you create Elasticsearch indices for search use cases, for example, using the [web crawler^](https://www.elastic.co/guide/en/enterprise-search/current/crawler.html) or [connectors](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/search-connectors/index.md), these indices are automatically set up with specific ingest pipelines. These processors help optimize your content for search. See [*Ingest pipelines in Search*](../../../solutions/search/ingest-for-search.md) for more information. ## Access source fields in a processor [access-source-fields] @@ -387,7 +387,7 @@ PUT _ingest/pipeline/my-pipeline Use dot notation to access object fields. ::::{important} -If your document contains flattened objects, use the [`dot_expander`](https://www.elastic.co/guide/en/elasticsearch/reference/current/dot-expand-processor.html) processor to expand them first. Other ingest processors cannot access flattened objects. +If your document contains flattened objects, use the [`dot_expander`](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/dot-expand-processor.md) processor to expand them first. Other ingest processors cannot access flattened objects. :::: @@ -633,10 +633,10 @@ PUT _ingest/pipeline/my-pipeline ## Conditionally run a processor [conditionally-run-processor] -Each processor supports an optional `if` condition, written as a [Painless script](https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-guide.html). If provided, the processor only runs when the `if` condition is `true`. +Each processor supports an optional `if` condition, written as a [Painless script](asciidocalypse://docs/elasticsearch/docs/reference/scripting-languages/painless/painless.md). If provided, the processor only runs when the `if` condition is `true`. ::::{important} -`if` condition scripts run in Painless’s [ingest processor context](https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-ingest-processor-context.html). In `if` conditions, `ctx` values are read-only. +`if` condition scripts run in Painless’s [ingest processor context](asciidocalypse://docs/elasticsearch/docs/reference/scripting-languages/painless/painless-ingest-processor-context.md). In `if` conditions, `ctx` values are read-only. :::: @@ -654,7 +654,7 @@ PUT _ingest/pipeline/my-pipeline } ``` -If the [`script.painless.regex.enabled`](https://www.elastic.co/guide/en/elasticsearch/reference/current/circuit-breaker.html#script-painless-regex-enabled) cluster setting is enabled, you can use regular expressions in your `if` condition scripts. For supported syntax, see [Painless regular expressions](https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-regexes.html). +If the [`script.painless.regex.enabled`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/circuit-breaker-settings.md#script-painless-regex-enabled) cluster setting is enabled, you can use regular expressions in your `if` condition scripts. For supported syntax, see [Painless regular expressions](asciidocalypse://docs/elasticsearch/docs/reference/scripting-languages/painless/painless-regexes.md). ::::{tip} If possible, avoid using regular expressions. Expensive regular expressions can slow indexing speeds. @@ -742,7 +742,7 @@ PUT _ingest/pipeline/my-pipeline } ``` -Incoming documents often contain object fields. If a processor script attempts to access a field whose parent object does not exist, {{es}} returns a `NullPointerException`. To avoid these exceptions, use [null safe operators](https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-operators-reference.html#null-safe-operator), such as `?.`, and write your scripts to be null safe. +Incoming documents often contain object fields. If a processor script attempts to access a field whose parent object does not exist, {{es}} returns a `NullPointerException`. To avoid these exceptions, use [null safe operators](asciidocalypse://docs/elasticsearch/docs/reference/scripting-languages/painless/painless-operators-reference.md#null-safe-operator), such as `?.`, and write your scripts to be null safe. For example, `ctx.network?.name.equalsIgnoreCase('Guest')` is not null safe. `ctx.network?.name` can return null. Rewrite the script as `'Guest'.equalsIgnoreCase(ctx.network?.name)`, which is null safe because `Guest` is always non-null. @@ -765,7 +765,7 @@ PUT _ingest/pipeline/my-pipeline ## Conditionally apply pipelines [conditionally-apply-pipelines] -Combine an `if` condition with the [`pipeline`](https://www.elastic.co/guide/en/elasticsearch/reference/current/pipeline-processor.html) processor to apply other pipelines to documents based on your criteria. You can use this pipeline as the [default pipeline](ingest-pipelines.md#set-default-pipeline) in an [index template](../../data-store/templates.md) used to configure multiple data streams or indices. +Combine an `if` condition with the [`pipeline`](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/pipeline-processor.md) processor to apply other pipelines to documents based on your criteria. You can use this pipeline as the [default pipeline](ingest-pipelines.md#set-default-pipeline) in an [index template](../../data-store/templates.md) used to configure multiple data streams or indices. ```console PUT _ingest/pipeline/one-pipeline-to-rule-them-all diff --git a/manage-data/ingest/transform-enrich/logstash-pipelines.md b/manage-data/ingest/transform-enrich/logstash-pipelines.md index 1698d78e0..3045b13af 100644 --- a/manage-data/ingest/transform-enrich/logstash-pipelines.md +++ b/manage-data/ingest/transform-enrich/logstash-pipelines.md @@ -25,7 +25,7 @@ After you configure {{ls}} to use centralized pipeline management, you can no lo ## Manage pipelines [logstash-pipelines-manage-pipelines] -1. [Configure centralized pipeline management](https://www.elastic.co/guide/en/logstash/current/configuring-centralized-pipelines.html). +1. [Configure centralized pipeline management](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/configuring-centralized-pipelines.md). 2. To add a new pipeline, go to **{{project-settings}} → {{manage-app}} → {{ls-pipelines-app}}** and click **Create pipeline**. Provide the following details, then click **Create and deploy**. Pipeline ID @@ -58,4 +58,4 @@ After you configure {{ls}} to use centralized pipeline management, you can no lo To delete one or more pipelines, select their checkboxes then click **Delete**. -For more information about pipeline behavior, go to [Centralized Pipeline Management](https://www.elastic.co/guide/en/logstash/current/logstash-centralized-pipeline-management.html#_pipeline_behavior). +For more information about pipeline behavior, go to [Centralized Pipeline Management](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/logstash-centralized-pipeline-management.md#_pipeline_behavior). diff --git a/manage-data/ingest/transform-enrich/set-up-an-enrich-processor.md b/manage-data/ingest/transform-enrich/set-up-an-enrich-processor.md index 45cf9b7d7..7df3055ee 100644 --- a/manage-data/ingest/transform-enrich/set-up-an-enrich-processor.md +++ b/manage-data/ingest/transform-enrich/set-up-an-enrich-processor.md @@ -17,7 +17,7 @@ To set up an enrich processor, follow these steps: Once you have an enrich processor set up, you can [update your enrich data](#update-enrich-data) and [update your enrich policies](#update-enrich-policies). ::::{important} -The enrich processor performs several operations and may impact the speed of your ingest pipeline. We recommend [node roles](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html) co-locating ingest and data roles to minimize remote search operations. +The enrich processor performs several operations and may impact the speed of your ingest pipeline. We recommend [node roles](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md) co-locating ingest and data roles to minimize remote search operations. We strongly recommend testing and benchmarking your enrich processors before deploying them in production. @@ -40,7 +40,7 @@ To begin, add documents to one or more source indices. These documents should co You can manage source indices just like regular {{es}} indices using the [document](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-document) and [index](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-indices) APIs. -You also can set up [{{beats}}](https://www.elastic.co/guide/en/beats/libbeat/current/getting-started.html), such as a [{{filebeat}}](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation-configuration.html), to automatically send and index documents to your source indices. See [Getting started with {{beats}}](https://www.elastic.co/guide/en/beats/libbeat/current/getting-started.html). +You also can set up [{{beats}}](asciidocalypse://docs/beats/docs/reference/ingestion-tools/index.md), such as a [{{filebeat}}](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-installation-configuration.md), to automatically send and index documents to your source indices. See [Getting started with {{beats}}](asciidocalypse://docs/beats/docs/reference/ingestion-tools/index.md). ## Create an enrich policy [create-enrich-policy] @@ -65,7 +65,7 @@ Once the enrich policy is created, you need to execute it using the [execute enr The *enrich index* contains documents from the policy’s source indices. Enrich indices always begin with `.enrich-*`, are read-only, and are [force merged](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-forcemerge). ::::{warning} -Enrich indices should only be used by the [enrich processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/enrich-processor.html) or the [{{esql}} `ENRICH` command](https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-commands.html#esql-enrich). Avoid using enrich indices for other purposes. +Enrich indices should only be used by the [enrich processor](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/enrich-processor.md) or the [{{esql}} `ENRICH` command](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/esql-commands.md#esql-enrich). Avoid using enrich indices for other purposes. :::: @@ -79,7 +79,7 @@ Once you have source indices, an enrich policy, and the related enrich index in :alt: enrich processor ::: -Define an [enrich processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/enrich-processor.html) and add it to an ingest pipeline using the [create or update pipeline API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ingest-put-pipeline). +Define an [enrich processor](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/enrich-processor.md) and add it to an ingest pipeline using the [create or update pipeline API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ingest-put-pipeline). When defining the enrich processor, you must include at least the following: @@ -89,9 +89,9 @@ When defining the enrich processor, you must include at least the following: You also can use the `max_matches` option to set the number of enrich documents an incoming document can match. If set to the default of `1`, data is added to an incoming document’s target field as a JSON object. Otherwise, the data is added as an array. -See [Enrich](https://www.elastic.co/guide/en/elasticsearch/reference/current/enrich-processor.html) for a full list of configuration options. +See [Enrich](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/enrich-processor.md) for a full list of configuration options. -You also can add other [processors](https://www.elastic.co/guide/en/elasticsearch/reference/current/processors.html) to your ingest pipeline. +You also can add other [processors](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/index.md) to your ingest pipeline. ## Ingest and enrich documents [ingest-enrich-docs] diff --git a/manage-data/lifecycle/curator.md b/manage-data/lifecycle/curator.md index 6cac09cf7..05630ce6c 100644 --- a/manage-data/lifecycle/curator.md +++ b/manage-data/lifecycle/curator.md @@ -6,4 +6,4 @@ navigation_title: Curator Similar to {{ilm-cap}} ({{ilm-init}}), Elasticsearch Curator can help you manage index lifecycles. **If {{ilm-init}} provides the functionality to manage your index lifecycle and you have at least a Basic license, use {{ilm-init}} instead of Curator.** Many {{stack}} components use {{ilm-init}} by default. -If you're looking for additional functionality for managing your index lifecycle, you can read more about how Elasticsearch Curator may help in [Curator index management](https://www.elastic.co/guide/en/elasticsearch/client/curator/current/index.html). +If you're looking for additional functionality for managing your index lifecycle, you can read more about how Elasticsearch Curator may help in [Curator index management](asciidocalypse://docs/curator/docs/reference/elasticsearch/elasticsearch-client-curator/index.md). diff --git a/manage-data/lifecycle/data-stream.md b/manage-data/lifecycle/data-stream.md index 4d2854d4a..09a61f230 100644 --- a/manage-data/lifecycle/data-stream.md +++ b/manage-data/lifecycle/data-stream.md @@ -20,13 +20,13 @@ A data stream lifecycle also supports downsampling the data stream backing indic ## How does it work? [data-streams-lifecycle-how-it-works] -In intervals configured by [`data_streams.lifecycle.poll_interval`](https://www.elastic.co/guide/en/elasticsearch/reference/current/data-stream-lifecycle-settings.html#data-streams-lifecycle-poll-interval), {{es}} goes over each data stream and performs the following steps: +In intervals configured by [`data_streams.lifecycle.poll_interval`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/data-stream-lifecycle-settings.md#data-streams-lifecycle-poll-interval), {{es}} goes over each data stream and performs the following steps: 1. Checks if the data stream has a data stream lifecycle configured, skipping any indices not part of a managed data stream. -2. Rolls over the write index of the data stream, if it fulfills the conditions defined by [`cluster.lifecycle.default.rollover`](https://www.elastic.co/guide/en/elasticsearch/reference/current/data-stream-lifecycle-settings.html#cluster-lifecycle-default-rollover). +2. Rolls over the write index of the data stream, if it fulfills the conditions defined by [`cluster.lifecycle.default.rollover`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/data-stream-lifecycle-settings.md#cluster-lifecycle-default-rollover). 3. After an index is not the write index anymore (i.e. the data stream has been rolled over), automatically tail merges the index. Data stream lifecycle executes a merge operation that only targets the long tail of small segments instead of the whole shard. As the segments are organised into tiers of exponential sizes, merging the long tail of small segments is only a fraction of the cost of force merging to a single segment. The small segments would usually hold the most recent data so tail merging will focus the merging resources on the higher-value data that is most likely to keep being queried. 4. If [downsampling](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-put-data-lifecycle) is configured it will execute all the configured downsampling rounds. -5. Applies retention to the remaining backing indices. This means deleting the backing indices whose `generation_time` is longer than the effective retention period (read more about the [effective retention calculation](data-stream/tutorial-data-stream-retention.md#effective-retention-calculation)). The `generation_time` is only applicable to rolled over backing indices and it is either the time since the backing index got rolled over, or the time optionally configured in the [`index.lifecycle.origination_date`](https://www.elastic.co/guide/en/elasticsearch/reference/current/data-stream-lifecycle-settings.html#index-data-stream-lifecycle-origination-date) setting. +5. Applies retention to the remaining backing indices. This means deleting the backing indices whose `generation_time` is longer than the effective retention period (read more about the [effective retention calculation](data-stream/tutorial-data-stream-retention.md#effective-retention-calculation)). The `generation_time` is only applicable to rolled over backing indices and it is either the time since the backing index got rolled over, or the time optionally configured in the [`index.lifecycle.origination_date`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/data-stream-lifecycle-settings.md#index-data-stream-lifecycle-origination-date) setting. ::::{important} We use the `generation_time` instead of the creation time because this ensures that all data in the backing index have passed the retention period. As a result, the retention period is not the exact time data gets deleted, but the minimum time data will be stored. @@ -34,7 +34,7 @@ We use the `generation_time` instead of the creation time because this ensures t ::::{note} -Steps `2-4` apply only to backing indices that are not already managed by {{ilm-init}}, meaning that these indices either do not have an {{ilm-init}} policy defined, or if they do, they have [`index.lifecycle.prefer_ilm`](https://www.elastic.co/guide/en/elasticsearch/reference/current/data-stream-lifecycle-settings.html#index-lifecycle-prefer-ilm) set to `false`. +Steps `2-4` apply only to backing indices that are not already managed by {{ilm-init}}, meaning that these indices either do not have an {{ilm-init}} policy defined, or if they do, they have [`index.lifecycle.prefer_ilm`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/data-stream-lifecycle-settings.md#index-lifecycle-prefer-ilm) set to `false`. :::: diff --git a/manage-data/lifecycle/data-stream/tutorial-data-stream-retention.md b/manage-data/lifecycle/data-stream/tutorial-data-stream-retention.md index 241e4e456..7603388b1 100644 --- a/manage-data/lifecycle/data-stream/tutorial-data-stream-retention.md +++ b/manage-data/lifecycle/data-stream/tutorial-data-stream-retention.md @@ -50,8 +50,8 @@ Retention does not define the period that the data will be removed, but the mini We define 4 different types of retention: * The data stream retention, or `data_retention`, which is the retention configured on the data stream level. It can be set via an [index template](../../data-store/templates.md) for future data streams or via the [PUT data stream lifecycle API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-put-data-lifecycle) for an existing data stream. When the data stream retention is not set, it implies that the data need to be kept forever. -* The global default retention, let’s call it `default_retention`, which is a retention configured via the cluster setting [`data_streams.lifecycle.retention.default`](https://www.elastic.co/guide/en/elasticsearch/reference/current/data-stream-lifecycle-settings.html#data-streams-lifecycle-retention-default) and will be applied to all data streams managed by data stream lifecycle that do not have `data_retention` configured. Effectively, it ensures that there will be no data streams keeping their data forever. This can be set via the [update cluster settings API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cluster-put-settings). -* The global max retention, let’s call it `max_retention`, which is a retention configured via the cluster setting [`data_streams.lifecycle.retention.max`](https://www.elastic.co/guide/en/elasticsearch/reference/current/data-stream-lifecycle-settings.html#data-streams-lifecycle-retention-max) and will be applied to all data streams managed by data stream lifecycle. Effectively, it ensures that there will be no data streams whose retention will exceed this time period. This can be set via the [update cluster settings API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cluster-put-settings). +* The global default retention, let’s call it `default_retention`, which is a retention configured via the cluster setting [`data_streams.lifecycle.retention.default`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/data-stream-lifecycle-settings.md#data-streams-lifecycle-retention-default) and will be applied to all data streams managed by data stream lifecycle that do not have `data_retention` configured. Effectively, it ensures that there will be no data streams keeping their data forever. This can be set via the [update cluster settings API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cluster-put-settings). +* The global max retention, let’s call it `max_retention`, which is a retention configured via the cluster setting [`data_streams.lifecycle.retention.max`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/data-stream-lifecycle-settings.md#data-streams-lifecycle-retention-max) and will be applied to all data streams managed by data stream lifecycle. Effectively, it ensures that there will be no data streams whose retention will exceed this time period. This can be set via the [update cluster settings API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cluster-put-settings). * The effective retention, or `effective_retention`, which is the retention applied at a data stream on a given moment. Effective retention cannot be set, it is derived by taking into account all the configured retention listed above and is calculated as it is described [here](#effective-retention-calculation). ::::{note} @@ -166,7 +166,7 @@ We see that it will remain the same with what the user configured: ## How is the effective retention applied? [effective-retention-application] -Retention is applied to the remaining backing indices of a data stream as the last step of [a data stream lifecycle run](../data-stream.md#data-streams-lifecycle-how-it-works). Data stream lifecycle will retrieve the backing indices whose `generation_time` is longer than the effective retention period and delete them. The `generation_time` is only applicable to rolled over backing indices and it is either the time since the backing index got rolled over, or the time optionally configured in the [`index.lifecycle.origination_date`](https://www.elastic.co/guide/en/elasticsearch/reference/current/data-stream-lifecycle-settings.html#index-data-stream-lifecycle-origination-date) setting. +Retention is applied to the remaining backing indices of a data stream as the last step of [a data stream lifecycle run](../data-stream.md#data-streams-lifecycle-how-it-works). Data stream lifecycle will retrieve the backing indices whose `generation_time` is longer than the effective retention period and delete them. The `generation_time` is only applicable to rolled over backing indices and it is either the time since the backing index got rolled over, or the time optionally configured in the [`index.lifecycle.origination_date`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/data-stream-lifecycle-settings.md#index-data-stream-lifecycle-origination-date) setting. ::::{important} We use the `generation_time` instead of the creation time because this ensures that all data in the backing index have passed the retention period. As a result, the retention period is not the exact time data get deleted, but the minimum time data will be stored. diff --git a/manage-data/lifecycle/data-stream/tutorial-migrate-ilm-managed-data-stream-to-data-stream-lifecycle.md b/manage-data/lifecycle/data-stream/tutorial-migrate-ilm-managed-data-stream-to-data-stream-lifecycle.md index f68181baa..03555cdc7 100644 --- a/manage-data/lifecycle/data-stream/tutorial-migrate-ilm-managed-data-stream-to-data-stream-lifecycle.md +++ b/manage-data/lifecycle/data-stream/tutorial-migrate-ilm-managed-data-stream-to-data-stream-lifecycle.md @@ -12,7 +12,7 @@ In this tutorial we’ll look at migrating an existing data stream from [Index L To migrate a data stream from {{ilm-init}} to data stream lifecycle we’ll have to execute two steps: -1. Update the index template that’s backing the data stream to set [prefer_ilm](https://www.elastic.co/guide/en/elasticsearch/reference/current/data-stream-lifecycle-settings.html#index-lifecycle-prefer-ilm) to `false`, and to configure data stream lifecycle. +1. Update the index template that’s backing the data stream to set [prefer_ilm](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/data-stream-lifecycle-settings.md#index-lifecycle-prefer-ilm) to `false`, and to configure data stream lifecycle. 2. Configure the data stream lifecycle for the *existing* data stream using the [lifecycle API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-put-data-lifecycle). For more details see the [migrate to data stream lifecycle](#migrate-from-ilm-to-dsl) section. @@ -124,11 +124,11 @@ Inspecting the response we’ll see that both backing indices are managed by {{i ``` 1. The name of the backing index. -2. For each backing index we display the value of the [prefer_ilm](https://www.elastic.co/guide/en/elasticsearch/reference/current/data-stream-lifecycle-settings.html#index-lifecycle-prefer-ilm) configuration which will indicate if {{ilm-init}} takes precedence over data stream lifecycle in case both systems are configured for an index. +2. For each backing index we display the value of the [prefer_ilm](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/data-stream-lifecycle-settings.md#index-lifecycle-prefer-ilm) configuration which will indicate if {{ilm-init}} takes precedence over data stream lifecycle in case both systems are configured for an index. 3. The {{ilm-init}} policy configured for this index. 4. The system that manages this index (possible values are "Index Lifecycle Management", "Data stream lifecycle", or "Unmanaged") 5. The system that will manage the next generation index (the new write index of this data stream, once the data stream is rolled over). The possible values are "Index Lifecycle Management", "Data stream lifecycle", or "Unmanaged". -6. The [prefer_ilm](https://www.elastic.co/guide/en/elasticsearch/reference/current/data-stream-lifecycle-settings.html#index-lifecycle-prefer-ilm) value configured in the index template that’s backing the data stream. This value will be configured for all the new backing indices. If it’s not configured in the index template the backing indices will receive the `true` default value ({{ilm-init}} takes precedence over data stream lifecycle by default as it’s currently richer in features). +6. The [prefer_ilm](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/data-stream-lifecycle-settings.md#index-lifecycle-prefer-ilm) value configured in the index template that’s backing the data stream. This value will be configured for all the new backing indices. If it’s not configured in the index template the backing indices will receive the `true` default value ({{ilm-init}} takes precedence over data stream lifecycle by default as it’s currently richer in features). 7. The {{ilm-init}} policy configured in the index template that’s backing this data stream (which will be configured on all the new backing indices, as long as it exists in the index template). @@ -137,7 +137,7 @@ Inspecting the response we’ll see that both backing indices are managed by {{i To migrate the `dsl-data-stream` to data stream lifecycle we’ll have to execute two steps: -1. Update the index template that’s backing the data stream to set [prefer_ilm](https://www.elastic.co/guide/en/elasticsearch/reference/current/data-stream-lifecycle-settings.html#index-lifecycle-prefer-ilm) to `false`, and to configure data stream lifecycle. +1. Update the index template that’s backing the data stream to set [prefer_ilm](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/data-stream-lifecycle-settings.md#index-lifecycle-prefer-ilm) to `false`, and to configure data stream lifecycle. 2. Configure the data stream lifecycle for the *existing* `dsl-data-stream` using the [lifecycle API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-put-data-lifecycle). ::::{important} diff --git a/manage-data/lifecycle/data-tiers.md b/manage-data/lifecycle/data-tiers.md index 0bec5e43b..a8da25e14 100644 --- a/manage-data/lifecycle/data-tiers.md +++ b/manage-data/lifecycle/data-tiers.md @@ -7,7 +7,7 @@ mapped_urls: # Data tiers -A *data tier* is a collection of [nodes](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html) within a cluster that share the same [data node role](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#node-roles), and a hardware profile that’s appropriately sized for the role. Elastic recommends that nodes in the same tier share the same hardware profile to avoid [hot spotting](/troubleshoot/elasticsearch/hotspotting.md). +A *data tier* is a collection of [nodes](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md) within a cluster that share the same [data node role](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md#node-roles), and a hardware profile that’s appropriately sized for the role. Elastic recommends that nodes in the same tier share the same hardware profile to avoid [hot spotting](/troubleshoot/elasticsearch/hotspotting.md). ## Available data tiers [available-tier] @@ -21,11 +21,11 @@ The data tiers that you use, and the way that you use them, depends on the data * [Hot tier](/manage-data/lifecycle/data-tiers.md#hot-tier) nodes handle the indexing load for time series data, such as logs or metrics. They hold your most recent, most-frequently-accessed data. * [Warm tier](/manage-data/lifecycle/data-tiers.md#warm-tier) nodes hold time series data that is accessed less-frequently and rarely needs to be updated. -* [Cold tier](/manage-data/lifecycle/data-tiers.md#cold-tier) nodes hold time series data that is accessed infrequently and not normally updated. To save space, you can keep [fully mounted indices](/deploy-manage/tools/snapshot-and-restore/searchable-snapshots.md#fully-mounted) of [{{search-snaps}}](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-searchable-snapshot.html) on the cold tier. These fully mounted indices eliminate the need for replicas, reducing required disk space by approximately 50% compared to the regular indices. -* [Frozen tier](/manage-data/lifecycle/data-tiers.md#frozen-tier) nodes hold time series data that is accessed rarely and never updated. The frozen tier stores [partially mounted indices](/deploy-manage/tools/snapshot-and-restore/searchable-snapshots.md#partially-mounted) of [{{search-snaps}}](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-searchable-snapshot.html) exclusively. This extends the storage capacity even further — by up to 20 times compared to the warm tier. +* [Cold tier](/manage-data/lifecycle/data-tiers.md#cold-tier) nodes hold time series data that is accessed infrequently and not normally updated. To save space, you can keep [fully mounted indices](/deploy-manage/tools/snapshot-and-restore/searchable-snapshots.md#fully-mounted) of [{{search-snaps}}](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-searchable-snapshot.md) on the cold tier. These fully mounted indices eliminate the need for replicas, reducing required disk space by approximately 50% compared to the regular indices. +* [Frozen tier](/manage-data/lifecycle/data-tiers.md#frozen-tier) nodes hold time series data that is accessed rarely and never updated. The frozen tier stores [partially mounted indices](/deploy-manage/tools/snapshot-and-restore/searchable-snapshots.md#partially-mounted) of [{{search-snaps}}](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-searchable-snapshot.md) exclusively. This extends the storage capacity even further — by up to 20 times compared to the warm tier. ::::{tip} -The performance of an {{es}} node is often limited by the performance of the underlying storage and hardware profile. For example hardware profiles, refer to Elastic Cloud’s [instance configurations](https://www.elastic.co/guide/en/cloud/current/ec-reference-hardware.html). Review our recommendations for optimizing your storage for [indexing](/deploy-manage/production-guidance/optimize-performance/indexing-speed.md#indexing-use-faster-hardware) and [search](/deploy-manage/production-guidance/optimize-performance/search-speed.md#search-use-faster-hardware). +The performance of an {{es}} node is often limited by the performance of the underlying storage and hardware profile. For example hardware profiles, refer to Elastic Cloud’s [instance configurations](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/hardware.md). Review our recommendations for optimizing your storage for [indexing](/deploy-manage/production-guidance/optimize-performance/indexing-speed.md#indexing-use-faster-hardware) and [search](/deploy-manage/production-guidance/optimize-performance/search-speed.md#search-use-faster-hardware). :::: ::::{important} @@ -66,7 +66,7 @@ Time series data can move to the warm tier once it is being queried less frequen When you no longer need to search time series data regularly, it can move from the warm tier to the cold tier. While still searchable, this tier is typically optimized for lower storage costs rather than search speed. -For better storage savings, you can keep [fully mounted indices](/deploy-manage/tools/snapshot-and-restore/searchable-snapshots.md#fully-mounted) of [{{search-snaps}}](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-searchable-snapshot.html) on the cold tier. Unlike regular indices, these fully mounted indices don’t require replicas for reliability. In the event of a failure, they can recover data from the underlying snapshot instead. This potentially halves the local storage needed for the data. A snapshot repository is required to use fully mounted indices in the cold tier. Fully mounted indices are read-only. +For better storage savings, you can keep [fully mounted indices](/deploy-manage/tools/snapshot-and-restore/searchable-snapshots.md#fully-mounted) of [{{search-snaps}}](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-searchable-snapshot.md) on the cold tier. Unlike regular indices, these fully mounted indices don’t require replicas for reliability. In the event of a failure, they can recover data from the underlying snapshot instead. This potentially halves the local storage needed for the data. A snapshot repository is required to use fully mounted indices in the cold tier. Fully mounted indices are read-only. Alternatively, you can use the cold tier to store regular indices with replicas instead of using {{search-snaps}}. This lets you store older data on less expensive hardware but doesn’t reduce required disk space compared to the warm tier. @@ -186,7 +186,7 @@ To make sure that all data can be migrated from the data tier you want to disabl 4. Move shards off the nodes to be removed from the cluster. - You must remove any [index-level shard allocation filters](https://www.elastic.co/guide/en/elasticsearch/reference/current/shard-allocation-filtering.html) from the indices on the nodes to be removed. ILM uses different rules depending on the policy and version of Elasticsearch. Check the index settings to determine which rule to use: + You must remove any [index-level shard allocation filters](/deploy-manage/distributed-architecture/shard-allocation-relocation-recovery/index-level-shard-allocation.md) from the indices on the nodes to be removed. ILM uses different rules depending on the policy and version of Elasticsearch. Check the index settings to determine which rule to use: ```sh GET /my-index/_settings @@ -306,7 +306,7 @@ To make sure that all data can be migrated from the data tier you want to disabl ##### Searchable snapshot data tier [ece-disable-searchable-snapshot-data-tier] -When data reaches the `cold` or `frozen` phases, it is automatically converted to a [searchable snapshot](https://www.elastic.co/guide/en/elasticsearch/reference/current/searchable-snapshots.html) by ILM. If you do not intend to delete this data, you should manually restore each of the searchable snapshot indices to a regular index before disabling the data tier, by following these steps: +When data reaches the `cold` or `frozen` phases, it is automatically converted to a [searchable snapshot](/deploy-manage/tools/snapshot-and-restore/searchable-snapshots.md) by ILM. If you do not intend to delete this data, you should manually restore each of the searchable snapshot indices to a regular index before disabling the data tier, by following these steps: 1. Stop ILM and check ILM status is `STOPPED` to prevent data from migrating to the phase you intend to disable while you are working through the next steps. @@ -363,7 +363,7 @@ When data reaches the `cold` or `frozen` phases, it is automatically converted t 5. Restore indices from the searchable snapshots. 1. Follow the steps to [specify the data tier based allocation inclusion rules](/manage-data/lifecycle/data-tiers.md#update-data-tier-allocation-rules). - 2. Remove the associated ILM policy (set it to `null`). If you want to apply a different ILM policy, follow the steps to [Switch lifecycle policies](https://www.elastic.co/guide/en/elasticsearch/reference/current/set-up-lifecycle-policy.html#switch-lifecycle-policies). + 2. Remove the associated ILM policy (set it to `null`). If you want to apply a different ILM policy, follow the steps to [Switch lifecycle policies](/manage-data/lifecycle/index-lifecycle-management/configure-lifecycle-policy.md#switch-lifecycle-policies). 3. If needed, specify the alias for rollover, otherwise set it to `null`. 4. Optionally, specify the desired number of replica shards. @@ -433,7 +433,7 @@ We recommend you use [dedicated nodes](/deploy-manage/distributed-architecture/c ## Data tier index allocation [data-tier-allocation] -The [`index.routing.allocation.include._tier_preference`](https://www.elastic.co/guide/en/elasticsearch/reference/current/data-tier-shard-filtering.html#tier-preference-allocation-filter) setting determines which tier the index should be allocated to. +The [`index.routing.allocation.include._tier_preference`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/data-tier-allocation-settings.md#tier-preference-allocation-filter) setting determines which tier the index should be allocated to. When you create an index, by default {{es}} sets the `_tier_preference` to `data_content` to automatically allocate the index shards to the content tier. @@ -448,7 +448,7 @@ You can override this setting after index creation by [updating the index settin This setting also accepts multiple tiers in order of preference. This prevents indices from remaining unallocated if no nodes are available in the preferred tier. For example, when {{ilm}} migrates an index to the cold phase, it sets the index `_tier_preference` to `data_cold,data_warm,data_hot`. -To remove the data tier preference setting, set the `_tier_preference` value to `null`. This allows the index to allocate to any data node within the cluster. Setting the `_tier_preference` to `null` does not restore the default value. Note that, in the case of managed indices, a [migrate](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-migrate.html) action might apply a new value in its place. +To remove the data tier preference setting, set the `_tier_preference` value to `null`. This allows the index to allocate to any data node within the cluster. Setting the `_tier_preference` to `null` does not restore the default value. Note that, in the case of managed indices, a [migrate](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-migrate.md) action might apply a new value in its place. ### Determine the current data tier preference [data-tier-allocation-value] @@ -467,4 +467,4 @@ This setting will not unallocate a currently allocated shard, but might prevent ### Automatic data tier migration [data-tier-migration] -{{ilm-init}} automatically transitions managed indices through the available data tiers using the [migrate](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-migrate.html) action. By default, this action is automatically injected in every phase. You can explicitly specify the migrate action with `"enabled": false` to [disable automatic migration](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-migrate.html#ilm-disable-migrate-ex), for example, if you’re using the [allocate action](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-allocate.html) to manually specify allocation rules. +{{ilm-init}} automatically transitions managed indices through the available data tiers using the [migrate](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-migrate.md) action. By default, this action is automatically injected in every phase. You can explicitly specify the migrate action with `"enabled": false` to [disable automatic migration](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-migrate.md#ilm-disable-migrate-ex), for example, if you’re using the [allocate action](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-allocate.md) to manually specify allocation rules. diff --git a/manage-data/lifecycle/index-lifecycle-management.md b/manage-data/lifecycle/index-lifecycle-management.md index 9840bad15..d6a7dcbac 100644 --- a/manage-data/lifecycle/index-lifecycle-management.md +++ b/manage-data/lifecycle/index-lifecycle-management.md @@ -37,7 +37,7 @@ To use {{ilm-init}}, all nodes in a cluster must run the same version. Although * **Shrink**: Reduces the number of primary shards in an index. * **Force merge**: Triggers a [force merge](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-forcemerge.html) to reduce the number of segments in an index’s shards. * **Delete**: Permanently remove an index, including all of its data and metadata. -* [And more](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-actions.html) +* [And more](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/index.md) Each action has options you can use to specify index behavior and characteristics like: @@ -55,7 +55,7 @@ For example, if you are indexing metrics data from a fleet of ATMs into Elastics 3. After 7 days, move the index into the cold phase and move it to less expensive hardware. 4. Delete the index once the required 30 day retention period is reached. -**Learn about all available actions in [Index lifecycle actions](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-actions.html).** +**Learn about all available actions in [Index lifecycle actions](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/index.md).** ## Create and manage {{ilm-init}} policies diff --git a/manage-data/lifecycle/index-lifecycle-management/configure-lifecycle-policy.md b/manage-data/lifecycle/index-lifecycle-management/configure-lifecycle-policy.md index 53ec02ee1..c37ac213d 100644 --- a/manage-data/lifecycle/index-lifecycle-management/configure-lifecycle-policy.md +++ b/manage-data/lifecycle/index-lifecycle-management/configure-lifecycle-policy.md @@ -202,7 +202,7 @@ To switch an index’s lifecycle policy, follow these steps: 2. The remove policy API removes all {{ilm-init}} metadata from the index and doesn’t consider the index’s lifecycle status. This can leave indices in an undesired state. - For example, the [`forcemerge`](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-forcemerge.html) action temporarily closes an index before reopening it. Removing an index’s {{ilm-init}} policy during a `forcemerge` can leave the index closed indefinitely. + For example, the [`forcemerge`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-forcemerge.md) action temporarily closes an index before reopening it. Removing an index’s {{ilm-init}} policy during a `forcemerge` can leave the index closed indefinitely. After policy removal, use the [get index API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-get) to check an index’s state . Target a data stream or alias to get the state of all its indices. diff --git a/manage-data/lifecycle/index-lifecycle-management/index-lifecycle.md b/manage-data/lifecycle/index-lifecycle-management/index-lifecycle.md index b9d21d94c..d34fdd9b7 100644 --- a/manage-data/lifecycle/index-lifecycle-management/index-lifecycle.md +++ b/manage-data/lifecycle/index-lifecycle-management/index-lifecycle.md @@ -31,7 +31,7 @@ If you use {{es}}'s security features, {{ilm-init}} performs operations as the u The minimum age defaults to zero, which causes {{ilm-init}} to move indices to the next phase as soon as all actions in the current phase complete. ::::{note} -If an index has been [rolled over](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-rollover.html), then the `min_age` value is relative to the time the index was rolled over, not the index creation time. [Learn more](../../../troubleshoot/elasticsearch/index-lifecycle-management-errors.md#min-age-calculation). +If an index has been [rolled over](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-rollover.md), then the `min_age` value is relative to the time the index was rolled over, not the index creation time. [Learn more](../../../troubleshoot/elasticsearch/index-lifecycle-management-errors.md#min-age-calculation). :::: @@ -56,42 +56,42 @@ When an index enters a phase, {{ilm-init}} caches the phase definition in the in * Hot - * [Set Priority](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-set-priority.html) - * [Unfollow](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-unfollow.html) - * [Rollover](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-rollover.html) - * [Read-Only](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-readonly.html) - * [Downsample](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-downsample.html) - * [Shrink](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-shrink.html) - * [Force Merge](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-forcemerge.html) - * [Searchable Snapshot](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-searchable-snapshot.html) + * [Set Priority](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-set-priority.md) + * [Unfollow](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-unfollow.md) + * [Rollover](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-rollover.md) + * [Read-Only](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-readonly.md) + * [Downsample](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-downsample.md) + * [Shrink](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-shrink.md) + * [Force Merge](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-forcemerge.md) + * [Searchable Snapshot](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-searchable-snapshot.md) * Warm - * [Set Priority](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-set-priority.html) - * [Unfollow](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-unfollow.html) - * [Read-Only](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-readonly.html) - * [Downsample](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-downsample.html) - * [Allocate](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-allocate.html) - * [Migrate](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-migrate.html) - * [Shrink](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-shrink.html) - * [Force Merge](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-forcemerge.html) + * [Set Priority](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-set-priority.md) + * [Unfollow](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-unfollow.md) + * [Read-Only](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-readonly.md) + * [Downsample](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-downsample.md) + * [Allocate](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-allocate.md) + * [Migrate](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-migrate.md) + * [Shrink](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-shrink.md) + * [Force Merge](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-forcemerge.md) * Cold - * [Set Priority](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-set-priority.html) - * [Unfollow](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-unfollow.html) - * [Read-Only](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-readonly.html) - * [Downsample](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-downsample.html) - * [Searchable Snapshot](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-searchable-snapshot.html) - * [Allocate](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-allocate.html) - * [Migrate](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-migrate.html) + * [Set Priority](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-set-priority.md) + * [Unfollow](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-unfollow.md) + * [Read-Only](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-readonly.md) + * [Downsample](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-downsample.md) + * [Searchable Snapshot](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-searchable-snapshot.md) + * [Allocate](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-allocate.md) + * [Migrate](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-migrate.md) * Frozen - * [Unfollow](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-unfollow.html) - * [Searchable Snapshot](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-searchable-snapshot.html) + * [Unfollow](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-unfollow.md) + * [Searchable Snapshot](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-searchable-snapshot.md) * Delete - * [Wait For Snapshot](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-wait-for-snapshot.html) - * [Delete](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-delete.html) + * [Wait For Snapshot](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-wait-for-snapshot.md) + * [Delete](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-delete.md) diff --git a/manage-data/lifecycle/index-lifecycle-management/index-management-in-kibana.md b/manage-data/lifecycle/index-lifecycle-management/index-management-in-kibana.md index 02a4da5dd..191fb191d 100644 --- a/manage-data/lifecycle/index-lifecycle-management/index-management-in-kibana.md +++ b/manage-data/lifecycle/index-lifecycle-management/index-management-in-kibana.md @@ -32,7 +32,7 @@ Investigate your indices and perform operations from the **Indices** view. * To show details and perform operations such as close, forcemerge, and flush, click the index name. To perform operations on multiple indices, select their checkboxes and then open the **Manage** menu. For more information on managing indices, refer to [Index APIs](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-indices). * To filter the list of indices, use the search bar or click a badge. Badges indicate if an index is a [follower index](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-ccr-follow), a [rollup index](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-rollup-get-rollup-index-caps), or [frozen](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-unfreeze). -* To drill down into the index [mappings](../../data-store/mapping.md), [settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-modules-settings), and statistics, click an index name. From this view, you can navigate to **Discover** to further explore the documents in the index. +* To drill down into the index [mappings](../../data-store/mapping.md), [settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#index-modules-settings), and statistics, click an index name. From this view, you can navigate to **Discover** to further explore the documents in the index. :::{image} ../../../images/elasticsearch-reference-management_index_details.png :alt: Index Management UI @@ -99,7 +99,7 @@ In this tutorial, you’ll create an index template and use it to configure two ::: 2. Define index settings. These are optional. For this tutorial, leave this section blank. -3. Define a mapping that contains an [object](https://www.elastic.co/guide/en/elasticsearch/reference/current/object.html) field named `geo` with a child [`geo_point`](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html) field named `coordinates`: +3. Define a mapping that contains an [object](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/object.md) field named `geo` with a child [`geo_point`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/geo-point.md) field named `coordinates`: :::{image} ../../../images/elasticsearch-reference-management-index-templates-mappings.png :alt: Mapped fields page @@ -189,7 +189,7 @@ Use the **Enrich Policies** view to add data from your existing indices to incom * The source indices that store enrich data as documents * The fields from the source indices used to match incoming documents * The enrich fields containing enrich data from the source indices that you want to add to incoming documents -* An optional [query](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-all-query.html). +* An optional [query](asciidocalypse://docs/elasticsearch/docs/reference/query-languages/query-dsl-match-all-query.md). :::{image} ../../../images/elasticsearch-reference-management-enrich-policies.png :alt: Enrich policies diff --git a/manage-data/lifecycle/index-lifecycle-management/manage-existing-indices.md b/manage-data/lifecycle/index-lifecycle-management/manage-existing-indices.md index 726eef576..4773fa73c 100644 --- a/manage-data/lifecycle/index-lifecycle-management/manage-existing-indices.md +++ b/manage-data/lifecycle/index-lifecycle-management/manage-existing-indices.md @@ -24,7 +24,7 @@ Define a separate policy for your older indices that omits the rollover action. Keep in mind that policies applied to existing indices compare the `min_age` for each phase to the original creation date of the index, and might proceed through multiple phases immediately. If your policy performs resource-intensive operations like force merge, you don’t want to have a lot of indices performing those operations all at once when you switch over to {{ilm-init}}. -You can specify different `min_age` values in the policy you use for existing indices, or set [`index.lifecycle.origination_date`](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-settings.html#index-lifecycle-origination-date) to control how the index age is calculated. +You can specify different `min_age` values in the policy you use for existing indices, or set [`index.lifecycle.origination_date`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/index-lifecycle-management-settings.md#index-lifecycle-origination-date) to control how the index age is calculated. Once all pre-{{ilm-init}} indices have been aged out and removed, you can delete the policy you used to manage them. diff --git a/manage-data/lifecycle/index-lifecycle-management/migrate-index-allocation-filters-to-node-roles.md b/manage-data/lifecycle/index-lifecycle-management/migrate-index-allocation-filters-to-node-roles.md index bfc2cc311..716da992d 100644 --- a/manage-data/lifecycle/index-lifecycle-management/migrate-index-allocation-filters-to-node-roles.md +++ b/manage-data/lifecycle/index-lifecycle-management/migrate-index-allocation-filters-to-node-roles.md @@ -5,7 +5,7 @@ mapped_pages: # Migrate index allocation filters to node roles [migrate-index-allocation-filters] -If you currently use [custom node attributes](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#custom-node-attributes) and [attribute-based allocation filters](../../../deploy-manage/distributed-architecture/shard-allocation-relocation-recovery/index-level-shard-allocation.md) to move indices through [data tiers](../data-tiers.md) in a [hot-warm-cold architecture](https://www.elastic.co/blog/implementing-hot-warm-cold-in-elasticsearch-with-index-lifecycle-management), we recommend that you switch to using the built-in node roles and automatic [data tier allocation](../data-tiers.md#data-tier-allocation). Using node roles enables {{ilm-init}} to automatically move indices between data tiers. +If you currently use [custom node attributes](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md#custom-node-attributes) and [attribute-based allocation filters](../../../deploy-manage/distributed-architecture/shard-allocation-relocation-recovery/index-level-shard-allocation.md) to move indices through [data tiers](../data-tiers.md) in a [hot-warm-cold architecture](https://www.elastic.co/blog/implementing-hot-warm-cold-in-elasticsearch-with-index-lifecycle-management), we recommend that you switch to using the built-in node roles and automatic [data tier allocation](../data-tiers.md#data-tier-allocation). Using node roles enables {{ilm-init}} to automatically move indices between data tiers. ::::{note} While we recommend relying on automatic data tier allocation to manage your data in a hot-warm-cold architecture, you can still use attribute-based allocation filters to control shard allocation for other purposes. @@ -45,7 +45,7 @@ To switch to using node roles: ### Assign data nodes to a data tier [assign-data-tier] -Configure the appropriate roles for each data node to assign it to one or more data tiers: `data_hot`, `data_content`, `data_warm`, `data_cold`, or `data_frozen`. A node can also have other [roles](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html). By default, new nodes are configured with all roles. +Configure the appropriate roles for each data node to assign it to one or more data tiers: `data_hot`, `data_content`, `data_warm`, `data_cold`, or `data_frozen`. A node can also have other [roles](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md). By default, new nodes are configured with all roles. When you add a data tier to an {{ess}} deployment, one or more nodes are automatically configured with the corresponding role. To explicitly change the role of a node in an {{ess}} deployment, use the [Update deployment API](../../../deploy-manage/deploy/elastic-cloud/manage-deployments-using-elastic-cloud-api.md#ec_update_a_deployment). Replace the node’s `node_type` configuration with the appropriate `node_roles`. For example, the following configuration adds the node to the hot and content tiers, and enables it to act as an ingest node, remote, and transform node. @@ -68,7 +68,7 @@ node.roles [ data_hot, data_content ] ### Remove custom allocation settings from existing {{ilm-init}} policies [remove-custom-allocation-settings] -Update the allocate action for each lifecycle phase to remove the attribute-based allocation settings. {{ilm-init}} will inject a [migrate](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-migrate.html) action into each phase to automatically transition the indices through the data tiers. +Update the allocate action for each lifecycle phase to remove the attribute-based allocation settings. {{ilm-init}} will inject a [migrate](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-migrate.md) action into each phase to automatically transition the indices through the data tiers. If the allocate action does not set the number of replicas, remove the allocate action entirely. (An empty allocate action is invalid.) @@ -95,12 +95,12 @@ To completely avoid the issues that raise when mixing the tier preference and cu ### Set a tier preference for existing indices [set-tier-preference] -{{ilm-init}} automatically transitions managed indices through the available data tiers by automatically injecting a [migrate action](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-migrate.html) into each phase. +{{ilm-init}} automatically transitions managed indices through the available data tiers by automatically injecting a [migrate action](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/ilm-migrate.md) into each phase. To enable {{ilm-init}} to move an *existing* managed index through the data tiers, update the index settings to: 1. Remove the custom allocation filter by setting it to `null`. -2. Set the [tier preference](https://www.elastic.co/guide/en/elasticsearch/reference/current/data-tier-shard-filtering.html#tier-preference-allocation-filter). +2. Set the [tier preference](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/data-tier-allocation-settings.md#tier-preference-allocation-filter). For example, if your old template set the `data` attribute to `hot` to allocate shards to the hot tier, set the `data` attribute to `null` and set the `_tier_preference` to `data_hot`. diff --git a/manage-data/lifecycle/index-lifecycle-management/rollover.md b/manage-data/lifecycle/index-lifecycle-management/rollover.md index 6f1d433c5..f34fcd0e7 100644 --- a/manage-data/lifecycle/index-lifecycle-management/rollover.md +++ b/manage-data/lifecycle/index-lifecycle-management/rollover.md @@ -17,7 +17,7 @@ We recommend using [data streams](https://www.elastic.co/docs/api/doc/elasticsea Each data stream requires an [index template](../../data-store/templates.md) that contains: * A name or wildcard (`*`) pattern for the data stream. -* The data stream’s timestamp field. This field must be mapped as a [`date`](https://www.elastic.co/guide/en/elasticsearch/reference/current/date.html) or [`date_nanos`](https://www.elastic.co/guide/en/elasticsearch/reference/current/date_nanos.html) field data type and must be included in every document indexed to the data stream. +* The data stream’s timestamp field. This field must be mapped as a [`date`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/date.md) or [`date_nanos`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/date_nanos.md) field data type and must be included in every document indexed to the data stream. * The mappings and settings applied to each backing index when it’s created. Data streams are designed for append-only data, where the data stream name can be used as the operations (read, write, rollover, shrink etc.) target. If your use case requires data to be updated in place, you can instead manage your time series data using [index aliases](../../data-store/aliases.md). However, there are a few more configuration steps and concepts: diff --git a/manage-data/lifecycle/index-lifecycle-management/tutorial-automate-rollover.md b/manage-data/lifecycle/index-lifecycle-management/tutorial-automate-rollover.md index 4639787fd..032d78870 100644 --- a/manage-data/lifecycle/index-lifecycle-management/tutorial-automate-rollover.md +++ b/manage-data/lifecycle/index-lifecycle-management/tutorial-automate-rollover.md @@ -15,7 +15,7 @@ When you continuously index timestamped documents into {{es}}, you typically use To automate rollover and management of a data stream with {{ilm-init}}, you: -1. [Create a lifecycle policy](/manage-data/lifecycle/index-lifecycle-management/tutorial-automate-rollover.md#ilm-gs-create-policy) that defines the appropriate [phases](index-lifecycle.md) and [actions](https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-actions.html). +1. [Create a lifecycle policy](/manage-data/lifecycle/index-lifecycle-management/tutorial-automate-rollover.md#ilm-gs-create-policy) that defines the appropriate [phases](index-lifecycle.md) and [actions](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-lifecycle-actions/index.md). 2. [Create an index template](/manage-data/lifecycle/index-lifecycle-management/tutorial-automate-rollover.md#ilm-gs-apply-policy) to [create the data stream](/manage-data/lifecycle/index-lifecycle-management/tutorial-automate-rollover.md#ilm-gs-create-the-data-stream) and apply the ILM policy and the indices settings and mappings configurations for the backing indices. 3. [Verify indices are moving through the lifecycle phases](/manage-data/lifecycle/index-lifecycle-management/tutorial-automate-rollover.md#ilm-gs-check-progress) as expected. diff --git a/manage-data/lifecycle/rollup/getting-started-kibana.md b/manage-data/lifecycle/rollup/getting-started-kibana.md index ef78a43e2..d8a19b395 100644 --- a/manage-data/lifecycle/rollup/getting-started-kibana.md +++ b/manage-data/lifecycle/rollup/getting-started-kibana.md @@ -52,7 +52,7 @@ You can’t change a rollup job after you’ve created it. To select additional ## Try it: Create and visualize rolled up data [rollup-data-tutorial] -This example creates a rollup job to capture log data from sample web logs. Before you start, [add the web logs sample data set](https://www.elastic.co/guide/en/kibana/current/get-started.html). +This example creates a rollup job to capture log data from sample web logs. Before you start, [add the web logs sample data set](/explore-analyze/index.md). In this example, you want data that is older than 7 days in the `kibana_sample_data_logs` index to roll up into the `rollup_logstash` index. You’ll bucket the rolled up data on an hourly basis, using `60m` for the time bucket configuration. diff --git a/manage-data/lifecycle/rollup/understanding-groups.md b/manage-data/lifecycle/rollup/understanding-groups.md index 1b0ee94a1..eae9e102f 100644 --- a/manage-data/lifecycle/rollup/understanding-groups.md +++ b/manage-data/lifecycle/rollup/understanding-groups.md @@ -108,7 +108,7 @@ Ultimately, when configuring `groups` for a job, think in terms of how you might ## Calendar vs fixed time intervals [rollup-understanding-group-intervals] -Each rollup-job must have a date histogram group with a defined interval. {{es}} understands both [calendar and fixed time intervals](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-datehistogram-aggregation.html#calendar_and_fixed_intervals). Fixed time intervals are fairly easy to understand; `60s` means sixty seconds. But what does `1M` mean? One month of time depends on which month we are talking about, some months are longer or shorter than others. This is an example of calendar time and the duration of that unit depends on context. Calendar units are also affected by leap-seconds, leap-years, etc. +Each rollup-job must have a date histogram group with a defined interval. {{es}} understands both [calendar and fixed time intervals](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-bucket-datehistogram-aggregation.md#calendar_and_fixed_intervals). Fixed time intervals are fairly easy to understand; `60s` means sixty seconds. But what does `1M` mean? One month of time depends on which month we are talking about, some months are longer or shorter than others. This is an example of calendar time and the duration of that unit depends on context. Calendar units are also affected by leap-seconds, leap-years, etc. This is important because the buckets generated by rollup are in either calendar or fixed intervals and this limits how you can query them later. See [Requests must be multiples of the config](rollup-search-limitations.md#rollup-search-limitations-intervals). diff --git a/manage-data/migrate.md b/manage-data/migrate.md index fb6fffbb3..d2b2322b5 100644 --- a/manage-data/migrate.md +++ b/manage-data/migrate.md @@ -30,7 +30,7 @@ Reindex from a remote cluster For {{ech}}, if your cluster is self-managed with a self-signed certificate, you can follow this [step-by-step migration guide](migrate/migrate-from-a-self-managed-cluster-with-a-self-signed-certificate-using-remote-reindex.md). Restore from a snapshot -: The new cluster must be the same size as your old one, or larger, to accommodate the data. The new cluster must also be an Elasticsearch version that is compatible with the old cluster (check [Elasticsearch snapshot version compatibility](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-restore.html#snapshot-restore-version-compatibility) for details). If you have not already done so, you will need to [set up snapshots for your old cluster](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshots-register-repository.html) using a repository that can be accessed from the new cluster. +: The new cluster must be the same size as your old one, or larger, to accommodate the data. The new cluster must also be an Elasticsearch version that is compatible with the old cluster (check [Elasticsearch snapshot version compatibility](/deploy-manage/tools/snapshot-and-restore.md#snapshot-restore-version-compatibility) for details). If you have not already done so, you will need to [set up snapshots for your old cluster](/deploy-manage/tools/snapshot-and-restore/self-managed.md) using a repository that can be accessed from the new cluster. Migrating internal {{es}} indices : For {{ech}} and Elasticsearch Add-On for Heroku, if you are migrating internal {{es}} indices from another cluster, specifically the `.kibana` index or the `.security` index, there are two options: @@ -39,7 +39,7 @@ Migrating internal {{es}} indices * Check [Migrating internal indices](migrate/migrate-internal-indices.md) to restore the internal {{es}} indices from a snapshot. ::::{warning} -Before you migrate your {{es}} data, [define your index mappings](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html) on the new cluster. Index mappings are unable to migrate during reindex operations. +Before you migrate your {{es}} data, [define your index mappings](/manage-data/data-store/mapping.md) on the new cluster. Index mappings are unable to migrate during reindex operations. :::: ### Index from the source [ec-index-source] diff --git a/manage-data/use-case-use-elasticsearch-to-manage-time-series-data.md b/manage-data/use-case-use-elasticsearch-to-manage-time-series-data.md index 4479095ea..fbf019506 100644 --- a/manage-data/use-case-use-elasticsearch-to-manage-time-series-data.md +++ b/manage-data/use-case-use-elasticsearch-to-manage-time-series-data.md @@ -34,7 +34,7 @@ The steps for setting up data tiers vary based on your deployment type: :::::: ::::::{tab-item} Self-managed -To assign a node to a data tier, add the respective [node role](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#node-roles) to the node’s `elasticsearch.yml` file. Changing an existing node’s roles requires a [rolling restart](../deploy-manage/maintenance/start-stop-services/full-cluster-restart-rolling-restart-procedures.md#restart-cluster-rolling). +To assign a node to a data tier, add the respective [node role](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md#node-roles) to the node’s `elasticsearch.yml` file. Changing an existing node’s roles requires a [rolling restart](../deploy-manage/maintenance/start-stop-services/full-cluster-restart-rolling-restart-procedures.md#restart-cluster-rolling). ```yaml # Content tier @@ -94,7 +94,7 @@ Use any of the following repository types with searchable snapshots: * [AWS S3](../deploy-manage/tools/snapshot-and-restore/s3-repository.md) * [Google Cloud Storage](../deploy-manage/tools/snapshot-and-restore/google-cloud-storage-repository.md) * [Azure Blob Storage](../deploy-manage/tools/snapshot-and-restore/azure-repository.md) -* [Hadoop Distributed File Store (HDFS)](https://www.elastic.co/guide/en/elasticsearch/plugins/current/repository-hdfs.html) +* [Hadoop Distributed File Store (HDFS)](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch-plugins/repository-hdfs.md) * [Shared filesystems](../deploy-manage/tools/snapshot-and-restore/shared-file-system-repository.md) such as NFS * [Read-only HTTP and HTTPS repositories](../deploy-manage/tools/snapshot-and-restore/read-only-url-repository.md) @@ -249,13 +249,13 @@ If you use a custom application, you need to set up your own data stream. A data When creating your component templates, include: -* A [`date`](https://www.elastic.co/guide/en/elasticsearch/reference/current/date.html) or [`date_nanos`](https://www.elastic.co/guide/en/elasticsearch/reference/current/date_nanos.html) mapping for the `@timestamp` field. If you don’t specify a mapping, {{es}} maps `@timestamp` as a `date` field with default options. +* A [`date`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/date.md) or [`date_nanos`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/date_nanos.md) mapping for the `@timestamp` field. If you don’t specify a mapping, {{es}} maps `@timestamp` as a `date` field with default options. * Your lifecycle policy in the `index.lifecycle.name` index setting. ::::{tip} Use the [Elastic Common Schema (ECS)](https://www.elastic.co/guide/en/ecs/current) when mapping your fields. ECS fields integrate with several {{stack}} features by default. -If you’re unsure how to map your fields, use [runtime fields](data-store/mapping/define-runtime-fields-in-search-request.md) to extract fields from [unstructured content](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html#mapping-unstructured-content) at search time. For example, you can index a log message to a `wildcard` field and later extract IP addresses and other data from this field during a search. +If you’re unsure how to map your fields, use [runtime fields](data-store/mapping/define-runtime-fields-in-search-request.md) to extract fields from [unstructured content](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/keyword.md#mapping-unstructured-content) at search time. For example, you can index a log message to a `wildcard` field and later extract IP addresses and other data from this field during a search. :::: @@ -307,7 +307,7 @@ PUT _component_template/my-settings Use your component templates to create an index template. Specify: -* One or more index patterns that match the data stream’s name. We recommend using our [data stream naming scheme](https://www.elastic.co/guide/en/fleet/current/data-streams.html#data-streams-naming-scheme). +* One or more index patterns that match the data stream’s name. We recommend using our [data stream naming scheme](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/data-streams.md#data-streams-naming-scheme). * That the template is data stream enabled. * Any component templates that contain your mappings and index settings. * A priority higher than `200` to avoid collisions with built-in templates. See [Avoid index pattern collisions](data-store/templates.md#avoid-index-pattern-collisions). diff --git a/raw-migrated-files/apm-agent-android/apm-agent-android/release-notes.md b/raw-migrated-files/apm-agent-android/apm-agent-android/release-notes.md index 709315577..c01780bcb 100644 --- a/raw-migrated-files/apm-agent-android/apm-agent-android/release-notes.md +++ b/raw-migrated-files/apm-agent-android/apm-agent-android/release-notes.md @@ -5,6 +5,6 @@ This functionality is in technical preview and may be changed or removed in a fu :::: -* [Android agent version 0.x](https://www.elastic.co/guide/en/apm/agent/android/current/release-notes-0.x.html) +* [Android agent version 0.x](asciidocalypse://docs/apm-agent-android/docs/release-notes/apm-android-agent.md) diff --git a/raw-migrated-files/cloud-on-k8s/cloud-on-k8s/k8s-es-secure-settings.md b/raw-migrated-files/cloud-on-k8s/cloud-on-k8s/k8s-es-secure-settings.md index ef96af9a9..4ab7b1699 100644 --- a/raw-migrated-files/cloud-on-k8s/cloud-on-k8s/k8s-es-secure-settings.md +++ b/raw-migrated-files/cloud-on-k8s/cloud-on-k8s/k8s-es-secure-settings.md @@ -1,6 +1,6 @@ # Secure settings [k8s-es-secure-settings] -You can specify [secure settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/secure-settings.html) with [Kubernetes secrets](https://kubernetes.io/docs/concepts/configuration/secret/). The secrets should contain a key-value pair for each secure setting you want to add. ECK automatically injects these settings into the keystore on each Elasticsearch node before it starts Elasticsearch. The ECK operator continues to watch the secrets for changes and will update the Elasticsearch keystore when it detects a change. +You can specify [secure settings](/deploy-manage/security/secure-settings.md) with [Kubernetes secrets](https://kubernetes.io/docs/concepts/configuration/secret/). The secrets should contain a key-value pair for each secure setting you want to add. ECK automatically injects these settings into the keystore on each Elasticsearch node before it starts Elasticsearch. The ECK operator continues to watch the secrets for changes and will update the Elasticsearch keystore when it detects a change. ## Basic usage [k8s_basic_usage] diff --git a/raw-migrated-files/cloud-on-k8s/cloud-on-k8s/k8s-orchestration.md b/raw-migrated-files/cloud-on-k8s/cloud-on-k8s/k8s-orchestration.md index 049fb3c25..fb66c81a6 100644 --- a/raw-migrated-files/cloud-on-k8s/cloud-on-k8s/k8s-orchestration.md +++ b/raw-migrated-files/cloud-on-k8s/cloud-on-k8s/k8s-orchestration.md @@ -120,7 +120,7 @@ Depending on how the NodeSets are updated, ECK handles the Kubernetes resource r * The specification of an existing NodeSet is updated. For example, the Elasticsearch configuration, or the PodTemplate resources requirements. - ECK performs a rolling upgrade of the corresponding Elasticsearch nodes. It follows the [Elasticsearch rolling upgrade best practices](https://www.elastic.co/guide/en/elastic-stack/current/upgrading-elasticsearch.html) to update the underlying Pods while maintaining the availability of the Elasticsearch cluster where possible. In most cases, the process simply involves restarting Elasticsearch nodes one-by-one. Note that some cluster topologies may be impossible to deploy without making the cluster unavailable (check [Limitations](../../../deploy-manage/upgrade/deployment-or-cluster.md#k8s-orchestration-limitations) ). + ECK performs a rolling upgrade of the corresponding Elasticsearch nodes. It follows the [Elasticsearch rolling upgrade best practices](/deploy-manage/upgrade/deployment-or-cluster.md) to update the underlying Pods while maintaining the availability of the Elasticsearch cluster where possible. In most cases, the process simply involves restarting Elasticsearch nodes one-by-one. Note that some cluster topologies may be impossible to deploy without making the cluster unavailable (check [Limitations](../../../deploy-manage/upgrade/deployment-or-cluster.md#k8s-orchestration-limitations) ). * An existing NodeSet is renamed. @@ -145,7 +145,7 @@ Due to relying on Kubernetes primitives such as StatefulSets, the ECK orchestrat * Clusters containing indices with no replicas -If an {{es}} node holds the only copy of a shard, this shard becomes unavailable while the node is upgraded. To ensure [high availability](https://www.elastic.co/guide/en/elasticsearch/reference/current/high-availability-cluster-design.html) it is recommended to configure clusters with three master nodes, more than one node per [data tier](https://www.elastic.co/guide/en/elasticsearch/reference/current/data-tiers.html) and at least one replica per index. +If an {{es}} node holds the only copy of a shard, this shard becomes unavailable while the node is upgraded. To ensure [high availability](/deploy-manage/production-guidance/availability-and-resilience.md) it is recommended to configure clusters with three master nodes, more than one node per [data tier](/manage-data/lifecycle/data-tiers.md) and at least one replica per index. * Elasticsearch Pods may stay `Pending` during a rolling upgrade if the Kubernetes scheduler cannot re-schedule them back. This is especially important when using local PersistentVolumes. If the Kubernetes node bound to a local PersistentVolume does not have enough capacity to host an upgraded Pod which was temporarily removed, that Pod will stay `Pending`. * Rolling upgrades can only make progress if the Elasticsearch cluster health is green. There are exceptions to this rule if the cluster health is yellow and if the following conditions are satisfied: @@ -169,7 +169,7 @@ Advanced users may force an upgrade by manually deleting Pods themselves. The de Operations that reduce the number of nodes in the cluster cannot make progress without user intervention, if the Elasticsearch index replica settings are incompatible with the intended downscale. Specifically, if the Elasticsearch index settings demand a higher number of shard copies than data nodes in the cluster after the downscale operation, ECK cannot migrate the data away from the node about to be removed. You can address this in the following ways: * Adjust the Elasticsearch [index settings](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-put-settings) to a number of replicas that allow the desired node removal. -* Use [`auto_expand_replicas`](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#dynamic-index-settings) to automatically adjust the replicas to the number of data nodes in the cluster. +* Use [`auto_expand_replicas`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#dynamic-index-settings) to automatically adjust the replicas to the number of data nodes in the cluster. ## Advanced control during rolling upgrades [k8s-advanced-upgrade-control] diff --git a/raw-migrated-files/cloud-on-k8s/cloud-on-k8s/k8s-saml-authentication.md b/raw-migrated-files/cloud-on-k8s/cloud-on-k8s/k8s-saml-authentication.md index e4cbae9f7..8a0c633e8 100644 --- a/raw-migrated-files/cloud-on-k8s/cloud-on-k8s/k8s-saml-authentication.md +++ b/raw-migrated-files/cloud-on-k8s/cloud-on-k8s/k8s-saml-authentication.md @@ -8,7 +8,7 @@ Elastic Stack SSO requires a valid Enterprise license or Enterprise trial licens ::::{tip} -Make sure you check the complete [Configuring SAML single sign-on on the Elastic Stack](https://www.elastic.co/guide/en/elasticsearch/reference/current/saml-guide-stack.html) guide before setting up SAML SSO for Kibana and Elasticsearch deployments managed by ECK. +Make sure you check the complete [Configuring SAML single sign-on on the Elastic Stack](/deploy-manage/users-roles/cluster-or-deployment-auth/saml.md) guide before setting up SAML SSO for Kibana and Elasticsearch deployments managed by ECK. :::: @@ -25,7 +25,7 @@ The `sp.*` SAML settings must point to Kibana endpoints that are accessible from :::: -Check Elastic [Stack SAML documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/saml-guide-stack.html#saml-guide-idp) for more information on `idp.*` and `sp.*` settings. +Check Elastic [Stack SAML documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/saml.md#saml-guide-idp) for more information on `idp.*` and `sp.*` settings. Make sure not to disable Elasticsearch’s file realm set by ECK, as ECK relies on the file realm for its operation. Set the `order` setting of the SAML realm to a greater value than the `order` value set for the file and native realms, which is by default -100 and -99 respectively. We recommend setting the priority of SAML realms to be lower than other realms, as shown in the next example. @@ -90,7 +90,7 @@ spec: ``` ::::{note} -To configure Elasticsearch for signing messages and/or for encrypted messages, keys and certificates should be mounted from a Kubernetes secret similar to how the SAML metadata file is mounted in the previous example. Passphrases, if needed, should be added to Elasticsearch’s keystore using ECK’s Secure Settings feature. For more information, check [the Secure Settings documentation](../../../deploy-manage/security/secure-settings.md) and [the Encryption and signing section](https://www.elastic.co/guide/en/elasticsearch/reference/current/saml-guide-stack.html#saml-enc-sign) in the Stack SAML guide. +To configure Elasticsearch for signing messages and/or for encrypted messages, keys and certificates should be mounted from a Kubernetes secret similar to how the SAML metadata file is mounted in the previous example. Passphrases, if needed, should be added to Elasticsearch’s keystore using ECK’s Secure Settings feature. For more information, check [the Secure Settings documentation](../../../deploy-manage/security/secure-settings.md) and [the Encryption and signing section](/deploy-manage/users-roles/cluster-or-deployment-auth/saml.md#saml-enc-sign) in the Stack SAML guide. :::: @@ -100,7 +100,7 @@ To configure Elasticsearch for signing messages and/or for encrypted messages, k To enable SAML authentication in Kibana, you have to add SAML as an authentication provider and specify the SAML realm that you used in your Elasticsearch configuration. ::::{tip} -You can configure multiple authentication providers in Kibana and let users choose the provider they want to use. For more information, check [the Kibana authentication documentation](https://www.elastic.co/guide/en/kibana/current/kibana-authentication.html). +You can configure multiple authentication providers in Kibana and let users choose the provider they want to use. For more information, check [the Kibana authentication documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/user-authentication.md). :::: @@ -124,7 +124,7 @@ spec: ``` ::::{important} -Your SAML users cannot login to Kibana until they are assigned roles. For more information, refer to [the Configuring role mapping section](https://www.elastic.co/guide/en/elasticsearch/reference/current/saml-guide-stack.html#saml-role-mapping) in the Stack SAML guide. +Your SAML users cannot login to Kibana until they are assigned roles. For more information, refer to [the Configuring role mapping section](/deploy-manage/users-roles/cluster-or-deployment-auth/saml.md#saml-role-mapping) in the Stack SAML guide. :::: @@ -132,9 +132,9 @@ Your SAML users cannot login to Kibana until they are assigned roles. For more i ## Generating Service Provider metadata [k8s_generating_service_provider_metadata] -The Elastic Stack supports generating service provider metadata, that can be imported to the identity provider, and configure many of the integration options between the identity provider and the service provider, automatically. For more information, check [the Generating SP metadata section](https://www.elastic.co/guide/en/elasticsearch/reference/current/saml-guide-stack.html#saml-sp-metadata) in the Stack SAML guide. +The Elastic Stack supports generating service provider metadata, that can be imported to the identity provider, and configure many of the integration options between the identity provider and the service provider, automatically. For more information, check [the Generating SP metadata section](/deploy-manage/users-roles/cluster-or-deployment-auth/saml.md#saml-sp-metadata) in the Stack SAML guide. -To generate the Service Provider metadata using [the elasticsearch-saml-metadata command](https://www.elastic.co/guide/en/elasticsearch/reference/current/saml-metadata.html), you will have to run the command using `kubectl`, and then copy the generated metadata file to your local machine. For example: +To generate the Service Provider metadata using [the elasticsearch-saml-metadata command](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/saml-metadata.md), you will have to run the command using `kubectl`, and then copy the generated metadata file to your local machine. For example: ```sh # Create metadata diff --git a/raw-migrated-files/cloud-on-k8s/cloud-on-k8s/k8s-upgrading-stack.md b/raw-migrated-files/cloud-on-k8s/cloud-on-k8s/k8s-upgrading-stack.md index 85dd5ec34..4be7c0a87 100644 --- a/raw-migrated-files/cloud-on-k8s/cloud-on-k8s/k8s-upgrading-stack.md +++ b/raw-migrated-files/cloud-on-k8s/cloud-on-k8s/k8s-upgrading-stack.md @@ -7,7 +7,7 @@ We have identified an issue with Elasticsearch 8.15.1 and 8.15.2 that prevents s The operator can safely perform upgrades to newer versions of the various Elastic Stack resources. -Follow the instructions in the [Elasticsearch documentation](https://www.elastic.co/guide/en/elastic-stack/current/upgrading-elastic-stack.html). Make sure that your cluster is compatible with the target version, take backups, and follow the specific upgrade instructions for each resource type. When you are ready, modify the `version` field in the resource spec to the desired stack version and the operator will start the upgrade process automatically. +Follow the instructions in the [Elasticsearch documentation](/deploy-manage/upgrade/deployment-or-cluster.md). Make sure that your cluster is compatible with the target version, take backups, and follow the specific upgrade instructions for each resource type. When you are ready, modify the `version` field in the resource spec to the desired stack version and the operator will start the upgrade process automatically. ECK will make sure that Elastic Stack resources are upgraded in the correct order. Upgrades to dependent stack resources are delayed until the dependency is upgraded. For example, the Kibana upgrade will be rolled out only when the associated Elasticsearch cluster has been upgraded. diff --git a/raw-migrated-files/cloud-on-k8s/cloud-on-k8s/k8s-users-and-roles.md b/raw-migrated-files/cloud-on-k8s/cloud-on-k8s/k8s-users-and-roles.md index c42f06ae3..be2292b9a 100644 --- a/raw-migrated-files/cloud-on-k8s/cloud-on-k8s/k8s-users-and-roles.md +++ b/raw-migrated-files/cloud-on-k8s/cloud-on-k8s/k8s-users-and-roles.md @@ -43,12 +43,12 @@ Do not run the `elasticsearch-service-tokens` command inside an Elasticsearch Po ### Native realm [k8s_native_realm] -You can create custom users in the [Elasticsearch native realm](https://www.elastic.co/guide/en/elasticsearch/reference/current/native-realm.html) using [Elasticsearch user management APIs](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-security). +You can create custom users in the [Elasticsearch native realm](/deploy-manage/users-roles/cluster-or-deployment-auth/native.md) using [Elasticsearch user management APIs](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-security). ### File realm [k8s_file_realm] -Custom users can also be created by providing the desired [file realm content](https://www.elastic.co/guide/en/elasticsearch/reference/current/file-realm.html) or a username and password in Kubernetes secrets, referenced in the Elasticsearch resource. +Custom users can also be created by providing the desired [file realm content](/deploy-manage/users-roles/cluster-or-deployment-auth/file-based.md) or a username and password in Kubernetes secrets, referenced in the Elasticsearch resource. ```yaml apiVersion: elasticsearch.k8s.elastic.co/v1 @@ -94,8 +94,8 @@ If you specify the password for the `elastic` user through such a basic authenti The second option, a file realm secret, is composed of 2 entries. You can provide either one entry or both entries in each secret: -* `users`: content of the `users` file. It specifies user names and password hashes, as described in the [file realm documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/file-realm.html). -* `users_roles`: content of the `users_roles` file. It associates each role to a list of users, as described in the [file realm documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/file-realm.html). +* `users`: content of the `users` file. It specifies user names and password hashes, as described in the [file realm documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/file-based.md). +* `users_roles`: content of the `users_roles` file. It associates each role to a list of users, as described in the [file realm documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/file-based.md). If you specify multiple users with the same name in more than one secret, the last one takes precedence. If you specify multiple roles with the same name in more than one secret, a single entry per role is derived from the concatenation of its corresponding users from all secrets. @@ -117,7 +117,7 @@ stringData: user:jacknich ``` -You can populate the content of both `users` and `users_roles` using the [elasticsearch-users](https://www.elastic.co/guide/en/elasticsearch/reference/current/users-command.html) tool. +You can populate the content of both `users` and `users_roles` using the [elasticsearch-users](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/command-line-tools/users-command.md) tool. For example, invoking the tool in a Docker container: diff --git a/raw-migrated-files/cloud/cloud-enterprise/Elastic-Cloud-Enterprise-overview.md b/raw-migrated-files/cloud/cloud-enterprise/Elastic-Cloud-Enterprise-overview.md index ee863ff5d..c89107e57 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/Elastic-Cloud-Enterprise-overview.md +++ b/raw-migrated-files/cloud/cloud-enterprise/Elastic-Cloud-Enterprise-overview.md @@ -27,4 +27,4 @@ ECE evolves from the Elastic hosted Cloud SaaS offering into a standalone produc * Support for off-line installations. * Automated restore and snapshot. -Check the [glossary](https://www.elastic.co/guide/en/elastic-stack-glossary/current/terms.html) to get familiar with the terminology for ECE as well as other Elastic products and solutions. +Check the [glossary](asciidocalypse://docs/docs-content/docs/reference/glossary/index.md) to get familiar with the terminology for ECE as well as other Elastic products and solutions. diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-add-custom-bundle-plugin.md b/raw-migrated-files/cloud/cloud-enterprise/ece-add-custom-bundle-plugin.md index 9f5f448ce..460d85a66 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-add-custom-bundle-plugin.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-add-custom-bundle-plugin.md @@ -85,7 +85,7 @@ Custom plugins can include the official Elasticsearch plugins not provided with This example adds a custom LDAP bundle for deployment level role-based access control (RBAC). To set platform level RBAC, check [Configure RBAC](../../../deploy-manage/users-roles/cloud-enterprise-orchestrator/manage-users-roles.md). -1. Prepare a custom bundle as a ZIP file that contains your keystore file with the private key and certificate inside of a `truststore` folder [in the same way that you would on Elastic Cloud](https://www.elastic.co/guide/en/cloud/current/ec-custom-bundles.html). This bundle allows all Elasticsearch containers to access the same keystore file through your `ssl.truststore` settings. +1. Prepare a custom bundle as a ZIP file that contains your keystore file with the private key and certificate inside of a `truststore` folder [in the same way that you would on Elastic Cloud](/deploy-manage/deploy/elastic-cloud/upload-custom-plugins-bundles.md). This bundle allows all Elasticsearch containers to access the same keystore file through your `ssl.truststore` settings. 2. In the [advanced configuration editor](../../../deploy-manage/deploy/cloud-enterprise/advanced-cluster-configuration.md), update your new Elasticsearch cluster with the custom bundle you have just created. Modify the `user_bundles` JSON attribute of **each** Elasticsearch instance type as shown in the following example: ```sh @@ -353,7 +353,7 @@ You do not need to do this step if you are using default filename and password ( } ``` -4. To use this bundle, you can refer it in the [GeoIP processor](https://www.elastic.co/guide/en/elasticsearch/reference/current/geoip-processor.html) of an ingest pipeline as `MyGeoLite2-City.mmdb` under `database_file` such as: +4. To use this bundle, you can refer it in the [GeoIP processor](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/enrich-processor/geoip-processor.md) of an ingest pipeline as `MyGeoLite2-City.mmdb` under `database_file` such as: ```sh ... diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-add-user-settings.md b/raw-migrated-files/cloud/cloud-enterprise/ece-add-user-settings.md index c9c7bfc2e..e73b0991b 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-add-user-settings.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-add-user-settings.md @@ -3,7 +3,7 @@ Change how Elasticsearch runs by providing your own user settings. User settings are appended to the `elasticsearch.yml` configuration file for your cluster and provide custom configuration options. Elastic Cloud Enterprise supports many of the user settings for the version of Elasticsearch that your cluster is running. ::::{tip} -Some settings that could break your cluster if set incorrectly are blocked, such as certain zen discovery and security settings. For examples of a few of the settings that are generally safe in cloud environments, check [Additional Examples of Supported User Settings](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-change-user-settings-examples.html) and [Editing Your User Settings](https://www.elastic.co/guide/en/cloud/current/ec-editing-user-settings.html) that can be enabled on our Elastic Cloud hosted offering. +Some settings that could break your cluster if set incorrectly are blocked, such as certain zen discovery and security settings. For examples of a few of the settings that are generally safe in cloud environments, check [Additional Examples of Supported User Settings](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-change-user-settings-examples.html) and [Editing Your User Settings](/deploy-manage/deploy/elastic-cloud/edit-stack-settings.md) that can be enabled on our Elastic Cloud hosted offering. :::: diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-api-console.md b/raw-migrated-files/cloud/cloud-enterprise/ece-api-console.md index fd4795214..1fd58b7d5 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-api-console.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-api-console.md @@ -7,7 +7,7 @@ API console is intended for admin purposes. Avoid running normal workload like i :::: -You are unable to make Elastic Cloud Enterprise platform changes from the Elasticsearch API. If you want to work with the platform, check the [Elastic Cloud Enterprise RESTful API](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-restful-api.html). +You are unable to make Elastic Cloud Enterprise platform changes from the Elasticsearch API. If you want to work with the platform, check the [Elastic Cloud Enterprise RESTful API](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-enterprise/restful-api.md). 1. [Log into the Cloud UI](../../../deploy-manage/deploy/cloud-enterprise/log-into-cloud-ui.md). 2. On the deployments page, select your deployment. diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-autoscaling.md b/raw-migrated-files/cloud/cloud-enterprise/ece-autoscaling.md index 07b8dcf28..87742db84 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-autoscaling.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-autoscaling.md @@ -57,7 +57,7 @@ When past behavior on a hot tier indicates that the influx of data can increase * Through ILM policies. For example, if a deployment has only hot nodes and autoscaling is enabled, it automatically creates warm or cold nodes, if an ILM policy is trying to move data from hot to warm or cold nodes. -On machine learning nodes, scaling is determined by an estimate of the memory and CPU requirements for the currently configured jobs and trained models. When a new machine learning job tries to start, it looks for a node with adequate native memory and CPU capacity. If one cannot be found, it stays in an `opening` state. If this waiting job exceeds the queueing limit set in the machine learning decider, a scale up is requested. Conversely, as machine learning jobs run, their memory and CPU usage might decrease or other running jobs might finish or close. In this case, if the duration of decreased resource usage exceeds the set value for `down_scale_delay`, a scale down is requested. Check [Machine learning decider](../../../deploy-manage/autoscaling/autoscaling-deciders.md) for more detail. To learn more about machine learning jobs in general, check [Create anomaly detection jobs](https://www.elastic.co/guide/en/machine-learning/current/ml-ad-run-jobs.html#ml-ad-create-job). +On machine learning nodes, scaling is determined by an estimate of the memory and CPU requirements for the currently configured jobs and trained models. When a new machine learning job tries to start, it looks for a node with adequate native memory and CPU capacity. If one cannot be found, it stays in an `opening` state. If this waiting job exceeds the queueing limit set in the machine learning decider, a scale up is requested. Conversely, as machine learning jobs run, their memory and CPU usage might decrease or other running jobs might finish or close. In this case, if the duration of decreased resource usage exceeds the set value for `down_scale_delay`, a scale down is requested. Check [Machine learning decider](../../../deploy-manage/autoscaling/autoscaling-deciders.md) for more detail. To learn more about machine learning jobs in general, check [Create anomaly detection jobs](/explore-analyze/machine-learning/anomaly-detection/ml-ad-run-jobs.md#ml-ad-create-job). On a highly available deployment, autoscaling events are always applied to instances in each availability zone simultaneously, to ensure consistency. diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-node-js.md b/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-node-js.md index 8a9b99e67..91a0fb265 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-node-js.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-node-js.md @@ -158,7 +158,7 @@ async function run() { run().catch(console.log) ``` -When using the [client.index](https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#_index) API, the request automatically creates the `game-of-thrones` index if it doesn’t already exist, as well as document IDs for each indexed document if they are not explicitly specified. +When using the [client.index](asciidocalypse://docs/elasticsearch-js/docs/reference/elasticsearch/elasticsearch-client-javascript-api/api-reference.md#_index) API, the request automatically creates the `game-of-thrones` index if it doesn’t already exist, as well as document IDs for each indexed document if they are not explicitly specified. ## Search and modify data [ece_search_and_modify_data] @@ -205,7 +205,7 @@ async function update() { update().catch(console.log) ``` -This [more comprehensive list of API examples](https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/examples.html) includes bulk operations, checking the existence of documents, updating by query, deleting, scrolling, and SQL queries. To learn more, check the complete [API reference](https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html). +This [more comprehensive list of API examples](asciidocalypse://docs/elasticsearch-js/docs/reference/elasticsearch/elasticsearch-client-javascript-api/examples.md) includes bulk operations, checking the existence of documents, updating by query, deleting, scrolling, and SQL queries. To learn more, check the complete [API reference](asciidocalypse://docs/elasticsearch-js/docs/reference/elasticsearch/elasticsearch-client-javascript-api/api-reference.md). ## Switch to API key authentication [ece_switch_to_api_key_authentication] @@ -294,5 +294,5 @@ Schema : When the example code was run an index mapping was created automatically. The field types were selected by {{es}} based on the content seen when the first record was ingested, and updated as new fields appeared in the data. It would be more efficient to specify the fields and field types in advance to optimize performance. Refer to the Elastic Common Schema documentation and Field Type documentation when you are designing the schema for your production use cases. Ingest -: For more advanced scenarios, this [bulk ingestion](https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/bulk_examples.html) reference gives an example of the `bulk` API that makes it possible to perform multiple operations in a single call. This bulk example also explicitly specifies document IDs. If you have a lot of documents to index, using bulk to batch document operations is significantly faster than submitting requests individually. +: For more advanced scenarios, this [bulk ingestion](asciidocalypse://docs/elasticsearch-js/docs/reference/elasticsearch/elasticsearch-client-javascript-api/bulk_examples.md) reference gives an example of the `bulk` API that makes it possible to perform multiple operations in a single call. This bulk example also explicitly specifies document IDs. If you have a lot of documents to index, using bulk to batch document operations is significantly faster than submitting requests individually. diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-python.md b/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-python.md index 3f0efc5a9..01e4a6fcc 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-python.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-python.md @@ -282,7 +282,7 @@ es.get(index='lord-of-the-rings', id='2EkAzngB_pyHD3p65UMt') 'birthplace': 'The Shire'}} ``` -For frequently used API calls with the Python client, check [Examples](https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/examples.html). +For frequently used API calls with the Python client, check [Examples](asciidocalypse://docs/elasticsearch-py/docs/reference/elasticsearch/elasticsearch-client-python-api/examples.md). ## Switch to API key authentication [ece_switch_to_api_key_authentication_2] @@ -342,7 +342,7 @@ es = Elasticsearch( Check [Create API key API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-security-create-api-key) to learn more about API Keys and [Security privileges](../../../deploy-manage/users-roles/cluster-or-deployment-auth/elasticsearch-privileges.md) to understand which privileges are needed. If you are not sure what the right combination of privileges for your custom application is, you can enable [audit logging](../../../deploy-manage/monitor/logging-configuration/enabling-audit-logs.md) on {{es}} to find out what privileges are being used. To learn more about how logging works on {{ece}}, check [Monitoring Elastic Cloud deployment logs and metrics](https://www.elastic.co/blog/monitoring-elastic-cloud-deployment-logs-and-metrics). -For more information on refreshing an index, searching, updating, and deleting, check the [elasticsearch-py examples](https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/examples.html). +For more information on refreshing an index, searching, updating, and deleting, check the [elasticsearch-py examples](asciidocalypse://docs/elasticsearch-py/docs/reference/elasticsearch/elasticsearch-client-python-api/examples.md). ### Best practices [ece_best_practices_2] @@ -357,5 +357,5 @@ Schema : When the example code is run, an index mapping is created automatically. The field types are selected by {{es}} based on the content seen when the first record was ingested, and updated as new fields appeared in the data. It would be more efficient to specify the fields and field types in advance to optimize performance. Refer to the Elastic Common Schema documentation and Field Type documentation when you design the schema for your production use cases. Ingest -: For more advanced scenarios, [Bulk helpers](https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/client-helpers.html#bulk-helpers) gives examples for the `bulk` API that makes it possible to perform multiple operations in a single call. If you have a lot of documents to index, using bulk to batch document operations is significantly faster than submitting requests individually. +: For more advanced scenarios, [Bulk helpers](asciidocalypse://docs/elasticsearch-py/docs/reference/elasticsearch/elasticsearch-client-python-api/client-helpers.md#bulk-helpers) gives examples for the `bulk` API that makes it possible to perform multiple operations in a single call. If you have a lot of documents to index, using bulk to batch document operations is significantly faster than submitting requests individually. diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-search-use-cases-beats-logstash.md b/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-search-use-cases-beats-logstash.md index ec6eaeb15..03be09943 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-search-use-cases-beats-logstash.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-search-use-cases-beats-logstash.md @@ -62,7 +62,7 @@ If you have multiple servers with metrics data, repeat the following steps to co **About Metricbeat modules** -Metricbeat has [many modules](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-modules.html) available that collect common metrics. You can [configure additional modules](https://www.elastic.co/guide/en/beats/metricbeat/current/configuration-metricbeat.html) as needed. For this example we’re using Metricbeat’s default configuration, which has the [System module](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-module-system.html) enabled. The System module allows you to monitor servers with the default set of metrics: *cpu*, *load*, *memory*, *network*, *process*, *process_summary*, *socket_summary*, *filesystem*, *fsstat*, and *uptime*. +Metricbeat has [many modules](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/metricbeat-modules.md) available that collect common metrics. You can [configure additional modules](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/configuration-metricbeat.md) as needed. For this example we’re using Metricbeat’s default configuration, which has the [System module](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/metricbeat-module-system.md) enabled. The System module allows you to monitor servers with the default set of metrics: *cpu*, *load*, *memory*, *network*, *process*, *process_summary*, *socket_summary*, *filesystem*, *fsstat*, and *uptime*. **Load the Metricbeat Kibana dashboards** @@ -89,7 +89,7 @@ sudo ./metricbeat setup \ 1. Specify the Cloud ID of your Elastic Cloud Enterprise deployment. You can include or omit the `:` prefix at the beginning of the Cloud ID. Both versions work fine. Find your Cloud ID by going to the {{kib}} main menu and selecting Management > Integrations, and then selecting View deployment details. 2. Specify the username and password provided to you when creating the deployment. Make sure to keep the colon between ** and **. 3. The four lines related to `ssl` are only used when you have a self signed certificate for your Elastic Cloud Enterprise proxy. If needed, specify the full path to the PEM formatted root cetificate (Root CA) used for the Elastic Cloud Enterprise proxy. You can retrieve the certificate chain from your ECE system by following the instructions in [Get existing ECE security certificates](../../../deploy-manage/security/secure-your-elastic-cloud-enterprise-installation/manage-security-certificates.md#ece-existing-security-certificates). Save the final certificate in the chain to a file. In this command example, the file is named `elastic-ece-ca-cert.pem`.::::{important} -Depending on variables including the installation location, environment and local permissions, you might need to [change the ownership](https://www.elastic.co/guide/en/beats/libbeat/current/config-file-permissions.html) of the metricbeat.yml. +Depending on variables including the installation location, environment and local permissions, you might need to [change the ownership](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-libbeat/config-file-permissions.md) of the metricbeat.yml. You might encounter similar permissions hurdles as you work through multiple sections of this document. These permission requirements are there for a good reason, a security safeguard to prevent unauthorized access and modification of key Elastic files. @@ -138,7 +138,7 @@ The next step is to configure Filebeat to send operational data to Logstash. As **Enable the Filebeat system module** -Filebeat has [many modules](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-modules.html) available that collect common log types. You can [configure additional modules](https://www.elastic.co/guide/en/beats/filebeat/current/configuration-filebeat-modules.html) as needed. For this example we’re using Filebeat’s [System module](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-system.html). This module reads in the various system log files (with information including login successes or failures, sudo command usage, and other key usage details) based on the detected operating system. For this example, a Linux-based OS is used and Filebeat ingests logs from the */var/log/* folder. It’s important to verify that Filebeat is given permission to access your logs folder through standard file and folder permissions. +Filebeat has [many modules](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-modules.md) available that collect common log types. You can [configure additional modules](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/configuration-filebeat-modules.md) as needed. For this example we’re using Filebeat’s [System module](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-module-system.md). This module reads in the various system log files (with information including login successes or failures, sudo command usage, and other key usage details) based on the detected operating system. For this example, a Linux-based OS is used and Filebeat ingests logs from the */var/log/* folder. It’s important to verify that Filebeat is given permission to access your logs folder through standard file and folder permissions. 1. Go to */filebeat-/modules.d/* where ** is the directory where Filebeat is installed. 2. Filebeat requires at least one fileset to be enabled. In file */filebeat-/modules.d/system.yml.disabled*, under both `syslog` and `auth` set `enabled` to `true`: @@ -182,7 +182,7 @@ sudo ./filebeat setup \ 1. Specify the Cloud ID of your Elastic Cloud Enterprise deployment. You can include or omit the `:` prefix at the beginning of the Cloud ID. Both versions work fine. Find your Cloud ID by going to the {{kib}} main menu and selecting Management > Integrations, and then selecting View deployment details. 2. Specify the username and password provided to you when creating the deployment. Make sure to keep the colon between ** and **. 3. The four lines related to `ssl` are only needed if you are using self-signed certificates.::::{important} -Depending on variables including the installation location, environment, and local permissions, you might need to [change the ownership](https://www.elastic.co/guide/en/beats/libbeat/current/config-file-permissions.html) of the filebeat.yml. +Depending on variables including the installation location, environment, and local permissions, you might need to [change the ownership](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-libbeat/config-file-permissions.md) of the filebeat.yml. :::: @@ -195,7 +195,7 @@ Index setup finished. Loading dashboards (Kibana must be running and reachable) Loaded dashboards Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead. -See more: https://www.elastic.co/guide/en/machine-learning/current/index.html +See more: /explore-analyze/machine-learning.md Loaded machine learning job configurations Loaded Ingest pipelines ``` @@ -245,7 +245,7 @@ Now the Filebeat and Metricbeat are set up, let’s configure a {{ls}} pipeline 1. {{ls}} listens for Beats input on the default port of 5044. Only one line is needed to do this. {{ls}} can handle input from many Beats of the same and also of varying types (Metricbeat, Filebeat, and others). 2. This sends output to the standard output, which displays through your command line interface. This plugin enables you to verify the data before you send it to {{es}}, in a later step. -3. Save the new *beats.conf* file in your Logstash folder. To learn more about the file format and options, check [{{ls}} Configuration Examples](https://www.elastic.co/guide/en/logstash/current/config-examples.html). +3. Save the new *beats.conf* file in your Logstash folder. To learn more about the file format and options, check [{{ls}} Configuration Examples](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/config-examples.md). ## Output {{ls}} data to stdout [ece-beats-logstash-stdout] @@ -388,7 +388,7 @@ In this section, you configure {{ls}} to send the Metricbeat and Filebeat data t ``` 1. Use the Cloud ID of your Elastic Cloud Enterprise deployment. You can include or omit the `:` prefix at the beginning of the Cloud ID. Both versions work fine. Find your Cloud ID by going to the {{kib}} main menu and selecting Management > Integrations, and then selecting View deployment details. - 2. the default usename is `elastic`. It is not recommended to use the `elastic` account for ingesting data as this is a superuser. We recommend using a user with reduced permissions, or an API Key with permissions specific to the indices or data streams that will be written to. Check the [Grant access to secured resources](https://www.elastic.co/guide/en/beats/filebeat/current/feature-roles.html) for information on the writer role and API Keys. Use the password provided when you created the deployment if using the `elastic` user, or the password used when creating a new ingest user with the roles specified in the [Grant access to secured resources](https://www.elastic.co/guide/en/beats/filebeat/current/feature-roles.html) documentation. + 2. the default usename is `elastic`. It is not recommended to use the `elastic` account for ingesting data as this is a superuser. We recommend using a user with reduced permissions, or an API Key with permissions specific to the indices or data streams that will be written to. Check the [Grant access to secured resources](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/feature-roles.md) for information on the writer role and API Keys. Use the password provided when you created the deployment if using the `elastic` user, or the password used when creating a new ingest user with the roles specified in the [Grant access to secured resources](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/feature-roles.md) documentation. 3. The cacert line is only needed if you are using a self-signed certificate. @@ -481,9 +481,9 @@ In this section, you configure {{ls}} to send the Metricbeat and Filebeat data t ::::{note} In this guide, you manually launch each of the Elastic stack applications through the command line interface. In production, you may prefer to configure {{ls}}, Metricbeat, and Filebeat to run as System Services. Check the following pages for the steps to configure each application to run as a service: -* [Running {{ls}} as a service on Debian or RPM](https://www.elastic.co/guide/en/logstash/current/running-logstash.html) -* [Metricbeat and systemd](https://www.elastic.co/guide/en/beats/metricbeat/current/running-with-systemd.html) -* [Start filebeat](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-starting.html) +* [Running {{ls}} as a service on Debian or RPM](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/running-logstash.md) +* [Metricbeat and systemd](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/running-with-systemd.md) +* [Start filebeat](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-starting.md) :::: diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-search-use-cases-db-logstash.md b/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-search-use-cases-db-logstash.md index 0210dd8a6..eacecd40b 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-search-use-cases-db-logstash.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-search-use-cases-db-logstash.md @@ -1,6 +1,6 @@ # Ingest data from a relational database into Elastic Cloud Enterprise [ece-getting-started-search-use-cases-db-logstash] -This guide explains how to ingest data from a relational database into Elastic Cloud Enterprise through [Logstash](https://www.elastic.co/guide/en/logstash/current/introduction.html), using the Logstash [JDBC input plugin](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html). It demonstrates how Logstash can be used to efficiently copy records and to receive updates from a relational database, and then send them into {{es}} in an Elastic Cloud Enterprise deployment. +This guide explains how to ingest data from a relational database into Elastic Cloud Enterprise through [Logstash](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/index.md), using the Logstash [JDBC input plugin](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-jdbc.md). It demonstrates how Logstash can be used to efficiently copy records and to receive updates from a relational database, and then send them into {{es}} in an Elastic Cloud Enterprise deployment. The code and methods presented here have been tested with MySQL. They should work with other relational databases. @@ -189,13 +189,13 @@ Let’s set up a sample Logstash input pipeline to ingest data from your new JDB : The Logstash JDBC plugin does not come packaged with JDBC driver libraries. The JDBC driver library must be passed explicitly into the plugin using the `jdbc_driver_library` configuration option. tracking_column - : This parameter specifies the field `unix_ts_in_secs` that tracks the last document read by Logstash from MySQL, stored on disk in [logstash_jdbc_last_run](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html#plugins-inputs-jdbc-last_run_metadata_path). The parameter determines the starting value for documents that Logstash requests in the next iteration of its polling loop. The value stored in `logstash_jdbc_last_run` can be accessed in a SELECT statement as `sql_last_value`. + : This parameter specifies the field `unix_ts_in_secs` that tracks the last document read by Logstash from MySQL, stored on disk in [logstash_jdbc_last_run](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-jdbc.md#plugins-inputs-jdbc-last_run_metadata_path). The parameter determines the starting value for documents that Logstash requests in the next iteration of its polling loop. The value stored in `logstash_jdbc_last_run` can be accessed in a SELECT statement as `sql_last_value`. unix_ts_in_secs : The field generated by the SELECT statement, which contains the `modification_time` as a standard [Unix timestamp](https://en.wikipedia.org/wiki/Unix_time) (seconds since the epoch). The field is referenced by the `tracking column`. A Unix timestamp is used for tracking progress rather than a normal timestamp, as a normal timestamp may cause errors due to the complexity of correctly converting back and forth between UMT and the local timezone. sql_last_value - : This is a [built-in parameter](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html#_predefined_parameters) containing the starting point of the current iteration of the Logstash polling loop, and it is referenced in the SELECT statement line of the JDBC input configuration. This parameter is set to the most recent value of `unix_ts_in_secs`, which is read from `.logstash_jdbc_last_run`. This value is the starting point for documents returned by the MySQL query that is executed in the Logstash polling loop. Including this variable in the query guarantees that we’re not resending data that is already stored in Elasticsearch. + : This is a [built-in parameter](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-jdbc.md#_predefined_parameters) containing the starting point of the current iteration of the Logstash polling loop, and it is referenced in the SELECT statement line of the JDBC input configuration. This parameter is set to the most recent value of `unix_ts_in_secs`, which is read from `.logstash_jdbc_last_run`. This value is the starting point for documents returned by the MySQL query that is executed in the Logstash polling loop. Including this variable in the query guarantees that we’re not resending data that is already stored in Elasticsearch. schedule : This uses cron syntax to specify how often Logstash should poll MySQL for changes. The specification `*/5 * * * * *` tells Logstash to contact MySQL every 5 seconds. Input from this plugin can be scheduled to run periodically according to a specific schedule. This scheduling syntax is powered by [rufus-scheduler](https://github.com/jmettraux/rufus-scheduler). The syntax is cron-like with some extensions specific to Rufus (for example, timezone support). @@ -286,7 +286,7 @@ In this section, we configure Logstash to send the MySQL data to Elasticsearch. ``` 1. Use the Cloud ID of your Elastic Cloud Enterprise deployment. You can include or omit the `:` prefix at the beginning of the Cloud ID. Both versions work fine. Find your Cloud ID by going to the {{kib}} main menu and selecting Management > Integrations, and then selecting View deployment details. - 2. the default username is `elastic`. It is not recommended to use the `elastic` account for ingesting data as this is a superuser. We recommend using a user with reduced permissions, or an API Key with permissions specific to the indices or data streams that will be written to. Check [Configuring security in Logstash](https://www.elastic.co/guide/en/logstash/current/ls-security.html) for information on roles and API Keys. Use the password provided when you created the deployment if using the `elastic` user, or the password used when creating a new ingest user with the roles specified in the [Configuring security in Logstash](https://www.elastic.co/guide/en/logstash/current/ls-security.html) documentation. + 2. the default username is `elastic`. It is not recommended to use the `elastic` account for ingesting data as this is a superuser. We recommend using a user with reduced permissions, or an API Key with permissions specific to the indices or data streams that will be written to. Check [Configuring security in Logstash](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/secure-connection.md) for information on roles and API Keys. Use the password provided when you created the deployment if using the `elastic` user, or the password used when creating a new ingest user with the roles specified in the [Configuring security in Logstash](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/secure-connection.md) documentation. 3. This line is only used when you have a self signed certificate for your Elastic Cloud Enterprise proxy. If needed, specify the full path to the PEM formatted root certificate (Root CA) used for the Elastic Cloud Enterprise proxy. You can retrieve the certificate chain from your ECE system by following the instructions in [Get existing ECE security certificates](../../../deploy-manage/security/secure-your-elastic-cloud-enterprise-installation/manage-security-certificates.md#ece-existing-security-certificates). Save the final certificate in the chain to a file. In this example, the file is named `elastic-ece-ca-cert.pem`. diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-search-use-cases-node-logs.md b/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-search-use-cases-node-logs.md index 8046025fb..6f93dbf7b 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-search-use-cases-node-logs.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-search-use-cases-node-logs.md @@ -1,6 +1,6 @@ # Ingest logs from a Node.js web application using Filebeat [ece-getting-started-search-use-cases-node-logs] -This guide demonstrates how to ingest logs from a Node.js web application and deliver them securely into an Elastic Cloud Enterprise deployment. You’ll set up Filebeat to monitor a JSON-structured log file that has standard Elastic Common Schema (ECS) formatted fields, and you’ll then view real-time visualizations of the log events in Kibana as requests are made to the Node.js server. While Node.js is used for this example, this approach to monitoring log output is applicable across many client types. Check the list of [available ECS logging plugins](https://www.elastic.co/guide/en/ecs-logging/overview/current/intro.html#_get_started). +This guide demonstrates how to ingest logs from a Node.js web application and deliver them securely into an Elastic Cloud Enterprise deployment. You’ll set up Filebeat to monitor a JSON-structured log file that has standard Elastic Common Schema (ECS) formatted fields, and you’ll then view real-time visualizations of the log events in Kibana as requests are made to the Node.js server. While Node.js is used for this example, this approach to monitoring log output is applicable across many client types. Check the list of [available ECS logging plugins](asciidocalypse://docs/ecs-logging/docs/reference/ecs/ecs-logging-overview/intro.md#_get_started). This guide presents: @@ -33,7 +33,7 @@ For the three following packages, you can create a working directory to install npm install winston ``` -* The [Elastic Common Schema (ECS) formatter](https://www.elastic.co/guide/en/ecs-logging/nodejs/current/winston.html) for the Node.js winston logger - This plugin formats your Node.js logs into an ECS structured JSON format ideally suited for ingestion into Elasticsearch. To install the ECS winston logger, run the following command in your working directory so that the package is installed in the same location as the winston package: +* The [Elastic Common Schema (ECS) formatter](asciidocalypse://docs/ecs-logging-nodejs/docs/reference/ecs/ecs-logging-nodejs/winston.md) for the Node.js winston logger - This plugin formats your Node.js logs into an ECS structured JSON format ideally suited for ingestion into Elasticsearch. To install the ECS winston logger, run the following command in your working directory so that the package is installed in the same location as the winston package: ```sh npm install @elastic/ecs-winston-format @@ -302,7 +302,7 @@ For this example, Filebeat uses the following four decoding options. json.expand_keys: true ``` -To learn more about these settings, check [JSON input configuration options](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-log.html#filebeat-input-log-config-json) and [Decode JSON fields](https://www.elastic.co/guide/en/beats/filebeat/current/decode-json-fields.html) in the Filebeat Reference. +To learn more about these settings, check [JSON input configuration options](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-input-log.md#filebeat-input-log-config-json) and [Decode JSON fields](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/decode-json-fields.md) in the Filebeat Reference. Append the four JSON decoding options to the *Filebeat inputs* section of *filebeat.yml*, so that the section now looks like this: @@ -338,7 +338,7 @@ Filebeat comes with predefined assets for parsing, indexing, and visualizing you ``` ::::{important} -Depending on variables including the installation location, environment, and local permissions, you might need to [change the ownership](https://www.elastic.co/guide/en/beats/libbeat/current/config-file-permissions.html) of filebeat.yml. You can also try running the command as *root*: *sudo ./filebeat setup -e* or you can disable strict permission checks by running the command with the `--strict.perms=false` option. +Depending on variables including the installation location, environment, and local permissions, you might need to [change the ownership](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-libbeat/config-file-permissions.md) of filebeat.yml. You can also try running the command as *root*: *sudo ./filebeat setup -e* or you can disable strict permission checks by running the command with the `--strict.perms=false` option. :::: @@ -439,7 +439,7 @@ In this command: * The *-c* flag specifies the path to the Filebeat config file. ::::{note} -Just in case the command doesn’t work as expected, check the [Filebeat quick start](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation-configuration.html#start) for the detailed command syntax for your operating system. You can also try running the command as *root*: *sudo ./filebeat -e -c filebeat.yml*. +Just in case the command doesn’t work as expected, check the [Filebeat quick start](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-installation-configuration.md#start) for the detailed command syntax for your operating system. You can also try running the command as *root*: *sudo ./filebeat -e -c filebeat.yml*. :::: @@ -522,5 +522,5 @@ You can add titles to the visualizations, resize and position them as you like, 2. As your final step, remember to stop Filebeat, the Node.js web server, and the client. Enter *CTRL + C* in the terminal window for each application to stop them. -You now know how to monitor log files from a Node.js web application, deliver the log event data securely into an Elastic Cloud Enterprise deployment, and then visualize the results in Kibana in real time. Consult the [Filebeat documentation](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html) to learn more about the ingestion and processing options available for your data. You can also explore our [documentation](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-cloud-ingest-data.html#ece-ingest-methods) to learn all about working in Elastic Cloud Enterprise. +You now know how to monitor log files from a Node.js web application, deliver the log event data securely into an Elastic Cloud Enterprise deployment, and then visualize the results in Kibana in real time. Consult the [Filebeat documentation](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-overview.md) to learn more about the ingestion and processing options available for your data. You can also explore our [documentation](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-cloud-ingest-data.html#ece-ingest-methods) to learn all about working in Elastic Cloud Enterprise. diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-search-use-cases-python-logs.md b/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-search-use-cases-python-logs.md index 720df788d..8e6bd2c79 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-search-use-cases-python-logs.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-getting-started-search-use-cases-python-logs.md @@ -1,6 +1,6 @@ # Ingest logs from a Python application using Filebeat [ece-getting-started-search-use-cases-python-logs] -This guide demonstrates how to ingest logs from a Python application and deliver them securely into an Elastic Cloud Enterprise deployment. You’ll set up Filebeat to monitor a JSON-structured log file that has standard Elastic Common Schema (ECS) formatted fields, and you’ll then view real-time visualizations of the log events in {{kib}} as they occur. While Python is used for this example, this approach to monitoring log output is applicable across many client types. Check the list of [available ECS logging plugins](https://www.elastic.co/guide/en/ecs-logging/overview/current/intro.html). +This guide demonstrates how to ingest logs from a Python application and deliver them securely into an Elastic Cloud Enterprise deployment. You’ll set up Filebeat to monitor a JSON-structured log file that has standard Elastic Common Schema (ECS) formatted fields, and you’ll then view real-time visualizations of the log events in {{kib}} as they occur. While Python is used for this example, this approach to monitoring log output is applicable across many client types. Check the list of [available ECS logging plugins](asciidocalypse://docs/ecs-logging/docs/reference/ecs/ecs-logging-overview/intro.md). You are going to learn how to: @@ -14,7 +14,7 @@ You are going to learn how to: ## Prerequisites [ece_prerequisites_2] -To complete these steps you need to have [Python](https://www.python.org/) installed on your system as well as the [Elastic Common Schema (ECS) logger](https://www.elastic.co/guide/en/ecs-logging/python/current/installation.html) for the Python logging library. +To complete these steps you need to have [Python](https://www.python.org/) installed on your system as well as the [Elastic Common Schema (ECS) logger](asciidocalypse://docs/ecs-logging-python/docs/reference/ecs/ecs-logging-python/installation.md) for the Python logging library. To install *ecs-logging-python*, run: @@ -99,7 +99,7 @@ In this step, you’ll create a Python script that generates logs in JSON format Having your logs written in a JSON format with ECS fields allows for easy parsing and analysis, and for standardization with other applications. A standard, easily parsible format becomes increasingly important as the volume and type of data captured in your logs expands over time. - Together with the standard fields included for each log entry is an extra *http.request.body.content* field. This extra field is there just to give you some additional, interesting data to work with, and also to demonstrate how you can add optional fields to your log data. Check the [ECS Field Reference](https://www.elastic.co/guide/en/ecs/current/ecs-field-reference.html) for the full list of available fields. + Together with the standard fields included for each log entry is an extra *http.request.body.content* field. This extra field is there just to give you some additional, interesting data to work with, and also to demonstrate how you can add optional fields to your log data. Check the [ECS Field Reference](asciidocalypse://docs/ecs/docs/reference/ecs/ecs-field-reference.md) for the full list of available fields. 2. Let’s give the Python script a test run. Open a terminal instance in the location where you saved *elvis.py* and run the following: @@ -193,7 +193,7 @@ For this example, Filebeat uses the following four decoding options. json.expand_keys: true ``` -To learn more about these settings, check [JSON input configuration options](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-log.html#filebeat-input-log-config-json) and [Decode JSON fields](https://www.elastic.co/guide/en/beats/filebeat/current/decode-json-fields.html) in the Filebeat Reference. +To learn more about these settings, check [JSON input configuration options](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-input-log.md#filebeat-input-log-config-json) and [Decode JSON fields](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/decode-json-fields.md) in the Filebeat Reference. Append the four JSON decoding options to the *Filebeat inputs* section of *filebeat.yml*, so that the section now looks like this: @@ -229,7 +229,7 @@ Filebeat comes with predefined assets for parsing, indexing, and visualizing you ``` ::::{important} -Depending on variables including the installation location, environment, and local permissions, you might need to [change the ownership](https://www.elastic.co/guide/en/beats/libbeat/current/config-file-permissions.html) of filebeat.yml. You can also try running the command as *root*: *sudo ./filebeat setup -e* or you can disable strict permission checks by running the command with the `--strict.perms=false` option. +Depending on variables including the installation location, environment, and local permissions, you might need to [change the ownership](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-libbeat/config-file-permissions.md) of filebeat.yml. You can also try running the command as *root*: *sudo ./filebeat setup -e* or you can disable strict permission checks by running the command with the `--strict.perms=false` option. :::: @@ -335,7 +335,7 @@ In this command: * The *-c* flag specifies the path to the Filebeat config file. ::::{note} -Just in case the command doesn’t work as expected, check the [Filebeat quick start](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation-configuration.html#start) for the detailed command syntax for your operating system. You can also try running the command as *root*: *sudo ./filebeat -e -c filebeat.yml*. +Just in case the command doesn’t work as expected, check the [Filebeat quick start](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-installation-configuration.md#start) for the detailed command syntax for your operating system. You can also try running the command as *root*: *sudo ./filebeat -e -c filebeat.yml*. :::: @@ -413,5 +413,5 @@ You can add titles to the visualizations, resize and position them as you like, 2. As your final step, remember to stop Filebeat and the Python script. Enter *CTRL + C* in both your Filebeat terminal and in your `elvis.py` terminal. -You now know how to monitor log files from a Python application, deliver the log event data securely into an Elastic Cloud Enterprise deployment, and then visualize the results in Kibana in real time. Consult the [Filebeat documentation](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html) to learn more about the ingestion and processing options available for your data. You can also explore our [documentation](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-cloud-ingest-data.html#ece-ingest-methods) to learn all about working in Elastic Cloud Enterprise. +You now know how to monitor log files from a Python application, deliver the log event data securely into an Elastic Cloud Enterprise deployment, and then visualize the results in Kibana in real time. Consult the [Filebeat documentation](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-overview.md) to learn more about the ingestion and processing options available for your data. You can also explore our [documentation](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-cloud-ingest-data.html#ece-ingest-methods) to learn all about working in Elastic Cloud Enterprise. diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-install-offline.md b/raw-migrated-files/cloud/cloud-enterprise/ece-install-offline.md index cc8f80b23..a8af0e872 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-install-offline.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-install-offline.md @@ -10,7 +10,7 @@ Installing ECE on hosts without internet access is commonly referred to as an *o * Be part of the `docker` group to run the installation script. You should not install Elastic Cloud Enterprise as the `root` user. * Set up your [wildcard DNS record](../../../deploy-manage/deploy/cloud-enterprise/ece-wildcard-dns.md). -* Set up and run a local copy of the Elastic Package Repository, otherwise your deployments with APM server and Elastic agent won’t work. Refer to the [Running EPR in airgapped environments](https://www.elastic.co/guide/en/fleet/current/air-gapped.html#air-gapped-diy-epr) documentation. +* Set up and run a local copy of the Elastic Package Repository, otherwise your deployments with APM server and Elastic agent won’t work. Refer to the [Running EPR in airgapped environments](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/air-gapped.md#air-gapped-diy-epr) documentation. * Deployment End-of-life (EOL) information relies on the connection to [https://www.elastic.co/support/eol.json](https://www.elastic.co/support/eol.json). If EOL information is updated, Elastic may require you to reconnect to [https://www.elastic.co/support/eol.json](https://www.elastic.co/support/eol.json) over the Internet to get this information reflected. When you are ready to install ECE, you can proceed: diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-manage-apm-settings.md b/raw-migrated-files/cloud/cloud-enterprise/ece-manage-apm-settings.md index b0a6a2b00..3e62e7fcc 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-manage-apm-settings.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-manage-apm-settings.md @@ -24,7 +24,7 @@ Users running {{stack}} versions 7.16 or 7.17 need to manually configure TLS. Th Pick one of the following options: -1. Upload and configure a publicly signed {{es}} TLS certificates. Check [Encrypt traffic in clusters with a self-managed Fleet Server](https://www.elastic.co/guide/en/fleet/current/secure-connections.html) for details. +1. Upload and configure a publicly signed {{es}} TLS certificates. Check [Encrypt traffic in clusters with a self-managed Fleet Server](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/secure-connections.md) for details. 2. Change the {{es}} hosts where {{agent}}s send data from the default public URL, to the internal URL. In {{kib}}, navigate to **Fleet** and select the **Elastic Cloud agent policy**. Click **Fleet settings** and update the {{es}} hosts URL. For example, if the current URL is `https://123abc.us-central1.gcp.foundit.no:9244`, change it to `http://123abc.containerhost:9244`. diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-manage-integrations-server.md b/raw-migrated-files/cloud/cloud-enterprise/ece-manage-integrations-server.md index 0310ad3aa..dcb7819e3 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-manage-integrations-server.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-manage-integrations-server.md @@ -1,6 +1,6 @@ # Manage your Integrations Server [ece-manage-integrations-server] -For deployments that are version 8.0 and later, you have the option to add a combined [Application Performance Monitoring (APM) Server](/solutions/observability/apps/application-performance-monitoring-apm.md) and [Fleet Server](https://www.elastic.co/guide/en/fleet/current/fleet-overview.html) to your deployment. APM allows you to monitor software services and applications in real time, turning that data into documents stored in the Elasticsearch cluster. Fleet allows you to centrally manage Elastic Agents on many hosts. +For deployments that are version 8.0 and later, you have the option to add a combined [Application Performance Monitoring (APM) Server](/solutions/observability/apps/application-performance-monitoring-apm.md) and [Fleet Server](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/index.md) to your deployment. APM allows you to monitor software services and applications in real time, turning that data into documents stored in the Elasticsearch cluster. Fleet allows you to centrally manage Elastic Agents on many hosts. As part of provisioning, the APM Server and Fleet Server are already configured to work with Elasticsearch and Kibana. At the end of provisioning, you are shown the secret token to configure communication between the APM Server and the backend [APM Agents](https://www.elastic.co/guide/en/apm/agent/index.html). The APM Agents get deployed within your services and applications. diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-manage-kibana-settings.md b/raw-migrated-files/cloud/cloud-enterprise/ece-manage-kibana-settings.md index 09e70bf59..2ac1b3c62 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-manage-kibana-settings.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-manage-kibana-settings.md @@ -3,7 +3,7 @@ Elastic Cloud Enterprise supports most of the standard Kibana and X-Pack settings. Through a YAML editor in the console, you can append Kibana properties to the `kibana.yml` file. Your changes to the configuration file are read on startup. ::::{important} -Be aware that some settings that could break your cluster if set incorrectly and that the syntax might change between major versions. Before upgrading, be sure to review the full list of the [latest Kibana settings and syntax](https://www.elastic.co/guide/en/kibana/current/settings.html). +Be aware that some settings that could break your cluster if set incorrectly and that the syntax might change between major versions. Before upgrading, be sure to review the full list of the [latest Kibana settings and syntax](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). :::: diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-restful-api-examples-configuring-keystore.md b/raw-migrated-files/cloud/cloud-enterprise/ece-restful-api-examples-configuring-keystore.md index f13a2a155..f92b442ab 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-restful-api-examples-configuring-keystore.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-restful-api-examples-configuring-keystore.md @@ -9,7 +9,7 @@ To configure the keystore, you must meet the minimum criteria: * To access the RESTful API for Elastic Cloud Enterprise, you must use your Elastic Cloud Enterprise credentials. -To learn more about the Elasticsearch keystore, refer to the [Elasticsearch documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/secure-settings.html). +To learn more about the Elasticsearch keystore, refer to the [Elasticsearch documentation](/deploy-manage/security/secure-settings.md). ## Steps [ece_steps_9] diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-secure-clusters-kerberos.md b/raw-migrated-files/cloud/cloud-enterprise/ece-secure-clusters-kerberos.md index 3970965fa..913f67cb9 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-secure-clusters-kerberos.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-secure-clusters-kerberos.md @@ -10,7 +10,7 @@ The Kerberos credentials are valid against the deployment, not the ECE platform. ## Before you begin [ece_before_you_begin_20] -The steps in this section require an understanding of Kerberos. To learn more about Kerberos, check our documentation on [configuring Elasticsearch for Kerberos authentication](https://www.elastic.co/guide/en/elasticsearch/reference/current/kerberos-realm.html). +The steps in this section require an understanding of Kerberos. To learn more about Kerberos, check our documentation on [configuring Elasticsearch for Kerberos authentication](/deploy-manage/users-roles/cluster-or-deployment-auth/kerberos.md). ## Configure the cluster to use Kerberos [ece-configure-kerberos-settings] @@ -18,13 +18,13 @@ The steps in this section require an understanding of Kerberos. To learn more ab With a custom bundle containing the Kerberos files and changes to the cluster configuration, you can enforce user authentication through the Kerberos protocol. 1. Create or use an existing deployment that includes a Kibana instance. -2. Create a [custom bundle](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-add-plugins.html) that contains your `krb5.conf` and `keytab` files, and add it to your cluster. +2. Create a [custom bundle](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch-plugins/cloud-enterprise/ece-add-plugins.md) that contains your `krb5.conf` and `keytab` files, and add it to your cluster. ::::{tip} You should use these exact filenames for Elastic Cloud Enterprise to recognize the file in the bundle. :::: -3. Edit your cluster configuration, sometimes also referred to as the deployment plan, to define Kerberos settings as described in [Elasticsearch documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/kerberos-realm.html). +3. Edit your cluster configuration, sometimes also referred to as the deployment plan, to define Kerberos settings as described in [Elasticsearch documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/kerberos.md). ```sh xpack.security.authc.realms.kerberos.cloud-krb: diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-secure-clusters-oidc.md b/raw-migrated-files/cloud/cloud-enterprise/ece-secure-clusters-oidc.md index d8713b67e..70c5a3c38 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-secure-clusters-oidc.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-secure-clusters-oidc.md @@ -15,7 +15,7 @@ To prepare for using OpenID Connect for authentication for deployments: * Create or use an existing deployment. Make note of the Kibana endpoint URL, it will be referenced as `` in the following steps. * The steps in this section required a moderate understanding of [OpenID Connect](https://openid.net/specs/openid-connect-core-1_0.md#Authentication) in general and the Authorization Code Grant flow specifically. For more information about OpenID Connect and how it works with the Elastic Stack check: - * Our [configuration guide for Elasticsearch](https://www.elastic.co/guide/en/elasticsearch/reference/current/oidc-guide.html#oidc-elasticsearch-authentication). + * Our [configuration guide for Elasticsearch](/deploy-manage/users-roles/cluster-or-deployment-auth/openid-connect.md#oidc-elasticsearch-authentication). @@ -103,8 +103,8 @@ The Elasticsearch cluster needs to be configured to use the OpenID Connect realm 7. The URL for the Token Endpoint in the OpenID Connect Provider. This is the endpoint where Elastic Cloud Enterprise will send a request to exchange the code for an ID Token, as part of the Authorization Code flow. The value for this setting should be provided by your OpenID Connect Provider. 8. (Optional) The URL for the UserInfo Endpoint in the OpenID Connect Provider. This is the endpoint of the OP that can be queried to get further user information, if required. The value for this setting should be provided by your OpenID Connect Provider. 9. The path to a file or an HTTPS URL pointing to a JSON Web Key Set with the key material that the OpenID Connect Provider uses for signing tokens and claims responses. Your OpenID Connect Provider should provide you with this file. - 10. Defines the OpenID Connect claim that is going to be mapped to the principal (username) of the authenticated user in Kibana. In this example, we map the value of the `sub` claim, but this is not a requirement, other claims can be used too. Check [the claims mapping documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/oidc-guide.html#oidc-claims-mapping) for details and available options. - 11. Defines the OpenID Connect claim that is going to be used for role mapping. Note that the value `"http://example.info/claims/groups"` that is used here, is an arbitrary example. Check [the claims mapping documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/oidc-guide.html#oidc-claims-mapping) for a very detailed description of how the claim mapping works and how can these be used for role mapping. The name of this claim should be determined by the configuration of your OpenID Connect Provider. NOTE: According to the OpenID Connect specification, the OP should also make their configuration available at a well known URL, which is the concatenation of their `Issuer` value with the `.well-known/openid-configuration` string. To configure the OpenID Connect realm, refer to the `https://op.org.com/.well-known/openid-configuration` documentation. + 10. Defines the OpenID Connect claim that is going to be mapped to the principal (username) of the authenticated user in Kibana. In this example, we map the value of the `sub` claim, but this is not a requirement, other claims can be used too. Check [the claims mapping documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/openid-connect.md#oidc-claims-mapping) for details and available options. + 11. Defines the OpenID Connect claim that is going to be used for role mapping. Note that the value `"http://example.info/claims/groups"` that is used here, is an arbitrary example. Check [the claims mapping documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/openid-connect.md#oidc-claims-mapping) for a very detailed description of how the claim mapping works and how can these be used for role mapping. The name of this claim should be determined by the configuration of your OpenID Connect Provider. NOTE: According to the OpenID Connect specification, the OP should also make their configuration available at a well known URL, which is the concatenation of their `Issuer` value with the `.well-known/openid-configuration` string. To configure the OpenID Connect realm, refer to the `https://op.org.com/.well-known/openid-configuration` documentation. 2. By default, users authenticating through OpenID Connect have no roles assigned to them. For example, if you want all your users authenticating with OpenID Connect to get access to Kibana, issue the following request to Elasticsearch: @@ -153,7 +153,7 @@ The Elasticsearch cluster needs to be configured to use the OpenID Connect realm 4. Optional: If your OpenID Connect Provider doesn’t publish its JWKS at an https URL, or if you want to use a local copy, you can upload the JWKS as a file. - 1. Prepare a ZIP file with a [custom bundle](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-add-plugins.html) that contains your OpenID Connect Provider’s JWKS file (`op_jwks.json`) inside of an `oidc` folder. + 1. Prepare a ZIP file with a [custom bundle](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch-plugins/cloud-enterprise/ece-add-plugins.md) that contains your OpenID Connect Provider’s JWKS file (`op_jwks.json`) inside of an `oidc` folder. This bundle allows all Elasticsearch containers to access the metadata file. @@ -203,7 +203,7 @@ OpenID Connect depends on TLS to provider security properties such as encryption However, if your OP uses a certificate that is issued for instance, by a CA used only in your Organization, you must configure Elastic Cloud Enterprise to trust that CA. -1. Prepare a ZIP file with a [custom bundle](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-add-plugins.html) that contains the CA certificate (`company-ca.pem`) that signed the certificate your OpenID Connect Provider uses for TLS inside of an `oidc-tls` folder +1. Prepare a ZIP file with a [custom bundle](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch-plugins/cloud-enterprise/ece-add-plugins.md) that contains the CA certificate (`company-ca.pem`) that signed the certificate your OpenID Connect Provider uses for TLS inside of an `oidc-tls` folder 2. Update your Elasticsearch cluster configuration using the [advanced configuration editor](../../../deploy-manage/deploy/cloud-enterprise/advanced-cluster-configuration.md) to use the bundle you prepared in the previous step. You need to modify the `user_bundles` JSON attribute similar to the following example snippet: ```sh diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-securing-clusters-JWT.md b/raw-migrated-files/cloud/cloud-enterprise/ece-securing-clusters-JWT.md index e4e09b66a..f3382884b 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-securing-clusters-JWT.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-securing-clusters-JWT.md @@ -102,7 +102,7 @@ xpack: ::::{note} -Refer to [JWT authentication documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/jwt-auth-realm.html) for more details and examples. +Refer to [JWT authentication documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/jwt.md) for more details and examples. :::: diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-securing-clusters-SAML.md b/raw-migrated-files/cloud/cloud-enterprise/ece-securing-clusters-SAML.md index 42fb11a49..7a2a19aaf 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-securing-clusters-SAML.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-securing-clusters-SAML.md @@ -36,8 +36,8 @@ You must edit your cluster configuration, sometimes also referred to as the depl 1. Specifies the authentication realm service. 2. Defines the SAML realm name. The SAML realm name can only contain alphanumeric characters, underscores, and hyphens. 3. The order of the SAML realm in your authentication chain. Allowed values are between `2` and `100`. Set to `2` unless you plan on configuring multiple SSO realms for this cluster. - 4. Defines the SAML attribute that is going to be mapped to the principal (username) of the authenticated user in Kibana. In this non-normative example, `nameid:persistent` maps the `NameID` with the `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent` format from the Subject of the SAML Assertion. You can use any SAML attribute that carries the necessary value for your use case in this setting, such as `uid` or `mail`. Refer to [the attribute mapping documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/saml-guide-stack.html#saml-attributes-mapping) for details and available options. - 5. Defines the SAML attribute used for role mapping when configured in Kibana. Common choices are `groups` or `roles`. The values for both `attributes.principal` and `attributes.groups` depend on the IdP provider, so be sure to review their documentation. Refer to [the attribute mapping documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/saml-guide-stack.html#saml-attributes-mapping) for details and available options. + 4. Defines the SAML attribute that is going to be mapped to the principal (username) of the authenticated user in Kibana. In this non-normative example, `nameid:persistent` maps the `NameID` with the `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent` format from the Subject of the SAML Assertion. You can use any SAML attribute that carries the necessary value for your use case in this setting, such as `uid` or `mail`. Refer to [the attribute mapping documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/saml.md#saml-attributes-mapping) for details and available options. + 5. Defines the SAML attribute used for role mapping when configured in Kibana. Common choices are `groups` or `roles`. The values for both `attributes.principal` and `attributes.groups` depend on the IdP provider, so be sure to review their documentation. Refer to [the attribute mapping documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/saml.md#saml-attributes-mapping) for details and available options. 6. The file path or the HTTPS URL where your IdP metadata is available, such as `https://idpurl.com/sso/saml/metadata`. If you configure a URL you need to make ensure that your Elasticsearch cluster can access it. 7. The SAML EntityID of your IdP. This can be read from the configuration page of the IdP, or its SAML metadata, such as `https://idpurl.com/entity_id`. 8. Replace `KIBANA_ENDPOINT_URL` with the one noted in the previous step, such as `sp.entity_id: https://eddac6b924f5450c91e6ecc6d247b514.us-east-1.aws.found.io:443/` including the slash at the end. diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-securing-clusters-ad.md b/raw-migrated-files/cloud/cloud-enterprise/ece-securing-clusters-ad.md index 77f7b34e0..9366cae24 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-securing-clusters-ad.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-securing-clusters-ad.md @@ -5,7 +5,7 @@ These steps show how you can secure your {{es}} clusters and Kibana instances wi ## Before you begin [ece_before_you_begin_18] -To learn more about how securing {{es}} clusters with Active Directory works, check [Active Directory user authentication](https://www.elastic.co/guide/en/elasticsearch/reference/current/active-directory-realm.html). +To learn more about how securing {{es}} clusters with Active Directory works, check [Active Directory user authentication](/deploy-manage/users-roles/cluster-or-deployment-auth/active-directory.md). ::::{note} The AD credentials are valid against the deployment, not the ECE platform. You can configure [role-based access control](../../../deploy-manage/users-roles/cloud-enterprise-orchestrator/manage-users-roles.md) for the platform separately. @@ -94,7 +94,7 @@ You can choose to configure an Active Directory realm using a bind user. When yo If your LDAP server uses a self-signed certificate or a certificate that is signed by your organization’s CA, you need to enable the deployment to trust this certificate. These steps are required only if TLS is enabled and the Active Directory controller is using self-signed certificates. -You’ll prepare a custom bundle that contains your certificate [in the same way that you would on {{ess}}](https://www.elastic.co/guide/en/cloud/current/ec-custom-bundles.html). Custom bundles are extracted in the path `/app/config/BUNDLE_DIRECTORY_STRUCTURE`, where `BUNDLE_DIRECTORY_STRUCTURE` is the directory structure within the bundle ZIP file itself. For example: +You’ll prepare a custom bundle that contains your certificate [in the same way that you would on {{ess}}](/deploy-manage/deploy/elastic-cloud/upload-custom-plugins-bundles.md). Custom bundles are extracted in the path `/app/config/BUNDLE_DIRECTORY_STRUCTURE`, where `BUNDLE_DIRECTORY_STRUCTURE` is the directory structure within the bundle ZIP file itself. For example: ```sh $ tree . @@ -177,7 +177,7 @@ If the keystore is also password protected (which isn’t typical for keystores ## Mapping Active Directory groups to roles [ece-securing-clusters-ad-role-mapping] -You have two ways of mapping Active Directory groups to roles for your users. The preferred one is to use the [role mapping API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-security-put-role-mapping). If for some reason this is not possible, you can use a [role mapping file](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-roles.html) to specify the mappings instead. +You have two ways of mapping Active Directory groups to roles for your users. The preferred one is to use the [role mapping API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-security-put-role-mapping). If for some reason this is not possible, you can use a [role mapping file](/deploy-manage/users-roles/cluster-or-deployment-auth/mapping-users-groups-to-roles.md) to specify the mappings instead. ::::{important} Only Active Directory security groups are supported. You cannot map distribution groups to roles. @@ -261,7 +261,7 @@ Let’s assume that you want all your users that authenticate through AD and are - cn=my-users, dc=example, dc=com ``` -2. Prepare the custom bundle ZIP file `mappings.zip`, that contains the `role-mappings.yml` file [in the same way that you would on Elastic Cloud](https://www.elastic.co/guide/en/cloud/current/ec-custom-bundles.html). +2. Prepare the custom bundle ZIP file `mappings.zip`, that contains the `role-mappings.yml` file [in the same way that you would on Elastic Cloud](/deploy-manage/deploy/elastic-cloud/upload-custom-plugins-bundles.md). 3. Custom bundles get unzipped under the path `/app/config/BUNDLE_DIRECTORY_STRUCTURE`, where `BUNDLE_DIRECTORY_STRUCTURE` is the directory structure within the bundle ZIP file itself. For example: ```sh diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-securing-clusters-ldap.md b/raw-migrated-files/cloud/cloud-enterprise/ece-securing-clusters-ldap.md index 3ade00788..7c0fb4a6f 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-securing-clusters-ldap.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-securing-clusters-ldap.md @@ -5,7 +5,7 @@ These steps show how you can secure your {{es}} clusters and Kibana instances wi ## Before you begin [ece_before_you_begin_17] -To learn more about how securing {{es}} clusters with LDAP works, check [LDAP user authentication](https://www.elastic.co/guide/en/elasticsearch/reference/current/ldap-realm.html). +To learn more about how securing {{es}} clusters with LDAP works, check [LDAP user authentication](/deploy-manage/users-roles/cluster-or-deployment-auth/ldap.md). ::::{note} The LDAP credentials are valid against the deployment, not the ECE platform. You can configure [role-based access control](../../../deploy-manage/users-roles/cloud-enterprise-orchestrator/manage-users-roles.md) for the platform separately. @@ -95,7 +95,7 @@ You must apply the user settings to each [deployment template](../../../deploy-m 3. (Optional) Encrypt communications between the deployment and the LDAP Server. If your LDAP server uses a self-signed certificate or a certificate that is signed by your organization’s CA, you need to enable the deployment to trust this certificate. - 1. Prepare the custom bundle ZIP file `ldapcert.zip`, that contains the CA certificate file (for example `ca.crt`) [in the same way that you would on Elastic Cloud](https://www.elastic.co/guide/en/cloud/current/ec-custom-bundles.html). + 1. Prepare the custom bundle ZIP file `ldapcert.zip`, that contains the CA certificate file (for example `ca.crt`) [in the same way that you would on Elastic Cloud](/deploy-manage/deploy/elastic-cloud/upload-custom-plugins-bundles.md). 2. Custom bundles are unzipped under the path `/app/config/BUNDLE_DIRECTORY_STRUCTURE`, where `BUNDLE_DIRECTORY_STRUCTURE` is the directory structure within the bundle ZIP file itself. For example: ```sh @@ -175,7 +175,7 @@ If your CA certificate is available as a `JKS` or `PKCS#12` keystore, you can up ## Mapping LDAP groups to roles [ece-securing-clusters-ldap-role-mapping] -You have two ways of mapping LDAP groups to roles for your users. The preferred one is to use the [role mapping API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-security-put-role-mapping). If for some reason this is not possible, you can use a [role mapping file](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-roles.html) to specify the mappings instead. +You have two ways of mapping LDAP groups to roles for your users. The preferred one is to use the [role mapping API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-security-put-role-mapping). If for some reason this is not possible, you can use a [role mapping file](/deploy-manage/users-roles/cluster-or-deployment-auth/mapping-users-groups-to-roles.md) to specify the mappings instead. ### Using the Role Mapping API [ece_using_the_role_mapping_api] @@ -254,7 +254,7 @@ Let’s assume that you want all your users that authenticate through LDAP and a - cn=my-users, ou=groups, o=services, dc=example, dc=com ``` -2. Prepare the custom bundle ZIP file `mappings.zip`, that contains the `role-mappings.yml` file [in the same way that you would on Elastic Cloud](https://www.elastic.co/guide/en/cloud/current/ec-custom-bundles.html). +2. Prepare the custom bundle ZIP file `mappings.zip`, that contains the `role-mappings.yml` file [in the same way that you would on Elastic Cloud](/deploy-manage/deploy/elastic-cloud/upload-custom-plugins-bundles.md). 3. Custom bundles are unzipped under the path `/app/config/BUNDLE_DIRECTORY_STRUCTURE`, where `BUNDLE_DIRECTORY_STRUCTURE` is the directory structure within the bundle ZIP file itself. For example: ```sh diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-securing-clusters.md b/raw-migrated-files/cloud/cloud-enterprise/ece-securing-clusters.md index b53d3ae44..83899715d 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-securing-clusters.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-securing-clusters.md @@ -7,7 +7,7 @@ Elastic Cloud Enterprise supports most of the security features that are part of * Reset the [`elastic` user password](../../../deploy-manage/users-roles/cluster-or-deployment-auth/built-in-users.md). * Use third-party authentication providers like [SAML](../../../deploy-manage/users-roles/cluster-or-deployment-auth/saml.md), [LDAP](../../../deploy-manage/users-roles/cluster-or-deployment-auth/ldap.md), [Active Directory](../../../deploy-manage/users-roles/cluster-or-deployment-auth/active-directory.md), [OpenID Connect](../../../deploy-manage/users-roles/cluster-or-deployment-auth/openid-connect.md), or [Kerberos](../../../deploy-manage/users-roles/cluster-or-deployment-auth/kerberos.md) to provide dynamic [role mappings](../../../deploy-manage/users-roles/cluster-or-deployment-auth/mapping-users-groups-to-roles.md) for role based or attribute based access control. * Use {{kib}} Spaces and roles to [secure access to {{kib}}](../../../deploy-manage/users-roles/cluster-or-deployment-auth/quickstart.md). - * Authorize and authenticate service accounts for {{beats}} by [granting access using API keys](https://www.elastic.co/guide/en/beats/filebeat/current/beats-api-keys.html). + * Authorize and authenticate service accounts for {{beats}} by [granting access using API keys](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/beats-api-keys.md). * Block unwanted traffic with [traffic filter](../../../deploy-manage/security/traffic-filtering.md). diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-traffic-filtering-deployment-configuration.md b/raw-migrated-files/cloud/cloud-enterprise/ece-traffic-filtering-deployment-configuration.md index 390bcf795..b6c7e97dc 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-traffic-filtering-deployment-configuration.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-traffic-filtering-deployment-configuration.md @@ -101,7 +101,7 @@ Follow the instructions that match your use case: ## Troubleshooting [ece-traffic-filter-troubleshooting] -This section offers suggestions on how to troubleshoot your traffic filters. Before you start make sure you check the [Limitations and known problems](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-limitations.html). +This section offers suggestions on how to troubleshoot your traffic filters. Before you start make sure you check the [Limitations and known problems](asciidocalypse://docs/cloud/docs/release-notes/known-issues/cloud-enterprise.md). ### Review the rule sets associated with a deployment [ece-review-rule-sets] diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-upgrade-deployment.md b/raw-migrated-files/cloud/cloud-enterprise/ece-upgrade-deployment.md index a68e62e65..21603a73d 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-upgrade-deployment.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-upgrade-deployment.md @@ -43,7 +43,7 @@ To upgrade a cluster in Elastic Cloud Enterprise: 4. Select one of the available software versions. Let the user interface guide you through the steps for upgrading a deployment. When you save your changes, your deployment configuration is updated to the new version. ::::{tip} - You cannot downgrade after upgrading, so plan ahead to make sure that your applications still work after upgrading. For more information on changes that might affect your applications, check [Breaking changes](https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes.html). + You cannot downgrade after upgrading, so plan ahead to make sure that your applications still work after upgrading. For more information on changes that might affect your applications, check [Breaking changes](asciidocalypse://docs/elasticsearch/docs/release-notes/breaking-changes/elasticsearch.md). :::: 5. If you are upgrading to version 6.6 and earlier, major upgrades require a full cluster restart to complete the upgrade process. diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece-upgrade.md b/raw-migrated-files/cloud/cloud-enterprise/ece-upgrade.md index 5d77afeff..dc5dad8a1 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece-upgrade.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece-upgrade.md @@ -24,7 +24,7 @@ The following table shows the recommended upgrade paths from older {{ece}} versi ## The upgrade process [ece-upgrade-overview] -Upgrading Elastic Cloud Enterprise works by replacing the [containers](https://www.elastic.co/guide/en/elastic-stack-glossary/current/terms.html#glossary-container) that ECE itself requires to run on each host. Upgrading ECE does not touch any of the containers that run Elasticsearch clusters and Kibana instances. Each container that needs to be upgraded is renamed and stopped, followed by the creation of a new container with an upgraded instance of the ECE software and its dependencies. When the upgrade process has completed successfully, it cleans up after itself and removes the old containers. +Upgrading Elastic Cloud Enterprise works by replacing the [containers](asciidocalypse://docs/docs-content/docs/reference/glossary/index.md#glossary-container) that ECE itself requires to run on each host. Upgrading ECE does not touch any of the containers that run Elasticsearch clusters and Kibana instances. Each container that needs to be upgraded is renamed and stopped, followed by the creation of a new container with an upgraded instance of the ECE software and its dependencies. When the upgrade process has completed successfully, it cleans up after itself and removes the old containers. The upgrade process creates a `frc-upgraders-monitor` container on the host where you initiate the process that performs the following actions: diff --git a/raw-migrated-files/cloud/cloud-enterprise/ece_optional_settings.md b/raw-migrated-files/cloud/cloud-enterprise/ece_optional_settings.md index 186194d97..feecd44dc 100644 --- a/raw-migrated-files/cloud/cloud-enterprise/ece_optional_settings.md +++ b/raw-migrated-files/cloud/cloud-enterprise/ece_optional_settings.md @@ -5,5 +5,5 @@ The following optional realm settings are supported: * `force_authn` Specifies whether to set the `ForceAuthn` attribute when requesting that the IdP authenticate the current user. If set to `true`, the IdP is required to verify the user’s identity, irrespective of any existing sessions they might have. Defaults to `false`. * `idp.use_single_logout` Indicates whether to utilise the Identity Provider’s `` (if one exists in the IdP metadata file). Defaults to `true`. -After completing these steps, you can log in to Kibana by authenticating against your SAML IdP. If you encounter any issues with the configuration, refer to the [SAML troubleshooting page](https://www.elastic.co/guide/en/elasticsearch/reference/current/trb-security-saml.html) which contains information about common issues and suggestions for their resolution. +After completing these steps, you can log in to Kibana by authenticating against your SAML IdP. If you encounter any issues with the configuration, refer to the [SAML troubleshooting page](/troubleshoot/elasticsearch/security/trb-security-saml.md) which contains information about common issues and suggestions for their resolution. diff --git a/raw-migrated-files/cloud/cloud-heroku/ech-add-user-settings.md b/raw-migrated-files/cloud/cloud-heroku/ech-add-user-settings.md index c5382a513..f139106b1 100644 --- a/raw-migrated-files/cloud/cloud-heroku/ech-add-user-settings.md +++ b/raw-migrated-files/cloud/cloud-heroku/ech-add-user-settings.md @@ -35,7 +35,7 @@ Elasticsearch Add-On for Heroku supports the following `elasticsearch.yml` setti The following general settings are supported: $$$http-cors-settings$$$`http.cors.*` -: Enables cross-origin resource sharing (CORS) settings for the [HTTP module](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html). +: Enables cross-origin resource sharing (CORS) settings for the [HTTP module](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md). ::::{note} If your use case depends on the ability to receive CORS requests and you have a cluster that was provisioned prior to January 25th 2019, you must manually set `http.cors.enabled` to `true` and allow a specific set of hosts with `http.cors.allow-origin`. Applying these changes in your Elasticsearch configuration allows cross-origin resource sharing requests. @@ -43,13 +43,13 @@ $$$http-cors-settings$$$`http.cors.*` `http.compression` -: Support for [HTTP compression](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html) when possible (with Accept-Encoding). Defaults to `true`. +: Support for [HTTP compression](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md) when possible (with Accept-Encoding). Defaults to `true`. `transport.compress` -: Configures [transport compression](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html) for node-to-node traffic. +: Configures [transport compression](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md) for node-to-node traffic. `transport.compression_scheme` -: Configures [transport compression](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html) for node-to-node traffic. +: Configures [transport compression](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md) for node-to-node traffic. `repositories.url.allowed_urls` : Enables explicit allowing of [read-only URL repositories](../../../deploy-manage/tools/snapshot-and-restore/read-only-url-repository.md). @@ -61,7 +61,7 @@ $$$http-cors-settings$$$`http.cors.*` : To learn more on how to configure reindex SSL user settings, check [configuring reindex SSL parameters](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-reindex). `script.painless.regex.enabled` -: Enables [regular expressions](https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-walkthrough.html#modules-scripting-painless-regex) for the Painless scripting language. +: Enables [regular expressions](asciidocalypse://docs/elasticsearch/docs/reference/scripting-languages/painless/brief-painless-walkthrough.md#modules-scripting-painless-regex) for the Painless scripting language. `action.auto_create_index` : [Automatically create index](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-create) if it doesn’t already exist. @@ -94,19 +94,19 @@ $$$http-cors-settings$$$`http.cors.*` The following circuit breaker settings are supported: `indices.breaker.total.limit` -: Configures [the parent circuit breaker settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/circuit-breaker.html#parent-circuit-breaker). +: Configures [the parent circuit breaker settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/circuit-breaker-settings.md#parent-circuit-breaker). `indices.breaker.fielddata.limit` -: Configures [the limit for the fielddata breaker](https://www.elastic.co/guide/en/elasticsearch/reference/current/circuit-breaker.html#fielddata-circuit-breaker). +: Configures [the limit for the fielddata breaker](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/circuit-breaker-settings.md#fielddata-circuit-breaker). `indices.breaker.fielddata.overhead` -: Configures [a constant that all field data estimations are multiplied with to determine a final estimation](https://www.elastic.co/guide/en/elasticsearch/reference/current/circuit-breaker.html#fielddata-circuit-breaker). +: Configures [a constant that all field data estimations are multiplied with to determine a final estimation](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/circuit-breaker-settings.md#fielddata-circuit-breaker). `indices.breaker.request.limit` -: Configures [the limit for the request breaker](https://www.elastic.co/guide/en/elasticsearch/reference/current/circuit-breaker.html#request-circuit-breaker). +: Configures [the limit for the request breaker](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/circuit-breaker-settings.md#request-circuit-breaker). `indices.breaker.request.overhead` -: Configures [a constant that all request estimations are multiplied by to determine a final estimation](https://www.elastic.co/guide/en/elasticsearch/reference/current/circuit-breaker.html#request-circuit-breaker). +: Configures [a constant that all request estimations are multiplied by to determine a final estimation](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/circuit-breaker-settings.md#request-circuit-breaker). ### Indexing pressure settings [echindexing_pressure_settings] @@ -114,7 +114,7 @@ The following circuit breaker settings are supported: The following indexing pressure settings are supported: `indexing_pressure.memory.limit` -: Configures [the indexing pressure settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-indexing-pressure.html#indexing-pressure-settings). +: Configures [the indexing pressure settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/indexing-pressure-settings.md#indexing-pressure-settings). ### X-Pack [echx_pack] @@ -128,28 +128,28 @@ The following indexing pressure settings are supported: #### All supported versions [echall_supported_versions] `xpack.ml.inference_model.time_to_live` -: Sets the duration of time that the trained models are cached. Check [{{ml-cap}} settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/ml-settings.html). +: Sets the duration of time that the trained models are cached. Check [{{ml-cap}} settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/machine-learning-settings.md). `xpack.security.loginAssistanceMessage` : Adds a message to the login screen. Useful for displaying corporate messages. `xpack.security.authc.anonymous.*` -: To learn more on how to enable anonymous access, check [Enabling anonymous access](https://www.elastic.co/guide/en/elasticsearch/reference/current/anonymous-access.html) +: To learn more on how to enable anonymous access, check [Enabling anonymous access](/deploy-manage/users-roles/cluster-or-deployment-auth/anonymous-access.md) `xpack.notification.slack` -: Configures [Slack notification settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/actions-slack.html#actions-slack). Note that you need to add `secure_url` as a [secret value to the keystore](../../../deploy-manage/security/secure-settings.md). +: Configures [Slack notification settings](/explore-analyze/alerts-cases/watcher/actions-slack.md). Note that you need to add `secure_url` as a [secret value to the keystore](../../../deploy-manage/security/secure-settings.md). `xpack.notification.pagerduty` -: Configures [PagerDuty notification settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/actions-pagerduty.html#configuring-pagerduty). +: Configures [PagerDuty notification settings](/explore-analyze/alerts-cases/watcher/actions-pagerduty.md#configuring-pagerduty). `xpack.watcher.trigger.schedule.engine` -: Defines when the watch should start, based on date and time [Learn more](https://www.elastic.co/guide/en/elasticsearch/reference/current/trigger-schedule.html). +: Defines when the watch should start, based on date and time [Learn more](/explore-analyze/alerts-cases/watcher/trigger-schedule.md). `xpack.notification.email.html.sanitization.*` -: Enables [email notification settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/notification-settings.html) to sanitize HTML elements in emails that are sent. +: Enables [email notification settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/watcher-settings.md) to sanitize HTML elements in emails that are sent. `xpack.monitoring.collection.interval` -: Controls [how often data samples are collected](https://www.elastic.co/guide/en/elasticsearch/reference/current/monitoring-settings.html#monitoring-collection-settings). +: Controls [how often data samples are collected](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/monitoring-settings.md#monitoring-collection-settings). `xpack.monitoring.collection.min_interval_seconds` : Specifies the minimum number of seconds that a time bucket in a chart can represent. If you modify the `xpack.monitoring.collection.interval`, use the same value in this setting. @@ -158,10 +158,10 @@ The following indexing pressure settings are supported: $$$xpack-monitoring-history-duration$$$`xpack.monitoring.history.duration` -: Sets the [retention duration](https://www.elastic.co/guide/en/elasticsearch/reference/current/monitoring-settings.html#monitoring-collection-settings) beyond which the indices created by a monitoring exporter will be automatically deleted. +: Sets the [retention duration](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/monitoring-settings.md#monitoring-collection-settings) beyond which the indices created by a monitoring exporter will be automatically deleted. `xpack.watcher.history.cleaner_service.enabled` -: Controls [whether old watcher indices are automatically deleted](https://www.elastic.co/guide/en/elasticsearch/reference/current/notification-settings.html#general-notification-settings). +: Controls [whether old watcher indices are automatically deleted](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/watcher-settings.md#general-notification-settings). `xpack.http.ssl.cipher_suites` : Controls the list of supported cipher suites for all outgoing TLS connections. @@ -197,16 +197,16 @@ The following search settings are supported: The following disk-based allocation settings are supported: `cluster.routing.allocation.disk.threshold_enabled` -: Enable or disable [disk allocation](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html#disk-based-shard-allocation) decider and defaults to `true`. +: Enable or disable [disk allocation](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md#disk-based-shard-allocation) decider and defaults to `true`. `cluster.routing.allocation.disk.watermark.low` -: Configures [disk-based shard allocation’s low watermark](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html#disk-based-shard-allocation). +: Configures [disk-based shard allocation’s low watermark](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md#disk-based-shard-allocation). `cluster.routing.allocation.disk.watermark.high` -: Configures [disk-based shard allocation’s high watermark](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html#disk-based-shard-allocation). +: Configures [disk-based shard allocation’s high watermark](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md#disk-based-shard-allocation). `cluster.routing.allocation.disk.watermark.flood_stage` -: Configures [disk-based shard allocation’s flood_stage](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html#disk-based-shard-allocation). +: Configures [disk-based shard allocation’s flood_stage](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md#disk-based-shard-allocation). ::::{tip} Remember to update user settings for alerts when performing a major version upgrade. diff --git a/raw-migrated-files/cloud/cloud-heroku/ech-adding-plugins.md b/raw-migrated-files/cloud/cloud-heroku/ech-adding-plugins.md index 0692739bd..6e9ff42b2 100644 --- a/raw-migrated-files/cloud/cloud-heroku/ech-adding-plugins.md +++ b/raw-migrated-files/cloud/cloud-heroku/ech-adding-plugins.md @@ -13,7 +13,7 @@ There are two ways to add plugins to a deployment in Elasticsearch Add-On for He * [Enable one of the official plugins already available in Elasticsearch Add-On for Heroku](../../../deploy-manage/deploy/elastic-cloud/add-plugins-provided-with-elastic-cloud-hosted.md). * [Upload a custom plugin and then enable it per deployment](../../../deploy-manage/deploy/elastic-cloud/upload-custom-plugins-bundles.md). -Custom plugins can include the official {{es}} plugins not provided with Elasticsearch Add-On for Heroku, any of the community-sourced plugins, or [plugins that you write yourself](https://www.elastic.co/guide/en/elasticsearch/plugins/current/plugin-authors.html). Uploading custom plugins is available only to Gold, Platinum, and Enterprise subscriptions. For more information, check [Upload custom plugins and bundles](../../../deploy-manage/deploy/elastic-cloud/upload-custom-plugins-bundles.md). +Custom plugins can include the official {{es}} plugins not provided with Elasticsearch Add-On for Heroku, any of the community-sourced plugins, or [plugins that you write yourself](asciidocalypse://docs/elasticsearch/docs/extend/create-elasticsearch-plugins/index.md). Uploading custom plugins is available only to Gold, Platinum, and Enterprise subscriptions. For more information, check [Upload custom plugins and bundles](../../../deploy-manage/deploy/elastic-cloud/upload-custom-plugins-bundles.md). To learn more about the official and community-sourced plugins, refer to [{{es}} Plugins and Integrations](https://www.elastic.co/guide/en/elasticsearch/plugins/current/index.html). diff --git a/raw-migrated-files/cloud/cloud-heroku/ech-autoscaling.md b/raw-migrated-files/cloud/cloud-heroku/ech-autoscaling.md index cb987b9e2..b42cda57c 100644 --- a/raw-migrated-files/cloud/cloud-heroku/ech-autoscaling.md +++ b/raw-migrated-files/cloud/cloud-heroku/ech-autoscaling.md @@ -57,7 +57,7 @@ When past behavior on a hot tier indicates that the influx of data can increase * Through ILM policies. For example, if a deployment has only hot nodes and autoscaling is enabled, it automatically creates warm or cold nodes, if an ILM policy is trying to move data from hot to warm or cold nodes. -On machine learning nodes, scaling is determined by an estimate of the memory and CPU requirements for the currently configured jobs and trained models. When a new machine learning job tries to start, it looks for a node with adequate native memory and CPU capacity. If one cannot be found, it stays in an `opening` state. If this waiting job exceeds the queueing limit set in the machine learning decider, a scale up is requested. Conversely, as machine learning jobs run, their memory and CPU usage might decrease or other running jobs might finish or close. In this case, if the duration of decreased resource usage exceeds the set value for `down_scale_delay`, a scale down is requested. Check [Machine learning decider](../../../deploy-manage/autoscaling/autoscaling-deciders.md) for more detail. To learn more about machine learning jobs in general, check [Create anomaly detection jobs](https://www.elastic.co/guide/en/machine-learning/current/ml-ad-run-jobs.html#ml-ad-create-job). +On machine learning nodes, scaling is determined by an estimate of the memory and CPU requirements for the currently configured jobs and trained models. When a new machine learning job tries to start, it looks for a node with adequate native memory and CPU capacity. If one cannot be found, it stays in an `opening` state. If this waiting job exceeds the queueing limit set in the machine learning decider, a scale up is requested. Conversely, as machine learning jobs run, their memory and CPU usage might decrease or other running jobs might finish or close. In this case, if the duration of decreased resource usage exceeds the set value for `down_scale_delay`, a scale down is requested. Check [Machine learning decider](../../../deploy-manage/autoscaling/autoscaling-deciders.md) for more detail. To learn more about machine learning jobs in general, check [Create anomaly detection jobs](/explore-analyze/machine-learning/anomaly-detection/ml-ad-run-jobs.md#ml-ad-create-job). On a highly available deployment, autoscaling events are always applied to instances in each availability zone simultaneously, to ensure consistency. diff --git a/raw-migrated-files/cloud/cloud-heroku/ech-custom-bundles.md b/raw-migrated-files/cloud/cloud-heroku/ech-custom-bundles.md index f28d91729..c4c6dccf1 100644 --- a/raw-migrated-files/cloud/cloud-heroku/ech-custom-bundles.md +++ b/raw-migrated-files/cloud/cloud-heroku/ech-custom-bundles.md @@ -76,7 +76,7 @@ Bundles The dictionary `synonyms.txt` can be used as `synonyms.txt` or using the full path `/app/config/synonyms.txt` in the `synonyms_path` of the `synonym-filter`. - To learn more about analyzing with synonyms, check [Synonym token filter](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-synonym-tokenfilter.html) and [Formatting Synonyms](https://www.elastic.co/guide/en/elasticsearch/guide/2.x/synonym-formats.html). + To learn more about analyzing with synonyms, check [Synonym token filter](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-synonym-tokenfilter.md) and [Formatting Synonyms](https://www.elastic.co/guide/en/elasticsearch/guide/2.x/synonym-formats.html). **GeoIP database bundle** diff --git a/raw-migrated-files/cloud/cloud-heroku/ech-enable-logging-and-monitoring.md b/raw-migrated-files/cloud/cloud-heroku/ech-enable-logging-and-monitoring.md index 2fdc3f58f..62482ced4 100644 --- a/raw-migrated-files/cloud/cloud-heroku/ech-enable-logging-and-monitoring.md +++ b/raw-migrated-files/cloud/cloud-heroku/ech-enable-logging-and-monitoring.md @@ -173,7 +173,7 @@ When shipping logs to a monitoring deployment there are more logging features av #### For {{es}}: [ech-extra-logging-features-elasticsearch] * [Audit logging](../../../deploy-manage/monitor/logging-configuration/enabling-audit-logs.md) - logs security-related events on your deployment -* [Slow query and index logging](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-slowlog.html) - helps find and debug slow queries and indexing +* [Slow query and index logging](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/slow-log-settings.md) - helps find and debug slow queries and indexing * Verbose logging - helps debug stack issues by increasing component logs After you’ve enabled log delivery on your deployment, you can [add the Elasticsearch user settings](../../../deploy-manage/deploy/elastic-cloud/edit-stack-settings.md) to enable these features. diff --git a/raw-migrated-files/cloud/cloud-heroku/ech-getting-started.md b/raw-migrated-files/cloud/cloud-heroku/ech-getting-started.md index 45aa13330..17e9ef97f 100644 --- a/raw-migrated-files/cloud/cloud-heroku/ech-getting-started.md +++ b/raw-migrated-files/cloud/cloud-heroku/ech-getting-started.md @@ -4,7 +4,7 @@ This documentation applies to Heroku users who want to make use of the Elasticse The add-on runs on the Elasticsearch Service and provides access to [Elasticsearch](https://www.elastic.co/products/elasticsearch), the open source, distributed, RESTful search engine. Many other features of the Elastic Stack are also readily available to Heroku users through the [Elasticsearch Add-On for Heroku console](https://cloud.elastic.co?page=docs&placement=docs-body) after you install the add-on. For example, you can use Kibana to visualize your Elasticsearch data. -[Elasticsearch Machine Learning](https://www.elastic.co/guide/en/machine-learning/current/index.html), [Elastic Enterprise Search](https://www.elastic.co/guide/en/enterprise-search/current/index.html), [Elastic APM](/solutions/observability/apps/application-performance-monitoring-apm.md) and [Elastic Fleet Server](https://www.elastic.co/guide/en/fleet/current/fleet-overview.html) are not supported by the Elasticsearch Add-On for Heroku. +[Elasticsearch Machine Learning](/explore-analyze/machine-learning.md), [Elastic Enterprise Search](https://www.elastic.co/guide/en/enterprise-search/current/index.html), [Elastic APM](/solutions/observability/apps/application-performance-monitoring-apm.md) and [Elastic Fleet Server](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/index.md) are not supported by the Elasticsearch Add-On for Heroku. To learn more about what plans are available for Heroku users and their cost, check the [Elasticsearch add-on](https://elements.heroku.com/addons/foundelasticsearch) in the Elements Marketplace. diff --git a/raw-migrated-files/cloud/cloud-heroku/ech-manage-kibana-settings.md b/raw-migrated-files/cloud/cloud-heroku/ech-manage-kibana-settings.md index 910877a5a..69908a57a 100644 --- a/raw-migrated-files/cloud/cloud-heroku/ech-manage-kibana-settings.md +++ b/raw-migrated-files/cloud/cloud-heroku/ech-manage-kibana-settings.md @@ -3,7 +3,7 @@ Elasticsearch Add-On for Heroku supports most of the standard Kibana and X-Pack settings. Through a YAML editor in the console, you can append Kibana properties to the `kibana.yml` file. Your changes to the configuration file are read on startup. ::::{important} -Be aware that some settings that could break your cluster if set incorrectly and that the syntax might change between major versions. Before upgrading, be sure to review the full list of the [latest Kibana settings and syntax](https://www.elastic.co/guide/en/kibana/current/settings.html). +Be aware that some settings that could break your cluster if set incorrectly and that the syntax might change between major versions. Before upgrading, be sure to review the full list of the [latest Kibana settings and syntax](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). :::: @@ -43,55 +43,55 @@ If a setting is not supported by Elasticsearch Add-On for Heroku, you will get a ### Version 8.9.0+ [echversion_8_9_0] `xpack.fleet.createArtifactsBulkBatchSize` -: Allow to configure batch size for creating and updating Fleet user artifacts. Examples include creation of Trusted Applications and Endpoint Exceptions in Security. To learn more, check [Fleet settings in Kibana](https://www.elastic.co/guide/en/kibana/current/fleet-settings-kb.html). +: Allow to configure batch size for creating and updating Fleet user artifacts. Examples include creation of Trusted Applications and Endpoint Exceptions in Security. To learn more, check [Fleet settings in Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/fleet-settings.md). `xpack.securitySolution.maxUploadResponseActionFileBytes` -: Allow to configure the max file upload size for use with the Upload File Repsonse action available with the Defend Integration. To learn more, check [Endpoint Response actions](https://www.elastic.co/guide/en/security/current/response-actions.html). +: Allow to configure the max file upload size for use with the Upload File Repsonse action available with the Defend Integration. To learn more, check [Endpoint Response actions](/solutions/security/endpoint-response-actions.md). ### Version 8.7.0+ [echversion_8_7_0] `xpack.security.session.concurrentSessions.maxSessions` -: Set the maximum number of sessions each user is allowed to have active in {{kib}}. By default, no limit is applied. If set, the value of this option should be an integer between 1 and 1000. When the limit is exceeded, the oldest session is automatically invalidated. To learn more, check [Session management](https://www.elastic.co/guide/en/kibana/current/xpack-security-session-management.html#session-max-sessions). +: Set the maximum number of sessions each user is allowed to have active in {{kib}}. By default, no limit is applied. If set, the value of this option should be an integer between 1 and 1000. When the limit is exceeded, the oldest session is automatically invalidated. To learn more, check [Session management](/deploy-manage/security/kibana-session-management.md#session-max-sessions). `server.securityResponseHeaders.crossOriginOpenerPolicy` -: Controls whether the [`Cross-Origin-Opener-Policy`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy) header is used in all responses to the client from the Kibana server. To learn more, see [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html#server-securityResponseHeaders-crossOriginOpenerPolicy). +: Controls whether the [`Cross-Origin-Opener-Policy`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy) header is used in all responses to the client from the Kibana server. To learn more, see [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md#server-securityResponseHeaders-crossOriginOpenerPolicy). ### Version 8.6.0+ [echversion_8_6_0] `server.compression.brotli.enabled` -: Enable brotli compression format for browser-server communications. Default: false. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html). +: Enable brotli compression format for browser-server communications. Default: false. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). `xpack.fleet.enableExperimental` -: Allow to configure experimental feature for Fleet. To learn more, check [Fleet settings in Kibana](https://www.elastic.co/guide/en/kibana/current/fleet-settings-kb.html). +: Allow to configure experimental feature for Fleet. To learn more, check [Fleet settings in Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/fleet-settings.md). ### Version 8.4.0+ [echversion_8_4_0] `migrations.discardUnknownObjects` -: Discard saved objects with unknown types during a migration. Must be set to the target version, e.g.: `8.4.0`. Default: undefined. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html). +: Discard saved objects with unknown types during a migration. Must be set to the target version, e.g.: `8.4.0`. Default: undefined. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). `migrations.discardCorruptObjects` -: Discard corrupt saved objects, as well as those that cause transform errors during a migration. Must be set to the target version, e.g.: `8.4.0`. Default: undefined. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html). +: Discard corrupt saved objects, as well as those that cause transform errors during a migration. Must be set to the target version, e.g.: `8.4.0`. Default: undefined. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). ### Version 8.3.0+ [echversion_8_3_0] `elasticsearch.compression` -: Enable compression for communications with Elasticsearch. Default: false. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html). +: Enable compression for communications with Elasticsearch. Default: false. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). ### Version 8.2.0+ [echversion_8_2_0] `elasticsearch.maxSockets` -: The maximum number of sockets that can be used for communications with Elasticsearch. Default: Infinity. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html). +: The maximum number of sockets that can be used for communications with Elasticsearch. Default: Infinity. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). ### Version 8.1.0+ [echversion_8_1_0] `execution_context.enabled` -: Propagate request-specific metadata to Elasticsearch server by way of the `x-opaque-id` header. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html). +: Propagate request-specific metadata to Elasticsearch server by way of the `x-opaque-id` header. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). ### Supported versions before 8.x [echsupported_versions_before_8_x] @@ -106,34 +106,34 @@ If a setting is not supported by Elasticsearch Add-On for Heroku, you will get a ### All supported versions [echall_supported_versions_2] `migrations.maxBatchSizeBytes` -: Defines the maximum payload size for indexing batches of saved objects during upgrade migrations. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html). +: Defines the maximum payload size for indexing batches of saved objects during upgrade migrations. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). `server.maxPayload` -: The maximum payload size in bytes for incoming server requests. Default: 1048576. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html#server-maxPayload). +: The maximum payload size in bytes for incoming server requests. Default: 1048576. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md#server-maxPayload). `server.securityResponseHeaders.strictTransportSecurity` -: Controls whether the [`Strict-Transport-Security`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security) header is used in all responses to the client from the Kibana server. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html#server-securityResponseHeaders-strictTransportSecurity). +: Controls whether the [`Strict-Transport-Security`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security) header is used in all responses to the client from the Kibana server. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md#server-securityResponseHeaders-strictTransportSecurity). `server.securityResponseHeaders.xContentTypeOptions` -: Controls whether the [`X-Content-Type-Options`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options) header is used in all responses to the client from the Kibana server. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html#server-securityResponseHeaders-xContentTypeOptions). +: Controls whether the [`X-Content-Type-Options`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options) header is used in all responses to the client from the Kibana server. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md#server-securityResponseHeaders-xContentTypeOptions). `server.securityResponseHeaders.referrerPolicy` -: Controls whether the [`Referrer-Policy`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy) header is used in all responses to the client from the Kibana server. To learn more, see [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html#server-securityResponseHeaders-referrerPolicy). +: Controls whether the [`Referrer-Policy`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy) header is used in all responses to the client from the Kibana server. To learn more, see [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md#server-securityResponseHeaders-referrerPolicy). `server.securityResponseHeaders.permissionsPolicy` -: Controls whether the `Permissions-Policy` header is used in all responses to the client from the Kibana server. To learn more, see [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html#server-securityResponseHeaders-permissionsPolicy). +: Controls whether the `Permissions-Policy` header is used in all responses to the client from the Kibana server. To learn more, see [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md#server-securityResponseHeaders-permissionsPolicy). `server.securityResponseHeaders.permissionsPolicyReportOnly` -: Controls whether the `Permissions-Policy-Report-Only` header is used in all responses to the client from the Kibana server. To learn more, see [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html#server-securityResponseHeaders-permissionsPolicy). +: Controls whether the `Permissions-Policy-Report-Only` header is used in all responses to the client from the Kibana server. To learn more, see [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md#server-securityResponseHeaders-permissionsPolicy). `server.securityResponseHeaders.disableEmbedding` -: Controls whether the [`Content-Security-Policy`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy) and [`X-Frame-Options`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options) headers are configured to disable embedding Kibana in other webpages using iframes. To learn more, see [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html#server-securityResponseHeaders-disableEmbedding). +: Controls whether the [`Content-Security-Policy`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy) and [`X-Frame-Options`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options) headers are configured to disable embedding Kibana in other webpages using iframes. To learn more, see [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md#server-securityResponseHeaders-disableEmbedding). `data.autocomplete.valueSuggestions.timeout` -: Specifies the time in milliseconds to wait for autocomplete suggestions from Elasticsearch. The default is 1000. Allowed values are between 1 and 1200000. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html). +: Specifies the time in milliseconds to wait for autocomplete suggestions from Elasticsearch. The default is 1000. Allowed values are between 1 and 1200000. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). `data.autocomplete.valueSuggestions.terminateAfter` -: Specifies the max number of documents loaded by each shard to generate autocomplete suggestions. The default is 100000. Allowed values are between 1 and 10000000. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html). +: Specifies the max number of documents loaded by each shard to generate autocomplete suggestions. The default is 100000. Allowed values are between 1 and 10000000. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). `map.tilemap.options.attribution` : Adds the map attribution string. @@ -154,7 +154,7 @@ If a setting is not supported by Elasticsearch Add-On for Heroku, you will get a : Specifies the locale for all strings, dates, and number formats that can be localized. Defaults to `en` (English). `migrations.batchSize` -: Defines the number of documents migrated at a time during saved object upgrade migrations. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html). +: Defines the number of documents migrated at a time during saved object upgrade migrations. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). `server.defaultRoute` : Specifies the default route when opening Kibana. You can use this setting to modify the landing page when opening Kibana. @@ -224,7 +224,7 @@ If a setting is not supported by Elasticsearch Add-On for Heroku, you will get a If you are using SAML to secure your clusters, these settings are supported in Elasticsearch Add-On for Heroku. -To learn more, refer to [configuring Kibana to use SAML](https://www.elastic.co/guide/en/elasticsearch/reference/current/saml-guide-stack.html#saml-configure-kibana). +To learn more, refer to [configuring Kibana to use SAML](/deploy-manage/users-roles/cluster-or-deployment-auth/saml.md#saml-configure-kibana). #### Version 8.0.0+ [echversion_8_0_0] @@ -299,17 +299,17 @@ If you are using OpenID Connect to secure your clusters, these settings are supp `xpack.security.authc.oidc.realm` : Specifies which OpenID Connect realm in Elasticsearch should be used. -To learn more, check [configuring Kibana to use OpenID Connect](https://www.elastic.co/guide/en/elasticsearch/reference/current/oidc-guide.html). +To learn more, check [configuring Kibana to use OpenID Connect](/deploy-manage/users-roles/cluster-or-deployment-auth/openid-connect.md). ### Anonymous authentication [echanonymous_authentication] -If you want to allow anonymous authentication in Kibana, these settings are supported in Elasticsearch Add-On for Heroku. To learn more on how to enable anonymous access, check [Enabling anonymous access](https://www.elastic.co/guide/en/elasticsearch/reference/current/anonymous-access.html) and [Configuring Kibana to use anonymous authentication](https://www.elastic.co/guide/en/kibana/current/kibana-authentication.html#anonymous-authentication). +If you want to allow anonymous authentication in Kibana, these settings are supported in Elasticsearch Add-On for Heroku. To learn more on how to enable anonymous access, check [Enabling anonymous access](/deploy-manage/users-roles/cluster-or-deployment-auth/anonymous-access.md) and [Configuring Kibana to use anonymous authentication](/deploy-manage/users-roles/cluster-or-deployment-auth/user-authentication.md#anonymous-authentication). #### Supported versions before 8.0.0 [echsupported_versions_before_8_0_0] `xpack.security.sessionTimeout` -: Specifies the session duration in milliseconds. Allows a value between 15000 (15 seconds) and 86400000 (1 day). To learn more, check [Security settings in Kibana](https://www.elastic.co/guide/en/kibana/current/security-settings-kb.html). Deprecated in versions 7.6+ and removed in versions 8.0+. +: Specifies the session duration in milliseconds. Allows a value between 15000 (15 seconds) and 86400000 (1 day). To learn more, check [Security settings in Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/security-settings.md). Deprecated in versions 7.6+ and removed in versions 8.0+. #### All supported versions [echall_supported_versions_4] @@ -474,7 +474,7 @@ This setting is not available in versions 8.0.0 through 8.2.0. As such, this set : Sets the size of the ephemeral queue. Defaults to `10`. `xpack.actions.customHostSettings` -: An array of objects, one per host, containing the SSL/TLS settings used when executing connectors which make HTTPS and SMTP connections to the host servers. For details about using this setting, check [Alerting and action settings in Kibana](https://www.elastic.co/guide/en/kibana/current/alert-action-settings-kb.html). +: An array of objects, one per host, containing the SSL/TLS settings used when executing connectors which make HTTPS and SMTP connections to the host servers. For details about using this setting, check [Alerting and action settings in Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/alerting-settings.md). `xpack.actions.ssl.proxyVerificationMode` : Controls the verification of the proxy server certificate that hosted-ems receives when making an outbound SSL/TLS connection to the host server. Valid values are `full`, `certificate`, and `none`. Use `full` to perform hostname verification, `certificate` to skip hostname verification, and `none` to skip verification. Default: `full`. @@ -564,10 +564,10 @@ This setting is not available in versions 8.0.0 through 8.2.0. As such, this set : Set to `true` to enable logging event log documents from alerting to the Kibana log, in addition to being indexed into the event log index. Default: `false`. `xpack.security.session.idleTimeout` -: Set the session duration. The format is a string of `count` and `unit`, where unit is one of `ms`,`s`,`m`,`h`,`d`,`w`,`M`,`Y`. For example, `70ms`, `5s`, `3d`, `1Y`. To learn more, check [Security settings in Kibana](https://www.elastic.co/guide/en/kibana/current/security-settings-kb.html). +: Set the session duration. The format is a string of `count` and `unit`, where unit is one of `ms`,`s`,`m`,`h`,`d`,`w`,`M`,`Y`. For example, `70ms`, `5s`, `3d`, `1Y`. To learn more, check [Security settings in Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/security-settings.md). `xpack.security.session.lifespan` -: Sets the maximum duration, also known as "absolute timeout". After this duration, the session will expire even if it is not idle. To learn more, check [Security settings in Kibana](https://www.elastic.co/guide/en/kibana/current/security-settings-kb.html). +: Sets the maximum duration, also known as "absolute timeout". After this duration, the session will expire even if it is not idle. To learn more, check [Security settings in Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/security-settings.md). `xpack.maps.showMapVisualizationTypes` : Set to `true` if you want to create new region map visualizations. @@ -588,7 +588,7 @@ This setting is not available in versions 8.0.0 through 8.2.0. As such, this set : When enabled, specifies the email address to receive cluster alert notifications. `xpack.monitoring.kibana.collection.interval` -: Controls [how often data samples are collected](https://www.elastic.co/guide/en/elasticsearch/reference/current/monitoring-settings.html#monitoring-collection-settings). +: Controls [how often data samples are collected](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/monitoring-settings.md#monitoring-collection-settings). `xpack.monitoring.min_interval_seconds` : Specifies the minimum number of seconds that a time bucket in a chart can represent. If you modify the `xpack.monitoring.kibana.collection.interval`, use the same value in this setting. @@ -599,7 +599,7 @@ This setting is not available in versions 8.0.0 through 8.2.0. As such, this set `xpack.ml.enabled` : Set to true (default) to enable machine learning. - If set to `false` in `kibana.yml`, the machine learning icon is hidden in this Kibana instance. If `xpack.ml.enabled` is set to `true` in `elasticsearch.yml`, however, you can still use the machine learning APIs. To disable machine learning entirely, check the [Elasticsearch Machine Learning Settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/ml-settings.html). + If set to `false` in `kibana.yml`, the machine learning icon is hidden in this Kibana instance. If `xpack.ml.enabled` is set to `true` in `elasticsearch.yml`, however, you can still use the machine learning APIs. To disable machine learning entirely, check the [Elasticsearch Machine Learning Settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/machine-learning-settings.md). #### Content security policy configuration [echcontent_security_policy_configuration] @@ -635,7 +635,7 @@ This setting is not available in versions 8.0.0 through 8.2.0. As such, this set : Add sources for the [Content Security Policy `form-action` directive](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/form-action) in reporting mode. $$$csp-strict$$$ `csp.strict` -: Blocks Kibana access to any browser that does not enforce even rudimentary CSP rules. In practice, this disables support for older, less safe browsers like Internet Explorer. **Default: `true`** To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html)]. +: Blocks Kibana access to any browser that does not enforce even rudimentary CSP rules. In practice, this disables support for older, less safe browsers like Internet Explorer. **Default: `true`** To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md)]. `csp.warnLegacyBrowsers` : Shows a warning message after loading Kibana to any browser that does not enforce even rudimentary CSP rules, though Kibana is still accessible. This configuration is effectively ignored when [`csp.strict`](../../../deploy-manage/deploy/elastic-cloud/edit-stack-settings.md#csp-strict) is enabled. **Default: `true`** @@ -650,7 +650,7 @@ $$$csp-strict$$$ `csp.strict` #### Permissions policy configuration [echpermissions_policy_configuration] `permissionsPolicy.report_to` -: Add sources for the permissions policy `report-to` directive. To learn more, see [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html#server-securityResponseHeaders-permissionsPolicy) +: Add sources for the permissions policy `report-to` directive. To learn more, see [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md#server-securityResponseHeaders-permissionsPolicy) #### Banner settings [echbanner_settings] @@ -692,7 +692,7 @@ Each method has its own unique limitations which are important to understand. `xpack.reporting.csv.scroll.duration` -: Amount of [time](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#time-units) allowed before {{kib}} cleans the scroll context during a CSV export. Valid option is either `auto` or [time](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#time-units), Defaults to `30s`. +: Amount of [time](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#time-units) allowed before {{kib}} cleans the scroll context during a CSV export. Valid option is either `auto` or [time](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#time-units), Defaults to `30s`. ::::{note} Support for the The option `auto` was included here, when the config value is set to `auto` the scroll context will be preserved for as long as is possible, before the report task is terminated due to the limits of `xpack.reporting.queue.timeout`. @@ -757,7 +757,7 @@ Support for the The option `auto` was included here, when the config value is se Defaults to `true`. `xpack.reporting.csv.scroll.duration` -: Amount of [time](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#time-units) allowed before {{kib}} cleans the scroll context during a CSV export. +: Amount of [time](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#time-units) allowed before {{kib}} cleans the scroll context during a CSV export. Defaults to `30s` (30 seconds). @@ -929,7 +929,7 @@ The following APM settings are supported in Kibana: `xpack.apm.ui.maxTraceItems` : Maximum number of child items displayed when viewing trace details. - Defaults to `1000`. Any positive value is valid. To learn more, check [APM settings in Kibana](https://www.elastic.co/guide/en/kibana/current/apm-settings-kb.html). + Defaults to `1000`. Any positive value is valid. To learn more, check [APM settings in Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/apm-settings.md). `xpack.apm.ui.enabled` diff --git a/raw-migrated-files/cloud/cloud-heroku/ech-monitoring-setup.md b/raw-migrated-files/cloud/cloud-heroku/ech-monitoring-setup.md index 86831b600..0c318af48 100644 --- a/raw-migrated-files/cloud/cloud-heroku/ech-monitoring-setup.md +++ b/raw-migrated-files/cloud/cloud-heroku/ech-monitoring-setup.md @@ -27,7 +27,7 @@ After you have created a new deployment, you should enable shipping logs and met 5. Select **Save**. -Optionally, turn on [audit logging](https://www.elastic.co/guide/en/elasticsearch/reference/current/auditing-settings.html) to capture security-related events, such as authentication failures, refused connections, and data-access events through the proxy. To turn on audit logging, [edit your deployment’s elasticsearch.yml file](../../../deploy-manage/deploy/elastic-cloud/edit-stack-settings.md) to add these lines: +Optionally, turn on [audit logging](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/auding-settings.md) to capture security-related events, such as authentication failures, refused connections, and data-access events through the proxy. To turn on audit logging, [edit your deployment’s elasticsearch.yml file](../../../deploy-manage/deploy/elastic-cloud/edit-stack-settings.md) to add these lines: ```sh xpack.security.audit.enabled: true @@ -40,7 +40,7 @@ The last two lines are commented out for now but left there as placeholders to e ## View your deployment health [echview_your_deployment_health] -From the monitoring deployment, you can now view your deployment’s health in Kibana using [Stack Monitoring](https://www.elastic.co/guide/en/kibana/current/xpack-monitoring.html): +From the monitoring deployment, you can now view your deployment’s health in Kibana using [Stack Monitoring](/deploy-manage/monitor/monitoring-data/visualizing-monitoring-data.md): 1. Select the **Kibana** link for your monitoring deployment. 2. From the app menu or the search bar, open **Stack Monitoring**. @@ -50,7 +50,7 @@ From the monitoring deployment, you can now view your deployment’s health in K :::: -To learn more about what [Elasticsearch monitoring metrics](https://www.elastic.co/guide/en/kibana/current/elasticsearch-metrics.html) are available, take a look at the different tabs. For example: +To learn more about what [Elasticsearch monitoring metrics](/deploy-manage/monitor/monitoring-data/elasticsearch-metrics.md) are available, take a look at the different tabs. For example: * The **Overview** tab includes information about the search and indexing performance of Elasticsearch and also provides log entries. * The **Nodes** tab can help you monitor cluster CPU performance, JVM strain, and free disk space. @@ -70,13 +70,13 @@ Some [performance metrics](/deploy-manage/monitor/monitoring-data/access-perform If you suspect a performance issue, you can use your monitoring deployment to investigate what is going in Kibana: -* Through **Observability** > **Logs** > **Stream**: This page shows errors in real-time and is part of the same logs Elastic Support reviews when a deployment experiences issues. Check [Tail log files](https://www.elastic.co/guide/en/observability/current/tail-logs.html). -* Through **Discover**: This page is a good option for investigating widespread historical patterns. Check [Discover](https://www.elastic.co/guide/en/kibana/current/discover.html). +* Through **Observability** > **Logs** > **Stream**: This page shows errors in real-time and is part of the same logs Elastic Support reviews when a deployment experiences issues. Check [Tail log files](/solutions/observability/logs/logs-stream.md). +* Through **Discover**: This page is a good option for investigating widespread historical patterns. Check [Discover](/explore-analyze/discover.md). Discover requires a quick setup in Kibana: 1. Go to **Stack Management** > **Data Views** (formerly *Index Patterns*). - 2. Create a [data view](https://www.elastic.co/guide/en/kibana/current/data-views.html) for `elastic-cloud-logs*` and set **Timestamp field** to `@timestamp`: + 2. Create a [data view](/explore-analyze/find-and-organize/data-views.md) for `elastic-cloud-logs*` and set **Timestamp field** to `@timestamp`: :::{image} ../../../images/cloud-heroku-ec-ce-monitoring-logs.png :alt: Create data view example in Kibana @@ -104,18 +104,18 @@ You will get this request reported as a new log. Audit logs do not currently rep ## Get notified [echget_notified] -You should take advantage of the default [Elastic Stack monitoring alerts](https://www.elastic.co/guide/en/kibana/current/kibana-alerts.html) that are available out-of-the-box. You don’t have to do anything other than enable shipping logs and metrics to have them made available to you (which you did earlier on). +You should take advantage of the default [Elastic Stack monitoring alerts](/deploy-manage/monitor/monitoring-data/kibana-alerts.md) that are available out-of-the-box. You don’t have to do anything other than enable shipping logs and metrics to have them made available to you (which you did earlier on). -On top of these default alerts that write to indices you can investigate, you might want to add some custom actions, such as a [connector](https://www.elastic.co/guide/en/kibana/current/action-types.html) for Slack notifications. To set up these notifications, you first configure a Slack connector and then append it to the default alerts and actions. From Kibana: +On top of these default alerts that write to indices you can investigate, you might want to add some custom actions, such as a [connector](asciidocalypse://docs/kibana/docs/reference/connectors-kibana.md) for Slack notifications. To set up these notifications, you first configure a Slack connector and then append it to the default alerts and actions. From Kibana: 1. Go to **Stack Management** > **Rules and Connectors** > **Connectors** and create your Slack connector: 1. Select **Slack**. - 2. [Create a Slack Webhook URL](https://www.elastic.co/guide/en/kibana/current/slack-action-type.html#configuring-slack) and paste it into the **Webhook URL** field. + 2. [Create a Slack Webhook URL](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/slack-action-type.md#configuring-slack) and paste it into the **Webhook URL** field. 3. Select **Save**. 2. Go to **Stack Monitoring** and select **Enter setup mode**. -3. Edit an alert rule, such as [CPU usage](https://www.elastic.co/guide/en/kibana/current/kibana-alerts.html#kibana-alerts-cpu-threshold): +3. Edit an alert rule, such as [CPU usage](/deploy-manage/monitor/monitoring-data/kibana-alerts.md#kibana-alerts-cpu-threshold): 1. Select one of the alert rule fields and select **CPU Usage**. 2. Choose **Edit rule** and scroll down to the bottom of the screen to select **Slack**. @@ -145,7 +145,7 @@ When issues come up that you need to troubleshoot, you’ll frequently start wit You can run this query and many others from the API consoles available via: -* **Kibana** > **Dev Tools**. Check [Run Elasticsearch API requests](https://www.elastic.co/guide/en/kibana/current/console-kibana.html). +* **Kibana** > **Dev Tools**. Check [Run Elasticsearch API requests](/explore-analyze/query-filter/tools/console.md). * **Elastic Cloud** > **Deployment** > **Elasticsearch** > **API Console**. Check [Access the Elasticsearch API console](../../../deploy-manage/deploy/elastic-cloud/ech-api-console.md). You can also learn more about the queries you should run for your deployment by reading our blog [Managing and Troubleshooting Elasticsearch Memory](https://www.elastic.co/blog/managing-and-troubleshooting-elasticsearch-memory). diff --git a/raw-migrated-files/cloud/cloud-heroku/ech-password-reset.md b/raw-migrated-files/cloud/cloud-heroku/ech-password-reset.md index 1fc1aa49d..07a1fc5a3 100644 --- a/raw-migrated-files/cloud/cloud-heroku/ech-password-reset.md +++ b/raw-migrated-files/cloud/cloud-heroku/ech-password-reset.md @@ -13,7 +13,7 @@ Resetting the `elastic` user password does not interfere with Marketplace integr ::::{note} -The `elastic` user should be not be used unless you have no other way to access your deployment. [Create API keys for ingesting data](https://www.elastic.co/guide/en/beats/filebeat/current/beats-api-keys.html), and create user accounts with [appropriate roles for user access](../../../deploy-manage/users-roles/cluster-or-deployment-auth/quickstart.md). +The `elastic` user should be not be used unless you have no other way to access your deployment. [Create API keys for ingesting data](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/beats-api-keys.md), and create user accounts with [appropriate roles for user access](../../../deploy-manage/users-roles/cluster-or-deployment-auth/quickstart.md). :::: diff --git a/raw-migrated-files/cloud/cloud-heroku/ech-secure-clusters-kerberos.md b/raw-migrated-files/cloud/cloud-heroku/ech-secure-clusters-kerberos.md index 9f84e0cf6..a412bf9d0 100644 --- a/raw-migrated-files/cloud/cloud-heroku/ech-secure-clusters-kerberos.md +++ b/raw-migrated-files/cloud/cloud-heroku/ech-secure-clusters-kerberos.md @@ -5,7 +5,7 @@ You can secure your Elasticsearch clusters and Kibana instances in a deployment ## Before you begin [echbefore_you_begin_10] -The steps in this section require an understanding of Kerberos. To learn more about Kerberos, check our documentation on [configuring Elasticsearch for Kerberos authentication](https://www.elastic.co/guide/en/elasticsearch/reference/current/kerberos-realm.html). +The steps in this section require an understanding of Kerberos. To learn more about Kerberos, check our documentation on [configuring Elasticsearch for Kerberos authentication](/deploy-manage/users-roles/cluster-or-deployment-auth/kerberos.md). ## Configure the cluster to use Kerberos [ech-configure-kerberos-settings] @@ -19,7 +19,7 @@ With a custom bundle containing the Kerberos files and changes to the cluster co You should use these exact filenames for Elasticsearch Add-On for Heroku to recognize the file in the bundle. :::: -3. Edit your cluster configuration, sometimes also referred to as the deployment plan, to define Kerberos settings as described in [Elasticsearch documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/kerberos-realm.html). +3. Edit your cluster configuration, sometimes also referred to as the deployment plan, to define Kerberos settings as described in [Elasticsearch documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/kerberos.md). ```sh xpack.security.authc.realms.kerberos.cloud-krb: diff --git a/raw-migrated-files/cloud/cloud-heroku/ech-secure-clusters-oidc.md b/raw-migrated-files/cloud/cloud-heroku/ech-secure-clusters-oidc.md index bf1818f72..860f44920 100644 --- a/raw-migrated-files/cloud/cloud-heroku/ech-secure-clusters-oidc.md +++ b/raw-migrated-files/cloud/cloud-heroku/ech-secure-clusters-oidc.md @@ -10,7 +10,7 @@ To prepare for using OpenID Connect for authentication for deployments: * Create or use an existing deployment. Make note of the Kibana endpoint URL, it will be referenced as `` in the following steps. * The steps in this section required a moderate understanding of [OpenID Connect](https://openid.net/specs/openid-connect-core-1_0.md#Authentication) in general and the Authorization Code Grant flow specifically. For more information about OpenID Connect and how it works with the Elastic Stack check: - * Our [configuration guide for Elasticsearch](https://www.elastic.co/guide/en/elasticsearch/reference/current/oidc-guide.html#oidc-elasticsearch-authentication). + * Our [configuration guide for Elasticsearch](/deploy-manage/users-roles/cluster-or-deployment-auth/openid-connect.md#oidc-elasticsearch-authentication). @@ -98,8 +98,8 @@ The Elasticsearch cluster needs to be configured to use the OpenID Connect realm 7. The URL for the Token Endpoint in the OpenID Connect Provider. This is the endpoint where Elasticsearch Add-On for Heroku will send a request to exchange the code for an ID Token, as part of the Authorization Code flow. The value for this setting should be provided by your OpenID Connect Provider. 8. (Optional) The URL for the UserInfo Endpoint in the OpenID Connect Provider. This is the endpoint of the OP that can be queried to get further user information, if required. The value for this setting should be provided by your OpenID Connect Provider. 9. The path to a file or an HTTPS URL pointing to a JSON Web Key Set with the key material that the OpenID Connect Provider uses for signing tokens and claims responses. Your OpenID Connect Provider should provide you with this file. - 10. Defines the OpenID Connect claim that is going to be mapped to the principal (username) of the authenticated user in Kibana. In this example, we map the value of the `sub` claim, but this is not a requirement, other claims can be used too. See [the claims mapping documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/oidc-guide.html#oidc-elasticsearch-authentication) for details and available options. - 11. Defines the OpenID Connect claim that is going to be used for role mapping. Note that the value `"http://example.info/claims/groups"` that is used here, is an arbitrary example. Check [the claims mapping documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/oidc-guide.html#oidc-elasticsearch-authentication) for a very detailed description of how the claim mapping works and how can these be used for role mapping. The name of this claim should be determined by the configuration of your OpenID Connect Provider. NOTE: According to the OpenID Connect specification, the OP should also make their configuration available at a well known URL, which is the concatenation of their `Issuer` value with the `.well-known/openid-configuration` string. To configure the OpenID Connect realm, refer to the `https://op.org.com/.well-known/openid-configuration` documentation. + 10. Defines the OpenID Connect claim that is going to be mapped to the principal (username) of the authenticated user in Kibana. In this example, we map the value of the `sub` claim, but this is not a requirement, other claims can be used too. See [the claims mapping documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/openid-connect.md#oidc-elasticsearch-authentication) for details and available options. + 11. Defines the OpenID Connect claim that is going to be used for role mapping. Note that the value `"http://example.info/claims/groups"` that is used here, is an arbitrary example. Check [the claims mapping documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/openid-connect.md#oidc-elasticsearch-authentication) for a very detailed description of how the claim mapping works and how can these be used for role mapping. The name of this claim should be determined by the configuration of your OpenID Connect Provider. NOTE: According to the OpenID Connect specification, the OP should also make their configuration available at a well known URL, which is the concatenation of their `Issuer` value with the `.well-known/openid-configuration` string. To configure the OpenID Connect realm, refer to the `https://op.org.com/.well-known/openid-configuration` documentation. 2. By default, users authenticating through OpenID Connect have no roles assigned to them. For example, if you want all your users authenticating with OpenID Connect to get access to Kibana, issue the following request to Elasticsearch: diff --git a/raw-migrated-files/cloud/cloud-heroku/ech-securing-clusters-JWT.md b/raw-migrated-files/cloud/cloud-heroku/ech-securing-clusters-JWT.md index 6800c922a..bfa9fec67 100644 --- a/raw-migrated-files/cloud/cloud-heroku/ech-securing-clusters-JWT.md +++ b/raw-migrated-files/cloud/cloud-heroku/ech-securing-clusters-JWT.md @@ -97,7 +97,7 @@ xpack: ::::{note} -Refer to [JWT authentication documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/jwt-auth-realm.html) for more details and examples. +Refer to [JWT authentication documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/jwt.md) for more details and examples. :::: diff --git a/raw-migrated-files/cloud/cloud-heroku/ech-securing-clusters-SAML.md b/raw-migrated-files/cloud/cloud-heroku/ech-securing-clusters-SAML.md index d66b27fb4..94470d3f3 100644 --- a/raw-migrated-files/cloud/cloud-heroku/ech-securing-clusters-SAML.md +++ b/raw-migrated-files/cloud/cloud-heroku/ech-securing-clusters-SAML.md @@ -31,8 +31,8 @@ You must edit your cluster configuration, sometimes also referred to as the depl 1. Specifies the authentication realm service. 2. Defines the SAML realm name. The SAML realm name can only contain alphanumeric characters, underscores, and hyphens. 3. The order of the SAML realm in your authentication chain. Allowed values are between `2` and `100`. Set to `2` unless you plan on configuring multiple SSO realms for this cluster. - 4. Defines the SAML attribute that is going to be mapped to the principal (username) of the authenticated user in Kibana. In this non-normative example, `nameid:persistent` maps the `NameID` with the `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent` format from the Subject of the SAML Assertion. You can use any SAML attribute that carries the necessary value for your use case in this setting, such as `uid` or `mail`. Refer to [the attribute mapping documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/saml-guide-stack.html#saml-attributes-mapping) for details and available options. - 5. Defines the SAML attribute used for role mapping when configured in Kibana. Common choices are `groups` or `roles`. The values for both `attributes.principal` and `attributes.groups` depend on the IdP provider, so be sure to review their documentation. Refer to [the attribute mapping documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/saml-guide-stack.html#saml-attributes-mapping) for details and available options. + 4. Defines the SAML attribute that is going to be mapped to the principal (username) of the authenticated user in Kibana. In this non-normative example, `nameid:persistent` maps the `NameID` with the `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent` format from the Subject of the SAML Assertion. You can use any SAML attribute that carries the necessary value for your use case in this setting, such as `uid` or `mail`. Refer to [the attribute mapping documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/saml.md#saml-attributes-mapping) for details and available options. + 5. Defines the SAML attribute used for role mapping when configured in Kibana. Common choices are `groups` or `roles`. The values for both `attributes.principal` and `attributes.groups` depend on the IdP provider, so be sure to review their documentation. Refer to [the attribute mapping documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/saml.md#saml-attributes-mapping) for details and available options. 6. The file path or the HTTPS URL where your IdP metadata is available, such as `https://idpurl.com/sso/saml/metadata`. If you configure a URL you need to make ensure that your Elasticsearch cluster can access it. 7. The SAML EntityID of your IdP. This can be read from the configuration page of the IdP, or its SAML metadata, such as `https://idpurl.com/entity_id`. 8. Replace `KIBANA_ENDPOINT_URL` with the one noted in the previous step, such as `sp.entity_id: https://eddac6b924f5450c91e6ecc6d247b514.us-east-1.aws.found.io:443/` including the slash at the end. diff --git a/raw-migrated-files/cloud/cloud-heroku/ech-security.md b/raw-migrated-files/cloud/cloud-heroku/ech-security.md index 79c3bdc54..9eebeec8c 100644 --- a/raw-migrated-files/cloud/cloud-heroku/ech-security.md +++ b/raw-migrated-files/cloud/cloud-heroku/ech-security.md @@ -7,7 +7,7 @@ The security of Elasticsearch Add-On for Heroku is described on the [{{ecloud}} * Reset the [`elastic` user password](../../../deploy-manage/users-roles/cluster-or-deployment-auth/built-in-users.md). * Use third-party authentication providers and services like [SAML](../../../deploy-manage/users-roles/cluster-or-deployment-auth/saml.md), [OpenID Connect](../../../deploy-manage/users-roles/cluster-or-deployment-auth/openid-connect.md), or [Kerberos](../../../deploy-manage/users-roles/cluster-or-deployment-auth/kerberos.md) to provide dynamic [role mappings](../../../deploy-manage/users-roles/cluster-or-deployment-auth/mapping-users-groups-to-roles.md) for role based or attribute based access control. * Use {{kib}} Spaces and roles to [secure access to {{kib}}](../../../deploy-manage/users-roles/cluster-or-deployment-auth/quickstart.md). - * Authorize and authenticate service accounts for {{beats}} by [granting access using API keys](https://www.elastic.co/guide/en/beats/filebeat/current/beats-api-keys.html). + * Authorize and authenticate service accounts for {{beats}} by [granting access using API keys](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/beats-api-keys.md). * Roles can provide full, or read only, access to your data and can be created in Kibana or directly in Elasticsearch. Check [defining roles](../../../deploy-manage/users-roles/cluster-or-deployment-auth/defining-roles.md) for full details. diff --git a/raw-migrated-files/cloud/cloud-heroku/echsign-outgoing-saml-message.md b/raw-migrated-files/cloud/cloud-heroku/echsign-outgoing-saml-message.md index 4be3720ab..206ea4b12 100644 --- a/raw-migrated-files/cloud/cloud-heroku/echsign-outgoing-saml-message.md +++ b/raw-migrated-files/cloud/cloud-heroku/echsign-outgoing-saml-message.md @@ -59,6 +59,6 @@ The following optional realm settings are supported: * `force_authn` Specifies whether to set the `ForceAuthn` attribute when requesting that the IdP authenticate the current user. If set to `true`, the IdP is required to verify the user’s identity, irrespective of any existing sessions they might have. Defaults to `false`. * `idp.use_single_logout` Indicates whether to utilise the Identity Provider’s `` (if one exists in the IdP metadata file). Defaults to `true`. -After completing these steps, you can log in to Kibana by authenticating against your SAML IdP. If you encounter any issues with the configuration, refer to the [SAML troubleshooting page](https://www.elastic.co/guide/en/elasticsearch/reference/current/trb-security-saml.html) which contains information about common issues and suggestions for their resolution. +After completing these steps, you can log in to Kibana by authenticating against your SAML IdP. If you encounter any issues with the configuration, refer to the [SAML troubleshooting page](/troubleshoot/elasticsearch/security/trb-security-saml.md) which contains information about common issues and suggestions for their resolution. diff --git a/raw-migrated-files/cloud/cloud/ec-about.md b/raw-migrated-files/cloud/cloud/ec-about.md index f10ec3798..dca303eef 100644 --- a/raw-migrated-files/cloud/cloud/ec-about.md +++ b/raw-migrated-files/cloud/cloud/ec-about.md @@ -4,8 +4,8 @@ The information in this section covers: * [Subscription Levels](../../../deploy-manage/license.md) * [Version Policy](../../../deploy-manage/deploy/elastic-cloud/available-stack-versions.md) -* [Elasticsearch Service Hardware](https://www.elastic.co/guide/en/cloud/current/ec-reference-hardware.html) -* [Elasticsearch Service Regions](https://www.elastic.co/guide/en/cloud/current/ec-reference-regions.html) +* [Elasticsearch Service Hardware](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/hardware.md) +* [Elasticsearch Service Regions](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/regions.md) * [Service Status](../../../deploy-manage/cloud-organization/service-status.md) * [Getting help](../../../troubleshoot/index.md) * [Restrictions and known problems](../../../deploy-manage/deploy/elastic-cloud/restrictions-known-problems.md) diff --git a/raw-migrated-files/cloud/cloud/ec-add-user-settings.md b/raw-migrated-files/cloud/cloud/ec-add-user-settings.md index 515be42ea..8e76aae98 100644 --- a/raw-migrated-files/cloud/cloud/ec-add-user-settings.md +++ b/raw-migrated-files/cloud/cloud/ec-add-user-settings.md @@ -35,7 +35,7 @@ Elasticsearch Service supports the following `elasticsearch.yml` settings. The following general settings are supported: $$$http-cors-settings$$$`http.cors.*` -: Enables cross-origin resource sharing (CORS) settings for the [HTTP module](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html). +: Enables cross-origin resource sharing (CORS) settings for the [HTTP module](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md). ::::{note} If your use case depends on the ability to receive CORS requests and you have a cluster that was provisioned prior to January 25th 2019, you must manually set `http.cors.enabled` to `true` and allow a specific set of hosts with `http.cors.allow-origin`. Applying these changes in your Elasticsearch configuration allows cross-origin resource sharing requests. @@ -43,13 +43,13 @@ $$$http-cors-settings$$$`http.cors.*` `http.compression` -: Support for [HTTP compression](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html) when possible (with Accept-Encoding). Defaults to `true`. +: Support for [HTTP compression](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md) when possible (with Accept-Encoding). Defaults to `true`. `transport.compress` -: Configures [transport compression](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html) for node-to-node traffic. +: Configures [transport compression](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md) for node-to-node traffic. `transport.compression_scheme` -: Configures [transport compression](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html) for node-to-node traffic. +: Configures [transport compression](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/networking-settings.md) for node-to-node traffic. `repositories.url.allowed_urls` : Enables explicit allowing of [read-only URL repositories](../../../deploy-manage/tools/snapshot-and-restore/read-only-url-repository.md). @@ -61,7 +61,7 @@ $$$http-cors-settings$$$`http.cors.*` : To learn more on how to configure reindex SSL user settings, check [configuring reindex SSL parameters](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-reindex). `script.painless.regex.enabled` -: Enables [regular expressions](https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-walkthrough.html#modules-scripting-painless-regex) for the Painless scripting language. +: Enables [regular expressions](asciidocalypse://docs/elasticsearch/docs/reference/scripting-languages/painless/brief-painless-walkthrough.md#modules-scripting-painless-regex) for the Painless scripting language. `action.auto_create_index` : [Automatically create index](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-create) if it doesn’t already exist. @@ -94,19 +94,19 @@ $$$http-cors-settings$$$`http.cors.*` The following circuit breaker settings are supported: `indices.breaker.total.limit` -: Configures [the parent circuit breaker settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/circuit-breaker.html#parent-circuit-breaker). +: Configures [the parent circuit breaker settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/circuit-breaker-settings.md#parent-circuit-breaker). `indices.breaker.fielddata.limit` -: Configures [the limit for the fielddata breaker](https://www.elastic.co/guide/en/elasticsearch/reference/current/circuit-breaker.html#fielddata-circuit-breaker). +: Configures [the limit for the fielddata breaker](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/circuit-breaker-settings.md#fielddata-circuit-breaker). `indices.breaker.fielddata.overhead` -: Configures [a constant that all field data estimations are multiplied with to determine a final estimation](https://www.elastic.co/guide/en/elasticsearch/reference/current/circuit-breaker.html#fielddata-circuit-breaker). +: Configures [a constant that all field data estimations are multiplied with to determine a final estimation](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/circuit-breaker-settings.md#fielddata-circuit-breaker). `indices.breaker.request.limit` -: Configures [the limit for the request breaker](https://www.elastic.co/guide/en/elasticsearch/reference/current/circuit-breaker.html#request-circuit-breaker). +: Configures [the limit for the request breaker](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/circuit-breaker-settings.md#request-circuit-breaker). `indices.breaker.request.overhead` -: Configures [a constant that all request estimations are multiplied by to determine a final estimation](https://www.elastic.co/guide/en/elasticsearch/reference/current/circuit-breaker.html#request-circuit-breaker). +: Configures [a constant that all request estimations are multiplied by to determine a final estimation](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/circuit-breaker-settings.md#request-circuit-breaker). ### Indexing pressure settings [ec_indexing_pressure_settings] @@ -114,7 +114,7 @@ The following circuit breaker settings are supported: The following indexing pressure settings are supported: `indexing_pressure.memory.limit` -: Configures [the indexing pressure settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-indexing-pressure.html#indexing-pressure-settings). +: Configures [the indexing pressure settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/indexing-pressure-settings.md#indexing-pressure-settings). ### X-Pack [ec_x_pack] @@ -128,28 +128,28 @@ The following indexing pressure settings are supported: #### All supported versions [ec_all_supported_versions] `xpack.ml.inference_model.time_to_live` -: Sets the duration of time that the trained models are cached. Check [{{ml-cap}} settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/ml-settings.html). +: Sets the duration of time that the trained models are cached. Check [{{ml-cap}} settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/machine-learning-settings.md). `xpack.security.loginAssistanceMessage` : Adds a message to the login screen. Useful for displaying corporate messages. `xpack.security.authc.anonymous.*` -: To learn more on how to enable anonymous access, check [Enabling anonymous access](https://www.elastic.co/guide/en/elasticsearch/reference/current/anonymous-access.html) +: To learn more on how to enable anonymous access, check [Enabling anonymous access](/deploy-manage/users-roles/cluster-or-deployment-auth/anonymous-access.md) `xpack.notification.slack` -: Configures [Slack notification settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/actions-slack.html#actions-slack). Note that you need to add `secure_url` as a [secret value to the keystore](../../../deploy-manage/security/secure-settings.md). +: Configures [Slack notification settings](/explore-analyze/alerts-cases/watcher/actions-slack.md). Note that you need to add `secure_url` as a [secret value to the keystore](../../../deploy-manage/security/secure-settings.md). `xpack.notification.pagerduty` -: Configures [PagerDuty notification settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/actions-pagerduty.html#configuring-pagerduty). +: Configures [PagerDuty notification settings](/explore-analyze/alerts-cases/watcher/actions-pagerduty.md#configuring-pagerduty). `xpack.watcher.trigger.schedule.engine` -: Defines when the watch should start, based on date and time [Learn more](https://www.elastic.co/guide/en/elasticsearch/reference/current/trigger-schedule.html). +: Defines when the watch should start, based on date and time [Learn more](/explore-analyze/alerts-cases/watcher/trigger-schedule.md). `xpack.notification.email.html.sanitization.*` -: Enables [email notification settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/notification-settings.html) to sanitize HTML elements in emails that are sent. +: Enables [email notification settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/watcher-settings.md) to sanitize HTML elements in emails that are sent. `xpack.monitoring.collection.interval` -: Controls [how often data samples are collected](https://www.elastic.co/guide/en/elasticsearch/reference/current/monitoring-settings.html#monitoring-collection-settings). +: Controls [how often data samples are collected](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/monitoring-settings.md#monitoring-collection-settings). `xpack.monitoring.collection.min_interval_seconds` : Specifies the minimum number of seconds that a time bucket in a chart can represent. If you modify the `xpack.monitoring.collection.interval`, use the same value in this setting. @@ -158,10 +158,10 @@ The following indexing pressure settings are supported: $$$xpack-monitoring-history-duration$$$`xpack.monitoring.history.duration` -: Sets the [retention duration](https://www.elastic.co/guide/en/elasticsearch/reference/current/monitoring-settings.html#monitoring-collection-settings) beyond which the indices created by a monitoring exporter will be automatically deleted. +: Sets the [retention duration](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/monitoring-settings.md#monitoring-collection-settings) beyond which the indices created by a monitoring exporter will be automatically deleted. `xpack.watcher.history.cleaner_service.enabled` -: Controls [whether old watcher indices are automatically deleted](https://www.elastic.co/guide/en/elasticsearch/reference/current/notification-settings.html#general-notification-settings). +: Controls [whether old watcher indices are automatically deleted](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/watcher-settings.md#general-notification-settings). `xpack.http.ssl.cipher_suites` : Controls the list of supported cipher suites for all outgoing TLS connections. @@ -197,16 +197,16 @@ The following search settings are supported: The following disk-based allocation settings are supported: `cluster.routing.allocation.disk.threshold_enabled` -: Enable or disable [disk allocation](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html#disk-based-shard-allocation) decider and defaults to `true`. +: Enable or disable [disk allocation](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md#disk-based-shard-allocation) decider and defaults to `true`. `cluster.routing.allocation.disk.watermark.low` -: Configures [disk-based shard allocation’s low watermark](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html#disk-based-shard-allocation). +: Configures [disk-based shard allocation’s low watermark](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md#disk-based-shard-allocation). `cluster.routing.allocation.disk.watermark.high` -: Configures [disk-based shard allocation’s high watermark](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html#disk-based-shard-allocation). +: Configures [disk-based shard allocation’s high watermark](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md#disk-based-shard-allocation). `cluster.routing.allocation.disk.watermark.flood_stage` -: Configures [disk-based shard allocation’s flood_stage](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html#disk-based-shard-allocation). +: Configures [disk-based shard allocation’s flood_stage](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/cluster-level-shard-allocation-routing-settings.md#disk-based-shard-allocation). ::::{tip} Remember to update user settings for alerts when performing a major version upgrade. diff --git a/raw-migrated-files/cloud/cloud/ec-autoscaling.md b/raw-migrated-files/cloud/cloud/ec-autoscaling.md index 36728fe26..98d8c2612 100644 --- a/raw-migrated-files/cloud/cloud/ec-autoscaling.md +++ b/raw-migrated-files/cloud/cloud/ec-autoscaling.md @@ -57,7 +57,7 @@ When past behavior on a hot tier indicates that the influx of data can increase * Through ILM policies. For example, if a deployment has only hot nodes and autoscaling is enabled, it automatically creates warm or cold nodes, if an ILM policy is trying to move data from hot to warm or cold nodes. -On machine learning nodes, scaling is determined by an estimate of the memory and CPU requirements for the currently configured jobs and trained models. When a new machine learning job tries to start, it looks for a node with adequate native memory and CPU capacity. If one cannot be found, it stays in an `opening` state. If this waiting job exceeds the queueing limit set in the machine learning decider, a scale up is requested. Conversely, as machine learning jobs run, their memory and CPU usage might decrease or other running jobs might finish or close. In this case, if the duration of decreased resource usage exceeds the set value for `down_scale_delay`, a scale down is requested. Check [Machine learning decider](../../../deploy-manage/autoscaling/autoscaling-deciders.md) for more detail. To learn more about machine learning jobs in general, check [Create anomaly detection jobs](https://www.elastic.co/guide/en/machine-learning/current/ml-ad-run-jobs.html#ml-ad-create-job). +On machine learning nodes, scaling is determined by an estimate of the memory and CPU requirements for the currently configured jobs and trained models. When a new machine learning job tries to start, it looks for a node with adequate native memory and CPU capacity. If one cannot be found, it stays in an `opening` state. If this waiting job exceeds the queueing limit set in the machine learning decider, a scale up is requested. Conversely, as machine learning jobs run, their memory and CPU usage might decrease or other running jobs might finish or close. In this case, if the duration of decreased resource usage exceeds the set value for `down_scale_delay`, a scale down is requested. Check [Machine learning decider](../../../deploy-manage/autoscaling/autoscaling-deciders.md) for more detail. To learn more about machine learning jobs in general, check [Create anomaly detection jobs](/explore-analyze/machine-learning/anomaly-detection/ml-ad-run-jobs.md#ml-ad-create-job). On a highly available deployment, autoscaling events are always applied to instances in each availability zone simultaneously, to ensure consistency. diff --git a/raw-migrated-files/cloud/cloud/ec-cloud-ingest-data.md b/raw-migrated-files/cloud/cloud/ec-cloud-ingest-data.md index fcb63ded4..cf0a58e2e 100644 --- a/raw-migrated-files/cloud/cloud/ec-cloud-ingest-data.md +++ b/raw-migrated-files/cloud/cloud/ec-cloud-ingest-data.md @@ -5,7 +5,7 @@ You have a number of options for getting data into Elasticsearch, referred to as $$$ec-ingest-methods$$$ General content -: Index content like HTML pages, catalogs and other files. Send data directly to Elasticseach from your application using an Elastic language client. Otherwise use Elastic content [connectors](https://www.elastic.co/guide/en/elasticsearch/reference/current/es-connectors.html) or the Elastic [web crawler](https://github.com/elastic/crawler). +: Index content like HTML pages, catalogs and other files. Send data directly to Elasticseach from your application using an Elastic language client. Otherwise use Elastic content [connectors](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/search-connectors/index.md) or the Elastic [web crawler](https://github.com/elastic/crawler). Timestamped data : The preferred way to index timestamped data is to use Elastic Agent. Elastic Agent is a single, unified way to add monitoring for logs, metrics, and other types of data to a host. It can also protect hosts from security threats, query data from operating systems, and forward data from remote services or hardware. Each Elastic Agent based integration includes default ingestion rules, dashboards, and visualizations to start analyzing your data right away. Fleet Management enables you to centrally manage all of your deployed Elastic Agents from Kibana. @@ -42,25 +42,25 @@ This diagram focuses on *timestamped* data. Process data using and forward it with . Use Logstash plugins -
filter plugins -output plugins +filter plugins +output plugins Use with Elastic Agent or Beats. Use runtime fields -runtime fields +runtime fields Use a pipeline for or . Use ingest pipelines -Elastic Agent -Beats +Elastic Agent +Beats For Elastic Agent integrations, use an . For Beats, use a . Use processors Beats processor -Agent processor +Agent processor something else @@ -81,8 +81,8 @@ This diagram focuses on *timestamped* data. using one (or more) . Use Logstash -Get started -input plugins +Get started +input plugins no @@ -93,14 +93,14 @@ This diagram focuses on *timestamped* data. with the Beat. Set up Beats -Get started +Get started relevant yes Look for your data source in the list of and their modules. -Beats +Beats Beats module Is a Beat or available? @@ -143,16 +143,16 @@ One reason for preprocessing your data is to control the structure of the data t ### Data integrity [ec-data-integrity] -Logstash boosts data resiliency for important data that you don’t want to lose. Logstash offers an on-disk [persistent queue (PQ)](https://www.elastic.co/guide/en/logstash/current/persistent-queues.html) that absorbs bursts of events without an external buffering mechanism. It attempts to deliver messages stored in the PQ until delivery succeeds at least once. +Logstash boosts data resiliency for important data that you don’t want to lose. Logstash offers an on-disk [persistent queue (PQ)](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/persistent-queues.md) that absorbs bursts of events without an external buffering mechanism. It attempts to deliver messages stored in the PQ until delivery succeeds at least once. -The Logstash [dead letter queue (DLQ)](https://www.elastic.co/guide/en/logstash/current/dead-letter-queues.html) provides on-disk storage for events that Logstash can’t process, giving you a chance to evaluate them. You can use the dead_letter_queue input plugin to easily reprocess DLQ events. +The Logstash [dead letter queue (DLQ)](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/dead-letter-queues.md) provides on-disk storage for events that Logstash can’t process, giving you a chance to evaluate them. You can use the dead_letter_queue input plugin to easily reprocess DLQ events. ### Data flow [ec-data-flow] If you need to collect data from multiple Beats or Elastic Agents, consider using Logstash as a proxy. Logstash can receive data from multiple endpoints, even on different networks, and send the data on to Elasticsearch through a single firewall rule. You get more security for less work than if you set up individual rules for each endpoint. -Logstash can send to multiple [outputs](https://www.elastic.co/guide/en/logstash/current/output-plugins.html) from a single pipeline to help you get the most value from your data. +Logstash can send to multiple [outputs](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/output-plugins.md) from a single pipeline to help you get the most value from your data. ## Where to go from here [ec-data-ingest-where-to-go] @@ -162,11 +162,11 @@ We have guides and many hands-on tutorials to help get you started with ingestin ### Ingest data for Elastic solutions [ec-ingest-solutions] -[Get started with Elastic Observability](https://www.elastic.co/guide/en/observability/current/observability-get-started.html) -: Use Elastic Observability to gain deeper insight into the behavior of your applications and systems. Follow our guides to ingest various data types, such as [logs and metrics](https://www.elastic.co/guide/en/observability/current/logs-metrics-get-started.html), [traces and APM](https://www.elastic.co/guide/en/observability/current/apm-getting-started-apm-server.html), and [data from Splunk](https://www.elastic.co/guide/en/observability/current/splunk-get-started.html). There are also several [tutorials](https://www.elastic.co/guide/en/observability/current/observability-tutorials.html) to choose from. +[Get started with Elastic Observability](/solutions/observability/get-started.md) +: Use Elastic Observability to gain deeper insight into the behavior of your applications and systems. Follow our guides to ingest various data types, such as [logs and metrics](/solutions/observability/infra-and-hosts/get-started-with-system-metrics.md), [traces and APM](/solutions/observability/apps/get-started-with-apm.md), and [data from Splunk](/solutions/observability/get-started/add-data-from-splunk.md). There are also several [tutorials](https://www.elastic.co/guide/en/observability/current/observability-tutorials.html) to choose from. -[Add data to Elastic Security](https://www.elastic.co/guide/en/security/current/ingest-data.html) -: Use Elastic Security to quickly detect, investigate, and respond to threats and vulnerabilities across your environment. You can use {{agent}} to ingest data into the [{{elastic-defend}} integration](https://www.elastic.co/guide/en/security/current/install-endpoint.html), or with many other [{{integrations}}](https://docs.elastic.co/en/integrations) that work together with {{elastic-sec}}. You can also [ingest data from Splunk](https://www.elastic.co/guide/en/observability/current/splunk-get-started.html) or from various third party collectors that ship [ECS compliant security data](https://www.elastic.co/guide/en/security/current/siem-field-reference.html). +[Add data to Elastic Security](/solutions/security/get-started/ingest-data-to-elastic-security.md) +: Use Elastic Security to quickly detect, investigate, and respond to threats and vulnerabilities across your environment. You can use {{agent}} to ingest data into the [{{elastic-defend}} integration](/solutions/security/configure-elastic-defend/install-elastic-defend.md), or with many other [{{integrations}}](https://docs.elastic.co/en/integrations) that work together with {{elastic-sec}}. You can also [ingest data from Splunk](/solutions/observability/get-started/add-data-from-splunk.md) or from various third party collectors that ship [ECS compliant security data](asciidocalypse://docs/docs-content/docs/reference/security/fields-and-object-schemas/siem-field-reference.md). ### Ingest data with Elastic Agent, Beats, and Logstash [ec-ingest-timestamped] @@ -179,10 +179,10 @@ For users who want to build their own solution, we can help you get started inge [Beats and Elastic Agent comparison](../../../manage-data/ingest/tools.md) : {{beats}} and {{agent}} can both send data to {{es}} either directly or via {{ls}}. You can use this guide to determine which of these primary ingest tools best matches your use case. -[Introduction to Fleet management](https://www.elastic.co/guide/en/fleet/current/fleet-overview.html) +[Introduction to Fleet management](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/index.md) : {{fleet}} provides a web-based UI in Kibana for centrally managing Elastic Agents and their policies. -[{{ls}} introduction](https://www.elastic.co/guide/en/logstash/current/introduction.html) +[{{ls}} introduction](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/index.md) : Use {{ls}} to dynamically unify data from disparate sources and normalize the data into destinations of your choice. @@ -191,7 +191,7 @@ For users who want to build their own solution, we can help you get started inge [Add data with the web crawler](https://github.com/elastic/crawler) : Use the web crawler to programmatically discover, extract, and index searchable content from websites and knowledge bases. -[Add data with connectors](https://www.elastic.co/guide/en/elasticsearch/reference/current/es-connectors.html) +[Add data with connectors](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/search-connectors/index.md) : Sync data from an original data source to an {{es}} index. Connectors enable you to create searchable, read-only replicas of your data sources. @@ -206,13 +206,13 @@ For users who want to build their own solution, we can help you get started inge ### Manipulate and pre-process your data [ec-ingest-manipulate] -[Ingest pipelines](https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest.html) +[Ingest pipelines](/manage-data/ingest/transform-enrich/ingest-pipelines.md) : {{es}} ingest pipelines let you perform common transformations on your data before indexing. -[{{agent}} processors](https://www.elastic.co/guide/en/fleet/current/elastic-agent-processor-configuration.html) +[{{agent}} processors](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/agent-processors.md) : Use the {{agent}} lightweight processors to parse, filter, transform, and enrich data at the source. -[Creating a {{ls}} pipeline](https://www.elastic.co/guide/en/logstash/current/configuration.html) +[Creating a {{ls}} pipeline](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/creating-logstash-pipeline.md) : Create a {{ls}} pipeline by stringing together plugins—​inputs, outputs, filters, and sometimes codecs—​in order to process your data during ingestion. diff --git a/raw-migrated-files/cloud/cloud/ec-custom-bundles.md b/raw-migrated-files/cloud/cloud/ec-custom-bundles.md index 609f7f863..de5c18b93 100644 --- a/raw-migrated-files/cloud/cloud/ec-custom-bundles.md +++ b/raw-migrated-files/cloud/cloud/ec-custom-bundles.md @@ -76,7 +76,7 @@ Bundles The dictionary `synonyms.txt` can be used as `synonyms.txt` or using the full path `/app/config/synonyms.txt` in the `synonyms_path` of the `synonym-filter`. - To learn more about analyzing with synonyms, check [Synonym token filter](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-synonym-tokenfilter.html) and [Formatting Synonyms](https://www.elastic.co/guide/en/elasticsearch/guide/2.x/synonym-formats.html). + To learn more about analyzing with synonyms, check [Synonym token filter](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/text-analysis/analysis-synonym-tokenfilter.md) and [Formatting Synonyms](https://www.elastic.co/guide/en/elasticsearch/guide/2.x/synonym-formats.html). **GeoIP database bundle** diff --git a/raw-migrated-files/cloud/cloud/ec-enable-logging-and-monitoring.md b/raw-migrated-files/cloud/cloud/ec-enable-logging-and-monitoring.md index 8ce1480bf..7957951ba 100644 --- a/raw-migrated-files/cloud/cloud/ec-enable-logging-and-monitoring.md +++ b/raw-migrated-files/cloud/cloud/ec-enable-logging-and-monitoring.md @@ -173,7 +173,7 @@ When shipping logs to a monitoring deployment there are more logging features av #### For {{es}}: [ec-extra-logging-features-elasticsearch] * [Audit logging](../../../deploy-manage/monitor/logging-configuration/enabling-audit-logs.md) - logs security-related events on your deployment -* [Slow query and index logging](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-slowlog.html) - helps find and debug slow queries and indexing +* [Slow query and index logging](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/slow-log-settings.md) - helps find and debug slow queries and indexing * Verbose logging - helps debug stack issues by increasing component logs After you’ve enabled log delivery on your deployment, you can [add the Elasticsearch user settings](../../../deploy-manage/deploy/elastic-cloud/edit-stack-settings.md) to enable these features. diff --git a/raw-migrated-files/cloud/cloud/ec-faq-getting-started.md b/raw-migrated-files/cloud/cloud/ec-faq-getting-started.md index 84cd31f78..b6dbed257 100644 --- a/raw-migrated-files/cloud/cloud/ec-faq-getting-started.md +++ b/raw-migrated-files/cloud/cloud/ec-faq-getting-started.md @@ -37,7 +37,7 @@ This frequently-asked-questions list helps you with common questions while you g : Yes, all subscription levels for Elasticsearch Service include support, handled by email or through the Elastic Support Portal. Different subscription levels include different levels of support. For the Standard subscription level, there is no service-level agreement (SLA) on support response times. Gold and Platinum subscription levels include an SLA on response times to tickets and dedicated resources. To learn more, check [Getting Help](../../../troubleshoot/index.md). $$$faq-where$$$Where is Elasticsearch Service hosted? - : We host our {{es}} clusters on Amazon Web Services (AWS), Google Cloud Platform (GCP), and Microsoft Azure. Check out which [regions we support](https://www.elastic.co/guide/en/cloud/current/ec-reference-regions.html) and what [hardware we use](https://www.elastic.co/guide/en/cloud/current/ec-reference-hardware.html). New data centers are added all the time. + : We host our {{es}} clusters on Amazon Web Services (AWS), Google Cloud Platform (GCP), and Microsoft Azure. Check out which [regions we support](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/regions.md) and what [hardware we use](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/hardware.md). New data centers are added all the time. $$$faq-vs-aws$$$What is the difference between Elasticsearch Service and the Amazon {{es}} Service? : Elasticsearch Service is the only hosted and managed {{es}} service built, managed, and supported by the company behind {{es}}, {{kib}}, {{beats}}, and {{ls}}. With Elasticsearch Service, you always get the latest versions of the software. Our service is built on best practices and years of experience hosting and managing thousands of {{es}} clusters in the Cloud and on premise. For more information, check the following Amazon and Elastic {{es}} Service [comparison page](https://www.elastic.co/aws-elasticsearch-service). diff --git a/raw-migrated-files/cloud/cloud/ec-getting-started-node-js.md b/raw-migrated-files/cloud/cloud/ec-getting-started-node-js.md index 7f0d0eb30..dc50f9c96 100644 --- a/raw-migrated-files/cloud/cloud/ec-getting-started-node-js.md +++ b/raw-migrated-files/cloud/cloud/ec-getting-started-node-js.md @@ -150,7 +150,7 @@ async function run() { run().catch(console.log) ``` -When using the [client.index](https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#_index) API, the request automatically creates the `game-of-thrones` index if it doesn’t already exist, as well as document IDs for each indexed document if they are not explicitly specified. +When using the [client.index](asciidocalypse://docs/elasticsearch-js/docs/reference/elasticsearch/elasticsearch-client-javascript-api/api-reference.md#_index) API, the request automatically creates the `game-of-thrones` index if it doesn’t already exist, as well as document IDs for each indexed document if they are not explicitly specified. ## Search and modify data [ec_search_and_modify_data] @@ -197,7 +197,7 @@ async function update() { update().catch(console.log) ``` -This [more comprehensive list of API examples](https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/examples.html) includes bulk operations, checking the existence of documents, updating by query, deleting, scrolling, and SQL queries. To learn more, check the complete [API reference](https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html). +This [more comprehensive list of API examples](asciidocalypse://docs/elasticsearch-js/docs/reference/elasticsearch/elasticsearch-client-javascript-api/examples.md) includes bulk operations, checking the existence of documents, updating by query, deleting, scrolling, and SQL queries. To learn more, check the complete [API reference](asciidocalypse://docs/elasticsearch-js/docs/reference/elasticsearch/elasticsearch-client-javascript-api/api-reference.md). ## Switch to API key authentication [ec_switch_to_api_key_authentication] @@ -284,11 +284,11 @@ Security Connections -: If your application connecting to Elasticsearch Service runs under the Java security manager, you should at least disable the caching of positive hostname resolutions. To learn more, check the [Java API Client documentation](https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/_others.html). +: If your application connecting to Elasticsearch Service runs under the Java security manager, you should at least disable the caching of positive hostname resolutions. To learn more, check the [Java API Client documentation](asciidocalypse://docs/elasticsearch-java/docs/reference/elasticsearch/elasticsearch-client-java-api-client/_others.md). Schema : When the example code was run an index mapping was created automatically. The field types were selected by {{es}} based on the content seen when the first record was ingested, and updated as new fields appeared in the data. It would be more efficient to specify the fields and field types in advance to optimize performance. Refer to the Elastic Common Schema documentation and Field Type documentation when you are designing the schema for your production use cases. Ingest -: For more advanced scenarios, this [bulk ingestion](https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/bulk_examples.html) reference gives an example of the `bulk` API that makes it possible to perform multiple operations in a single call. This bulk example also explicitly specifies document IDs. If you have a lot of documents to index, using bulk to batch document operations is significantly faster than submitting requests individually. +: For more advanced scenarios, this [bulk ingestion](asciidocalypse://docs/elasticsearch-js/docs/reference/elasticsearch/elasticsearch-client-javascript-api/bulk_examples.md) reference gives an example of the `bulk` API that makes it possible to perform multiple operations in a single call. This bulk example also explicitly specifies document IDs. If you have a lot of documents to index, using bulk to batch document operations is significantly faster than submitting requests individually. diff --git a/raw-migrated-files/cloud/cloud/ec-getting-started-python.md b/raw-migrated-files/cloud/cloud/ec-getting-started-python.md index 616f2830c..0d92358eb 100644 --- a/raw-migrated-files/cloud/cloud/ec-getting-started-python.md +++ b/raw-migrated-files/cloud/cloud/ec-getting-started-python.md @@ -275,7 +275,7 @@ es.get(index='lord-of-the-rings', id='2EkAzngB_pyHD3p65UMt') 'birthplace': 'The Shire'}} ``` -For frequently used API calls with the Python client, check [Examples](https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/examples.html). +For frequently used API calls with the Python client, check [Examples](asciidocalypse://docs/elasticsearch-py/docs/reference/elasticsearch/elasticsearch-client-python-api/examples.md). ## Switch to API key authentication [ec_switch_to_api_key_authentication_2] @@ -335,7 +335,7 @@ es = Elasticsearch( Check [Create API key API](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-security-create-api-key) to learn more about API Keys and [Security privileges](../../../deploy-manage/users-roles/cluster-or-deployment-auth/elasticsearch-privileges.md) to understand which privileges are needed. If you are not sure what the right combination of privileges for your custom application is, you can enable [audit logging](../../../deploy-manage/monitor/logging-configuration/enabling-audit-logs.md) on {{es}} to find out what privileges are being used. To learn more about how logging works on Elasticsearch Service, check [Monitoring Elastic Cloud deployment logs and metrics](https://www.elastic.co/blog/monitoring-elastic-cloud-deployment-logs-and-metrics). -For more information on refreshing an index, searching, updating, and deleting, check the [elasticsearch-py examples](https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/examples.html). +For more information on refreshing an index, searching, updating, and deleting, check the [elasticsearch-py examples](asciidocalypse://docs/elasticsearch-py/docs/reference/elasticsearch/elasticsearch-client-python-api/examples.md). ### Best practices [ec_best_practices_2] @@ -350,5 +350,5 @@ Schema : When the example code is run, an index mapping is created automatically. The field types are selected by {{es}} based on the content seen when the first record was ingested, and updated as new fields appeared in the data. It would be more efficient to specify the fields and field types in advance to optimize performance. Refer to the Elastic Common Schema documentation and Field Type documentation when you design the schema for your production use cases. Ingest -: For more advanced scenarios, [Bulk helpers](https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/client-helpers.html#bulk-helpers) gives examples for the `bulk` API that makes it possible to perform multiple operations in a single call. If you have a lot of documents to index, using bulk to batch document operations is significantly faster than submitting requests individually. +: For more advanced scenarios, [Bulk helpers](asciidocalypse://docs/elasticsearch-py/docs/reference/elasticsearch/elasticsearch-client-python-api/client-helpers.md#bulk-helpers) gives examples for the `bulk` API that makes it possible to perform multiple operations in a single call. If you have a lot of documents to index, using bulk to batch document operations is significantly faster than submitting requests individually. diff --git a/raw-migrated-files/cloud/cloud/ec-getting-started-search-use-cases-beats-logstash.md b/raw-migrated-files/cloud/cloud/ec-getting-started-search-use-cases-beats-logstash.md index cdbde11cd..a32172f87 100644 --- a/raw-migrated-files/cloud/cloud/ec-getting-started-search-use-cases-beats-logstash.md +++ b/raw-migrated-files/cloud/cloud/ec-getting-started-search-use-cases-beats-logstash.md @@ -65,7 +65,7 @@ If you have multiple servers with metrics data, repeat the following steps to co **About Metricbeat modules** -Metricbeat has [many modules](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-modules.html) available that collect common metrics. You can [configure additional modules](https://www.elastic.co/guide/en/beats/metricbeat/current/configuration-metricbeat.html) as needed. For this example we’re using Metricbeat’s default configuration, which has the [System module](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-module-system.html) enabled. The System module allows you to monitor servers with the default set of metrics: *cpu*, *load*, *memory*, *network*, *process*, *process_summary*, *socket_summary*, *filesystem*, *fsstat*, and *uptime*. +Metricbeat has [many modules](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/metricbeat-modules.md) available that collect common metrics. You can [configure additional modules](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/configuration-metricbeat.md) as needed. For this example we’re using Metricbeat’s default configuration, which has the [System module](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/metricbeat-module-system.md) enabled. The System module allows you to monitor servers with the default set of metrics: *cpu*, *load*, *memory*, *network*, *process*, *process_summary*, *socket_summary*, *filesystem*, *fsstat*, and *uptime*. **Load the Metricbeat Kibana dashboards** @@ -87,7 +87,7 @@ sudo ./metricbeat setup \ 1. Specify the Cloud ID of your Elasticsearch Service deployment. You can include or omit the `:` prefix at the beginning of the Cloud ID. Both versions work fine. Find your Cloud ID by going to the {{kib}} main menu and selecting Management > Integrations, and then selecting View deployment details. 2. Specify the username and password provided to you when creating the deployment. Make sure to keep the colon between ** and **.::::{important} -Depending on variables including the installation location, environment and local permissions, you might need to [change the ownership](https://www.elastic.co/guide/en/beats/libbeat/current/config-file-permissions.html) of the metricbeat.yml. +Depending on variables including the installation location, environment and local permissions, you might need to [change the ownership](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-libbeat/config-file-permissions.md) of the metricbeat.yml. You might encounter similar permissions hurdles as you work through multiple sections of this document. These permission requirements are there for a good reason, a security safeguard to prevent unauthorized access and modification of key Elastic files. @@ -136,7 +136,7 @@ The next step is to configure Filebeat to send operational data to Logstash. As **Enable the Filebeat system module** -Filebeat has [many modules](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-modules.html) available that collect common log types. You can [configure additional modules](https://www.elastic.co/guide/en/beats/filebeat/current/configuration-filebeat-modules.html) as needed. For this example we’re using Filebeat’s [System module](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-system.html). This module reads in the various system log files (with information including login successes or failures, sudo command usage, and other key usage details) based on the detected operating system. For this example, a Linux-based OS is used and Filebeat ingests logs from the */var/log/* folder. It’s important to verify that Filebeat is given permission to access your logs folder through standard file and folder permissions. +Filebeat has [many modules](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-modules.md) available that collect common log types. You can [configure additional modules](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/configuration-filebeat-modules.md) as needed. For this example we’re using Filebeat’s [System module](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-module-system.md). This module reads in the various system log files (with information including login successes or failures, sudo command usage, and other key usage details) based on the detected operating system. For this example, a Linux-based OS is used and Filebeat ingests logs from the */var/log/* folder. It’s important to verify that Filebeat is given permission to access your logs folder through standard file and folder permissions. 1. Go to */filebeat-/modules.d/* where ** is the directory where Filebeat is installed. 2. Filebeat requires at least one fileset to be enabled. In file */filebeat-/modules.d/system.yml.disabled*, under both `syslog` and `auth` set `enabled` to `true`: @@ -175,7 +175,7 @@ sudo ./filebeat setup \ 1. Specify the Cloud ID of your Elasticsearch Service deployment. You can include or omit the `:` prefix at the beginning of the Cloud ID. Both versions work fine. Find your Cloud ID by going to the {{kib}} main menu and selecting Management > Integrations, and then selecting View deployment details. 2. Specify the username and password provided to you when creating the deployment. Make sure to keep the colon between ** and **.::::{important} -Depending on variables including the installation location, environment, and local permissions, you might need to [change the ownership](https://www.elastic.co/guide/en/beats/libbeat/current/config-file-permissions.html) of the filebeat.yml. +Depending on variables including the installation location, environment, and local permissions, you might need to [change the ownership](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-libbeat/config-file-permissions.md) of the filebeat.yml. :::: @@ -188,7 +188,7 @@ Index setup finished. Loading dashboards (Kibana must be running and reachable) Loaded dashboards Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead. -See more: https://www.elastic.co/guide/en/machine-learning/current/index.html +See more: /explore-analyze/machine-learning.md Loaded machine learning job configurations Loaded Ingest pipelines ``` @@ -238,7 +238,7 @@ Now the Filebeat and Metricbeat are set up, let’s configure a {{ls}} pipeline 1. {{ls}} listens for Beats input on the default port of 5044. Only one line is needed to do this. {{ls}} can handle input from many Beats of the same and also of varying types (Metricbeat, Filebeat, and others). 2. This sends output to the standard output, which displays through your command line interface. This plugin enables you to verify the data before you send it to {{es}}, in a later step. -3. Save the new *beats.conf* file in your Logstash folder. To learn more about the file format and options, check [{{ls}} Configuration Examples](https://www.elastic.co/guide/en/logstash/current/config-examples.html). +3. Save the new *beats.conf* file in your Logstash folder. To learn more about the file format and options, check [{{ls}} Configuration Examples](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/config-examples.md). ## Output {{ls}} data to stdout [ec-beats-logstash-stdout] @@ -380,7 +380,7 @@ In this section, you configure {{ls}} to send the Metricbeat and Filebeat data t ``` 1. Use the Cloud ID of your Elasticsearch Service deployment. You can include or omit the `:` prefix at the beginning of the Cloud ID. Both versions work fine. Find your Cloud ID by going to the {{kib}} main menu and selecting Management > Integrations, and then selecting View deployment details. - 2. the default usename is `elastic`. It is not recommended to use the `elastic` account for ingesting data as this is a superuser. We recommend using a user with reduced permissions, or an API Key with permissions specific to the indices or data streams that will be written to. Check the [Grant access to secured resources](https://www.elastic.co/guide/en/beats/filebeat/current/feature-roles.html) for information on the writer role and API Keys. Use the password provided when you created the deployment if using the `elastic` user, or the password used when creating a new ingest user with the roles specified in the [Grant access to secured resources](https://www.elastic.co/guide/en/beats/filebeat/current/feature-roles.html) documentation. + 2. the default usename is `elastic`. It is not recommended to use the `elastic` account for ingesting data as this is a superuser. We recommend using a user with reduced permissions, or an API Key with permissions specific to the indices or data streams that will be written to. Check the [Grant access to secured resources](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/feature-roles.md) for information on the writer role and API Keys. Use the password provided when you created the deployment if using the `elastic` user, or the password used when creating a new ingest user with the roles specified in the [Grant access to secured resources](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/feature-roles.md) documentation. Following are some additional details about the configuration file settings: @@ -472,9 +472,9 @@ In this section, you configure {{ls}} to send the Metricbeat and Filebeat data t ::::{note} In this guide, you manually launch each of the Elastic stack applications through the command line interface. In production, you may prefer to configure {{ls}}, Metricbeat, and Filebeat to run as System Services. Check the following pages for the steps to configure each application to run as a service: -* [Running {{ls}} as a service on Debian or RPM](https://www.elastic.co/guide/en/logstash/current/running-logstash.html) -* [Metricbeat and systemd](https://www.elastic.co/guide/en/beats/metricbeat/current/running-with-systemd.html) -* [Start filebeat](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-starting.html) +* [Running {{ls}} as a service on Debian or RPM](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/running-logstash.md) +* [Metricbeat and systemd](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-metricbeat/running-with-systemd.md) +* [Start filebeat](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-starting.md) :::: diff --git a/raw-migrated-files/cloud/cloud/ec-getting-started-search-use-cases-db-logstash.md b/raw-migrated-files/cloud/cloud/ec-getting-started-search-use-cases-db-logstash.md index a2810c9ee..d40ffe78a 100644 --- a/raw-migrated-files/cloud/cloud/ec-getting-started-search-use-cases-db-logstash.md +++ b/raw-migrated-files/cloud/cloud/ec-getting-started-search-use-cases-db-logstash.md @@ -1,6 +1,6 @@ # Ingest data from a relational database into Elasticsearch Service [ec-getting-started-search-use-cases-db-logstash] -This guide explains how to ingest data from a relational database into Elasticsearch Service through [Logstash](https://www.elastic.co/guide/en/logstash/current/introduction.html), using the Logstash [JDBC input plugin](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html). It demonstrates how Logstash can be used to efficiently copy records and to receive updates from a relational database, and then send them into {{es}} in an Elasticsearch Service deployment. +This guide explains how to ingest data from a relational database into Elasticsearch Service through [Logstash](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/index.md), using the Logstash [JDBC input plugin](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-jdbc.md). It demonstrates how Logstash can be used to efficiently copy records and to receive updates from a relational database, and then send them into {{es}} in an Elasticsearch Service deployment. The code and methods presented here have been tested with MySQL. They should work with other relational databases. @@ -192,13 +192,13 @@ Let’s set up a sample Logstash input pipeline to ingest data from your new JDB : The Logstash JDBC plugin does not come packaged with JDBC driver libraries. The JDBC driver library must be passed explicitly into the plugin using the `jdbc_driver_library` configuration option. tracking_column - : This parameter specifies the field `unix_ts_in_secs` that tracks the last document read by Logstash from MySQL, stored on disk in [logstash_jdbc_last_run](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html#plugins-inputs-jdbc-last_run_metadata_path). The parameter determines the starting value for documents that Logstash requests in the next iteration of its polling loop. The value stored in `logstash_jdbc_last_run` can be accessed in a SELECT statement as `sql_last_value`. + : This parameter specifies the field `unix_ts_in_secs` that tracks the last document read by Logstash from MySQL, stored on disk in [logstash_jdbc_last_run](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-jdbc.md#plugins-inputs-jdbc-last_run_metadata_path). The parameter determines the starting value for documents that Logstash requests in the next iteration of its polling loop. The value stored in `logstash_jdbc_last_run` can be accessed in a SELECT statement as `sql_last_value`. unix_ts_in_secs : The field generated by the SELECT statement, which contains the `modification_time` as a standard [Unix timestamp](https://en.wikipedia.org/wiki/Unix_time) (seconds since the epoch). The field is referenced by the `tracking column`. A Unix timestamp is used for tracking progress rather than a normal timestamp, as a normal timestamp may cause errors due to the complexity of correctly converting back and forth between UMT and the local timezone. sql_last_value - : This is a [built-in parameter](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html#_predefined_parameters) containing the starting point of the current iteration of the Logstash polling loop, and it is referenced in the SELECT statement line of the JDBC input configuration. This parameter is set to the most recent value of `unix_ts_in_secs`, which is read from `.logstash_jdbc_last_run`. This value is the starting point for documents returned by the MySQL query that is executed in the Logstash polling loop. Including this variable in the query guarantees that we’re not resending data that is already stored in Elasticsearch. + : This is a [built-in parameter](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/plugins-inputs-jdbc.md#_predefined_parameters) containing the starting point of the current iteration of the Logstash polling loop, and it is referenced in the SELECT statement line of the JDBC input configuration. This parameter is set to the most recent value of `unix_ts_in_secs`, which is read from `.logstash_jdbc_last_run`. This value is the starting point for documents returned by the MySQL query that is executed in the Logstash polling loop. Including this variable in the query guarantees that we’re not resending data that is already stored in Elasticsearch. schedule : This uses cron syntax to specify how often Logstash should poll MySQL for changes. The specification `*/5 * * * * *` tells Logstash to contact MySQL every 5 seconds. Input from this plugin can be scheduled to run periodically according to a specific schedule. This scheduling syntax is powered by [rufus-scheduler](https://github.com/jmettraux/rufus-scheduler). The syntax is cron-like with some extensions specific to Rufus (for example, timezone support). @@ -288,7 +288,7 @@ In this section, we configure Logstash to send the MySQL data to Elasticsearch. ``` 1. Use the Cloud ID of your Elasticsearch Service deployment. You can include or omit the `:` prefix at the beginning of the Cloud ID. Both versions work fine. Find your Cloud ID by going to the {{kib}} main menu and selecting Management > Integrations, and then selecting View deployment details. - 2. the default username is `elastic`. It is not recommended to use the `elastic` account for ingesting data as this is a superuser. We recommend using a user with reduced permissions, or an API Key with permissions specific to the indices or data streams that will be written to. Check [Configuring security in Logstash](https://www.elastic.co/guide/en/logstash/current/ls-security.html) for information on roles and API Keys. Use the password provided when you created the deployment if using the `elastic` user, or the password used when creating a new ingest user with the roles specified in the [Configuring security in Logstash](https://www.elastic.co/guide/en/logstash/current/ls-security.html) documentation. + 2. the default username is `elastic`. It is not recommended to use the `elastic` account for ingesting data as this is a superuser. We recommend using a user with reduced permissions, or an API Key with permissions specific to the indices or data streams that will be written to. Check [Configuring security in Logstash](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/secure-connection.md) for information on roles and API Keys. Use the password provided when you created the deployment if using the `elastic` user, or the password used when creating a new ingest user with the roles specified in the [Configuring security in Logstash](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/secure-connection.md) documentation. Following are some additional details about the configuration file settings: diff --git a/raw-migrated-files/cloud/cloud/ec-getting-started-search-use-cases-node-logs.md b/raw-migrated-files/cloud/cloud/ec-getting-started-search-use-cases-node-logs.md index ab84b966b..5c05c404d 100644 --- a/raw-migrated-files/cloud/cloud/ec-getting-started-search-use-cases-node-logs.md +++ b/raw-migrated-files/cloud/cloud/ec-getting-started-search-use-cases-node-logs.md @@ -1,6 +1,6 @@ # Ingest logs from a Node.js web application using Filebeat [ec-getting-started-search-use-cases-node-logs] -This guide demonstrates how to ingest logs from a Node.js web application and deliver them securely into an Elasticsearch Service deployment. You’ll set up Filebeat to monitor a JSON-structured log file that has standard Elastic Common Schema (ECS) formatted fields, and you’ll then view real-time visualizations of the log events in Kibana as requests are made to the Node.js server. While Node.js is used for this example, this approach to monitoring log output is applicable across many client types. Check the list of [available ECS logging plugins](https://www.elastic.co/guide/en/ecs-logging/overview/current/intro.html#_get_started). +This guide demonstrates how to ingest logs from a Node.js web application and deliver them securely into an Elasticsearch Service deployment. You’ll set up Filebeat to monitor a JSON-structured log file that has standard Elastic Common Schema (ECS) formatted fields, and you’ll then view real-time visualizations of the log events in Kibana as requests are made to the Node.js server. While Node.js is used for this example, this approach to monitoring log output is applicable across many client types. Check the list of [available ECS logging plugins](asciidocalypse://docs/ecs-logging/docs/reference/ecs/ecs-logging-overview/intro.md#_get_started). This guide presents: @@ -33,7 +33,7 @@ For the three following packages, you can create a working directory to install npm install winston ``` -* The [Elastic Common Schema (ECS) formatter](https://www.elastic.co/guide/en/ecs-logging/nodejs/current/winston.html) for the Node.js winston logger - This plugin formats your Node.js logs into an ECS structured JSON format ideally suited for ingestion into Elasticsearch. To install the ECS winston logger, run the following command in your working directory so that the package is installed in the same location as the winston package: +* The [Elastic Common Schema (ECS) formatter](asciidocalypse://docs/ecs-logging-nodejs/docs/reference/ecs/ecs-logging-nodejs/winston.md) for the Node.js winston logger - This plugin formats your Node.js logs into an ECS structured JSON format ideally suited for ingestion into Elasticsearch. To install the ECS winston logger, run the following command in your working directory so that the package is installed in the same location as the winston package: ```sh npm install @elastic/ecs-winston-format @@ -297,7 +297,7 @@ For this example, Filebeat uses the following four decoding options. json.expand_keys: true ``` -To learn more about these settings, check [JSON input configuration options](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-log.html#filebeat-input-log-config-json) and [Decode JSON fields](https://www.elastic.co/guide/en/beats/filebeat/current/decode-json-fields.html) in the Filebeat Reference. +To learn more about these settings, check [JSON input configuration options](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-input-log.md#filebeat-input-log-config-json) and [Decode JSON fields](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/decode-json-fields.md) in the Filebeat Reference. Append the four JSON decoding options to the *Filebeat inputs* section of *filebeat.yml*, so that the section now looks like this: @@ -333,7 +333,7 @@ Filebeat comes with predefined assets for parsing, indexing, and visualizing you ``` ::::{important} -Depending on variables including the installation location, environment, and local permissions, you might need to [change the ownership](https://www.elastic.co/guide/en/beats/libbeat/current/config-file-permissions.html) of filebeat.yml. You can also try running the command as *root*: *sudo ./filebeat setup -e* or you can disable strict permission checks by running the command with the `--strict.perms=false` option. +Depending on variables including the installation location, environment, and local permissions, you might need to [change the ownership](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-libbeat/config-file-permissions.md) of filebeat.yml. You can also try running the command as *root*: *sudo ./filebeat setup -e* or you can disable strict permission checks by running the command with the `--strict.perms=false` option. :::: @@ -434,7 +434,7 @@ In this command: * The *-c* flag specifies the path to the Filebeat config file. ::::{note} -Just in case the command doesn’t work as expected, check the [Filebeat quick start](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation-configuration.html#start) for the detailed command syntax for your operating system. You can also try running the command as *root*: *sudo ./filebeat -e -c filebeat.yml*. +Just in case the command doesn’t work as expected, check the [Filebeat quick start](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-installation-configuration.md#start) for the detailed command syntax for your operating system. You can also try running the command as *root*: *sudo ./filebeat -e -c filebeat.yml*. :::: @@ -517,5 +517,5 @@ You can add titles to the visualizations, resize and position them as you like, 2. As your final step, remember to stop Filebeat, the Node.js web server, and the client. Enter *CTRL + C* in the terminal window for each application to stop them. -You now know how to monitor log files from a Node.js web application, deliver the log event data securely into an Elasticsearch Service deployment, and then visualize the results in Kibana in real time. Consult the [Filebeat documentation](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html) to learn more about the ingestion and processing options available for your data. You can also explore our [documentation](../../../manage-data/ingest.md) to learn all about working in Elasticsearch Service. +You now know how to monitor log files from a Node.js web application, deliver the log event data securely into an Elasticsearch Service deployment, and then visualize the results in Kibana in real time. Consult the [Filebeat documentation](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-overview.md) to learn more about the ingestion and processing options available for your data. You can also explore our [documentation](../../../manage-data/ingest.md) to learn all about working in Elasticsearch Service. diff --git a/raw-migrated-files/cloud/cloud/ec-getting-started-search-use-cases-python-logs.md b/raw-migrated-files/cloud/cloud/ec-getting-started-search-use-cases-python-logs.md index 847ee7f13..a79693608 100644 --- a/raw-migrated-files/cloud/cloud/ec-getting-started-search-use-cases-python-logs.md +++ b/raw-migrated-files/cloud/cloud/ec-getting-started-search-use-cases-python-logs.md @@ -1,6 +1,6 @@ # Ingest logs from a Python application using Filebeat [ec-getting-started-search-use-cases-python-logs] -This guide demonstrates how to ingest logs from a Python application and deliver them securely into an Elasticsearch Service deployment. You’ll set up Filebeat to monitor a JSON-structured log file that has standard Elastic Common Schema (ECS) formatted fields, and you’ll then view real-time visualizations of the log events in {{kib}} as they occur. While Python is used for this example, this approach to monitoring log output is applicable across many client types. Check the list of [available ECS logging plugins](https://www.elastic.co/guide/en/ecs-logging/overview/current/intro.html). +This guide demonstrates how to ingest logs from a Python application and deliver them securely into an Elasticsearch Service deployment. You’ll set up Filebeat to monitor a JSON-structured log file that has standard Elastic Common Schema (ECS) formatted fields, and you’ll then view real-time visualizations of the log events in {{kib}} as they occur. While Python is used for this example, this approach to monitoring log output is applicable across many client types. Check the list of [available ECS logging plugins](asciidocalypse://docs/ecs-logging/docs/reference/ecs/ecs-logging-overview/intro.md). You are going to learn how to: @@ -14,7 +14,7 @@ You are going to learn how to: ## Prerequisites [ec_prerequisites_2] -To complete these steps you need to have [Python](https://www.python.org/) installed on your system as well as the [Elastic Common Schema (ECS) logger](https://www.elastic.co/guide/en/ecs-logging/python/current/installation.html) for the Python logging library. +To complete these steps you need to have [Python](https://www.python.org/) installed on your system as well as the [Elastic Common Schema (ECS) logger](asciidocalypse://docs/ecs-logging-python/docs/reference/ecs/ecs-logging-python/installation.md) for the Python logging library. To install *ecs-logging-python*, run: @@ -102,7 +102,7 @@ In this step, you’ll create a Python script that generates logs in JSON format Having your logs written in a JSON format with ECS fields allows for easy parsing and analysis, and for standardization with other applications. A standard, easily parsible format becomes increasingly important as the volume and type of data captured in your logs expands over time. - Together with the standard fields included for each log entry is an extra *http.request.body.content* field. This extra field is there just to give you some additional, interesting data to work with, and also to demonstrate how you can add optional fields to your log data. Check the [ECS Field Reference](https://www.elastic.co/guide/en/ecs/current/ecs-field-reference.html) for the full list of available fields. + Together with the standard fields included for each log entry is an extra *http.request.body.content* field. This extra field is there just to give you some additional, interesting data to work with, and also to demonstrate how you can add optional fields to your log data. Check the [ECS Field Reference](asciidocalypse://docs/ecs/docs/reference/ecs/ecs-field-reference.md) for the full list of available fields. 2. Let’s give the Python script a test run. Open a terminal instance in the location where you saved *elvis.py* and run the following: @@ -188,7 +188,7 @@ For this example, Filebeat uses the following four decoding options. json.expand_keys: true ``` -To learn more about these settings, check [JSON input configuration options](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-log.html#filebeat-input-log-config-json) and [Decode JSON fields](https://www.elastic.co/guide/en/beats/filebeat/current/decode-json-fields.html) in the Filebeat Reference. +To learn more about these settings, check [JSON input configuration options](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-input-log.md#filebeat-input-log-config-json) and [Decode JSON fields](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/decode-json-fields.md) in the Filebeat Reference. Append the four JSON decoding options to the *Filebeat inputs* section of *filebeat.yml*, so that the section now looks like this: @@ -224,7 +224,7 @@ Filebeat comes with predefined assets for parsing, indexing, and visualizing you ``` ::::{important} -Depending on variables including the installation location, environment, and local permissions, you might need to [change the ownership](https://www.elastic.co/guide/en/beats/libbeat/current/config-file-permissions.html) of filebeat.yml. You can also try running the command as *root*: *sudo ./filebeat setup -e* or you can disable strict permission checks by running the command with the `--strict.perms=false` option. +Depending on variables including the installation location, environment, and local permissions, you might need to [change the ownership](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-libbeat/config-file-permissions.md) of filebeat.yml. You can also try running the command as *root*: *sudo ./filebeat setup -e* or you can disable strict permission checks by running the command with the `--strict.perms=false` option. :::: @@ -330,7 +330,7 @@ In this command: * The *-c* flag specifies the path to the Filebeat config file. ::::{note} -Just in case the command doesn’t work as expected, check the [Filebeat quick start](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation-configuration.html#start) for the detailed command syntax for your operating system. You can also try running the command as *root*: *sudo ./filebeat -e -c filebeat.yml*. +Just in case the command doesn’t work as expected, check the [Filebeat quick start](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-installation-configuration.md#start) for the detailed command syntax for your operating system. You can also try running the command as *root*: *sudo ./filebeat -e -c filebeat.yml*. :::: @@ -408,5 +408,5 @@ You can add titles to the visualizations, resize and position them as you like, 2. As your final step, remember to stop Filebeat and the Python script. Enter *CTRL + C* in both your Filebeat terminal and in your `elvis.py` terminal. -You now know how to monitor log files from a Python application, deliver the log event data securely into an Elasticsearch Service deployment, and then visualize the results in Kibana in real time. Consult the [Filebeat documentation](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html) to learn more about the ingestion and processing options available for your data. You can also explore our [documentation](../../../manage-data/ingest.md) to learn all about working in Elasticsearch Service. +You now know how to monitor log files from a Python application, deliver the log event data securely into an Elasticsearch Service deployment, and then visualize the results in Kibana in real time. Consult the [Filebeat documentation](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/filebeat-overview.md) to learn more about the ingestion and processing options available for your data. You can also explore our [documentation](../../../manage-data/ingest.md) to learn all about working in Elasticsearch Service. diff --git a/raw-migrated-files/cloud/cloud/ec-maintenance-mode-routing.md b/raw-migrated-files/cloud/cloud/ec-maintenance-mode-routing.md index 4d58a2d3d..98f8ed73d 100644 --- a/raw-migrated-files/cloud/cloud/ec-maintenance-mode-routing.md +++ b/raw-migrated-files/cloud/cloud/ec-maintenance-mode-routing.md @@ -7,13 +7,13 @@ The {{ecloud}} proxy routes HTTP requests to its deployment’s individual produ It might be helpful to temporarily block upstream requests in order to protect some or all instances or products within your deployment. For example, you might stop request routing in the following cases: * If another team within your company starts streaming new data into your production {{integrations-server}} without previous load testing, both it and {{es}} might experience performance issues. You might consider stopping routing requests on all {{integrations-server}} instances in order to protect your downstream {{es}} instance. -* If {{es}} is being overwhelmed by upstream requests, it might experience increased response times or even become unresponsive. This might impact your ability to resize components in your deployment and increase the duration of pending plans or increase the chance of plan changes failing. Because every {{es}} node is an [implicit coordinating node](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html), you should stop routing requests across all {{es}} nodes to completely block upstream traffic. +* If {{es}} is being overwhelmed by upstream requests, it might experience increased response times or even become unresponsive. This might impact your ability to resize components in your deployment and increase the duration of pending plans or increase the chance of plan changes failing. Because every {{es}} node is an [implicit coordinating node](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/node-settings.md), you should stop routing requests across all {{es}} nodes to completely block upstream traffic. ## Considerations [ec_considerations] * {{ecloud}} will automatically set and remove routing blocks during plan changes. Elastic recommends avoiding manually overriding these settings for a deployment while its plans are pending. -* The [{{es}} API console](https://www.elastic.co/guide/en/cloud/current/ec-api-console.html) bypasses {{ecloud}} proxy routing blocks against {{es}} to enable administrative tasks while plan changes are pending. You should generally default traffic to the {{es}} endpoint. However, if you enable **Stop routing requests** across all {{es}} nodes, you need to use this UI to administer your cluster. +* The [{{es}} API console](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-api-console.md) bypasses {{ecloud}} proxy routing blocks against {{es}} to enable administrative tasks while plan changes are pending. You should generally default traffic to the {{es}} endpoint. However, if you enable **Stop routing requests** across all {{es}} nodes, you need to use this UI to administer your cluster. * While {{es}} has **Stop routing requests** set across all nodes, other products with the deployment may become unhealthy. This is because {{es}} is a prerequisite for those other products, such as {{kib}}. In {{kib}}, this results in a [**Kibana server is not ready yet**](/troubleshoot/kibana/error-server-not-ready.md) message. * Enabling **Stop routing requests** does not affect your [billing](../../../deploy-manage/cloud-organization/billing.md). If needed, you can stop charges for a deployment by [deleting the deployment](../../../deploy-manage/uninstall/delete-a-cloud-deployment.md). diff --git a/raw-migrated-files/cloud/cloud/ec-manage-kibana-settings.md b/raw-migrated-files/cloud/cloud/ec-manage-kibana-settings.md index 747973ad6..1ffa3329b 100644 --- a/raw-migrated-files/cloud/cloud/ec-manage-kibana-settings.md +++ b/raw-migrated-files/cloud/cloud/ec-manage-kibana-settings.md @@ -3,7 +3,7 @@ Elasticsearch Service supports most of the standard Kibana and X-Pack settings. Through a YAML editor in the console, you can append Kibana properties to the `kibana.yml` file. Your changes to the configuration file are read on startup. ::::{important} -Be aware that some settings that could break your cluster if set incorrectly and that the syntax might change between major versions. Before upgrading, be sure to review the full list of the [latest Kibana settings and syntax](https://www.elastic.co/guide/en/kibana/current/settings.html). +Be aware that some settings that could break your cluster if set incorrectly and that the syntax might change between major versions. Before upgrading, be sure to review the full list of the [latest Kibana settings and syntax](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). :::: @@ -43,55 +43,55 @@ If a setting is not supported by Elasticsearch Service, you will get an error me ### Version 8.9.0+ [ec_version_8_9_0] `xpack.fleet.createArtifactsBulkBatchSize` -: Allow to configure batch size for creating and updating Fleet user artifacts. Examples include creation of Trusted Applications and Endpoint Exceptions in Security. To learn more, check [Fleet settings in Kibana](https://www.elastic.co/guide/en/kibana/current/fleet-settings-kb.html). +: Allow to configure batch size for creating and updating Fleet user artifacts. Examples include creation of Trusted Applications and Endpoint Exceptions in Security. To learn more, check [Fleet settings in Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/fleet-settings.md). `xpack.securitySolution.maxUploadResponseActionFileBytes` -: Allow to configure the max file upload size for use with the Upload File Repsonse action available with the Defend Integration. To learn more, check [Endpoint Response actions](https://www.elastic.co/guide/en/security/current/response-actions.html). +: Allow to configure the max file upload size for use with the Upload File Repsonse action available with the Defend Integration. To learn more, check [Endpoint Response actions](/solutions/security/endpoint-response-actions.md). ### Version 8.7.0+ [ec_version_8_7_0] `xpack.security.session.concurrentSessions.maxSessions` -: Set the maximum number of sessions each user is allowed to have active in {{kib}}. By default, no limit is applied. If set, the value of this option should be an integer between 1 and 1000. When the limit is exceeded, the oldest session is automatically invalidated. To learn more, check [Session management](https://www.elastic.co/guide/en/kibana/current/xpack-security-session-management.html#session-max-sessions). +: Set the maximum number of sessions each user is allowed to have active in {{kib}}. By default, no limit is applied. If set, the value of this option should be an integer between 1 and 1000. When the limit is exceeded, the oldest session is automatically invalidated. To learn more, check [Session management](/deploy-manage/security/kibana-session-management.md#session-max-sessions). `server.securityResponseHeaders.crossOriginOpenerPolicy` -: Controls whether the [`Cross-Origin-Opener-Policy`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy) header is used in all responses to the client from the Kibana server. To learn more, see [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html#server-securityResponseHeaders-crossOriginOpenerPolicy). +: Controls whether the [`Cross-Origin-Opener-Policy`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy) header is used in all responses to the client from the Kibana server. To learn more, see [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md#server-securityResponseHeaders-crossOriginOpenerPolicy). ### Version 8.6.0+ [ec_version_8_6_0] `server.compression.brotli.enabled` -: Enable brotli compression format for browser-server communications. Default: false. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html). +: Enable brotli compression format for browser-server communications. Default: false. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). `xpack.fleet.enableExperimental` -: Allow to configure experimental feature for Fleet. To learn more, check [Fleet settings in Kibana](https://www.elastic.co/guide/en/kibana/current/fleet-settings-kb.html). +: Allow to configure experimental feature for Fleet. To learn more, check [Fleet settings in Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/fleet-settings.md). ### Version 8.4.0+ [ec_version_8_4_0] `migrations.discardUnknownObjects` -: Discard saved objects with unknown types during a migration. Must be set to the target version, e.g.: `8.4.0`. Default: undefined. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html). +: Discard saved objects with unknown types during a migration. Must be set to the target version, e.g.: `8.4.0`. Default: undefined. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). `migrations.discardCorruptObjects` -: Discard corrupt saved objects, as well as those that cause transform errors during a migration. Must be set to the target version, e.g.: `8.4.0`. Default: undefined. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html). +: Discard corrupt saved objects, as well as those that cause transform errors during a migration. Must be set to the target version, e.g.: `8.4.0`. Default: undefined. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). ### Version 8.3.0+ [ec_version_8_3_0] `elasticsearch.compression` -: Enable compression for communications with Elasticsearch. Default: false. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html). +: Enable compression for communications with Elasticsearch. Default: false. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). ### Version 8.2.0+ [ec_version_8_2_0] `elasticsearch.maxSockets` -: The maximum number of sockets that can be used for communications with Elasticsearch. Default: Infinity. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html). +: The maximum number of sockets that can be used for communications with Elasticsearch. Default: Infinity. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). ### Version 8.1.0+ [ec_version_8_1_0] `execution_context.enabled` -: Propagate request-specific metadata to Elasticsearch server by way of the `x-opaque-id` header. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html). +: Propagate request-specific metadata to Elasticsearch server by way of the `x-opaque-id` header. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). ### Supported versions before 8.x [ec_supported_versions_before_8_x] @@ -106,34 +106,34 @@ If a setting is not supported by Elasticsearch Service, you will get an error me ### All supported versions [ec_all_supported_versions_2] `migrations.maxBatchSizeBytes` -: Defines the maximum payload size for indexing batches of saved objects during upgrade migrations. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html). +: Defines the maximum payload size for indexing batches of saved objects during upgrade migrations. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). `server.maxPayload` -: The maximum payload size in bytes for incoming server requests. Default: 1048576. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html#server-maxPayload). +: The maximum payload size in bytes for incoming server requests. Default: 1048576. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md#server-maxPayload). `server.securityResponseHeaders.strictTransportSecurity` -: Controls whether the [`Strict-Transport-Security`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security) header is used in all responses to the client from the Kibana server. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html#server-securityResponseHeaders-strictTransportSecurity). +: Controls whether the [`Strict-Transport-Security`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security) header is used in all responses to the client from the Kibana server. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md#server-securityResponseHeaders-strictTransportSecurity). `server.securityResponseHeaders.xContentTypeOptions` -: Controls whether the [`X-Content-Type-Options`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options) header is used in all responses to the client from the Kibana server. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html#server-securityResponseHeaders-xContentTypeOptions). +: Controls whether the [`X-Content-Type-Options`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options) header is used in all responses to the client from the Kibana server. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md#server-securityResponseHeaders-xContentTypeOptions). `server.securityResponseHeaders.referrerPolicy` -: Controls whether the [`Referrer-Policy`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy) header is used in all responses to the client from the Kibana server. To learn more, see [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html#server-securityResponseHeaders-referrerPolicy). +: Controls whether the [`Referrer-Policy`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy) header is used in all responses to the client from the Kibana server. To learn more, see [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md#server-securityResponseHeaders-referrerPolicy). `server.securityResponseHeaders.permissionsPolicy` -: Controls whether the `Permissions-Policy` header is used in all responses to the client from the Kibana server. To learn more, see [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html#server-securityResponseHeaders-permissionsPolicy). +: Controls whether the `Permissions-Policy` header is used in all responses to the client from the Kibana server. To learn more, see [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md#server-securityResponseHeaders-permissionsPolicy). `server.securityResponseHeaders.permissionsPolicyReportOnly` -: Controls whether the `Permissions-Policy-Report-Only` header is used in all responses to the client from the Kibana server. To learn more, see [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html#server-securityResponseHeaders-permissionsPolicy). +: Controls whether the `Permissions-Policy-Report-Only` header is used in all responses to the client from the Kibana server. To learn more, see [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md#server-securityResponseHeaders-permissionsPolicy). `server.securityResponseHeaders.disableEmbedding` -: Controls whether the [`Content-Security-Policy`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy) and [`X-Frame-Options`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options) headers are configured to disable embedding Kibana in other webpages using iframes. To learn more, see [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html#server-securityResponseHeaders-disableEmbedding). +: Controls whether the [`Content-Security-Policy`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy) and [`X-Frame-Options`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options) headers are configured to disable embedding Kibana in other webpages using iframes. To learn more, see [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md#server-securityResponseHeaders-disableEmbedding). `data.autocomplete.valueSuggestions.timeout` -: Specifies the time in milliseconds to wait for autocomplete suggestions from Elasticsearch. The default is 1000. Allowed values are between 1 and 1200000. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html). +: Specifies the time in milliseconds to wait for autocomplete suggestions from Elasticsearch. The default is 1000. Allowed values are between 1 and 1200000. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). `data.autocomplete.valueSuggestions.terminateAfter` -: Specifies the max number of documents loaded by each shard to generate autocomplete suggestions. The default is 100000. Allowed values are between 1 and 10000000. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html). +: Specifies the max number of documents loaded by each shard to generate autocomplete suggestions. The default is 100000. Allowed values are between 1 and 10000000. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). `map.tilemap.options.attribution` : Adds the map attribution string. @@ -154,7 +154,7 @@ If a setting is not supported by Elasticsearch Service, you will get an error me : Specifies the locale for all strings, dates, and number formats that can be localized. Defaults to `en` (English). `migrations.batchSize` -: Defines the number of documents migrated at a time during saved object upgrade migrations. To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html). +: Defines the number of documents migrated at a time during saved object upgrade migrations. To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md). `server.defaultRoute` : Specifies the default route when opening Kibana. You can use this setting to modify the landing page when opening Kibana. @@ -224,7 +224,7 @@ If a setting is not supported by Elasticsearch Service, you will get an error me If you are using SAML to secure your clusters, these settings are supported in Elasticsearch Service. -To learn more, refer to [configuring Kibana to use SAML](https://www.elastic.co/guide/en/elasticsearch/reference/current/saml-guide-stack.html#saml-configure-kibana). +To learn more, refer to [configuring Kibana to use SAML](/deploy-manage/users-roles/cluster-or-deployment-auth/saml.md#saml-configure-kibana). #### Version 8.0.0+ [ec_version_8_0_0] @@ -299,17 +299,17 @@ If you are using OpenID Connect to secure your clusters, these settings are supp `xpack.security.authc.oidc.realm` : Specifies which OpenID Connect realm in Elasticsearch should be used. -To learn more, check [configuring Kibana to use OpenID Connect](https://www.elastic.co/guide/en/elasticsearch/reference/current/oidc-guide.html). +To learn more, check [configuring Kibana to use OpenID Connect](/deploy-manage/users-roles/cluster-or-deployment-auth/openid-connect.md). ### Anonymous authentication [ec_anonymous_authentication] -If you want to allow anonymous authentication in Kibana, these settings are supported in Elasticsearch Service. To learn more on how to enable anonymous access, check [Enabling anonymous access](https://www.elastic.co/guide/en/elasticsearch/reference/current/anonymous-access.html) and [Configuring Kibana to use anonymous authentication](https://www.elastic.co/guide/en/kibana/current/kibana-authentication.html#anonymous-authentication). +If you want to allow anonymous authentication in Kibana, these settings are supported in Elasticsearch Service. To learn more on how to enable anonymous access, check [Enabling anonymous access](/deploy-manage/users-roles/cluster-or-deployment-auth/anonymous-access.md) and [Configuring Kibana to use anonymous authentication](/deploy-manage/users-roles/cluster-or-deployment-auth/user-authentication.md#anonymous-authentication). #### Supported versions before 8.0.0 [ec_supported_versions_before_8_0_0] `xpack.security.sessionTimeout` -: Specifies the session duration in milliseconds. Allows a value between 15000 (15 seconds) and 86400000 (1 day). To learn more, check [Security settings in Kibana](https://www.elastic.co/guide/en/kibana/current/security-settings-kb.html). Deprecated in versions 7.6+ and removed in versions 8.0+. +: Specifies the session duration in milliseconds. Allows a value between 15000 (15 seconds) and 86400000 (1 day). To learn more, check [Security settings in Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/security-settings.md). Deprecated in versions 7.6+ and removed in versions 8.0+. #### All supported versions [ec_all_supported_versions_4] @@ -474,7 +474,7 @@ This setting is not available in versions 8.0.0 through 8.2.0. As such, this set : Sets the size of the ephemeral queue. Defaults to `10`. `xpack.actions.customHostSettings` -: An array of objects, one per host, containing the SSL/TLS settings used when executing connectors which make HTTPS and SMTP connections to the host servers. For details about using this setting, check [Alerting and action settings in Kibana](https://www.elastic.co/guide/en/kibana/current/alert-action-settings-kb.html). +: An array of objects, one per host, containing the SSL/TLS settings used when executing connectors which make HTTPS and SMTP connections to the host servers. For details about using this setting, check [Alerting and action settings in Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/alerting-settings.md). `xpack.actions.ssl.proxyVerificationMode` : Controls the verification of the proxy server certificate that hosted-ems receives when making an outbound SSL/TLS connection to the host server. Valid values are `full`, `certificate`, and `none`. Use `full` to perform hostname verification, `certificate` to skip hostname verification, and `none` to skip verification. Default: `full`. @@ -564,10 +564,10 @@ This setting is not available in versions 8.0.0 through 8.2.0. As such, this set : Set to `true` to enable logging event log documents from alerting to the Kibana log, in addition to being indexed into the event log index. Default: `false`. `xpack.security.session.idleTimeout` -: Set the session duration. The format is a string of `count` and `unit`, where unit is one of `ms`,`s`,`m`,`h`,`d`,`w`,`M`,`Y`. For example, `70ms`, `5s`, `3d`, `1Y`. To learn more, check [Security settings in Kibana](https://www.elastic.co/guide/en/kibana/current/security-settings-kb.html). +: Set the session duration. The format is a string of `count` and `unit`, where unit is one of `ms`,`s`,`m`,`h`,`d`,`w`,`M`,`Y`. For example, `70ms`, `5s`, `3d`, `1Y`. To learn more, check [Security settings in Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/security-settings.md). `xpack.security.session.lifespan` -: Sets the maximum duration, also known as "absolute timeout". After this duration, the session will expire even if it is not idle. To learn more, check [Security settings in Kibana](https://www.elastic.co/guide/en/kibana/current/security-settings-kb.html). +: Sets the maximum duration, also known as "absolute timeout". After this duration, the session will expire even if it is not idle. To learn more, check [Security settings in Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/security-settings.md). `xpack.maps.showMapVisualizationTypes` : Set to `true` if you want to create new region map visualizations. @@ -588,7 +588,7 @@ This setting is not available in versions 8.0.0 through 8.2.0. As such, this set : When enabled, specifies the email address to receive cluster alert notifications. `xpack.monitoring.kibana.collection.interval` -: Controls [how often data samples are collected](https://www.elastic.co/guide/en/elasticsearch/reference/current/monitoring-settings.html#monitoring-collection-settings). +: Controls [how often data samples are collected](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/monitoring-settings.md#monitoring-collection-settings). `xpack.monitoring.min_interval_seconds` : Specifies the minimum number of seconds that a time bucket in a chart can represent. If you modify the `xpack.monitoring.kibana.collection.interval`, use the same value in this setting. @@ -599,7 +599,7 @@ This setting is not available in versions 8.0.0 through 8.2.0. As such, this set `xpack.ml.enabled` : Set to true (default) to enable machine learning. - If set to `false` in `kibana.yml`, the machine learning icon is hidden in this Kibana instance. If `xpack.ml.enabled` is set to `true` in `elasticsearch.yml`, however, you can still use the machine learning APIs. To disable machine learning entirely, check the [Elasticsearch Machine Learning Settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/ml-settings.html). + If set to `false` in `kibana.yml`, the machine learning icon is hidden in this Kibana instance. If `xpack.ml.enabled` is set to `true` in `elasticsearch.yml`, however, you can still use the machine learning APIs. To disable machine learning entirely, check the [Elasticsearch Machine Learning Settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/machine-learning-settings.md). #### Content security policy configuration [ec_content_security_policy_configuration] @@ -635,7 +635,7 @@ This setting is not available in versions 8.0.0 through 8.2.0. As such, this set : Add sources for the [Content Security Policy `form-action` directive](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/form-action) in reporting mode. $$$csp-strict$$$ `csp.strict` -: Blocks Kibana access to any browser that does not enforce even rudimentary CSP rules. In practice, this disables support for older, less safe browsers like Internet Explorer. **Default: `true`** To learn more, check [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html)]. +: Blocks Kibana access to any browser that does not enforce even rudimentary CSP rules. In practice, this disables support for older, less safe browsers like Internet Explorer. **Default: `true`** To learn more, check [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md)]. `csp.warnLegacyBrowsers` : Shows a warning message after loading Kibana to any browser that does not enforce even rudimentary CSP rules, though Kibana is still accessible. This configuration is effectively ignored when [`csp.strict`](../../../deploy-manage/deploy/elastic-cloud/edit-stack-settings.md#csp-strict) is enabled. **Default: `true`** @@ -650,7 +650,7 @@ $$$csp-strict$$$ `csp.strict` #### Permissions policy configuration [ec_permissions_policy_configuration] `permissionsPolicy.report_to` -: Add sources for the permissions policy `report-to` directive. To learn more, see [Configure Kibana](https://www.elastic.co/guide/en/kibana/current/settings.html#server-securityResponseHeaders-permissionsPolicy) +: Add sources for the permissions policy `report-to` directive. To learn more, see [Configure Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/general-settings.md#server-securityResponseHeaders-permissionsPolicy) #### Banner settings [ec_banner_settings] @@ -692,7 +692,7 @@ Each method has its own unique limitations which are important to understand. `xpack.reporting.csv.scroll.duration` -: Amount of [time](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#time-units) allowed before {{kib}} cleans the scroll context during a CSV export. Valid option is either `auto` or [time](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#time-units), Defaults to `30s`. +: Amount of [time](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#time-units) allowed before {{kib}} cleans the scroll context during a CSV export. Valid option is either `auto` or [time](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#time-units), Defaults to `30s`. ::::{note} Support for the The option `auto` was included here, when the config value is set to `auto` the scroll context will be preserved for as long as is possible, before the report task is terminated due to the limits of `xpack.reporting.queue.timeout`. @@ -757,7 +757,7 @@ Support for the The option `auto` was included here, when the config value is se Defaults to `true`. `xpack.reporting.csv.scroll.duration` -: Amount of [time](https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html#time-units) allowed before {{kib}} cleans the scroll context during a CSV export. +: Amount of [time](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/rest-apis/api-conventions.md#time-units) allowed before {{kib}} cleans the scroll context during a CSV export. Defaults to `30s` (30 seconds). @@ -929,7 +929,7 @@ The following APM settings are supported in Kibana: `xpack.apm.ui.maxTraceItems` : Maximum number of child items displayed when viewing trace details. - Defaults to `1000`. Any positive value is valid. To learn more, check [APM settings in Kibana](https://www.elastic.co/guide/en/kibana/current/apm-settings-kb.html). + Defaults to `1000`. Any positive value is valid. To learn more, check [APM settings in Kibana](asciidocalypse://docs/kibana/docs/reference/configuration-reference/apm-settings.md). `xpack.apm.ui.enabled` diff --git a/raw-migrated-files/cloud/cloud/ec-metrics-memory-pressure.md b/raw-migrated-files/cloud/cloud/ec-metrics-memory-pressure.md index 1ae7ac3f6..38a3d326a 100644 --- a/raw-migrated-files/cloud/cloud/ec-metrics-memory-pressure.md +++ b/raw-migrated-files/cloud/cloud/ec-metrics-memory-pressure.md @@ -35,15 +35,15 @@ By understanding and adjusting the way your data is indexed, retained, and searc ### Sharding strategy [ec_sharding_strategy] -{{es}} indices are divided into shards. Understanding shards is important when tuning {{es}}. Check [Size your shards](https://www.elastic.co/guide/en/elasticsearch/reference/current/size-your-shards.html) in the {{es}} documentation to learn more. +{{es}} indices are divided into shards. Understanding shards is important when tuning {{es}}. Check [Size your shards](/deploy-manage/production-guidance/optimize-performance/size-shards.md) in the {{es}} documentation to learn more. ### Data retention [ec_data_retention] -The total amount of data being searched affects search performance. Check the tutorial [Automate rollover with index lifecycle management](https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started-index-lifecycle-management.html) (ILM) to automate data retention policies. +The total amount of data being searched affects search performance. Check the tutorial [Automate rollover with index lifecycle management](/manage-data/lifecycle/index-lifecycle-management/tutorial-automate-rollover.md) (ILM) to automate data retention policies. ### Tune for search speed [ec_tune_for_search_speed] -The documentation [Tune for search speed](https://www.elastic.co/guide/en/elasticsearch/reference/current/tune-for-search-speed.html) provides details on how to analyze queries, optimize field types, minimize the fields searched, and more. +The documentation [Tune for search speed](/deploy-manage/production-guidance/optimize-performance/search-speed.md) provides details on how to analyze queries, optimize field types, minimize the fields searched, and more. diff --git a/raw-migrated-files/cloud/cloud/ec-monitoring-setup.md b/raw-migrated-files/cloud/cloud/ec-monitoring-setup.md index 2ffe411c2..bd773d949 100644 --- a/raw-migrated-files/cloud/cloud/ec-monitoring-setup.md +++ b/raw-migrated-files/cloud/cloud/ec-monitoring-setup.md @@ -27,7 +27,7 @@ After you have created a new deployment, you should enable shipping logs and met 5. Select **Save**. -Optionally, turn on [audit logging](https://www.elastic.co/guide/en/elasticsearch/reference/current/auditing-settings.html) to capture security-related events, such as authentication failures, refused connections, and data-access events through the proxy. To turn on audit logging, [edit your deployment’s elasticsearch.yml file](../../../deploy-manage/deploy/elastic-cloud/edit-stack-settings.md) to add these lines: +Optionally, turn on [audit logging](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/configuration-reference/auding-settings.md) to capture security-related events, such as authentication failures, refused connections, and data-access events through the proxy. To turn on audit logging, [edit your deployment’s elasticsearch.yml file](../../../deploy-manage/deploy/elastic-cloud/edit-stack-settings.md) to add these lines: ```sh xpack.security.audit.enabled: true @@ -40,7 +40,7 @@ The last two lines are commented out for now but left there as placeholders to e ## View your deployment health [ec_view_your_deployment_health] -From the monitoring deployment, you can now view your deployment’s health in Kibana using [Stack Monitoring](https://www.elastic.co/guide/en/kibana/current/xpack-monitoring.html): +From the monitoring deployment, you can now view your deployment’s health in Kibana using [Stack Monitoring](/deploy-manage/monitor/monitoring-data/visualizing-monitoring-data.md): 1. Select the **Kibana** link for your monitoring deployment. 2. From the app menu or the search bar, open **Stack Monitoring**. @@ -50,7 +50,7 @@ From the monitoring deployment, you can now view your deployment’s health in K :::: -To learn more about what [Elasticsearch monitoring metrics](https://www.elastic.co/guide/en/kibana/current/elasticsearch-metrics.html) are available, take a look at the different tabs. For example: +To learn more about what [Elasticsearch monitoring metrics](/deploy-manage/monitor/monitoring-data/elasticsearch-metrics.md) are available, take a look at the different tabs. For example: * The **Overview** tab includes information about the search and indexing performance of Elasticsearch and also provides log entries. * The **Nodes** tab can help you monitor cluster CPU performance, JVM strain, and free disk space. @@ -70,13 +70,13 @@ Some [performance metrics](../../../deploy-manage/monitor/monitoring-data/ec-saa If you suspect a performance issue, you can use your monitoring deployment to investigate what is going in Kibana: -* Through **Observability** > **Logs** > **Stream**: This page shows errors in real-time and is part of the same logs Elastic Support reviews when a deployment experiences issues. Check [Tail log files](https://www.elastic.co/guide/en/observability/current/tail-logs.html). -* Through **Discover**: This page is a good option for investigating widespread historical patterns. Check [Discover](https://www.elastic.co/guide/en/kibana/current/discover.html). +* Through **Observability** > **Logs** > **Stream**: This page shows errors in real-time and is part of the same logs Elastic Support reviews when a deployment experiences issues. Check [Tail log files](/solutions/observability/logs/logs-stream.md). +* Through **Discover**: This page is a good option for investigating widespread historical patterns. Check [Discover](/explore-analyze/discover.md). Discover requires a quick setup in Kibana: 1. Go to **Stack Management** > **Data Views** (formerly *Index Patterns*). - 2. Create a [data view](https://www.elastic.co/guide/en/kibana/current/data-views.html) for `elastic-cloud-logs*` and set **Timestamp field** to `@timestamp`: + 2. Create a [data view](/explore-analyze/find-and-organize/data-views.md) for `elastic-cloud-logs*` and set **Timestamp field** to `@timestamp`: :::{image} ../../../images/cloud-ec-ce-monitoring-logs.png :alt: Create data view example in Kibana @@ -89,7 +89,7 @@ Navigate to the **Discover** or **Stream** pages to check if you’ve misconfigu :alt: Log error in Stream page showing failed SAML authentication ::: -You can also use this page to test how problematic proxy traffic requests show up in audit logs. To illustrate, create a spurious test request from the [Elasticsearch API console](https://www.elastic.co/guide/en/cloud/current/ec-api-console.html): +You can also use this page to test how problematic proxy traffic requests show up in audit logs. To illustrate, create a spurious test request from the [Elasticsearch API console](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-api-console.md): :::{image} ../../../images/cloud-ec-ce-monitoring-api-console.png :alt: Elasticsearch API console showing a spurious request that fails @@ -104,18 +104,18 @@ You will get this request reported as a new log. Audit logs do not currently rep ## Get notified [ec_get_notified] -You should take advantage of the default [Elastic Stack monitoring alerts](https://www.elastic.co/guide/en/kibana/current/kibana-alerts.html) that are available out-of-the-box. You don’t have to do anything other than enable shipping logs and metrics to have them made available to you (which you did earlier on). +You should take advantage of the default [Elastic Stack monitoring alerts](/deploy-manage/monitor/monitoring-data/kibana-alerts.md) that are available out-of-the-box. You don’t have to do anything other than enable shipping logs and metrics to have them made available to you (which you did earlier on). -On top of these default alerts that write to indices you can investigate, you might want to add some custom actions, such as a [connector](https://www.elastic.co/guide/en/kibana/current/action-types.html) for Slack notifications. To set up these notifications, you first configure a Slack connector and then append it to the default alerts and actions. From Kibana: +On top of these default alerts that write to indices you can investigate, you might want to add some custom actions, such as a [connector](asciidocalypse://docs/kibana/docs/reference/connectors-kibana.md) for Slack notifications. To set up these notifications, you first configure a Slack connector and then append it to the default alerts and actions. From Kibana: 1. Go to **Stack Management** > **Rules and Connectors** > **Connectors** and create your Slack connector: 1. Select **Slack**. - 2. [Create a Slack Webhook URL](https://www.elastic.co/guide/en/kibana/current/slack-action-type.html#configuring-slack) and paste it into the **Webhook URL** field. + 2. [Create a Slack Webhook URL](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/slack-action-type.md#configuring-slack) and paste it into the **Webhook URL** field. 3. Select **Save**. 2. Go to **Stack Monitoring** and select **Enter setup mode**. -3. Edit an alert rule, such as [CPU usage](https://www.elastic.co/guide/en/kibana/current/kibana-alerts.html#kibana-alerts-cpu-threshold): +3. Edit an alert rule, such as [CPU usage](/deploy-manage/monitor/monitoring-data/kibana-alerts.md#kibana-alerts-cpu-threshold): 1. Select one of the alert rule fields and select **CPU Usage**. 2. Choose **Edit rule** and scroll down to the bottom of the screen to select **Slack**. @@ -145,8 +145,8 @@ When issues come up that you need to troubleshoot, you’ll frequently start wit You can run this query and many others from the API consoles available via: -* **Kibana** > **Dev Tools**. Check [Run Elasticsearch API requests](https://www.elastic.co/guide/en/kibana/current/console-kibana.html). -* **Elastic Cloud** > **Deployment** > **Elasticsearch** > **API Console**. Check [Access the Elasticsearch API console](https://www.elastic.co/guide/en/cloud/current/ec-api-console.html). +* **Kibana** > **Dev Tools**. Check [Run Elasticsearch API requests](/explore-analyze/query-filter/tools/console.md). +* **Elastic Cloud** > **Deployment** > **Elasticsearch** > **API Console**. Check [Access the Elasticsearch API console](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-api-console.md). You can also learn more about the queries you should run for your deployment by reading our blog [Managing and Troubleshooting Elasticsearch Memory](https://www.elastic.co/blog/managing-and-troubleshooting-elasticsearch-memory). diff --git a/raw-migrated-files/cloud/cloud/ec-password-reset.md b/raw-migrated-files/cloud/cloud/ec-password-reset.md index b84cd1b4a..697797846 100644 --- a/raw-migrated-files/cloud/cloud/ec-password-reset.md +++ b/raw-migrated-files/cloud/cloud/ec-password-reset.md @@ -13,7 +13,7 @@ Resetting the `elastic` user password does not interfere with Marketplace integr ::::{note} -The `elastic` user should be not be used unless you have no other way to access your deployment. [Create API keys for ingesting data](https://www.elastic.co/guide/en/beats/filebeat/current/beats-api-keys.html), and create user accounts with [appropriate roles for user access](../../../deploy-manage/users-roles/cluster-or-deployment-auth/quickstart.md). +The `elastic` user should be not be used unless you have no other way to access your deployment. [Create API keys for ingesting data](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/beats-api-keys.md), and create user accounts with [appropriate roles for user access](../../../deploy-manage/users-roles/cluster-or-deployment-auth/quickstart.md). :::: diff --git a/raw-migrated-files/cloud/cloud/ec-secure-clusters-kerberos.md b/raw-migrated-files/cloud/cloud/ec-secure-clusters-kerberos.md index f6bf6d3ac..bd78c4073 100644 --- a/raw-migrated-files/cloud/cloud/ec-secure-clusters-kerberos.md +++ b/raw-migrated-files/cloud/cloud/ec-secure-clusters-kerberos.md @@ -5,7 +5,7 @@ You can secure your Elasticsearch clusters and Kibana instances in a deployment ## Before you begin [ec_before_you_begin_13] -The steps in this section require an understanding of Kerberos. To learn more about Kerberos, check our documentation on [configuring Elasticsearch for Kerberos authentication](https://www.elastic.co/guide/en/elasticsearch/reference/current/kerberos-realm.html). +The steps in this section require an understanding of Kerberos. To learn more about Kerberos, check our documentation on [configuring Elasticsearch for Kerberos authentication](/deploy-manage/users-roles/cluster-or-deployment-auth/kerberos.md). ## Configure the cluster to use Kerberos [ec-configure-kerberos-settings] @@ -19,7 +19,7 @@ With a custom bundle containing the Kerberos files and changes to the cluster co You should use these exact filenames for Elasticsearch Service to recognize the file in the bundle. :::: -3. Edit your cluster configuration, sometimes also referred to as the deployment plan, to define Kerberos settings as described in [Elasticsearch documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/kerberos-realm.html). +3. Edit your cluster configuration, sometimes also referred to as the deployment plan, to define Kerberos settings as described in [Elasticsearch documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/kerberos.md). ```sh xpack.security.authc.realms.kerberos.cloud-krb: diff --git a/raw-migrated-files/cloud/cloud/ec-secure-clusters-oidc.md b/raw-migrated-files/cloud/cloud/ec-secure-clusters-oidc.md index 4b3ec0a1a..ab05eab7b 100644 --- a/raw-migrated-files/cloud/cloud/ec-secure-clusters-oidc.md +++ b/raw-migrated-files/cloud/cloud/ec-secure-clusters-oidc.md @@ -12,7 +12,7 @@ To prepare for using OpenID Connect for authentication for deployments: * Create or use an existing deployment. Make note of the Kibana endpoint URL, it will be referenced as `` in the following steps. * The steps in this section required a moderate understanding of [OpenID Connect](https://openid.net/specs/openid-connect-core-1_0.md#Authentication) in general and the Authorization Code Grant flow specifically. For more information about OpenID Connect and how it works with the Elastic Stack check: - * Our [configuration guide for Elasticsearch](https://www.elastic.co/guide/en/elasticsearch/reference/current/oidc-guide.html#oidc-elasticsearch-authentication). + * Our [configuration guide for Elasticsearch](/deploy-manage/users-roles/cluster-or-deployment-auth/openid-connect.md#oidc-elasticsearch-authentication). @@ -100,8 +100,8 @@ The Elasticsearch cluster needs to be configured to use the OpenID Connect realm 7. The URL for the Token Endpoint in the OpenID Connect Provider. This is the endpoint where Elasticsearch Service will send a request to exchange the code for an ID Token, as part of the Authorization Code flow. The value for this setting should be provided by your OpenID Connect Provider. 8. (Optional) The URL for the UserInfo Endpoint in the OpenID Connect Provider. This is the endpoint of the OP that can be queried to get further user information, if required. The value for this setting should be provided by your OpenID Connect Provider. 9. The path to a file or an HTTPS URL pointing to a JSON Web Key Set with the key material that the OpenID Connect Provider uses for signing tokens and claims responses. Your OpenID Connect Provider should provide you with this file. - 10. Defines the OpenID Connect claim that is going to be mapped to the principal (username) of the authenticated user in Kibana. In this example, we map the value of the `sub` claim, but this is not a requirement, other claims can be used too. See [the claims mapping documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/oidc-guide.html#oidc-claims-mapping) for details and available options. - 11. Defines the OpenID Connect claim that is going to be used for role mapping. Note that the value `"http://example.info/claims/groups"` that is used here, is an arbitrary example. Check [the claims mapping documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/oidc-guide.html#oidc-claims-mapping) for a very detailed description of how the claim mapping works and how can these be used for role mapping. The name of this claim should be determined by the configuration of your OpenID Connect Provider. NOTE: According to the OpenID Connect specification, the OP should also make their configuration available at a well known URL, which is the concatenation of their `Issuer` value with the `.well-known/openid-configuration` string. To configure the OpenID Connect realm, refer to the `https://op.org.com/.well-known/openid-configuration` documentation. + 10. Defines the OpenID Connect claim that is going to be mapped to the principal (username) of the authenticated user in Kibana. In this example, we map the value of the `sub` claim, but this is not a requirement, other claims can be used too. See [the claims mapping documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/openid-connect.md#oidc-claims-mapping) for details and available options. + 11. Defines the OpenID Connect claim that is going to be used for role mapping. Note that the value `"http://example.info/claims/groups"` that is used here, is an arbitrary example. Check [the claims mapping documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/openid-connect.md#oidc-claims-mapping) for a very detailed description of how the claim mapping works and how can these be used for role mapping. The name of this claim should be determined by the configuration of your OpenID Connect Provider. NOTE: According to the OpenID Connect specification, the OP should also make their configuration available at a well known URL, which is the concatenation of their `Issuer` value with the `.well-known/openid-configuration` string. To configure the OpenID Connect realm, refer to the `https://op.org.com/.well-known/openid-configuration` documentation. 2. By default, users authenticating through OpenID Connect have no roles assigned to them. For example, if you want all your users authenticating with OpenID Connect to get access to Kibana, issue the following request to Elasticsearch: diff --git a/raw-migrated-files/cloud/cloud/ec-securing-clusters-JWT.md b/raw-migrated-files/cloud/cloud/ec-securing-clusters-JWT.md index 5947abe84..3455d0008 100644 --- a/raw-migrated-files/cloud/cloud/ec-securing-clusters-JWT.md +++ b/raw-migrated-files/cloud/cloud/ec-securing-clusters-JWT.md @@ -97,7 +97,7 @@ xpack: ::::{note} -Refer to [JWT authentication documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/jwt-auth-realm.html) for more details and examples. +Refer to [JWT authentication documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/jwt.md) for more details and examples. :::: diff --git a/raw-migrated-files/cloud/cloud/ec-securing-clusters-SAML.md b/raw-migrated-files/cloud/cloud/ec-securing-clusters-SAML.md index fcdf52da1..2d713dd69 100644 --- a/raw-migrated-files/cloud/cloud/ec-securing-clusters-SAML.md +++ b/raw-migrated-files/cloud/cloud/ec-securing-clusters-SAML.md @@ -33,8 +33,8 @@ You must edit your cluster configuration, sometimes also referred to as the depl 1. Specifies the authentication realm service. 2. Defines the SAML realm name. The SAML realm name can only contain alphanumeric characters, underscores, and hyphens. 3. The order of the SAML realm in your authentication chain. Allowed values are between `2` and `100`. Set to `2` unless you plan on configuring multiple SSO realms for this cluster. - 4. Defines the SAML attribute that is going to be mapped to the principal (username) of the authenticated user in Kibana. In this non-normative example, `nameid:persistent` maps the `NameID` with the `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent` format from the Subject of the SAML Assertion. You can use any SAML attribute that carries the necessary value for your use case in this setting, such as `uid` or `mail`. Refer to [the attribute mapping documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/saml-guide-stack.html#saml-attributes-mapping) for details and available options. - 5. Defines the SAML attribute used for role mapping when configured in Kibana. Common choices are `groups` or `roles`. The values for both `attributes.principal` and `attributes.groups` depend on the IdP provider, so be sure to review their documentation. Refer to [the attribute mapping documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/saml-guide-stack.html#saml-attributes-mapping) for details and available options. + 4. Defines the SAML attribute that is going to be mapped to the principal (username) of the authenticated user in Kibana. In this non-normative example, `nameid:persistent` maps the `NameID` with the `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent` format from the Subject of the SAML Assertion. You can use any SAML attribute that carries the necessary value for your use case in this setting, such as `uid` or `mail`. Refer to [the attribute mapping documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/saml.md#saml-attributes-mapping) for details and available options. + 5. Defines the SAML attribute used for role mapping when configured in Kibana. Common choices are `groups` or `roles`. The values for both `attributes.principal` and `attributes.groups` depend on the IdP provider, so be sure to review their documentation. Refer to [the attribute mapping documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/saml.md#saml-attributes-mapping) for details and available options. 6. The file path or the HTTPS URL where your IdP metadata is available, such as `https://idpurl.com/sso/saml/metadata`. If you configure a URL you need to make ensure that your Elasticsearch cluster can access it. 7. The SAML EntityID of your IdP. This can be read from the configuration page of the IdP, or its SAML metadata, such as `https://idpurl.com/entity_id`. 8. Replace `KIBANA_ENDPOINT_URL` with the one noted in the previous step, such as `sp.entity_id: https://eddac6b924f5450c91e6ecc6d247b514.us-east-1.aws.found.io:443/` including the slash at the end. diff --git a/raw-migrated-files/cloud/cloud/ec-securing-clusters-oidc-op.md b/raw-migrated-files/cloud/cloud/ec-securing-clusters-oidc-op.md index 9aa62bfe3..c3bfc6652 100644 --- a/raw-migrated-files/cloud/cloud/ec-securing-clusters-oidc-op.md +++ b/raw-migrated-files/cloud/cloud/ec-securing-clusters-oidc-op.md @@ -103,7 +103,7 @@ Follow these steps to configure OpenID Connect single sign-on on Elasticsearch S The following role mapping for OIDC restricts access to a specific user `(firstname.lastname)` based on the `claim_patterns.principal` email address. This prevents other users on the same domain from having access to your deployment. You can remove the rule or adjust it at your convenience. - More details are available in our [Configuring role mappings documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/oidc-guide.html#oidc-role-mappings). + More details are available in our [Configuring role mappings documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/openid-connect.md#oidc-role-mappings). ```json POST /_security/role_mapping/oidc_kibana @@ -229,7 +229,7 @@ Follow these steps to configure OpenID Connect single sign-on on Elasticsearch S The following role mapping for OIDC restricts access to a specific user `(firstname.lastname)` based on the `claim_patterns.principal` email address. This prevents other users on the same domain from having access to your deployment. You can remove the rule or adjust it at your convenience. - More details are available in our [Configuring role mappings documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/oidc-guide.html#oidc-role-mappings). + More details are available in our [Configuring role mappings documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/openid-connect.md#oidc-role-mappings). ```json POST /_security/role_mapping/oidc_kibana @@ -355,7 +355,7 @@ Follow these steps to configure OpenID Connect single sign-on on Elasticsearch S The following role mapping for OIDC restricts access to a specific user `(firstname.lastname)` based on the `claim_patterns.principal` email address. This prevents other users on the same domain from having access to your deployment. You can remove the rule or adjust it at your convenience. - More details are available in our [Configuring role mappings documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/oidc-guide.html#oidc-role-mappings). + More details are available in our [Configuring role mappings documentation](/deploy-manage/users-roles/cluster-or-deployment-auth/openid-connect.md#oidc-role-mappings). ```json POST /_security/role_mapping/oidc_kibana diff --git a/raw-migrated-files/cloud/cloud/ec-security.md b/raw-migrated-files/cloud/cloud/ec-security.md index 03a285d1d..fdd9f099e 100644 --- a/raw-migrated-files/cloud/cloud/ec-security.md +++ b/raw-migrated-files/cloud/cloud/ec-security.md @@ -7,7 +7,7 @@ The security of Elasticsearch Service is described on the [{{ecloud}} security]( * Reset the [`elastic` user password](../../../deploy-manage/users-roles/cluster-or-deployment-auth/built-in-users.md). * Use third-party authentication providers and services like [SAML](../../../deploy-manage/users-roles/cluster-or-deployment-auth/saml.md), [OpenID Connect](../../../deploy-manage/users-roles/cluster-or-deployment-auth/openid-connect.md), or [Kerberos](../../../deploy-manage/users-roles/cluster-or-deployment-auth/kerberos.md) to provide dynamic [role mappings](../../../deploy-manage/users-roles/cluster-or-deployment-auth/mapping-users-groups-to-roles.md) for role based or attribute based access control. * Use {{kib}} Spaces and roles to [secure access to {{kib}}](../../../deploy-manage/users-roles/cluster-or-deployment-auth/quickstart.md). - * Authorize and authenticate service accounts for {{beats}} by [granting access using API keys](https://www.elastic.co/guide/en/beats/filebeat/current/beats-api-keys.html). + * Authorize and authenticate service accounts for {{beats}} by [granting access using API keys](asciidocalypse://docs/beats/docs/reference/ingestion-tools/beats-filebeat/beats-api-keys.md). * Roles can provide full, or read only, access to your data and can be created in Kibana or directly in Elasticsearch. Check [defining roles](../../../deploy-manage/users-roles/cluster-or-deployment-auth/defining-roles.md) for full details. diff --git a/raw-migrated-files/cloud/cloud/ec-select-subscription-level.md b/raw-migrated-files/cloud/cloud/ec-select-subscription-level.md index 08063fc4f..32a2591c4 100644 --- a/raw-migrated-files/cloud/cloud/ec-select-subscription-level.md +++ b/raw-migrated-files/cloud/cloud/ec-select-subscription-level.md @@ -35,16 +35,16 @@ This overview shows you: You can [change your subscription level](../../../deploy-manage/cloud-organization/billing/manage-subscription.md) to the recommended level, or stop using the features that belong to a higher level. In the following list, you can find the features we are tracking and the relevant instructions to remove them from your deployments: `Machine learning` -: Edit your deployment to disable [machine learning](https://www.elastic.co/guide/en/machine-learning/current/ml-ad-overview.html). +: Edit your deployment to disable [machine learning](/explore-analyze/machine-learning/anomaly-detection.md). `Searchable snapshots` : Edit your deployment index management policies to disable the frozen tier that is using [searchable snapshots](../../../deploy-manage/tools/snapshot-and-restore/searchable-snapshots.md), or set up your cold tier to not mount indices from a searchable snapshot. `JDBC/ODBC clients` -: Make sure that there are no applications that use the SQL [JDBC](https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-jdbc.html) or [ODBC](https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-odbc.html) clients. +: Make sure that there are no applications that use the SQL [JDBC](/explore-analyze/query-filter/languages/sql-jdbc.md) or [ODBC](/explore-analyze/query-filter/languages/sql-odbc.md) clients. `Field-level or document-level security` -: Remove any user role configurations based on field or document access [through the API](https://www.elastic.co/guide/en/elasticsearch/reference/current/field-and-document-access-control.html) or the Kibana Roles page. +: Remove any user role configurations based on field or document access [through the API](/deploy-manage/users-roles/cluster-or-deployment-auth/controlling-access-at-document-field-level.md) or the Kibana Roles page. ::::{note} After you have made your changes to the deployment, it can take up to one hour to clear the notification banner. diff --git a/raw-migrated-files/cloud/cloud/ec-sign-outgoing-saml-message.md b/raw-migrated-files/cloud/cloud/ec-sign-outgoing-saml-message.md index 879271da5..0a49621eb 100644 --- a/raw-migrated-files/cloud/cloud/ec-sign-outgoing-saml-message.md +++ b/raw-migrated-files/cloud/cloud/ec-sign-outgoing-saml-message.md @@ -59,6 +59,6 @@ The following optional realm settings are supported: * `force_authn` Specifies whether to set the `ForceAuthn` attribute when requesting that the IdP authenticate the current user. If set to `true`, the IdP is required to verify the user’s identity, irrespective of any existing sessions they might have. Defaults to `false`. * `idp.use_single_logout` Indicates whether to utilise the Identity Provider’s `` (if one exists in the IdP metadata file). Defaults to `true`. -After completing these steps, you can log in to Kibana by authenticating against your SAML IdP. If you encounter any issues with the configuration, refer to the [SAML troubleshooting page](https://www.elastic.co/guide/en/elasticsearch/reference/current/trb-security-saml.html) which contains information about common issues and suggestions for their resolution. +After completing these steps, you can log in to Kibana by authenticating against your SAML IdP. If you encounter any issues with the configuration, refer to the [SAML troubleshooting page](/troubleshoot/elasticsearch/security/trb-security-saml.md) which contains information about common issues and suggestions for their resolution. diff --git a/raw-migrated-files/cloud/cloud/ec-traffic-filtering-through-the-api.md b/raw-migrated-files/cloud/cloud/ec-traffic-filtering-through-the-api.md index 325d0f759..174063b7e 100644 --- a/raw-migrated-files/cloud/cloud/ec-traffic-filtering-through-the-api.md +++ b/raw-migrated-files/cloud/cloud/ec-traffic-filtering-through-the-api.md @@ -52,7 +52,7 @@ https://api.elastic-cloud.com/api/v1/deployments/traffic-filter/rulesets \ ``` `region` -: The region is always the same region as the deployment you want to associate with a traffic filter rule set. For details, check the [list of available regions](https://www.elastic.co/guide/en/cloud/current/ec-regions-templates-instances.html). +: The region is always the same region as the deployment you want to associate with a traffic filter rule set. For details, check the [list of available regions](asciidocalypse://docs/cloud/docs/reference/cloud/cloud-hosted/ec-regions-templates-instances.md). `type` : The type of the rule set. In the JSON object, we use `ip` for the ingress IP traffic filter. Currently, we support `ip`, `egress_firewall`, `vpce` (AWS Private Link), `azure_private_endpoint` and `gcp_private_service_connect_endpoint`. These are described in further detail below. diff --git a/raw-migrated-files/docs-content/serverless/ai-assistant-knowledge-base.md b/raw-migrated-files/docs-content/serverless/ai-assistant-knowledge-base.md index ecda0445f..9d2c0b497 100644 --- a/raw-migrated-files/docs-content/serverless/ai-assistant-knowledge-base.md +++ b/raw-migrated-files/docs-content/serverless/ai-assistant-knowledge-base.md @@ -117,7 +117,7 @@ Refer to the following video for an example of adding a document to Knowledge Ba Add an index as a knowledge source when you want new information added to that index to automatically inform AI Assistant’s responses. Common security examples include asset inventories, network configuration information, on-call matrices, threat intelligence reports, and vulnerability scans. ::::{important} -Indices added to Knowledge Base must have at least one field mapped as [semantic text](https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-text.html). +Indices added to Knowledge Base must have at least one field mapped as [semantic text](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/semantic-text.md). :::: diff --git a/raw-migrated-files/docs-content/serverless/detections-logsdb-index-mode-impact.md b/raw-migrated-files/docs-content/serverless/detections-logsdb-index-mode-impact.md index 84fc5c7b0..c5cae52bc 100644 --- a/raw-migrated-files/docs-content/serverless/detections-logsdb-index-mode-impact.md +++ b/raw-migrated-files/docs-content/serverless/detections-logsdb-index-mode-impact.md @@ -2,9 +2,9 @@ Logsdb is enabled by default for {{serverless-full}}. This topic explains the impact of using logsdb index mode with {{sec-serverless}}. -With logsdb index mode, the original `_source` field is not stored in the index but can be reconstructed using [synthetic `_source`](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#synthetic-source). +With logsdb index mode, the original `_source` field is not stored in the index but can be reconstructed using [synthetic `_source`](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md#synthetic-source). -When the `_source` is reconstructed, [modifications](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#synthetic-source-modifications) are possible. Therefore, there could be a mismatch between users' expectations and how fields are formatted. +When the `_source` is reconstructed, [modifications](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md#synthetic-source-modifications) are possible. Therefore, there could be a mismatch between users' expectations and how fields are formatted. Continue reading to find out how this affects specific {{sec-serverless}} components. @@ -15,9 +15,9 @@ When alerts are generated, the `_source` event is copied into the alert to retai If you’re switching to use logsdb index mode, the `_source` field stored in the alert might look different in certain situations: -* [Arrays can be reconstructed differently or deduplicated](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#synthetic-source-modifications-leaf-arrays) -* [Field names](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#synthetic-source-modifications-field-names) -* `geo_point` data fields (refer to [Representation of ranges](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#synthetic-source-modifications-ranges) and [Reduced precision of `geo_point` values](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#synthetic-source-precision-loss-for-point-types) for more information) +* [Arrays can be reconstructed differently or deduplicated](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md#synthetic-source-modifications-leaf-arrays) +* [Field names](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md#synthetic-source-modifications-field-names) +* `geo_point` data fields (refer to [Representation of ranges](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md#synthetic-source-modifications-ranges) and [Reduced precision of `geo_point` values](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/mapping-source-field.md#synthetic-source-precision-loss-for-point-types) for more information) Alerts generated by the following rule types could be affected: diff --git a/raw-migrated-files/docs-content/serverless/elasticsearch-clients.md b/raw-migrated-files/docs-content/serverless/elasticsearch-clients.md index 5952341e9..57755956d 100644 --- a/raw-migrated-files/docs-content/serverless/elasticsearch-clients.md +++ b/raw-migrated-files/docs-content/serverless/elasticsearch-clients.md @@ -2,13 +2,13 @@ You can use the following language clients with {{es-serverless}}: -* [Go](https://www.elastic.co/guide/en/serverless/current/elasticsearch-go-client-getting-started.html) -* [Java](https://www.elastic.co/guide/en/serverless/current/elasticsearch-java-client-getting-started.html) -* [.NET](https://www.elastic.co/guide/en/serverless/current/elasticsearch-dot-net-client-getting-started.html) -* [Node.JS](https://www.elastic.co/guide/en/serverless/current/elasticsearch-nodejs-client-getting-started.html) -* [PHP](https://www.elastic.co/guide/en/serverless/current/elasticsearch-php-client-getting-started.html) -* [Python](https://www.elastic.co/guide/en/serverless/current/elasticsearch-python-client-getting-started.html) -* [Ruby](https://www.elastic.co/guide/en/serverless/current/elasticsearch-ruby-client-getting-started.html) +* [Go](asciidocalypse://docs/go-elasticsearch/docs/reference/elasticsearch/elasticsearch-client-go-api/getting-started-serverless.md) +* [Java](asciidocalypse://docs/elasticsearch-java/docs/reference/elasticsearch/elasticsearch-client-java-api-client/getting-started-serverless.md) +* [.NET](asciidocalypse://docs/elasticsearch-net/docs/reference/elasticsearch/elasticsearch-client-net-api/getting-started.md) +* [Node.JS](asciidocalypse://docs/elasticsearch-js/docs/reference/elasticsearch/elasticsearch-client-javascript-api/getting-started.md) +* [PHP](asciidocalypse://docs/elasticsearch-php/docs/reference/elasticsearch/elasticsearch-client-php-api/getting-started.md) +* [Python](asciidocalypse://docs/elasticsearch-py/docs/reference/elasticsearch/elasticsearch-client-python-api/getting-started.md) +* [Ruby](asciidocalypse://docs/elasticsearch-ruby/docs/reference/elasticsearch/elasticsearch-client-ruby-api/getting-started.md) ::::{tip} Learn how to [connect to your {{es-serverless}} endpoint](../../../solutions/search/get-started.md). diff --git a/raw-migrated-files/docs-content/serverless/elasticsearch-differences.md b/raw-migrated-files/docs-content/serverless/elasticsearch-differences.md index 0df47cae9..3ebba5470 100644 --- a/raw-migrated-files/docs-content/serverless/elasticsearch-differences.md +++ b/raw-migrated-files/docs-content/serverless/elasticsearch-differences.md @@ -36,7 +36,7 @@ To ensure optimal performance, follow these recommendations for sizing individua For large datasets that exceed the recommended maximum size for a single index, consider splitting your data across smaller indices and using an alias to search them collectively. -These recommendations do not apply to indices using better binary quantization (BBQ). Refer to [vector quantization](https://www.elastic.co/guide/en/elasticsearch/reference/current/dense-vector.html#dense-vector-quantization) in the core {{es}} docs for more information. +These recommendations do not apply to indices using better binary quantization (BBQ). Refer to [vector quantization](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/dense-vector.md#dense-vector-quantization) in the core {{es}} docs for more information. ## API availability [elasticsearch-differences-serverless-apis-availability] @@ -88,7 +88,7 @@ When attempting to use an unavailable API, you’ll receive a clear error messag ## Settings availability [elasticsearch-differences-serverless-settings-availability] -In {{es-serverless}}, you can only configure [index-level settings](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#index-modules-settings). Cluster-level settings and node-level settings are not required by end users and the `elasticsearch.yml` file is fully managed by Elastic. +In {{es-serverless}}, you can only configure [index-level settings](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/index-settings/index.md#index-modules-settings). Cluster-level settings and node-level settings are not required by end users and the `elasticsearch.yml` file is fully managed by Elastic. Available settings : **Index-level settings**: Settings that control how {{es}} documents are processed, stored, and searched are available to end users. These include: @@ -152,7 +152,7 @@ The following {{es-serverless}} project-specific features are planned for future * Managed Search connectors - You can use [self-managed Search connectors](https://www.elastic.co/guide/en/elasticsearch/reference/current/es-build-connector.html) in the meantime. + You can use [self-managed Search connectors](asciidocalypse://docs/elasticsearch/docs/reference/ingestion-tools/search-connectors/self-managed-connectors.md) in the meantime. @@ -160,6 +160,6 @@ The following {{es-serverless}} project-specific features are planned for future The following features are not available in {{es-serverless}} and are not planned for future support: -* [Custom plugins and bundles](https://www.elastic.co/guide/en/cloud/current/ec-custom-bundles.html) -* [{{es}} for Apache Hadoop](https://www.elastic.co/guide/en/elasticsearch/hadoop/current/reference.html) -* [Scripted metric aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-scripted-metric-aggregation.html) +* [Custom plugins and bundles](/deploy-manage/deploy/elastic-cloud/upload-custom-plugins-bundles.md) +* [{{es}} for Apache Hadoop](asciidocalypse://docs/elasticsearch-hadoop/docs/reference/ingestion-tools/elasticsearch-hadoop/elasticsearch-for-apache-hadoop.md) +* [Scripted metric aggregations](asciidocalypse://docs/elasticsearch/docs/reference/data-analysis/aggregations/search-aggregations-metrics-scripted-metric-aggregation.md) diff --git a/raw-migrated-files/docs-content/serverless/elasticsearch-ingest-data-through-api.md b/raw-migrated-files/docs-content/serverless/elasticsearch-ingest-data-through-api.md index a690b4b1f..4e7ec0ace 100644 --- a/raw-migrated-files/docs-content/serverless/elasticsearch-ingest-data-through-api.md +++ b/raw-migrated-files/docs-content/serverless/elasticsearch-ingest-data-through-api.md @@ -1,6 +1,6 @@ # Ingest data through API [elasticsearch-ingest-data-through-api] -The {{es}} APIs enable you to ingest data through code. You can use the APIs of one of the [language clients](../../../solutions/search/site-or-app/clients.md) or the {{es}} HTTP APIs. The examples on this page use the HTTP APIs to demonstrate how ingesting works in {{es}} through APIs. If you want to ingest timestamped data or have a more complex ingestion use case, check out [Beats](https://www.elastic.co/guide/en/serverless/current/elasticsearch-ingest-data-through-beats.html) or [Logstash](https://www.elastic.co/guide/en/serverless/current/elasticsearch-ingest-data-through-logstash.html). +The {{es}} APIs enable you to ingest data through code. You can use the APIs of one of the [language clients](../../../solutions/search/site-or-app/clients.md) or the {{es}} HTTP APIs. The examples on this page use the HTTP APIs to demonstrate how ingesting works in {{es}} through APIs. If you want to ingest timestamped data or have a more complex ingestion use case, check out [Beats](asciidocalypse://docs/beats/docs/reference/ingestion-tools/index.md) or [Logstash](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/index.md). ## Using the bulk API [elasticsearch-ingest-data-through-api-using-the-bulk-api] diff --git a/raw-migrated-files/docs-content/serverless/general-sign-up-trial.md b/raw-migrated-files/docs-content/serverless/general-sign-up-trial.md index e5bea6e65..be29442a6 100644 --- a/raw-migrated-files/docs-content/serverless/general-sign-up-trial.md +++ b/raw-migrated-files/docs-content/serverless/general-sign-up-trial.md @@ -1,6 +1,6 @@ # Sign up for Elastic Cloud [general-sign-up-trial] -The following page provides information on how to sign up for an Elastic Cloud Serverless account, for information on how to sign up for hosted deployments, see [Elasticsearch Service - How do i sign up?](https://www.elastic.co/guide/en/cloud/current/ec-getting-started.html). +The following page provides information on how to sign up for an Elastic Cloud Serverless account, for information on how to sign up for hosted deployments, see [Elasticsearch Service - How do i sign up?](/deploy-manage/deploy/elastic-cloud/cloud-hosted.md). ## Trial features [general-sign-up-trial-what-is-included-in-my-trial] @@ -11,7 +11,7 @@ Your free 14-day trial includes: A deployment lets you explore Elastic solutions for Search, Observability, and Security. Trial deployments run on the latest version of the Elastic Stack. They includes 8 GB of RAM spread out over two availability zones, and enough storage space to get you started. If you’re looking to evaluate a smaller workload, you can scale down your trial deployment. Each deployment includes Elastic features such as Maps, SIEM, machine learning, advanced security, and much more. You have some sample data sets to play with and tutorials that describe how to add your own data. -To learn more about Elastic Cloud Hosted, check our [Elasticsearch Service documentation](https://www.elastic.co/guide/en/cloud/current/ec-getting-started.html). +To learn more about Elastic Cloud Hosted, check our [Elasticsearch Service documentation](/deploy-manage/deploy/elastic-cloud/cloud-hosted.md). **One serverless project** @@ -41,7 +41,7 @@ During the free 14 day trial, Elastic provides access to one hosted deployment a * Machine learning nodes are available up to 4GB RAM * Custom {{es}} plugins are not enabled -To learn more about Elastic Cloud Hosted, check our [Elasticsearch Service documentation](https://www.elastic.co/guide/en/cloud/current/ec-getting-started.html). +To learn more about Elastic Cloud Hosted, check our [Elasticsearch Service documentation](/deploy-manage/deploy/elastic-cloud/cloud-hosted.md). **Serverless projects** @@ -64,7 +64,7 @@ You can subscribe to Elastic Cloud at any time during your trial. [Billing](../. ## Get started with your trial [general-sign-up-trial-how-do-i-get-started-with-my-trial] -Start by checking out some common approaches for [moving data into Elastic Cloud](https://www.elastic.co/guide/en/cloud/current/ec-cloud-ingest-data.html). +Start by checking out some common approaches for [moving data into Elastic Cloud](/manage-data/ingest.md). ## Maintain access to your trial projects and data [general-sign-up-trial-what-happens-at-the-end-of-the-trial] diff --git a/raw-migrated-files/docs-content/serverless/infrastructure-and-host-monitoring-intro.md b/raw-migrated-files/docs-content/serverless/infrastructure-and-host-monitoring-intro.md index 1dce9c82e..8a5ae66d5 100644 --- a/raw-migrated-files/docs-content/serverless/infrastructure-and-host-monitoring-intro.md +++ b/raw-migrated-files/docs-content/serverless/infrastructure-and-host-monitoring-intro.md @@ -11,7 +11,7 @@ Explore the topics in this section to learn how to observe and monitor hosts and | --- | --- | | [Analyze infrastructure and host metrics](../../../solutions/observability/infra-and-hosts/analyze-infrastructure-host-metrics.md) | Visualize infrastructure metrics to help diagnose problematic spikes, identify high resource utilization, automatically discover and track pods, and unify your metrics with other observability data. | | [Troubleshooting](../../../troubleshoot/observability/troubleshooting-infrastructure-monitoring.md) | Troubleshoot common issues on your own or ask for help. | -| [Metrics reference](https://www.elastic.co/guide/en/serverless/current/observability-metrics-reference.html) | Learn about the key metrics displayed in the Infrastructure UI and how they are calculated. | +| [Metrics reference](asciidocalypse://docs/docs-content/docs/reference/data-analysis/observability/metrics-reference-serverless.md) | Learn about the key metrics displayed in the Infrastructure UI and how they are calculated. | diff --git a/raw-migrated-files/docs-content/serverless/intro.md b/raw-migrated-files/docs-content/serverless/intro.md index ba4cc3235..64f49f4e5 100644 --- a/raw-migrated-files/docs-content/serverless/intro.md +++ b/raw-migrated-files/docs-content/serverless/intro.md @@ -8,9 +8,9 @@ Serverless projects use the core components of the {{stack}}, such as {{es}} and Elastic provides three serverless solutions available on {{ecloud}}: -* **https://www.elastic.co/guide/en/serverless/current/what-is-elasticsearch-serverless.html[{{es-serverless}}]**: Build powerful applications and search experiences using a rich ecosystem of vector search capabilities, APIs, and libraries. -* **https://www.elastic.co/guide/en/serverless/current/what-is-observability-serverless.html[{{obs-serverless}}]**: Monitor your own platforms and services using powerful machine learning and analytics tools with your logs, metrics, traces, and APM data. -* **https://www.elastic.co/guide/en/serverless/current/what-is-security-serverless.html[{{sec-serverless}}]**: Detect, investigate, and respond to threats with SIEM, endpoint protection, and AI-powered analytics capabilities. +* **/solutions/search.md[{{es-serverless}}]**: Build powerful applications and search experiences using a rich ecosystem of vector search capabilities, APIs, and libraries. +* **/solutions/observability.md[{{obs-serverless}}]**: Monitor your own platforms and services using powerful machine learning and analytics tools with your logs, metrics, traces, and APM data. +* **/solutions/security/elastic-security-serverless.md[{{sec-serverless}}]**: Detect, investigate, and respond to threats with SIEM, endpoint protection, and AI-powered analytics capabilities. [Learn more about {{serverless-full}} in our blog](https://www.elastic.co/blog/elastic-cloud-serverless). @@ -32,7 +32,7 @@ Elastic provides three serverless solutions available on {{ecloud}}: ## Differences between serverless projects and hosted deployments on {{ecloud}} [general-what-is-serverless-elastic-differences-between-serverless-projects-and-hosted-deployments-on-ecloud] -You can run [hosted deployments](https://www.elastic.co/guide/en/cloud/current/ec-getting-started.html) of the {{stack}} on {{ecloud}}. These hosted deployments provide more provisioning and advanced configuration options. +You can run [hosted deployments](/deploy-manage/deploy/elastic-cloud/cloud-hosted.md) of the {{stack}} on {{ecloud}}. These hosted deployments provide more provisioning and advanced configuration options. | | | | | --- | --- | --- | @@ -57,7 +57,7 @@ Migration paths between hosted deployments and serverless projects are currently **How can I move data to or from serverless projects?** -We are working on data migration tools! In the interim, [use Logstash](https://www.elastic.co/guide/en/serverless/current/elasticsearch-ingest-data-through-logstash.html) with Elasticsearch input and output plugins to move data to and from serverless projects. +We are working on data migration tools! In the interim, [use Logstash](asciidocalypse://docs/logstash/docs/reference/ingestion-tools/logstash/index.md) with Elasticsearch input and output plugins to move data to and from serverless projects. **How does serverless ensure compatibility between software versions?** diff --git a/raw-migrated-files/docs-content/serverless/observability-add-logs-service-name.md b/raw-migrated-files/docs-content/serverless/observability-add-logs-service-name.md index 9838b8bc4..e9021d925 100644 --- a/raw-migrated-files/docs-content/serverless/observability-add-logs-service-name.md +++ b/raw-migrated-files/docs-content/serverless/observability-add-logs-service-name.md @@ -10,7 +10,7 @@ To add a service name to your logs, either: ## Use the add fields processor to add a service name [observability-add-logs-service-name-use-the-add-fields-processor-to-add-a-service-name] -For log data without a service name, use the [`add_fields` processor](https://www.elastic.co/guide/en/fleet/current/add_fields-processor.html) to add the `service.name` field. You can add the processor in an integration’s settings or in the {{agent}} or {{filebeat}} configuration. +For log data without a service name, use the [`add_fields` processor](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/add_fields-processor.md) to add the `service.name` field. You can add the processor in an integration’s settings or in the {{agent}} or {{filebeat}} configuration. For example, adding the `add_fields` processor to the inputs section of a standalone {{agent}} or {{filebeat}} configuration would add `your_service_name` as the `service.name` field: @@ -29,12 +29,12 @@ Adding the `add_fields` processor to an integration’s settings would add `your :class: screenshot ::: -For more on defining processors, refer to [define processors](https://www.elastic.co/guide/en/fleet/current/elastic-agent-processor-configuration.html). +For more on defining processors, refer to [define processors](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/agent-processors.md). ## Map an existing field to the service name field [observability-add-logs-service-name-map-an-existing-field-to-the-service-name-field] -For logs that with an existing field being used to represent the service name, map that field to the `service.name` field using the [alias field type](https://www.elastic.co/guide/en/elasticsearch/reference/current/field-alias.html). Follow these steps to update your mapping: +For logs that with an existing field being used to represent the service name, map that field to the `service.name` field using the [alias field type](asciidocalypse://docs/elasticsearch/docs/reference/elasticsearch/mapping-reference/field-alias.md). Follow these steps to update your mapping: 1. Go to **Management** → **Index Management** → **Index Templates**. 2. Search for the index template you want to update. diff --git a/raw-migrated-files/docs-content/serverless/observability-ai-assistant.md b/raw-migrated-files/docs-content/serverless/observability-ai-assistant.md index 2c6b40369..5c5b613dd 100644 --- a/raw-migrated-files/docs-content/serverless/observability-ai-assistant.md +++ b/raw-migrated-files/docs-content/serverless/observability-ai-assistant.md @@ -12,9 +12,9 @@ The AI Assistant uses generative AI to provide: The AI Assistant integrates with your large language model (LLM) provider through our supported Elastic connectors: -* [OpenAI connector](https://www.elastic.co/guide/en/kibana/current/openai-action-type.html) for OpenAI or Azure OpenAI Service. -* [Amazon Bedrock connector](https://www.elastic.co/guide/en/kibana/current/bedrock-action-type.html) for Amazon Bedrock, specifically for the Claude models. -* [Google Gemini connector](https://www.elastic.co/guide/en/kibana/current/gemini-action-type.html) for Google Gemini. +* [OpenAI connector](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/openai-action-type.md) for OpenAI or Azure OpenAI Service. +* [Amazon Bedrock connector](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/bedrock-action-type.md) for Amazon Bedrock, specifically for the Claude models. +* [Google Gemini connector](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/gemini-action-type.md) for Google Gemini. ::::{important} The AI Assistant is powered by an integration with your large language model (LLM) provider. LLMs are known to sometimes present incorrect information as if it’s correct. Elastic supports configuration and connection to the LLM provider and your knowledge base, but is not responsible for the LLM’s responses. @@ -66,9 +66,9 @@ To set up the AI Assistant: 2. From **Project settings** → **Management** → **Connectors**, create a connector for your AI provider: - * [OpenAI](https://www.elastic.co/guide/en/kibana/current/openai-action-type.html) - * [Amazon Bedrock](https://www.elastic.co/guide/en/kibana/current/bedrock-action-type.html) - * [Google Gemini](https://www.elastic.co/guide/en/kibana/current/gemini-action-type.html) + * [OpenAI](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/openai-action-type.md) + * [Amazon Bedrock](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/bedrock-action-type.md) + * [Google Gemini](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/gemini-action-type.md) 3. Authenticate communication between {{obs-serverless}} and the AI provider by providing the following information: @@ -248,7 +248,7 @@ Clicking a prompt generates a message specific to that log entry. You can contin ### Add the AI Assistant connector to alerting workflows [observability-ai-assistant-add-the-ai-assistant-connector-to-alerting-workflows] -You can use the [Observability AI Assistant connector](https://www.elastic.co/guide/en/kibana/current/obs-ai-assistant-action-type.html) to add AI-generated insights and custom actions to your alerting workflows. To do this: +You can use the [Observability AI Assistant connector](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/obs-ai-assistant-action-type.md) to add AI-generated insights and custom actions to your alerting workflows. To do this: 1. [Create (or edit) an alerting rule](../../../solutions/observability/incident-management/create-manage-rules.md) and specify the conditions that must be met for the alert to fire. 2. Under **Actions**, select the **Observability AI Assistant** connector type. @@ -311,4 +311,4 @@ Enabling that feature can be done from the **Settings** tab of the AI Assistant ### Token limits [token-limits] -Most LLMs have a set number of tokens they can manage in single a conversation. When you reach the token limit, the LLM will throw an error, and Elastic will display a "Token limit reached" error. The exact number of tokens that the LLM can support depends on the LLM provider and model you’re using. If you are using an OpenAI connector, you can monitor token usage in **OpenAI Token Usage** dashboard. For more information, refer to the [OpenAI Connector documentation](https://www.elastic.co/guide/en/kibana/current/openai-action-type.html#openai-connector-token-dashboard). +Most LLMs have a set number of tokens they can manage in single a conversation. When you reach the token limit, the LLM will throw an error, and Elastic will display a "Token limit reached" error. The exact number of tokens that the LLM can support depends on the LLM provider and model you’re using. If you are using an OpenAI connector, you can monitor token usage in **OpenAI Token Usage** dashboard. For more information, refer to the [OpenAI Connector documentation](asciidocalypse://docs/kibana/docs/reference/connectors-kibana/openai-action-type.md#openai-connector-token-dashboard). diff --git a/raw-migrated-files/docs-content/serverless/observability-analyze-hosts.md b/raw-migrated-files/docs-content/serverless/observability-analyze-hosts.md index 5d747fc33..21ddbf6cb 100644 --- a/raw-migrated-files/docs-content/serverless/observability-analyze-hosts.md +++ b/raw-migrated-files/docs-content/serverless/observability-analyze-hosts.md @@ -17,7 +17,7 @@ To access the **Hosts** page, in your {{obs-serverless}} project, go to **Infras :class: screenshot ::: -To learn more about the metrics shown on this page, refer to the [Metrics reference](https://www.elastic.co/guide/en/serverless/current/observability-metrics-reference.html) documentation. +To learn more about the metrics shown on this page, refer to the [Metrics reference](asciidocalypse://docs/docs-content/docs/reference/data-analysis/observability/metrics-reference-serverless.md) documentation. ::::{admonition} Don’t see any metrics? :class: note @@ -221,7 +221,7 @@ The **Logs** tab displays logs relating to the host that you have selected. By d | | | | --- | --- | | **Timestamp** | The timestamp of the log entry from the `timestamp` field. | -| **Message** | The message extracted from the document. The content of this field depends on the type of log message. If no special log message type is detected, the [Elastic Common Schema (ECS)](https://www.elastic.co/guide/en/ecs/current/ecs-base.html) base field, `message`, is used. | +| **Message** | The message extracted from the document. The content of this field depends on the type of log message. If no special log message type is detected, the [Elastic Common Schema (ECS)](asciidocalypse://docs/ecs/docs/reference/ecs/ecs-base.md) base field, `message`, is used. | To view the logs in the {{logs-app}} for a detailed analysis, click **Open in Logs**. @@ -264,7 +264,7 @@ To learn more about roles, refer to [Assign user roles and privileges](../../../ ::::{important} -You must have an active [{{agent}}](https://www.elastic.co/guide/en/fleet/current/elastic-agent-installation.html) with an assigned agent policy that includes the [Osquery Manager](https://docs.elastic.co/en/integrations/osquery_manager.html) integration. +You must have an active [{{agent}}](asciidocalypse://docs/docs-content/docs/reference/ingestion-tools/fleet/install-elastic-agents.md) with an assigned agent policy that includes the [Osquery Manager](https://docs.elastic.co/en/integrations/osquery_manager.html) integration. :::: diff --git a/raw-migrated-files/docs-content/serverless/observability-apm-agents-elastic-apm-agents.md b/raw-migrated-files/docs-content/serverless/observability-apm-agents-elastic-apm-agents.md index 7860d4ff4..77827b01a 100644 --- a/raw-migrated-files/docs-content/serverless/observability-apm-agents-elastic-apm-agents.md +++ b/raw-migrated-files/docs-content/serverless/observability-apm-agents-elastic-apm-agents.md @@ -30,12 +30,12 @@ Spans are grouped in transactions—by default, one for each incoming HTTP reque If you’re ready to give Elastic APM a try, see [Get started with traces and APM](../../../solutions/observability/apps/get-started-with-apm.md). -See the [Java agent reference](https://www.elastic.co/guide/en/apm/agent/java/current/intro.html) for full documentation, including: +See the [Java agent reference](asciidocalypse://docs/apm-agent-java/docs/reference/ingestion-tools/apm-agent-java/index.md) for full documentation, including: -* [Supported technologies](https://www.elastic.co/guide/en/apm/agent/java/current/supported-technologies-details.html) -* [Set up](https://www.elastic.co/guide/en/apm/agent/java/current/setup.html) -* [Configuration reference](https://www.elastic.co/guide/en/apm/agent/java/current/configuration.html) -* [API reference](https://www.elastic.co/guide/en/apm/agent/java/current/apis.html) +* [Supported technologies](asciidocalypse://docs/apm-agent-java/docs/reference/ingestion-tools/apm-agent-java/supported-technologies.md) +* [Set up](asciidocalypse://docs/apm-agent-java/docs/reference/ingestion-tools/apm-agent-java/set-up-apm-java-agent.md) +* [Configuration reference](asciidocalypse://docs/apm-agent-java/docs/reference/ingestion-tools/apm-agent-java/configuration.md) +* [API reference](asciidocalypse://docs/apm-agent-java/docs/reference/ingestion-tools/apm-agent-java/tracing-apis.md) ::::{important} Not all APM agent configuration options are compatible with Elastic Cloud serverless. @@ -56,12 +56,12 @@ These events, called Transactions and Spans, are sent to Elastic, where they’r If you’re ready to give Elastic APM a try, see [Get started with traces and APM](../../../solutions/observability/apps/get-started-with-apm.md). -See the [Node.js agent reference](https://www.elastic.co/guide/en/apm/agent/nodejs/current/intro.html) for full documentation, including: +See the [Node.js agent reference](asciidocalypse://docs/apm-agent-nodejs/docs/reference/ingestion-tools/apm-agent-nodejs/index.md) for full documentation, including: -* [Supported technologies](https://www.elastic.co/guide/en/apm/agent/nodejs/current/supported-technologies.html) -* [Set up](https://www.elastic.co/guide/en/apm/agent/nodejs/current/set-up.html) -* [Configuration reference](https://www.elastic.co/guide/en/apm/agent/nodejs/current/advanced-setup.html) -* [API reference](https://www.elastic.co/guide/en/apm/agent/nodejs/current/api.html) +* [Supported technologies](asciidocalypse://docs/apm-agent-nodejs/docs/reference/ingestion-tools/apm-agent-nodejs/supported-technologies.md) +* [Set up](asciidocalypse://docs/apm-agent-nodejs/docs/reference/ingestion-tools/apm-agent-nodejs/set-up.md) +* [Configuration reference](asciidocalypse://docs/apm-agent-nodejs/docs/reference/ingestion-tools/apm-agent-nodejs/advanced-setup.md) +* [API reference](asciidocalypse://docs/apm-agent-nodejs/docs/reference/ingestion-tools/apm-agent-nodejs/api.md) ::::{important} Not all APM agent configuration options are compatible with Elastic Cloud serverless. @@ -86,12 +86,12 @@ In addition to APM and error data, the Python agent also collects system and app If you’re ready to give Elastic APM a try, see [Get started with traces and APM](../../../solutions/observability/apps/get-started-with-apm.md). -See the [Python agent reference](https://www.elastic.co/guide/en/apm/agent/python/current/getting-started.html) for full documentation, including: +See the [Python agent reference](asciidocalypse://docs/apm-agent-python/docs/reference/ingestion-tools/apm-agent-python/index.md) for full documentation, including: -* [Supported technologies](https://www.elastic.co/guide/en/apm/agent/python/current/supported-technologies.html) -* [Set up](https://www.elastic.co/guide/en/apm/agent/python/current/set-up.html) -* [Configuration reference](https://www.elastic.co/guide/en/apm/agent/python/current/configuration.html) -* [API reference](https://www.elastic.co/guide/en/apm/agent/python/current/api.html) +* [Supported technologies](asciidocalypse://docs/apm-agent-python/docs/reference/ingestion-tools/apm-agent-python/supported-technologies.md) +* [Set up](asciidocalypse://docs/apm-agent-python/docs/reference/ingestion-tools/apm-agent-python/set-up-apm-python-agent.md) +* [Configuration reference](asciidocalypse://docs/apm-agent-python/docs/reference/ingestion-tools/apm-agent-python/configuration.md) +* [API reference](asciidocalypse://docs/apm-agent-python/docs/reference/ingestion-tools/apm-agent-python/api-reference.md) ::::{important} Not all APM agent configuration options are compatible with Elastic Cloud serverless. @@ -112,12 +112,12 @@ These events, called Transactions and Spans, are sent to Elastic, where they’r If you’re ready to give Elastic APM a try, see [Get started with traces and APM](../../../solutions/observability/apps/get-started-with-apm.md). -See the [Ruby agent reference](https://www.elastic.co/guide/en/apm/agent/ruby/current/introduction.html) for full documentation, including: +See the [Ruby agent reference](asciidocalypse://docs/apm-agent-ruby/docs/reference/ingestion-tools/apm-agent-ruby/index.md) for full documentation, including: -* [Supported technologies](https://www.elastic.co/guide/en/apm/agent/ruby/current/supported-technologies.html) -* [Set up](https://www.elastic.co/guide/en/apm/agent/ruby/current/set-up.html) -* [Configuration reference](https://www.elastic.co/guide/en/apm/agent/ruby/current/configuration.html) -* [API reference](https://www.elastic.co/guide/en/apm/agent/ruby/current/api.html) +* [Supported technologies](asciidocalypse://docs/apm-agent-ruby/docs/reference/ingestion-tools/apm-agent-ruby/supported-technologies.md) +* [Set up](asciidocalypse://docs/apm-agent-ruby/docs/reference/ingestion-tools/apm-agent-ruby/set-up-apm-ruby-agent.md) +* [Configuration reference](asciidocalypse://docs/apm-agent-ruby/docs/reference/ingestion-tools/apm-agent-ruby/configuration.md) +* [API reference](asciidocalypse://docs/apm-agent-ruby/docs/reference/ingestion-tools/apm-agent-ruby/api-reference.md) ::::{important} Not all APM agent configuration options are compatible with Elastic Cloud serverless. @@ -144,12 +144,12 @@ In addition to capturing events like those mentioned here, the agent also collec If you’re ready to give Elastic APM a try, see [Get started with traces and APM](../../../solutions/observability/apps/get-started-with-apm.md). -See the [Go agent reference](https://www.elastic.co/guide/en/apm/agent/go/current/introduction.html) for full documentation, including: +See the [Go agent reference](asciidocalypse://docs/apm-agent-go/docs/reference/ingestion-tools/apm-agent-go/index.md) for full documentation, including: -* [Supported technologies](https://www.elastic.co/guide/en/apm/agent/go/current/supported-tech.html) -* [Set up](https://www.elastic.co/guide/en/apm/agent/go/current/getting-started.html) -* [Configuration reference](https://www.elastic.co/guide/en/apm/agent/go/current/configuration.html) -* [API reference](https://www.elastic.co/guide/en/apm/agent/go/current/api.html) +* [Supported technologies](asciidocalypse://docs/apm-agent-go/docs/reference/ingestion-tools/apm-agent-go/supported-technologies.md) +* [Set up](asciidocalypse://docs/apm-agent-go/docs/reference/ingestion-tools/apm-agent-go/set-up-apm-go-agent.md) +* [Configuration reference](asciidocalypse://docs/apm-agent-go/docs/reference/ingestion-tools/apm-agent-go/configuration.md) +* [API reference](asciidocalypse://docs/apm-agent-go/docs/reference/ingestion-tools/apm-agent-go/api-documentation.md) ::::{important} Not all APM agent configuration options are compatible with Elastic Cloud serverless. @@ -168,12 +168,12 @@ The Agent automatically registers callback methods for built-in Diagnostic Sourc If you’re ready to give Elastic APM a try, see [Get started with traces and APM](../../../solutions/observability/apps/get-started-with-apm.md). -See the [.NET agent reference](https://www.elastic.co/guide/en/apm/agent/dotnet/current/intro.html) for full documentation, including: +See the [.NET agent reference](asciidocalypse://docs/apm-agent-dotnet/docs/reference/ingestion-tools/apm-agent-dotnet/index.md) for full documentation, including: -* [Supported technologies](https://www.elastic.co/guide/en/apm/agent/dotnet/current/supported-technologies.html) -* [Set up](https://www.elastic.co/guide/en/apm/agent/dotnet/current/setup.html) -* [Configuration reference](https://www.elastic.co/guide/en/apm/agent/dotnet/current/configuration.html) -* [API reference](https://www.elastic.co/guide/en/apm/agent/dotnet/current/public-api.html) +* [Supported technologies](asciidocalypse://docs/apm-agent-dotnet/docs/reference/ingestion-tools/apm-agent-dotnet/supported-technologies.md) +* [Set up](asciidocalypse://docs/apm-agent-dotnet/docs/reference/ingestion-tools/apm-agent-dotnet/set-up-apm-net-agent.md) +* [Configuration reference](asciidocalypse://docs/apm-agent-dotnet/docs/reference/ingestion-tools/apm-agent-dotnet/configuration.md) +* [API reference](asciidocalypse://docs/apm-agent-dotnet/docs/reference/ingestion-tools/apm-agent-dotnet/public-api.md) ::::{important} Not all APM agent configuration options are compatible with Elastic Cloud serverless. @@ -190,12 +190,12 @@ The Elastic APM PHP agent measures application performance and tracks errors. Th If you’re ready to give Elastic APM a try, see [Get started with traces and APM](../../../solutions/observability/apps/get-started-with-apm.md). -See the [PHP agent reference](https://www.elastic.co/guide/en/apm/agent/php/current/intro.html) for full documentation, including: +See the [PHP agent reference](asciidocalypse://docs/apm-agent-php/docs/reference/ingestion-tools/apm-agent-php/index.md) for full documentation, including: -* [Supported technologies](https://www.elastic.co/guide/en/apm/agent/php/current/supported-technologies.html) -* [Set up](https://www.elastic.co/guide/en/apm/agent/php/current/setup.html) -* [Configuration reference](https://www.elastic.co/guide/en/apm/agent/php/current/configuration.html) -* [API reference](https://www.elastic.co/guide/en/apm/agent/php/current/public-api.html) +* [Supported technologies](asciidocalypse://docs/apm-agent-php/docs/reference/ingestion-tools/apm-agent-php/supported-technologies.md) +* [Set up](asciidocalypse://docs/apm-agent-php/docs/reference/ingestion-tools/apm-agent-php/set-up-apm-php-agent.md) +* [Configuration reference](asciidocalypse://docs/apm-agent-php/docs/reference/ingestion-tools/apm-agent-php/configuration.md) +* [API reference](asciidocalypse://docs/apm-agent-php/docs/reference/ingestion-tools/apm-agent-php/public-api.md) ::::{important} Not all APM agent configuration options are compatible with Elastic Cloud serverless. diff --git a/raw-migrated-files/docs-content/serverless/observability-apm-get-started.md b/raw-migrated-files/docs-content/serverless/observability-apm-get-started.md index 6c7c4e39b..49377f9fa 100644 --- a/raw-migrated-files/docs-content/serverless/observability-apm-get-started.md +++ b/raw-migrated-files/docs-content/serverless/observability-apm-get-started.md @@ -81,14 +81,14 @@ To send APM data to Elastic, you must install an APM agent and configure it to s Instrumentation is the process of extending your application’s code to report trace data to Elastic APM. Go applications must be instrumented manually at the source code level. To instrument your applications, use one of the following approaches: - * [Built-in instrumentation modules](https://www.elastic.co/guide/en/apm/agent/go/current/builtin-modules.html). - * [Custom instrumentation](https://www.elastic.co/guide/en/apm/agent/go/current/custom-instrumentation.html) and context propagation with the Go Agent API. + * [Built-in instrumentation modules](asciidocalypse://docs/apm-agent-go/docs/reference/ingestion-tools/apm-agent-go/builtin-modules.md). + * [Custom instrumentation](asciidocalypse://docs/apm-agent-go/docs/reference/ingestion-tools/apm-agent-go/custom-instrumentation.md) and context propagation with the Go Agent API. **Learn more in the {{apm-agent}} reference** - * [Supported technologies](https://www.elastic.co/guide/en/apm/agent/go/current/supported-tech.html) - * [Advanced configuration](https://www.elastic.co/guide/en/apm/agent/go/current/configuration.html) - * [Detailed guide to instrumenting Go source code](https://www.elastic.co/guide/en/apm/agent/go/current/getting-started.html) + * [Supported technologies](asciidocalypse://docs/apm-agent-go/docs/reference/ingestion-tools/apm-agent-go/supported-technologies.md) + * [Advanced configuration](asciidocalypse://docs/apm-agent-go/docs/reference/ingestion-tools/apm-agent-go/configuration.md) + * [Detailed guide to instrumenting Go source code](asciidocalypse://docs/apm-agent-go/docs/reference/ingestion-tools/apm-agent-go/set-up-apm-go-agent.md)