From 6ab58fb5c81eaeffcad1d17d568753c56d4bd689 Mon Sep 17 00:00:00 2001 From: Nastasha Solomon <79124755+nastasha-solomon@users.noreply.github.com> Date: Mon, 16 Mar 2026 22:59:25 -0400 Subject: [PATCH 01/40] [Alerting v2][Serverless]: Docs for initial public release (#5527) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Fixes https://github.com/elastic/docs-content-internal/issues/919. First draft of v2 alerting docs. ## Generative AI disclosure 1. Did you use a generative AI (GenAI) tool to assist in creating this contribution? - [x] Yes - [ ] No Cursor + Claude --- .../cloud-on-k8s/k8s-service-mesh-istio.md | 2 +- deploy-manage/deploy/deployment-comparison.md | 2 +- .../restrictions-known-problems.md | 2 +- .../deploy/elastic-cloud/tools-apis.md | 2 +- deploy-manage/manage-connectors.md | 4 +- .../kibana-task-manager-health-monitoring.md | 2 +- .../configure-stack-monitoring-alerts.md | 2 +- .../integrations-server-page.md | 4 +- ...bana-alerting-production-considerations.md | 2 +- .../kibana-in-production-environments.md | 2 +- ...ana-task-manager-scaling-considerations.md | 2 +- .../cluster-or-deployment-auth/quickstart.md | 2 +- explore-analyze/alerting-overview.md | 57 ++++++++ explore-analyze/alerting.md | 35 ----- .../alerting/choose-an-alerting-system.md | 71 ++++++++++ .../{alerts.md => kibana-alerting-v1.md} | 9 +- .../alerting-common-issues-v1.md} | 2 +- .../alerting-getting-started-v1.md} | 8 +- .../alerting-setup-v1.md} | 0 .../alerting-troubleshooting-v1.md} | 8 +- .../create-manage-rules-v1.md} | 12 +- .../event-log-index-v1.md} | 0 .../geo-alerting-v1.md} | 2 +- .../maintenance-windows-v1.md} | 2 +- .../notifications-domain-allowlist-v1.md} | 0 .../rule-action-variables-v1.md} | 0 .../rule-type-es-query-v1.md} | 0 .../rule-type-index-threshold-v1.md} | 2 +- .../rule-types-v1.md} | 10 +- .../testing-connectors-v1.md} | 0 .../view-alerts-v1.md} | 4 +- .../alerting/kibana-alerting-v2.md | 80 +++++++++++ .../alert-event-field-reference.md | 35 +++++ .../kibana-alerting-v2/author-rules.md | 67 +++++++++ .../author-rules/create-rules-discover.md | 40 ++++++ .../author-rules/create-rules-ui.md | 66 +++++++++ .../author-rules/create-rules-yaml.md | 94 +++++++++++++ .../author-rules/production-considerations.md | 15 ++ .../author-rules/rule-settings.md | 37 +++++ .../activation-and-recovery-thresholds.md | 41 ++++++ .../author-rules/rule-settings/grouping.md | 24 ++++ .../rule-settings/no-data-handling.md | 21 +++ .../rule-settings/notification-policies.md | 18 +++ .../create-manage-notification-policies.md | 20 +++ ...how-notification-policies-are-evaluated.md | 15 ++ .../rule-settings/schedule-and-lookback.md | 23 ++++ .../author-rules/rule-settings/workflows.md | 13 ++ .../author-rules/rule-templates.md | 14 ++ .../author-rules/rule-types.md | 129 ++++++++++++++++++ .../author-rules/rules-on-alerts.md | 13 ++ .../author-rules/set-rule-data-sources.md | 13 ++ .../kibana-alerting-v2/before-you-begin.md | 41 ++++++ .../before-you-begin/alerting-privileges.md | 54 ++++++++ .../before-you-begin/set-up.md | 44 ++++++ .../kibana-alerting-v2/manage-alerts.md | 13 ++ .../manage-alerts/explore-alerts-discover.md | 13 ++ .../manage-alerts/investigate-respond.md | 13 ++ .../investigate-respond/alert-actions.md | 13 ++ .../alert-episode-details.md | 13 ++ .../manage-alerts/view-alerts.md | 13 ++ .../kibana-alerting-v2/manage-rules.md | 13 ++ .../manage-rules/snooze-disable-rules.md | 13 ++ .../manage-rules/view-manage-rules.md | 13 ++ .../kibana-alerting-v2/reduce-noise.md | 13 ++ .../reduce-noise/activation-thresholds.md | 13 ++ .../reduce-noise/deactivate-alerts.md | 13 ++ .../reduce-noise/grouping.md | 13 ++ .../reduce-noise/maintenance-windows.md | 13 ++ .../reduce-noise/matcher.md | 13 ++ .../reduce-noise/no-data-handling.md | 15 ++ .../reduce-noise/recovery-thresholds.md | 13 ++ .../reduce-noise/rules-on-alerts.md | 15 ++ .../reduce-noise/snooze-or-silence.md | 13 ++ .../reduce-noise/throttle.md | 13 ++ explore-analyze/alerting/watcher.md | 2 +- .../alerting/watcher/enable-watcher.md | 4 +- explore-analyze/cases/create-cases.md | 2 +- .../discover/discover-get-started.md | 4 +- explore-analyze/geospatial-analysis.md | 2 +- ...bana-data-exploration-learning-tutorial.md | 2 +- .../ml-configuring-alerts.md | 4 +- .../query-filter/languages/esql-kibana.md | 2 +- .../automating-report-generation.md | 4 +- explore-analyze/toc.yml | 91 +++++++++--- .../transforms/transform-alerts.md | 6 +- .../visualize/_snippets/emoji-table-esql.md | 2 +- get-started/evaluate-elastic.md | 2 +- get-started/the-stack.md | 2 +- .../data-streams/failure-store-recipes.md | 2 +- redirects.yml | 55 +++++--- reference/fleet/alerting-rule-templates.md | 2 +- reference/fleet/monitor-elastic-agent.md | 2 +- reference/glossary/index.md | 4 +- .../apm/create-apm-rules-alerts.md | 6 +- .../create-a-degraded-docs-rule.md | 2 +- .../create-a-failed-docs-rule.md | 2 +- .../create-an-anomaly-detection-rule.md | 2 +- .../create-an-apm-anomaly-rule.md | 2 +- .../create-an-elasticsearch-query-rule.md | 2 +- .../create-an-error-count-threshold-rule.md | 2 +- .../create-an-inventory-rule.md | 2 +- .../create-an-slo-burn-rate-rule.md | 2 +- .../create-custom-threshold-rule.md | 2 +- ...-failed-transaction-rate-threshold-rule.md | 2 +- .../create-latency-threshold-rule.md | 2 +- .../create-log-threshold-rule.md | 2 +- .../create-manage-rules.md | 2 +- .../create-metric-threshold-rule.md | 2 +- .../create-monitor-status-rule.md | 2 +- .../create-tls-certificate-rule.md | 4 +- .../incident-management/view-alerts.md | 12 +- solutions/observability/synthetics/cli.md | 2 +- .../configure-lightweight-monitors.md | 2 +- .../synthetics/configure-projects.md | 2 +- .../detect-and-alert/common-rule-settings.md | 2 +- .../cross-cluster-search-detection-rules.md | 2 +- .../manage-detection-alerts.md | 2 +- .../manage-detection-rules.md | 2 +- .../reduce-noise-and-false-positives.md | 2 +- ...logsdb-index-mode-with-elastic-security.md | 2 +- .../elasticsearch/mapping-explosion.md | 2 +- .../elasticsearch/task-queue-backlog.md | 2 +- troubleshoot/kibana/alerts.md | 12 +- troubleshoot/kibana/task-manager.md | 2 +- 124 files changed, 1530 insertions(+), 183 deletions(-) create mode 100644 explore-analyze/alerting-overview.md delete mode 100644 explore-analyze/alerting.md create mode 100644 explore-analyze/alerting/choose-an-alerting-system.md rename explore-analyze/alerting/{alerts.md => kibana-alerting-v1.md} (90%) rename explore-analyze/alerting/{alerts/alerting-common-issues.md => kibana-alerting-v1/alerting-common-issues-v1.md} (98%) rename explore-analyze/alerting/{alerts/alerting-getting-started.md => kibana-alerting-v1/alerting-getting-started-v1.md} (93%) rename explore-analyze/alerting/{alerts/alerting-setup.md => kibana-alerting-v1/alerting-setup-v1.md} (100%) rename explore-analyze/alerting/{alerts/alerting-troubleshooting.md => kibana-alerting-v1/alerting-troubleshooting-v1.md} (98%) rename explore-analyze/alerting/{alerts/create-manage-rules.md => kibana-alerting-v1/create-manage-rules-v1.md} (96%) rename explore-analyze/alerting/{alerts/event-log-index.md => kibana-alerting-v1/event-log-index-v1.md} (100%) rename explore-analyze/alerting/{alerts/geo-alerting.md => kibana-alerting-v1/geo-alerting-v1.md} (99%) rename explore-analyze/alerting/{alerts/maintenance-windows.md => kibana-alerting-v1/maintenance-windows-v1.md} (94%) rename explore-analyze/alerting/{alerts/notifications-domain-allowlist.md => kibana-alerting-v1/notifications-domain-allowlist-v1.md} (100%) rename explore-analyze/alerting/{alerts/rule-action-variables.md => kibana-alerting-v1/rule-action-variables-v1.md} (100%) rename explore-analyze/alerting/{alerts/rule-type-es-query.md => kibana-alerting-v1/rule-type-es-query-v1.md} (100%) rename explore-analyze/alerting/{alerts/rule-type-index-threshold.md => kibana-alerting-v1/rule-type-index-threshold-v1.md} (99%) rename explore-analyze/alerting/{alerts/rule-types.md => kibana-alerting-v1/rule-types-v1.md} (57%) rename explore-analyze/alerting/{alerts/testing-connectors.md => kibana-alerting-v1/testing-connectors-v1.md} (100%) rename explore-analyze/alerting/{alerts/view-alerts.md => kibana-alerting-v1/view-alerts-v1.md} (99%) create mode 100644 explore-analyze/alerting/kibana-alerting-v2.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-yaml.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/production-considerations.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/grouping.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/no-data-handling.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-templates.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-types.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rules-on-alerts.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/set-rule-data-sources.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/manage-alerts.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/manage-alerts/view-alerts.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/manage-rules.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/manage-rules/snooze-disable-rules.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/reduce-noise/activation-thresholds.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/reduce-noise/no-data-handling.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/reduce-noise/recovery-thresholds.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/reduce-noise/rules-on-alerts.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/reduce-noise/snooze-or-silence.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/reduce-noise/throttle.md 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 11bf6b42b5..9dbe2bfd81 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 @@ -15,7 +15,7 @@ The instructions in this section describe how to connect the operator and manage These instructions have been tested with Istio 1.24.3. Older or newer versions of Istio might require additional configuration steps not documented here. ::::{warning} -Some {{stack}} features such as [{{kib}} alerting and actions](/explore-analyze/alerting.md) rely on the {{es}} 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 {{es}} resource and enable `PERMISSIVE` mode for the {{es}} service through a `DestinationRule` or `PeerAuthentication` resource. Strict mTLS mode is currently not compatible with {{stack}} features requiring TLS to be enabled for the {{es}} HTTP layer. +Some {{stack}} features such as [{{kib}} alerting and actions](/explore-analyze/alerting-overview.md) rely on the {{es}} 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 {{es}} resource and enable `PERMISSIVE` mode for the {{es}} service through a `DestinationRule` or `PeerAuthentication` resource. Strict mTLS mode is currently not compatible with {{stack}} features requiring TLS to be enabled for the {{es}} HTTP layer. :::: diff --git a/deploy-manage/deploy/deployment-comparison.md b/deploy-manage/deploy/deployment-comparison.md index 433bbecb31..69d5e8db67 100644 --- a/deploy-manage/deploy/deployment-comparison.md +++ b/deploy-manage/deploy/deployment-comparison.md @@ -41,7 +41,7 @@ For more details about feature availability in {{serverless-short}}, refer to [] | Feature/capability | Fully self-managed, ECE, ECK | ECH | {{serverless-short}} | |-------------------|-------------------------------|---------|----------------------| | [Deployment health monitoring](/deploy-manage/monitor.md) | AutoOps or monitoring cluster | AutoOps or monitoring cluster | Managed by Elastic | -| [Alerting](/explore-analyze/alerting.md) | Watcher or {{kib}} alerts | Watcher or {{kib}} alerts | Alerts ([why?](/explore-analyze/alerting.md#watcher)) | +| [Alerting](/explore-analyze/alerting-overview.md) | Watcher or {{kib}} alerts | Watcher or {{kib}} alerts | Alerts ([why?](/explore-analyze/alerting-overview.md#watcher)) | ## Data lifecycle diff --git a/deploy-manage/deploy/elastic-cloud/restrictions-known-problems.md b/deploy-manage/deploy/elastic-cloud/restrictions-known-problems.md index e843cd2833..8e04b8db46 100644 --- a/deploy-manage/deploy/elastic-cloud/restrictions-known-problems.md +++ b/deploy-manage/deploy/elastic-cloud/restrictions-known-problems.md @@ -110,7 +110,7 @@ $$$ec-restrictions-network-security-kibana-sso$$$ ## {{kib}} [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 {{kib}} in parallel to {{ecloud}}’s {{kib}} instances may cause errors, for example [`Unable to decrypt attribute`](../../../explore-analyze/alerting/alerts/alerting-common-issues.md#rule-cannot-decrypt-api-key), due to a mismatched [`xpack.encryptedSavedObjects.encryptionKey`](kibana://reference/configuration-reference/security-settings.md#security-encrypted-saved-objects-settings) as {{ecloud}} 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 {{kib}} in parallel to {{ecloud}}’s {{kib}} instances may cause errors, for example [`Unable to decrypt attribute`](../../../explore-analyze/alerting/kibana-alerting-v1/alerting-common-issues-v1.md#rule-cannot-decrypt-api-key), due to a mismatched [`xpack.encryptedSavedObjects.encryptionKey`](kibana://reference/configuration-reference/security-settings.md#security-encrypted-saved-objects-settings) as {{ecloud}} 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. * Workflows using the `elasticsearch.bulk` step might mishandle bulk operations in Elastic Cloud Hosted. Bulk action metadata (such as `index`, `create`, `update`, or `delete`) can be interpreted as document data, which might cause unexpected behavior for bulk operations beyond basic indexing. The workaround is to use a generic Elasticsearch request action in the workflow to call the Bulk API directly instead of using the `elasticsearch.bulk` step. For more information, refer to [Generic request actions](https://www.elastic.co/docs/explore-analyze/workflows/steps/elasticsearch#generic-request-actions). This issue is fixed in Serverless deployments. diff --git a/deploy-manage/deploy/elastic-cloud/tools-apis.md b/deploy-manage/deploy/elastic-cloud/tools-apis.md index 780afda136..f03fc876a6 100644 --- a/deploy-manage/deploy/elastic-cloud/tools-apis.md +++ b/deploy-manage/deploy/elastic-cloud/tools-apis.md @@ -101,7 +101,7 @@ serverless: unavailable ## Elastic Cloud email service -{{ecloud}} provides a built-in email service used by the preconfigured [email connector](kibana://reference/connectors-kibana/email-action-type.md), available in both {{ech}} deployments and {{serverless-full}} projects. This service can be used to send [alert](/explore-analyze/alerting/alerts.md) notifications and is also supported in {{ech}} by [Watcher](/explore-analyze/alerting/watcher/enable-watcher.md). +{{ecloud}} provides a built-in email service used by the preconfigured [email connector](kibana://reference/connectors-kibana/email-action-type.md), available in both {{ech}} deployments and {{serverless-full}} projects. This service can be used to send [alert](/explore-analyze/alerting/kibana-alerting-v1.md) notifications and is also supported in {{ech}} by [Watcher](/explore-analyze/alerting/watcher/enable-watcher.md). ### Email service limits diff --git a/deploy-manage/manage-connectors.md b/deploy-manage/manage-connectors.md index ac55854511..d9a0160f00 100644 --- a/deploy-manage/manage-connectors.md +++ b/deploy-manage/manage-connectors.md @@ -24,7 +24,7 @@ You can find the **{{connectors-ui}}** management page in the navigation menu or ## 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/alerting/alerts/alerting-setup.md#alerting-security). +Access to connectors is granted based on your privileges to alerting-enabled features. For more information, go to [Security](../explore-analyze/alerting/kibana-alerting-v1/alerting-setup-v1.md#alerting-security). ## Connector networking configuration [_connector_networking_configuration] @@ -92,6 +92,6 @@ If a connector is missing sensitive information after the import, a **Fix** butt ## Monitoring connectors [monitoring-connectors] -You can query the [Event log index](/explore-analyze/alerting/alerts/event-log-index.md) to gather information on connector successes and failures. +You can query the [Event log index](/explore-analyze/alerting/kibana-alerting-v1/event-log-index-v1.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/deploy-manage/monitor/kibana-task-manager-health-monitoring.md b/deploy-manage/monitor/kibana-task-manager-health-monitoring.md index 3a4956dead..c2c16dab58 100644 --- a/deploy-manage/monitor/kibana-task-manager-health-monitoring.md +++ b/deploy-manage/monitor/kibana-task-manager-health-monitoring.md @@ -114,7 +114,7 @@ The Runtime `status` indicates whether task executions have exceeded any of the ::::{important} Some tasks (such as [connectors](../manage-connectors.md)) will incorrectly report their status as successful even if the task failed. The runtime and workload block will return data about success and failures and will not take this into consideration. -To get a better sense of action failures, refer to the [Event log index](../../explore-analyze/alerting/alerts/event-log-index.md) for more accurate context into failures and successes. +To get a better sense of action failures, refer to the [Event log index](../../explore-analyze/alerting/kibana-alerting-v1/event-log-index-v1.md) for more accurate context into failures and successes. :::: The Capacity Estimation `status` indicates the sufficiency of the observed capacity. An `OK` status means capacity is sufficient. A `Warning` status means that capacity is sufficient for the scheduled recurring tasks, but non-recurring tasks often cause the cluster to exceed capacity. An `Error` status means that there is insufficient capacity across all types of tasks. 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 9e71ff431b..48607bf990 100644 --- a/deploy-manage/monitor/monitoring-data/configure-stack-monitoring-alerts.md +++ b/deploy-manage/monitor/monitoring-data/configure-stack-monitoring-alerts.md @@ -15,7 +15,7 @@ products: # Stack monitoring alerts [kibana-alerts] -The {{stack}} {{monitor-features}} provide [Alerting rules](../../../explore-analyze/alerting/alerts.md) out-of-the box to notify you of potential issues in the {{stack}}. These rules are preconfigured based on the best practices recommended by Elastic. However, you can tailor them to meet your specific needs. +The {{stack}} {{monitor-features}} provide [Alerting rules](../../../explore-analyze/alerting/kibana-alerting-v1.md) out-of-the box to notify you of potential issues in the {{stack}}. These rules are preconfigured based on the best practices recommended by Elastic. However, you can tailor them to meet your specific needs. :::{image} /deploy-manage/images/kibana-monitoring-kibana-alerting-notification.png :alt: {{kib}} alerting notifications in {{stack-monitor-app}} diff --git a/deploy-manage/monitor/monitoring-data/integrations-server-page.md b/deploy-manage/monitor/monitoring-data/integrations-server-page.md index d6fc0b2c28..a62f8fdf4d 100644 --- a/deploy-manage/monitor/monitoring-data/integrations-server-page.md +++ b/deploy-manage/monitor/monitoring-data/integrations-server-page.md @@ -29,7 +29,7 @@ products: 2. Adjust the time period for the visualizations as needed. -3. From this page you can also [create alerts](/explore-analyze/alerting/alerts/create-manage-rules.md) to be triggered when the {{integrations-server}} metrics meet a defined set of conditions. +3. From this page you can also [create alerts](/explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md) to be triggered when the {{integrations-server}} metrics meet a defined set of conditions. **To view metrics for a specific {{integrations-server}} instance:** @@ -41,4 +41,4 @@ products: 1. Adjust the time period for the visualizations as needed. -1. As with the **APM server overview** page, you can also [create alerts](/explore-analyze/alerting/alerts/create-manage-rules.md) to be triggered when the instance metrics meet a defined set of conditions. +1. As with the **APM server overview** page, you can also [create alerts](/explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md) to be triggered when the instance metrics meet a defined set of conditions. diff --git a/deploy-manage/production-guidance/kibana-alerting-production-considerations.md b/deploy-manage/production-guidance/kibana-alerting-production-considerations.md index 23da104fc0..4a775fdba2 100644 --- a/deploy-manage/production-guidance/kibana-alerting-production-considerations.md +++ b/deploy-manage/production-guidance/kibana-alerting-production-considerations.md @@ -33,7 +33,7 @@ Rule and action tasks can run late or at an inconsistent schedule. This is typic You can address such issues by tweaking the [Task Manager settings](kibana://reference/configuration-reference/task-manager-settings.md) or scaling the deployment to better suit your use case. -For detailed guidance, see [Alerting Troubleshooting](../../explore-analyze/alerting/alerts/alerting-troubleshooting.md). +For detailed guidance, see [Alerting Troubleshooting](../../explore-analyze/alerting/kibana-alerting-v1/alerting-troubleshooting-v1.md). :::: diff --git a/deploy-manage/production-guidance/kibana-in-production-environments.md b/deploy-manage/production-guidance/kibana-in-production-environments.md index 3d38e28ff5..23b656f63c 100644 --- a/deploy-manage/production-guidance/kibana-in-production-environments.md +++ b/deploy-manage/production-guidance/kibana-in-production-environments.md @@ -19,7 +19,7 @@ How you deploy {{kib}} largely depends on your use case. If you are the only use ## Scalability -With the introduction of new capabilities such as [{{kib}} Alerting](/explore-analyze/alerting.md) and the [Detection Rules](/solutions/security/detect-and-alert.md) engine, critical components for [Observability](/solutions/observability.md) and [Security](/solutions/security.md) solutions, the scalability factors have evolved significantly. +With the introduction of new capabilities such as [{{kib}} Alerting](/explore-analyze/alerting-overview.md) and the [Detection Rules](/solutions/security/detect-and-alert.md) engine, critical components for [Observability](/solutions/observability.md) and [Security](/solutions/security.md) solutions, the scalability factors have evolved significantly. Now, Kibana’s resource requirements extend beyond user activity. The system must also handle workloads generated by automated processes, such as scheduled alerts, background detection rules, and other periodic tasks. These operations are managed by [{{kib}} Task Manager](./kibana-task-manager-scaling-considerations.md), which is responsible for scheduling, executing, and coordinating all background tasks. 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 79c097d696..1ba2763023 100644 --- a/deploy-manage/production-guidance/kibana-task-manager-scaling-considerations.md +++ b/deploy-manage/production-guidance/kibana-task-manager-scaling-considerations.md @@ -14,7 +14,7 @@ products: # {{kib}} task manager: performance and scaling guide [task-manager-production-considerations] -{{kib}} Task Manager is leveraged by features such as [alerting](/explore-analyze/alerting/alerts.md), [actions](/explore-analyze/alerting/alerts.md#rules-actions), and [reporting](/explore-analyze/report-and-share.md) to run mission critical work as persistent background tasks. These background tasks distribute work across multiple {{kib}} instances. This has three major benefits: +{{kib}} Task Manager is leveraged by features such as [alerting](/explore-analyze/alerting/kibana-alerting-v1.md), [actions](/explore-analyze/alerting/kibana-alerting-v1.md#rules-actions), and [reporting](/explore-analyze/report-and-share.md) to run mission critical work as persistent background tasks. These background tasks distribute work across multiple {{kib}} instances. This has three major benefits: - **Persistence**: All task state and scheduling is stored in {{es}}, so if you restart {{kib}}, tasks will pick up where they left off. - **Scaling**: Multiple {{kib}} instances can read from and update the same task queue in {{es}}, allowing the work load to be distributed across instances. If a {{kib}} instance no longer has capacity to run tasks, you can increase capacity by adding additional {{kib}} instances. diff --git a/deploy-manage/users-roles/cluster-or-deployment-auth/quickstart.md b/deploy-manage/users-roles/cluster-or-deployment-auth/quickstart.md index 131c05a7da..db9be3b164 100644 --- a/deploy-manage/users-roles/cluster-or-deployment-auth/quickstart.md +++ b/deploy-manage/users-roles/cluster-or-deployment-auth/quickstart.md @@ -20,7 +20,7 @@ This guide introduces you to three basic user and access management features: [s Do you have multiple teams using {{kib}}? Do you want a “playground” to experiment with new visualizations or rules? If so, then [{{kib}} Spaces](../../manage-spaces.md) can help. -Think of a space as another instance of {{kib}}. A space allows you to organize your [dashboards](../../../explore-analyze/dashboards.md), [rules](../../../explore-analyze/alerting/alerts.md), [machine learning jobs](../../../explore-analyze/machine-learning/machine-learning-in-kibana.md), and much more into their own categories. For example, you might have a **Marketing** space for your marketers to track the results of their campaigns, and an **Engineering** space for your developers to [monitor application performance](/solutions/observability/apm/index.md). +Think of a space as another instance of {{kib}}. A space allows you to organize your [dashboards](../../../explore-analyze/dashboards.md), [rules](../../../explore-analyze/alerting/kibana-alerting-v1.md), [machine learning jobs](../../../explore-analyze/machine-learning/machine-learning-in-kibana.md), and much more into their own categories. For example, you might have a **Marketing** space for your marketers to track the results of their campaigns, and an **Engineering** space for your developers to [monitor application performance](/solutions/observability/apm/index.md). The assets you create in one space are isolated from other spaces, so when you enter a space, you only see the assets that belong to that space. diff --git a/explore-analyze/alerting-overview.md b/explore-analyze/alerting-overview.md new file mode 100644 index 0000000000..728afcb708 --- /dev/null +++ b/explore-analyze/alerting-overview.md @@ -0,0 +1,57 @@ +--- +mapped_pages: + - https://www.elastic.co/guide/en/kibana/current/alerting-getting-started.html#alerting-concepts-differences + - https://www.elastic.co/guide/en/serverless/current/project-settings-alerts.html +applies_to: + stack: ga + serverless: ga +products: + - id: kibana + - id: cloud-serverless +navigation_title: Alerting +description: Set up alerting in Elastic to monitor your data and get notified when conditions are met — from threshold-based rules to geofencing and anomaly detection. +--- + +# Alerting [alerting-overview] + +Elastic alerting lets you monitor your data and take action when something needs attention — whether that's a metric crossing a threshold, an asset leaving a geographic boundary, or an anomaly in your time series data. You define the conditions, choose how you want to be notified, and Elastic handles the rest. + +Elastic provides three alerting systems: [Kibana alerting v1](alerting/kibana-alerting-v1.md), [Kibana alerting v2](alerting/kibana-alerting-v2.md), and [Watcher](alerting/watcher.md). + +## Kibana alerting v1 + +```{applies_to} +stack: ga +serverless: ga +``` + +Kibana alerting v1 provides a set of built-in rule types integrated with applications like APM, Metrics, Security, and Uptime. Rules evaluate conditions on a defined schedule and trigger actions through connectors — email, Slack, webhooks, PagerDuty, and more. Prepackaged rule types simplify setup for common use cases. + +Refer to [Kibana alerting v1](alerting/kibana-alerting-v1.md) to get started. + +## Kibana alerting v2 + +```{applies_to} +stack: preview 9.4 +serverless: preview +``` + +Kibana alerting v2 is a redesigned alerting framework built on ES|QL. You write the query that defines what to detect and what data each alert carries. V2 introduces notification policies for centralized notification control, per-series snooze, alert lifecycle tracking with episodes, and the ability to write rules on alerts for correlation and escalation. + +Kibana alerting v2 runs alongside Kibana alerting v1. There is no forced migration. + +Refer to [Kibana alerting v2](alerting/kibana-alerting-v2.md) to get started. + +## Watcher + +```{applies_to} +serverless: unavailable +``` + +Watcher provides alerting for custom use cases and complex alerting logic. It supports advanced scripting with Painless to define complex conditions and transformations. + +:::{tip} +For most use cases, Kibana alerting v1 or Kibana alerting v2 is recommended over Watcher. They offer richer integrations, prepackaged rule types, and a consistent management interface. Watcher is not available in {{serverless-full}}. +::: + +Refer to [Watcher](alerting/watcher.md) to get started. diff --git a/explore-analyze/alerting.md b/explore-analyze/alerting.md deleted file mode 100644 index b0aa40b604..0000000000 --- a/explore-analyze/alerting.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -mapped_pages: - - https://www.elastic.co/guide/en/kibana/current/alerting-getting-started.html#alerting-concepts-differences - - https://www.elastic.co/guide/en/serverless/current/project-settings-alerts.html -applies_to: - stack: ga - serverless: ga -products: - - id: kibana - - id: cloud-serverless ---- - -# Alerting - -Alerting tools in Elasticsearch and Kibana provide functionality to monitor data and notify you about significant changes or events in real time. This page provides an overview of how the key components work. - -## Alerts - -Alerts are notifications generated when specific conditions are met. These notifications are sent to you through channels that you previously set such as email, Slack, webhooks, PagerDuty, and so on. - -Alerts are created based on rules, which define the criteria for triggering them. Rules monitor the data indexed in Elasticsearch and evaluate conditions on a defined schedule to identify matches. For example, a threshold rule can generate an alert when a value crosses a specific threshold, while a machine learning rule activates an alert when an anomaly detection job identifies an anomaly. - -## Watcher -```{applies_to} -serverless: unavailable -``` - -You can use Watcher for alerting and monitoring specific conditions in your data. It enables you to define rules and take automated actions when certain criteria are met. Watcher is a powerful alerting tool for custom use cases and more complex alerting logic. It allows advanced scripting using Painless to define complex conditions and transformations. - -:::{tip} -For most use cases, you should use Kibana Alerts instead of Watcher. Kibana Alerts allows rich integrations across use cases like APM, metrics, security, and uptime. Prepackaged rule types simplify setup and hide the details of complex, domain-specific detections, while providing a consistent interface across Kibana. - -Watcher is not available in {{serverless-full}}. -::: - diff --git a/explore-analyze/alerting/choose-an-alerting-system.md b/explore-analyze/alerting/choose-an-alerting-system.md new file mode 100644 index 0000000000..0b8378782f --- /dev/null +++ b/explore-analyze/alerting/choose-an-alerting-system.md @@ -0,0 +1,71 @@ +--- +applies_to: + stack: ga + serverless: ga +products: + - id: kibana + - id: cloud-serverless +description: Compare Kibana alerting v1, Kibana alerting v2, and Watcher to decide which Elastic alerting system fits your monitoring needs. +--- + +# Choose an alerting system [choose-an-alerting-system] + +If you already know which alerting system you are using, go directly to [Kibana alerting v1](kibana-alerting-v1.md), [Kibana alerting v2](kibana-alerting-v2.md), or [Watcher](watcher.md). This page is for readers who are not sure which system fits their needs. + +## Choose by use case + +| I want to... | Recommended system | +|---|---| +| Monitor metrics, logs, or uptime using prepackaged rules with minimal setup | [Kibana alerting v1](kibana-alerting-v1.md) | +| Use solution-specific rules for Security, Observability, APM, or Maps | [Kibana alerting v1](kibana-alerting-v1.md) | +| Write my own detection logic in ES\|QL and control exactly what data each alert carries | [Kibana alerting v2](kibana-alerting-v2.md) | +| Query alert history in Discover or build dashboards from alert data | [Kibana alerting v2](kibana-alerting-v2.md) | +| Manage notification routing, grouping, and throttling separately from rule definitions | [Kibana alerting v2](kibana-alerting-v2.md) | +| Correlate across multiple rules and reduce noise with rules on alerts | [Kibana alerting v2](kibana-alerting-v2.md) | +| Suppress notifications per host or service without silencing an entire rule | [Kibana alerting v2](kibana-alerting-v2.md) | +| Define complex alerting logic with Painless scripting or chained inputs | [Watcher](watcher.md) | + +## Compare systems + +| | Kibana alerting v1 | Kibana alerting v2 | Watcher | +|---|---|---|---| +| **Best for** | Teams using built-in rule types with form-based setup | Teams that need full control over detection and notification routing | Custom alerting logic requiring scripting | +| **Rule definition** | Select a rule type and fill in parameters | Write an ES\|QL query | Write a JSON watch definition | +| **Alert data** | Updated in place; limited queryability | Immutable, append-only events queryable with ES\|QL in Discover | Watch history index | +| **Notifications** | Configured per action on each rule | Centralized notification policies, reusable across rules | Action-level throttling and conditions | +| **Noise reduction** | Snooze per rule, maintenance windows | Per-series snooze, per-episode acknowledgment, activation thresholds, matcher-based routing, rules on alerts | Action conditions and throttling | +| **Availability** | All deployments | {{stack}} 9.4+ | Self-managed and {{ech}} only | + +## Kibana alerting v1 + +Kibana alerting v1 provides prepackaged rule types integrated with Elastic solutions. Rules are configured through forms — no query language is required. Actions are triggered through built-in connectors such as email, Slack, PagerDuty, and webhooks. + +Choose Kibana alerting v1 if you want broad rule type coverage out of the box and are working within Observability, Security, APM, Uptime, or Maps. + +[Get started with Kibana alerting v1 →](kibana-alerting-v1.md) + +## Kibana alerting v2 + +Kibana alerting v2 is built on ES|QL. You write the query that defines what to detect and what data each alert carries. Notification policies control routing, grouping, and throttling independently of rules, and alert events are stored as queryable data in standard {{es}} indices. + +Choose Kibana alerting v2 if you need flexible detection logic, queryable alert history, centralized notification management, or cross-rule correlation. + +[Get started with Kibana alerting v2 →](kibana-alerting-v2.md) + +## Watcher + +Watcher supports custom alerting logic with Painless scripting, chained inputs, and direct {{es}} API integration. It is the most flexible system for non-standard use cases but does not integrate with the {{kib}} alerting management UI. + +Watcher is not available in {{serverless-full}}. + +[Get started with Watcher →](watcher.md) + +## Using multiple systems together + +The alerting systems are independent and can run side by side: + +- **Kibana alerting v1 and Kibana alerting v2** share a single **Rules** navigation entry with separate tabs. Each system writes to its own indices. +- **Watcher** operates through its own API and management UI. +- **Kibana alerting v2 rules on alerts** can query alert data produced by any system, enabling cross-system correlation. + +There is no forced migration. You can adopt a new system incrementally while your existing rules continue running. diff --git a/explore-analyze/alerting/alerts.md b/explore-analyze/alerting/kibana-alerting-v1.md similarity index 90% rename from explore-analyze/alerting/alerts.md rename to explore-analyze/alerting/kibana-alerting-v1.md index ccd9c103f0..736907a044 100644 --- a/explore-analyze/alerting/alerts.md +++ b/explore-analyze/alerting/kibana-alerting-v1.md @@ -10,9 +10,10 @@ products: - id: kibana - id: cloud-serverless - id: cloud-hosted +description: "Overview of Kibana alerting v1 — define rules with conditions, schedules, and actions to detect issues and send notifications through built-in connectors." --- -# Alerts +# Kibana alerting v1 [alerting-overview-v1] ## {{rules-ui}} [rules] @@ -83,7 +84,7 @@ If you are not using alert summaries, actions are triggered per alert and a rule * Minute 2: X123 and Y456 > 0.9. *Two emails* are sent, one for X123 and one for Y456. * Minute 3: X123, Y456, Z789 > 0.9. *Three emails* are sent, one for each of X123, Y456, Z789. -In this example, three emails are sent for server X123 in the span of 3 minutes for the same rule. Often, it’s desirable to suppress these re-notifications. If you set the action frequency to `On custom action intervals` with an interval of 5 minutes, you reduce noise by getting emails only every 5 minutes for servers that continue to exceed the threshold: +In this example, three emails are sent for server X123 in the span of 3 minutes for the same rule. Often, it's desirable to suppress these re-notifications. If you set the action frequency to `On custom action intervals` with an interval of 5 minutes, you reduce noise by getting emails only every 5 minutes for servers that continue to exceed the threshold: * Minute 1: server X123 > 0.9. *One email* will be sent for server X123. * Minute 2: X123 and Y456 > 0.9. *One email* will be sent for Y456. @@ -102,7 +103,7 @@ You can pass rule values to an action at the time a condition is detected. To vi :screenshot: ::: -For more information about common action variables, refer to [Rule actions variables](alerts/rule-action-variables.md) +For more information about common action variables, refer to [Rule action variables](kibana-alerting-v1/rule-action-variables-v1.md) ### Alerts [rules-alerts] @@ -119,7 +120,7 @@ A rule consists of conditions, actions, and a schedule. When conditions are met, :screenshot: ::: -1. Any time a rule’s conditions are met, an alert is created. This example checks for servers with average CPU > 0.9. Three servers meet the condition, so three alerts are created. +1. Any time a rule's conditions are met, an alert is created. This example checks for servers with average CPU > 0.9. Three servers meet the condition, so three alerts are created. 2. Alerts create actions according to the action frequency, as long as they are not muted or throttled. When actions are created, its properties are filled with actual values. In this example, three actions are created when the threshold is met, and the template string `{{server}}` is replaced with the appropriate server name for each alert. 3. {{kib}} runs the actions, sending notifications by using a third party integration like an email service. 4. If the third party integration has connection parameters or credentials, {{kib}} fetches these from the appropriate connector. diff --git a/explore-analyze/alerting/alerts/alerting-common-issues.md b/explore-analyze/alerting/kibana-alerting-v1/alerting-common-issues-v1.md similarity index 98% rename from explore-analyze/alerting/alerts/alerting-common-issues.md rename to explore-analyze/alerting/kibana-alerting-v1/alerting-common-issues-v1.md index 95abc28c8c..2576afdef2 100644 --- a/explore-analyze/alerting/alerts/alerting-common-issues.md +++ b/explore-analyze/alerting/kibana-alerting-v1/alerting-common-issues-v1.md @@ -39,7 +39,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](kibana://reference/connectors-kibana/index-action-type.md). +Alerting tasks always begin with `alerting:`. For example, the `alerting:.index-threshold` tasks back the [index threshold stack rule](rule-type-index-threshold-v1.md). Action tasks always begin with `actions:`. For example, the `actions:.index` tasks back the [index action](kibana://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). diff --git a/explore-analyze/alerting/alerts/alerting-getting-started.md b/explore-analyze/alerting/kibana-alerting-v1/alerting-getting-started-v1.md similarity index 93% rename from explore-analyze/alerting/alerts/alerting-getting-started.md rename to explore-analyze/alerting/kibana-alerting-v1/alerting-getting-started-v1.md index ba1b7394e7..7dcc0fa826 100644 --- a/explore-analyze/alerting/alerts/alerting-getting-started.md +++ b/explore-analyze/alerting/kibana-alerting-v1/alerting-getting-started-v1.md @@ -16,7 +16,7 @@ products: # 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**](detection-rules://index.md), [**Maps**](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](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**](detection-rules://index.md), [**Maps**](geo-alerting-v1.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](rule-types-v1.md#stack-rules) for you to use. :::{image} /explore-analyze/images/kibana-alerting-overview.png :alt: {{rules-ui}} UI @@ -31,7 +31,7 @@ Alerting works by running checks on a schedule to detect conditions defined by a ## Rules [_rules] -A rule specifies a background task that runs on the {{kib}} server to check for specific conditions. {{kib}} provides two types of rules: stack rules that are built into {{kib}} and the rules that are registered by {{kib}} apps. For more information, refer to [*Rule types*](rule-types.md). +A rule specifies a background task that runs on the {{kib}} server to check for specific conditions. {{kib}} provides two types of rules: stack rules that are built into {{kib}} and the rules that are registered by {{kib}} apps. For more information, refer to [*Rule types*](rule-types-v1.md). A rule consists of three main parts: @@ -57,9 +57,9 @@ Under the hood, {{kib}} rules detect conditions by running a JavaScript function These conditions are packaged and exposed as *rule types*. A rule type hides the underlying details of the condition, and exposes a set of parameters to control the details of the conditions to detect. -For example, an [index threshold rule type](rule-type-index-threshold.md) lets you specify the index to query, an aggregation field, and a time window, but the details of the underlying {{es}} query are hidden. +For example, an [index threshold rule type](rule-type-index-threshold-v1.md) lets you specify the index to query, an aggregation field, and a time window, but the details of the underlying {{es}} query are hidden. -See [*Rule types*](rule-types.md) for the rules provided by {{kib}} and how they express their conditions. +See [*Rule types*](rule-types-v1.md) for the rules provided by {{kib}} and how they express their conditions. ### Schedule [alerting-concepts-scheduling] diff --git a/explore-analyze/alerting/alerts/alerting-setup.md b/explore-analyze/alerting/kibana-alerting-v1/alerting-setup-v1.md similarity index 100% rename from explore-analyze/alerting/alerts/alerting-setup.md rename to explore-analyze/alerting/kibana-alerting-v1/alerting-setup-v1.md diff --git a/explore-analyze/alerting/alerts/alerting-troubleshooting.md b/explore-analyze/alerting/kibana-alerting-v1/alerting-troubleshooting-v1.md similarity index 98% rename from explore-analyze/alerting/alerts/alerting-troubleshooting.md rename to explore-analyze/alerting/kibana-alerting-v1/alerting-troubleshooting-v1.md index d626709e50..545616d8df 100644 --- a/explore-analyze/alerting/alerts/alerting-troubleshooting.md +++ b/explore-analyze/alerting/kibana-alerting-v1/alerting-troubleshooting-v1.md @@ -27,7 +27,7 @@ Some of the resources, such as saved objects and API keys, may no longer be avai The following debugging tools are available: -* {{kib}} versions 7.10 and above have a [Test connector](testing-connectors.md) UI. +* {{kib}} versions 7.10 and above have a [Test connector](testing-connectors-v1.md) UI. * {{kib}} versions 7.11 and above include improved Webhook error messages, better overall debug logging for actions and connectors, and Task Manager [diagnostics endpoints](../../../troubleshoot/kibana/task-manager.md#task-manager-diagnosing-root-cause). ## Using rules and connectors list for the current state and finding issues [alerting-managment-detail] @@ -174,9 +174,9 @@ Investigating the underlying task can help you gauge whether the problem you’r In addition to the above methods, refer to the following approaches and common issues: -* [Alerting common issues](alerting-common-issues.md) -* [Querying event log index](event-log-index.md) -* [Testing connectors using {{connectors-ui}} UI and the `kbn-action` tool](testing-connectors.md) +* [Alerting common issues](alerting-common-issues-v1.md) +* [Querying event log index](event-log-index-v1.md) +* [Testing connectors using {{connectors-ui}} UI and the `kbn-action` tool](testing-connectors-v1.md) ### Temporarily throttle all tasks [alerting-kibana-throttle] diff --git a/explore-analyze/alerting/alerts/create-manage-rules.md b/explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md similarity index 96% rename from explore-analyze/alerting/alerts/create-manage-rules.md rename to explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md index 655d18d493..c177589880 100644 --- a/explore-analyze/alerting/alerts/create-manage-rules.md +++ b/explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md @@ -11,7 +11,7 @@ products: # Create and manage alerting rules with {{kib}} [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**](detection-rules://index.md), [**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**](detection-rules://index.md), [**Maps**](geo-alerting-v1.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). @@ -24,7 +24,7 @@ You can find **Rules** in **Stack Management** > **Alerts and insights** > **Rul * Drill down to [rule details](#rule-details) * Configure rule settings -For more information on alerting concepts and the types of rules and connectors available, go to [Alerting](../alerts.md). +For more information on alerting concepts and the types of rules and connectors available, go to [Alerting](../kibana-alerting-v1.md). :::{agent-skill} :url: https://github.com/elastic/agent-skills/tree/main/skills/kibana/kibana-alerting-rules @@ -57,7 +57,7 @@ Each rule type provides its own way of defining the conditions to detect, but an All rules must have a check interval, which defines how often to evaluate the rule conditions. Checks are queued; they run as close to the defined value as capacity allows. -For details on what types of rules are available and how to configure them, refer to [*Rule types*](rule-types.md). +For details on what types of rules are available and how to configure them, refer to [*Rule types*](rule-types-v1.md). ### Alert flapping [defining-rules-flapping-details] @@ -125,7 +125,7 @@ You can pass rule values to an action at the time a condition is detected. To vi :screenshot: ::: -For more information about common action variables, refer to [*Rule action variables*](rule-action-variables.md). +For more information about common action variables, refer to [*Rule action variables*](rule-action-variables-v1.md). ## Snooze and disable rules [controlling-rules] @@ -141,7 +141,7 @@ When you snooze a rule, the rule checks continue to run on a schedule but alerts When a rule is in a snoozed state, you can cancel or change the duration of this state. -{applies_to}`stack: preview` {applies_to}`serverless: preview` To temporarily suppress notifications for rules, you can also create a [maintenance window](maintenance-windows.md). +{applies_to}`stack: preview` {applies_to}`serverless: preview` To temporarily suppress notifications for rules, you can also create a [maintenance window](maintenance-windows-v1.md). ## View rule details [rule-details] @@ -163,7 +163,7 @@ Click the rule name to access a rule details page: :screenshot: ::: -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). +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-v1.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](/explore-analyze/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`](kibana://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: diff --git a/explore-analyze/alerting/alerts/event-log-index.md b/explore-analyze/alerting/kibana-alerting-v1/event-log-index-v1.md similarity index 100% rename from explore-analyze/alerting/alerts/event-log-index.md rename to explore-analyze/alerting/kibana-alerting-v1/event-log-index-v1.md diff --git a/explore-analyze/alerting/alerts/geo-alerting.md b/explore-analyze/alerting/kibana-alerting-v1/geo-alerting-v1.md similarity index 99% rename from explore-analyze/alerting/alerts/geo-alerting.md rename to explore-analyze/alerting/kibana-alerting-v1/geo-alerting-v1.md index 51b580363b..7b90e6350c 100644 --- a/explore-analyze/alerting/alerts/geo-alerting.md +++ b/explore-analyze/alerting/kibana-alerting-v1/geo-alerting-v1.md @@ -59,7 +59,7 @@ You can pass rule values to an action to provide contextual details. To view the :screenshot: ::: -The following action variables are specific to the tracking containment rule. You can also specify [variables common to all rules](rule-action-variables.md). +The following action variables are specific to the tracking containment rule. You can also specify [variables common to all rules](rule-action-variables-v1.md). `context.containingBoundaryId` : The identifier for the boundary containing the entity. This value is not set for recovered alerts. diff --git a/explore-analyze/alerting/alerts/maintenance-windows.md b/explore-analyze/alerting/kibana-alerting-v1/maintenance-windows-v1.md similarity index 94% rename from explore-analyze/alerting/alerts/maintenance-windows.md rename to explore-analyze/alerting/kibana-alerting-v1/maintenance-windows-v1.md index f30dd360f2..947e19616c 100644 --- a/explore-analyze/alerting/alerts/maintenance-windows.md +++ b/explore-analyze/alerting/kibana-alerting-v1/maintenance-windows-v1.md @@ -67,7 +67,7 @@ If you turn on **Filter alerts**, you can use KQL to filter the alerts affected ::::{note} * {applies_to}`stack: removed 9.2` {applies_to}`serverless: removed` You can select only a single category when you turn on filters. -* Some rules are not affected by maintenance window filters because their alerts do not contain requisite data. In particular, [{{stack-monitor-app}}](../../../deploy-manage/monitor/monitoring-data/configure-stack-monitoring-alerts.md), [tracking containment](geo-alerting.md), [{{anomaly-jobs}} health](../../../explore-analyze/machine-learning/anomaly-detection/ml-configuring-alerts.md), and [transform health](../../../explore-analyze/transforms/transform-alerts.md) rules are not affected by the filters. +* Some rules are not affected by maintenance window filters because their alerts do not contain requisite data. In particular, [{{stack-monitor-app}}](../../../deploy-manage/monitor/monitoring-data/configure-stack-monitoring-alerts.md), [tracking containment](geo-alerting-v1.md), [{{anomaly-jobs}} health](../../../explore-analyze/machine-learning/anomaly-detection/ml-configuring-alerts.md), and [transform health](../../../explore-analyze/transforms/transform-alerts.md) rules are not affected by the filters. :::: diff --git a/explore-analyze/alerting/alerts/notifications-domain-allowlist.md b/explore-analyze/alerting/kibana-alerting-v1/notifications-domain-allowlist-v1.md similarity index 100% rename from explore-analyze/alerting/alerts/notifications-domain-allowlist.md rename to explore-analyze/alerting/kibana-alerting-v1/notifications-domain-allowlist-v1.md diff --git a/explore-analyze/alerting/alerts/rule-action-variables.md b/explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md similarity index 100% rename from explore-analyze/alerting/alerts/rule-action-variables.md rename to explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md diff --git a/explore-analyze/alerting/alerts/rule-type-es-query.md b/explore-analyze/alerting/kibana-alerting-v1/rule-type-es-query-v1.md similarity index 100% rename from explore-analyze/alerting/alerts/rule-type-es-query.md rename to explore-analyze/alerting/kibana-alerting-v1/rule-type-es-query-v1.md diff --git a/explore-analyze/alerting/alerts/rule-type-index-threshold.md b/explore-analyze/alerting/kibana-alerting-v1/rule-type-index-threshold-v1.md similarity index 99% rename from explore-analyze/alerting/alerts/rule-type-index-threshold.md rename to explore-analyze/alerting/kibana-alerting-v1/rule-type-index-threshold-v1.md index 859be8e5ee..388ad773df 100644 --- a/explore-analyze/alerting/alerts/rule-type-index-threshold.md +++ b/explore-analyze/alerting/kibana-alerting-v1/rule-type-index-threshold-v1.md @@ -63,7 +63,7 @@ You can further refine the conditions under which actions run by specifying that ## Add action variables [action-variables-index-threshold] -The following action variables are specific to the index threshold rule. You can also specify [variables common to all rules](rule-action-variables.md). +The following action variables are specific to the index threshold rule. You can also specify [variables common to all rules](rule-action-variables-v1.md). `context.conditions` : A description of the threshold condition. Example: `count greater than 4` diff --git a/explore-analyze/alerting/alerts/rule-types.md b/explore-analyze/alerting/kibana-alerting-v1/rule-types-v1.md similarity index 57% rename from explore-analyze/alerting/alerts/rule-types.md rename to explore-analyze/alerting/kibana-alerting-v1/rule-types-v1.md index 646c1c493e..e9d6f86b3a 100644 --- a/explore-analyze/alerting/alerts/rule-types.md +++ b/explore-analyze/alerting/kibana-alerting-v1/rule-types-v1.md @@ -10,7 +10,7 @@ products: # Rule types [rule-types] -A rule is a set of [conditions](../alerts.md#rules-conditions), [schedules](../alerts.md#rules-schedule), and [actions](../alerts.md#rules-actions ) that enable notifications. {{kib}} provides rules built into the {{stack}} and rules registered by one of the {{kib}} apps. You can create most rules types in [{{stack-manage-app}} > {{rules-ui}}](create-manage-rules.md). Security rules must be defined in the Security app. For more information, refer to the documentation about [creating a detection rule](../../../solutions/security/detect-and-alert/using-the-rule-ui.md). +A rule is a set of [conditions](../kibana-alerting-v1.md#rules-conditions), [schedules](../kibana-alerting-v1.md#rules-schedule), and [actions](../kibana-alerting-v1.md#rules-actions ) that enable notifications. {{kib}} provides rules built into the {{stack}} and rules registered by one of the {{kib}} apps. You can create most rules types in [{{stack-manage-app}} > {{rules-ui}}](create-manage-rules-v1.md). Security rules must be defined in the Security app. For more information, refer to the documentation about [creating a detection rule](../../../solutions/security/detect-and-alert/using-the-rule-ui.md). ::::{note} Some rule types are subscription features, while others are free features. For a comparison of the Elastic subscription levels, see [the subscription page](https://www.elastic.co/subscriptions). @@ -19,14 +19,14 @@ Some rule types are subscription features, while others are free features. For a ## Stack rules [stack-rules] -[Stack rules](create-manage-rules.md) are built into {{kib}}. To access the **Stack Rules** feature and create and edit rules, users require the `all` privilege. See [feature privileges](../../../deploy-manage/users-roles/cluster-or-deployment-auth/kibana-privileges.md#kibana-feature-privileges) for more information. +[Stack rules](create-manage-rules-v1.md) are built into {{kib}}. To access the **Stack Rules** feature and create and edit rules, users require the `all` privilege. See [feature privileges](../../../deploy-manage/users-roles/cluster-or-deployment-auth/kibana-privileges.md#kibana-feature-privileges) for more information. | | | | --- | --- | -| [{{es}} query](rule-type-es-query.md) | Run a user-configured {{es}} query, compare the number of matches to a configured threshold, and schedule actions to run when the threshold condition is met. | -| [Index threshold](rule-type-index-threshold.md) | Aggregate field values from documents using {{es}} queries, compare them to threshold values, and schedule actions to run when the thresholds are met. | +| [{{es}} query](rule-type-es-query-v1.md) | Run a user-configured {{es}} query, compare the number of matches to a configured threshold, and schedule actions to run when the threshold condition is met. | +| [Index threshold](rule-type-index-threshold-v1.md) | Aggregate field values from documents using {{es}} queries, compare them to threshold values, and schedule actions to run when the thresholds are met. | | [Transform rules](../../transforms/transform-alerts.md) | {applies_to}`stack: beta` {applies_to}`serverless: beta` Run scheduled checks on a {{ctransform}} to check its health. If a {{ctransform}} meets the conditions, an alert is created and the associated action is triggered. | -| [Tracking containment](geo-alerting.md) | Run an {{es}} query to determine if any documents are currently contained in any boundaries from a specified boundary index and generate alerts when a rule’s conditions are met. | +| [Tracking containment](geo-alerting-v1.md) | Run an {{es}} query to determine if any documents are currently contained in any boundaries from a specified boundary index and generate alerts when a rule’s conditions are met. | ## {{observability}} rules [observability-rules] diff --git a/explore-analyze/alerting/alerts/testing-connectors.md b/explore-analyze/alerting/kibana-alerting-v1/testing-connectors-v1.md similarity index 100% rename from explore-analyze/alerting/alerts/testing-connectors.md rename to explore-analyze/alerting/kibana-alerting-v1/testing-connectors-v1.md diff --git a/explore-analyze/alerting/alerts/view-alerts.md b/explore-analyze/alerting/kibana-alerting-v1/view-alerts-v1.md similarity index 99% rename from explore-analyze/alerting/alerts/view-alerts.md rename to explore-analyze/alerting/kibana-alerting-v1/view-alerts-v1.md index de11507f47..a7cc97847c 100644 --- a/explore-analyze/alerting/alerts/view-alerts.md +++ b/explore-analyze/alerting/kibana-alerting-v1/view-alerts-v1.md @@ -11,7 +11,7 @@ products: # View and manage alerts in {{kib}} [view-alerts] -When the conditions of a rule are met, it creates an alert. If the rule has actions, they run at the defined frequency. For example, the rule can send email notifications for each alert at a custom interval. For an introduction to the concepts of rules, alerts, and actions, refer to [Alerting](../alerts.md). +When the conditions of a rule are met, it creates an alert. If the rule has actions, they run at the defined frequency. For example, the rule can send email notifications for each alert at a custom interval. For an introduction to the concepts of rules, alerts, and actions, refer to [Alerting](../kibana-alerting-v1.md). Manage alerts from the following places: @@ -51,7 +51,7 @@ Alternatively, view those alerts in the [{{security-app}}](../../../solutions/se To get more information about a specific alert, click the action menu icon {icon}`boxes_vertical` and select **View alert details** in either **{{stack-manage-app}} > Alerts** or **{{rules-ui}}**. There you’ll see the current status of the alert, its duration, and when it was last updated. To help you determine what caused the alert, there is information such as the expected and actual threshold values and a summarized reason for the alert. -If an alert is affected by a maintenance window, the alert details include its identifier. For more information about their impact on alert notifications, refer to [Maintenance windows](maintenance-windows.md). +If an alert is affected by a maintenance window, the alert details include its identifier. For more information about their impact on alert notifications, refer to [Maintenance windows](maintenance-windows-v1.md). ## Alert statuses [alert-status] diff --git a/explore-analyze/alerting/kibana-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2.md new file mode 100644 index 0000000000..6689f2a531 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2.md @@ -0,0 +1,80 @@ +--- +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Overview of Kibana alerting v2 — an ES|QL-based alerting framework with immutable alert events, notification policies, and alert lifecycle tracking." +--- + +# Kibana alerting v2 [alerting-overview-v2] + +Kibana alerting v2 is a redesigned alerting framework built on [ES|QL](elasticsearch://reference/query-languages/esql.md). Rules evaluate source data on a configurable schedule using ES|QL queries and produce immutable alert event documents. You control exactly what data each alert carries by writing the query that computes it. + +Kibana alerting v2 runs alongside [Kibana alerting v1](/explore-analyze/alerting/kibana-alerting-v1.md). There is no forced migration. You can adopt Kibana alerting v2 at your own pace and run both systems in parallel. + +## Core concepts + +Kibana alerting v2 introduces a layered model that separates detection from notification: + +**Signals** +: Immutable documents produced each time a rule evaluates and its query returns results. Signals are the raw output of every rule, written to an append-only data stream. Use signals for exploration, dashboards, and retroactive analysis. + +**Alerts** +: Signals with lifecycle tracking. When a rule runs in alert mode, the system tracks state transitions for each alert series: `inactive` → `pending` → `active` → `recovering` → `inactive`. Alerts are the primary operational unit for triage and response. + +**Episodes** +: A full lifecycle arc of an alert, from first breach to final recovery. Each episode groups the state transitions for a single alert series and is identified by an `episode_id`. + +**Series** +: A grouped time series of signals for a given rule and grouping key. Identified by a `group_hash` computed from the rule ID and grouping field values. Series are the unit for per-group snooze and recovery detection. + +**Notification policies** +: Standalone, reusable entities that control how and when alerts reach people and systems. Policies define matching conditions, grouping, throttling, and routing to workflow destinations. One policy can apply across multiple rules. + +**Workflows** +: User-defined automated sequences of tasks for delivering notifications and integrating with external systems. Notification policies reference workflows as destinations. + +## How Kibana alerting v2 differs from Kibana alerting v1 + +| Aspect | Kibana alerting v1 | Kibana alerting v2 | +|---|---|---| +| **Query language** | Rule type defines what data is evaluated | You write the ES\|QL query directly | +| **Alert persistence** | Mutable documents updated in place | Immutable, append-only event documents | +| **Alert queryability** | Limited; alerts live in system indices | Full ES\|QL access in Discover and dashboards | +| **Notification control** | Per-action frequency and throttle on each rule | Notification policies: centralized matching, grouping, throttling, suppression | +| **Noise reduction** | Snooze per rule; limited grouping | Per-series snooze, acknowledgment per episode, activation thresholds, matcher-based routing, rules on alerts | +| **Rule definition** | Plugin-registered rule types with fixed schemas | ES\|QL queries with `KEEP` to control what data is stored | +| **Recovery detection** | Rule-type specific | Group hash comparison between consecutive evaluations | + +## How detection and alert modes work + +Every rule operates in one of two modes: + +**Detect mode** (`kind: signal`) +: The rule produces signal events for every query result. Signals are written to the alert events data stream and are available for exploration in Discover, but no lifecycle tracking or notifications occur. Use detect mode for broad monitoring with zero noise. + +**Alert mode** (`kind: alert`) +: The rule produces alert events with full lifecycle management. Alerts transition through episode states, trigger notification policies, and support triage actions like acknowledge and snooze. Use alert mode when you need actionable alerts. + +You can switch a rule between modes at any time. Switching from alert to detect stops lifecycle tracking and notifications but continues producing signal events. + +## Architecture + +The Kibana alerting v2 pipeline has three main components: + +1. **Rule executor** — Runs on a configurable schedule via Task Manager. Builds and executes the ES|QL query, writes signal or alert event documents to the `.alerts-events-*` data stream, and computes state transitions for alert-mode rules. + +2. **Director** — Embedded in the rule executor. Manages episode state transitions using configurable strategies (basic transitions or count/timeframe-gated transitions). + +3. **Dispatcher** — An asynchronous component that polls for new alert episodes and processes them through a 10-step pipeline: fetch episodes, apply suppressions, evaluate notification policy matchers, build notification groups, apply throttling, dispatch to workflow destinations, and record outcomes. + +## What you can do with Kibana alerting v2 + +- Write rules using any ES|QL query pattern: thresholds, change detection, ratios, no-data, SLO burn rate, and more. +- Create rules from the UI, from Discover, or with YAML for infrastructure-as-code workflows. +- Preview rule results against existing data before saving. +- Use notification policies to control routing, grouping, and throttling independently of rules. +- Investigate alerts in a dedicated inbox with filtering by status, severity, and custom fields. +- Explore alert history in Discover using ES|QL for trend analysis and operational reporting. +- Write rules on alerts: use the alert events index as a data source for correlation and escalation patterns. diff --git a/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md b/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md new file mode 100644 index 0000000000..4fda631029 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md @@ -0,0 +1,35 @@ +--- +navigation_title: Event field reference +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Field reference for Kibana alerting v2 alert event documents in .alerts-events-*, including common fields, alert-only fields, and the index mapping." +--- + +# Kibana alerting v2 alert event field reference [alert-event-field-reference-v2] + +Kibana alerting v2 rules write alert event documents to the `.alerts-events-*` data stream. This page describes the fields in each document. + +## Common fields + +| Field | Type | Description | +|---|---|---| +| `@timestamp` | `date` | When this alert event document was written | +| `scheduled_timestamp` | `date` | The scheduled execution timestamp for the rule run | +| `rule.id` | `keyword` | The rule identifier | +| `rule.version` | `long` | The rule version at the time this event was emitted | +| `group_hash` | `keyword` | Series identity key | +| `data` | `flattened` | Event payload containing the ES\|QL query output | +| `status` | `keyword` | Event status: `breached`, `recovered`, or `no_data` | +| `source` | `keyword` | Source of this event | +| `type` | `keyword` | Event type: `signal` or `alert` | + +## Alert-only fields + +| Field | Type | Description | +|---|---|---| +| `episode.id` | `keyword` | The episode identifier | +| `episode.status` | `keyword` | Current episode state: `inactive`, `pending`, `active`, or `recovering` | +| `episode.status_count` | `long` | Count of consecutive evaluations in the current status | diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules.md new file mode 100644 index 0000000000..bff9dabd00 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules.md @@ -0,0 +1,67 @@ +--- +navigation_title: Author rules +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Create Kibana alerting v2 rules using ES|QL queries — from the UI, Discover, or YAML — in detect or alert mode." +--- + +# Author Kibana alerting v2 rules [author-rules-v2] + +A Kibana alerting v2 rule defines what to look for in your data. It evaluates source data — logs, metrics, traces, or alert events from other rules — on a configurable schedule using an ES|QL query and produces alert event documents when conditions are met. + +## Rule modes + +Every rule operates in one of two modes: + +- **Detect mode** (`kind: signal`) — produces signal events for exploration and analysis. No lifecycle tracking, no notifications. Use detect mode for broad monitoring without noise. +- **Alert mode** (`kind: alert`) — produces alert events with full lifecycle management. Alerts transition through episode states (`inactive` → `pending` → `active` → `recovering` → `inactive`), trigger notification policies, and support triage actions. Use alert mode when conditions require human response. + +You can switch between modes at any time from the rule list or rule details page. + +## Ways to create a rule + +You can create rules in three ways: + +- **[From the UI](author-rules/create-rules-ui.md)** — use the rule creation form with interactive controls and YAML mode toggle. Preview results before saving. +- **[From Discover](author-rules/create-rules-discover.md)** — convert an ES|QL query you've built in Discover directly into a rule. The query pre-populates the rule definition. +- **[With YAML](author-rules/create-rules-yaml.md)** — define rules as YAML documents for infrastructure-as-code workflows, version control, and bulk provisioning. + +## What a rule contains + +A rule definition includes: + +| Section | Purpose | +|---|---| +| **Metadata** | Name, description, tags, owner | +| **Evaluation** | ES\|QL query (base query + optional alert condition) | +| **Schedule** | Execution interval and lookback window | +| **Grouping** | Fields to split alert events by (for example, `host.name`, `service.name`) | +| **State transition** | Activation and recovery thresholds (alert mode only) | +| **Recovery policy** | How recovery is detected (alert mode only) | +| **No-data handling** | Behavior when the query returns no results | +| **Notification policies** | References to policies that control how alerts are routed | +| **Workflows** | Direct workflow links for rule-triggered actions | + +## ES|QL query structure + +The ES|QL query is the core of every rule. It has two parts: + +**Base query** (required) +: The main ES|QL query that selects, aggregates, and transforms your data. The base query always runs, even when no alert condition is met. This enables no-data detection and recovery. + +**Alert condition** (optional) +: A `WHERE` clause that filters the base query results to only the rows that represent a breach. When the alert condition is set, the system can distinguish between "data exists but doesn't breach" and "no data at all." + +```esql +-- Base query +FROM metrics-* +| STATS avg_cpu = AVG(system.cpu.total.pct) BY host.name + +-- Alert condition (applied as a WHERE clause) +WHERE avg_cpu > 0.9 +``` + +The `KEEP` command controls which fields are stored in each alert event document. Only the fields you `KEEP` appear in the `data` field of the alert event. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md new file mode 100644 index 0000000000..36ae25d34e --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md @@ -0,0 +1,40 @@ +--- +navigation_title: Using Discover +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Convert an ES|QL query from Discover into a Kibana alerting v2 rule with the query pre-populated." +--- + +# Create Kibana alerting v2 rules in Discover [create-rules-discover-v2] + +Create Kibana alerting v2 rules directly from Discover. When you build an ES|QL query in Discover that surfaces interesting patterns, you can convert it into a rule without rewriting the query. + +## Create a rule from Discover + +1. Open **Discover** and switch to ES|QL mode. +2. Write and run an ES|QL query that returns the data you want to monitor. +3. Review the results to confirm the query captures the pattern you want to alert on. +4. Click **Create rule** (or **Alerts > Create rule**) from the Discover toolbar. +5. The rule creation form opens with the ES|QL query pre-populated in the evaluation field. +6. Configure the remaining rule settings: + - **Name** and **description**. + - **Mode** (detect or alert). + - **Schedule** (execution interval and lookback window). + - **Grouping** fields if applicable. + - **Alert delay**, **recovery**, and **no-data** settings for alert mode. + - **Notification policies** to link. +7. Optionally preview the rule results. +8. Click **Save**. + +## What gets pre-populated + +When you create a rule from Discover: + +- The full ES|QL query from your current Discover session is placed into the rule's base query field. +- The index pattern is inferred from the `FROM` command in your query. +- The time range is converted into the rule's lookback window. + +You can modify any of these values in the rule form before saving. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md new file mode 100644 index 0000000000..3bb742dc73 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md @@ -0,0 +1,66 @@ +--- +navigation_title: Using the UI +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Create Kibana alerting v2 rules using the interactive rule creation form with query editor, preview, and YAML toggle." +--- + +% TODO: Content will be updated when the rule creation UI is implemented. + +# Create Kibana alerting v2 rules in the UI [create-rules-ui-v2] + +Create Kibana alerting v2 rules using the interactive rule creation form. The form provides a guided experience for configuring all rule settings, with the option to toggle between interactive and YAML modes. + +## Open the rule creation form + +1. Navigate to **Management > Alerts and Insights > Rules V2**. +2. Click **Create rule**. + +## Configure the rule + +### Mode + +Choose between **Detect** (signals only) and **Alert** (lifecycle tracking and notifications). + +### ES|QL query + +Write the ES|QL query that defines what to detect. The query has two parts: + +- **Base query** (required) — the main ES|QL query that selects, aggregates, and transforms data. +- **Alert condition** (optional) — a `WHERE` clause that filters to breaching rows. + +Use the **YAML mode** toggle to switch between the interactive form and a YAML editor for the full rule definition. + +### Grouping + +Define one or more group key fields to split alert event generation. Each unique combination of field values produces its own alert series. + +### Schedule + +Configure the execution interval and the lookback window that determines how far back the ES|QL query evaluates. + +### Alert mode settings + +When the rule is in alert mode, additional settings are available: + +- **Alert delay** (activation threshold) — require the condition to be met a specified number of consecutive times or for a minimum duration before an alert becomes active. +- **Recovery conditions** — define how recovery is detected. +- **No-data handling** — configure behavior when the query returns no results. +- **Notification policies** — link one or more notification policies to route alerts to workflow destinations. +- **Tags** — add free-form tags for filtering and organization. +- **Investigation guide** — attach a runbook or investigation guide to the rule. + +### Preview results + +Before saving, click **Preview** to evaluate the query against recent data. The preview shows: + +- How many rows the query returns. +- How many alert events would be generated. +- Sample alert event documents. + +## Save the rule + +Click **Save** to create the rule. The rule starts executing on its configured schedule. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-yaml.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-yaml.md new file mode 100644 index 0000000000..7f0471dccd --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-yaml.md @@ -0,0 +1,94 @@ +--- +navigation_title: Using YAML +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Define Kibana alerting v2 rules in YAML for version control and infrastructure-as-code workflows, with full field reference." +--- + +# Create Kibana alerting v2 rules with YAML [create-rules-yaml-v2] + +Define Kibana alerting v2 rules as YAML documents for version control, infrastructure-as-code workflows, and bulk provisioning. + +## YAML rule structure + +A complete alert-mode rule in YAML: + +```yaml +kind: alert + +metadata: + name: checkout-error-rate-by-route + owner: platform + labels: ["production", "checkout"] + +time_field: "@timestamp" + +schedule: + every: 1m + lookback: 20m + +evaluation: + query: + base: | + FROM metrics-* + | STATS avg_cpu = AVG(system.cpu.total.pct) BY host.name + | WHERE env == "production" + condition: "WHERE avg_cpu > 0.9" + +recovery_policy: + type: query + query: + base: | + FROM metrics-* + | STATS avg_cpu = AVG(system.cpu.total.pct) BY host.name + condition: "WHERE avg_cpu < 0.67" + +state_transition: + pending_operator: OR + pending_count: 3 + pending_timeframe: 5m + recovering_operator: AND + recovering_count: 2 + recovering_timeframe: 10m + +grouping: + fields: [host.name] + +no_data: + behavior: no_data + timeframe: 15m + +notification_policies: + - ref: "policies/service-alerts-v1" + - ref: "policies/pagerduty-sev1-v1" +``` + +## Detect mode example + +A minimal detect-mode rule: + +```yaml +kind: signal + +metadata: + name: http-500-errors + +schedule: + every: 5m + lookback: 5m + +evaluation: + query: + base: | + FROM logs-* + | WHERE http.response.status_code >= 500 + | STATS error_count = COUNT(*) BY service.name + | KEEP service.name, error_count +``` + +## Toggle between GUI and YAML + +In the rule creation UI, you can toggle between the interactive form and YAML mode at any time. Changes made in one mode are reflected in the other. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/production-considerations.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/production-considerations.md new file mode 100644 index 0000000000..1005e62dc3 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/production-considerations.md @@ -0,0 +1,15 @@ +--- +navigation_title: Production considerations +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Guidance for running Kibana alerting v2 rules in production — scheduling, query performance, dispatcher capacity, and data retention." +--- + +% TODO: Content will be updated after performance testing is complete. + +# Kibana alerting v2 production considerations [production-considerations-v2] + +Guidance for running Kibana alerting v2 rules in production, including scaling, query performance, and resource management. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings.md new file mode 100644 index 0000000000..97be381cf1 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings.md @@ -0,0 +1,37 @@ +--- +navigation_title: Rule settings +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Overview of Kibana alerting v2 rule settings: schedule, thresholds, no-data handling, grouping, notification policies, and workflows." +--- + +# Kibana alerting v2 rule settings [rule-settings-v2] + +Rule settings control how a Kibana alerting v2 rule evaluates data, manages alert lifecycle, and routes notifications. This page provides an overview of all configurable settings. Refer to the linked pages for detailed guidance on each. + +## Schedule and lookback + +The [schedule and lookback](rule-settings/schedule-and-lookback.md) settings control how often the rule runs and how far back it looks when evaluating data. + +## Activation and recovery thresholds + +[Activation and recovery thresholds](rule-settings/activation-and-recovery-thresholds.md) prevent transient conditions from creating actionable alerts and prevent rapid toggling between active and recovered states. + +## No-data handling + +[No-data handling](rule-settings/no-data-handling.md) controls what happens when the rule query returns no results. + +## Grouping + +[Grouping](rule-settings/grouping.md) splits alert event generation by one or more fields. Each unique combination produces its own alert series with independent lifecycle tracking. + +## Notification policies + +[Notification policies](rule-settings/notification-policies.md) are standalone entities that control how alerts reach people and systems. + +## Workflows + +[Workflows](rule-settings/workflows.md) are automated sequences of tasks. Rules can link to workflows directly for rule-triggered actions. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md new file mode 100644 index 0000000000..c8a9a0238b --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md @@ -0,0 +1,41 @@ +--- +navigation_title: Activation and recovery thresholds +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Control when Kibana alerting v2 alerts transition between lifecycle states using consecutive-breach and duration-based thresholds." +--- + +# Kibana alerting v2 activation and recovery thresholds [activation-recovery-thresholds-v2] + +Activation and recovery thresholds control when alerts transition between lifecycle states. They prevent transient spikes from creating actionable alerts and prevent rapid toggling between active and recovered. + +These settings are only available for alert-mode rules (`kind: alert`). + +## Alert lifecycle states + +An alert transitions through these states: + +``` +inactive → pending → active → recovering → inactive +``` + +## Activation thresholds + +Configure activation using count, timeframe, or both: + +| Field | Description | +|---|---| +| `pending_count` | Consecutive breaches required | +| `pending_timeframe` | Minimum duration the condition must persist | +| `pending_operator` | How to combine count and timeframe (`AND` or `OR`) | + +## Recovery thresholds + +| Field | Description | +|---|---| +| `recovering_count` | Consecutive recoveries required | +| `recovering_timeframe` | Minimum duration for recovery | +| `recovering_operator` | How to combine count and timeframe (`AND` or `OR`) | diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/grouping.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/grouping.md new file mode 100644 index 0000000000..48d53ffa9c --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/grouping.md @@ -0,0 +1,24 @@ +--- +navigation_title: Rule grouping +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Split Kibana alerting v2 alert event generation by fields like host or service so each entity has independent lifecycle tracking." +--- + +# Kibana alerting v2 rule grouping [rule-grouping-v2] + +Grouping splits alert event generation by one or more fields so that each unique combination of field values produces its own alert series. Each series has independent lifecycle tracking, recovery detection, and per-series snooze. + +## Configure grouping + +In YAML: + +```yaml +grouping: + fields: [host.name] +``` + +The grouping fields must correspond to the `BY` clause in your ES|QL query's `STATS` command. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/no-data-handling.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/no-data-handling.md new file mode 100644 index 0000000000..30fb5772a5 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/no-data-handling.md @@ -0,0 +1,21 @@ +--- +navigation_title: No-data handling +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Configure Kibana alerting v2 rule behavior when the query returns no results: record no-data, carry forward status, or treat as recovery." +--- + +# Kibana alerting v2 no-data handling [no-data-handling-v2] + +No-data handling controls what happens when a rule executes and the base query returns no results. + +## Behaviors + +| Behavior | Effect | +|---|---| +| `no_data` (default) | Record a no-data event | +| `last_status` | Carry forward the previous status | +| `recover` | Treat absence as recovery | diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md new file mode 100644 index 0000000000..4a08889a63 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md @@ -0,0 +1,18 @@ +--- +navigation_title: Notification policies +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Notification policies control how and when Kibana alerting v2 alerts reach people and systems — matching, grouping, throttling, and routing." +--- + +# Kibana alerting v2 notification policies [notification-policies-v2] + +A notification policy defines how and when alerts reach people and systems. Notification policies are standalone, reusable entities. One policy can apply across multiple rules. + +## Learn more + +- [Create and manage notification policies](notification-policies/create-manage-notification-policies.md) +- [How notification policies are evaluated](notification-policies/how-notification-policies-are-evaluated.md) diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md new file mode 100644 index 0000000000..2d17407544 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md @@ -0,0 +1,20 @@ +--- +navigation_title: Create and manage notification policies +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Create, configure, and manage Kibana alerting v2 notification policies — matching conditions, grouping, throttling, destinations, and snooze." +--- + +# Create and manage Kibana alerting v2 notification policies [create-manage-notification-policies-v2] + +Create notification policies to control which alerts trigger notifications, how alerts are grouped, how frequently notifications are sent, and where they are routed. + +## Create a notification policy + +1. Navigate to **Management > Alerts and Insights > Rules V2 > Notification Policies**. +2. Click **Create policy**. +3. Configure the policy settings. +4. Click **Save**. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md new file mode 100644 index 0000000000..61e181b10b --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md @@ -0,0 +1,15 @@ +--- +navigation_title: How notification policies are evaluated +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "How the Kibana alerting v2 dispatcher processes alert episodes through a 10-step pipeline: suppressions, matchers, grouping, throttling, and dispatch." +--- + +# How Kibana alerting v2 notification policies are evaluated [how-notification-policies-evaluated-v2] + +The dispatcher is the asynchronous component that bridges rule execution and notification delivery. It polls for new alert episodes and processes them through a 10-step pipeline. + +The dispatcher runs every 10 seconds and processes up to 10,000 episodes per run. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md new file mode 100644 index 0000000000..4850912145 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md @@ -0,0 +1,23 @@ +--- +navigation_title: Schedule and lookback +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Configure how often a Kibana alerting v2 rule runs and how far back it looks when evaluating data." +--- + +# Kibana alerting v2 schedule and lookback [schedule-lookback-v2] + +The schedule and lookback settings control how often a rule runs and how far back it looks when evaluating data. + +## Execution interval + +The execution interval (`schedule.every`) determines how frequently the rule evaluates. + +## Lookback window + +The lookback window (`schedule.lookback`) determines the time range that the ES|QL query covers. + +Choose a lookback window that is at least as long as the execution interval to avoid gaps in coverage. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md new file mode 100644 index 0000000000..fbe86e5190 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md @@ -0,0 +1,13 @@ +--- +navigation_title: Alerting workflows +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Workflows are automated task sequences used as notification policy destinations and direct rule links in Kibana alerting v2." +--- + +# Kibana alerting v2 workflows [workflows-v2] + +Workflows are user-defined automated sequences of tasks for actions, notifications, and external integrations. In Kibana alerting v2, workflows serve as the destinations for notification policies and can also be linked directly to rules. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-templates.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-templates.md new file mode 100644 index 0000000000..fde6915a08 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-templates.md @@ -0,0 +1,14 @@ +--- +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Start with pre-configured Kibana alerting v2 rule templates for common monitoring patterns and install pre-built detection rules." +--- + +% TODO: Content will be updated when template UI is implemented. + +# Kibana alerting v2 rule templates [rule-templates-v2] + +Rule templates provide pre-configured rule definitions for common monitoring patterns. They include an ES|QL query, default schedule, and recommended settings that you can customize for your environment. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-types.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-types.md new file mode 100644 index 0000000000..bedb42770d --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-types.md @@ -0,0 +1,129 @@ +--- +navigation_title: Rule types +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "ES|QL query patterns for Kibana alerting v2 rules: threshold, change detection, ratio, no-data, event rate, percentile, SLO burn rate, and more." +--- + +# Kibana alerting v2 rule types [rule-types-v2] + +Rule types are lightweight abstractions that map UI controls to parameterized ES|QL queries. Each rule type represents a common alerting pattern. When you select a rule type in the UI, it generates the corresponding ES|QL query with your parameters filled in. + +Advanced users can bypass rule types entirely and write raw ES|QL for full flexibility. + +## Threshold + +Alert when a metric crosses a static value. The most common pattern for resource monitoring. + +```esql +FROM metrics-* +| STATS avg_cpu = AVG(system.cpu.total.pct) BY host.name +| WHERE avg_cpu > 0.9 +| KEEP host.name, avg_cpu +``` + +## Change detection + +Alert when a value deviates from a previous period. + +```esql +FROM metrics-* +| STATS + current_cpu = AVG(system.cpu.total.pct) WHERE @timestamp >= NOW() - 15 MINUTES, + baseline_cpu = AVG(system.cpu.total.pct) WHERE @timestamp < NOW() - 15 MINUTES + BY host.name +| EVAL change_pct = ((current_cpu - baseline_cpu) / baseline_cpu) * 100 +| WHERE ABS(change_pct) > 10 +| KEEP host.name, current_cpu, baseline_cpu, change_pct +``` + +## Ratio + +Alert when a ratio crosses a threshold. Common for error rate monitoring. + +```esql +FROM logs-* +| STATS + errors = COUNT(*) WHERE http.response.status_code >= 500, + total = COUNT(*) + BY service.name +| EVAL error_rate = errors / total +| WHERE error_rate > 0.1 +| KEEP service.name, error_rate, errors, total +``` + +## No-data + +Alert when a previously reporting source stops sending data. + +```esql +FROM metrics-* +| STATS last_seen = MAX(@timestamp) BY host.name +| WHERE last_seen < NOW() - 15 MINUTES +| EVAL status = "no data" +| KEEP host.name, status +``` + +## Event rate + +Alert on the rate of events per time unit. + +```esql +FROM logs-* +| STATS event_count = COUNT(*) BY host.name +| WHERE event_count > 1000 +| KEEP host.name, event_count +``` + +## Percentile + +Alert when a percentile value exceeds a threshold. + +```esql +FROM traces-apm-* +| STATS p95_duration = PERCENTILE(transaction.duration.us, 95) BY service.name +| WHERE p95_duration > 5000000 +| EVAL p95_ms = p95_duration / 1000 +| KEEP service.name, p95_ms +``` + +## SLO burn rate + +Alert when an SLO error budget is burning too fast. + +```esql +FROM traces-apm-* +| STATS + short_errors = COUNT(*) WHERE @timestamp >= NOW() - 5 MINUTES AND http.response.status_code >= 500, + short_total = COUNT(*) WHERE @timestamp >= NOW() - 5 MINUTES, + long_errors = COUNT(*) WHERE @timestamp >= NOW() - 1 HOUR AND http.response.status_code >= 500, + long_total = COUNT(*) WHERE @timestamp >= NOW() - 1 HOUR + BY service.name +| EVAL + short_error_rate = short_errors / short_total, + long_error_rate = long_errors / long_total, + slo_target = 0.999, + short_burn = short_error_rate / (1 - slo_target), + long_burn = long_error_rate / (1 - slo_target) +| WHERE short_burn > 14.4 AND long_burn > 14.4 +| KEEP service.name, short_burn, long_burn +``` + +## Text search + +Alert on specific patterns in log messages. + +```esql +FROM logs-* +| WHERE message LIKE "*OutOfMemoryError*" +| STATS error_count = COUNT(*) BY host.name +| WHERE error_count > 0 +| KEEP host.name, error_count +``` + +## Raw ES|QL + +For any pattern not covered by a rule type, write raw ES|QL directly. The query can use any ES|QL command, including `ENRICH`, `DISSECT`, `GROK`, `MV_EXPAND`, and cross-cluster search. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rules-on-alerts.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rules-on-alerts.md new file mode 100644 index 0000000000..35cec6fd10 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rules-on-alerts.md @@ -0,0 +1,13 @@ +--- +navigation_title: Rules on alerts +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Write Kibana alerting v2 rules that query alert events for correlation, escalation, and noise reduction across multiple rules." +--- + +# Kibana alerting v2 rules on alerts [rules-on-alerts-v2] + +Because Kibana alerting v2 alert events are stored as queryable data in standard {{es}} indices, you can write rules that use the alert events index as their data source. This enables correlation, escalation, and noise reduction patterns. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/set-rule-data-sources.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/set-rule-data-sources.md new file mode 100644 index 0000000000..ee6f848964 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/set-rule-data-sources.md @@ -0,0 +1,13 @@ +--- +navigation_title: Set rule data sources +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Configure Kibana alerting v2 rule data sources using ES|QL FROM commands, including index patterns, cross-cluster search, and alert indices." +--- + +# Set Kibana alerting v2 rule data sources [set-rule-data-sources-v2] + +Every Kibana alerting v2 rule evaluates data from one or more {{es}} indices. The data source is defined by the `FROM` command in the rule's ES|QL query. diff --git a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md new file mode 100644 index 0000000000..66a6c1f199 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md @@ -0,0 +1,41 @@ +--- +navigation_title: Before you begin +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Prerequisites and setup steps to review before creating Kibana alerting v2 rules." +--- + +# Before you begin with Kibana alerting v2 [alerting-before-you-begin-v2] + +Before creating Kibana alerting v2 rules, review the following prerequisites and setup steps. + +## Prerequisites + +To use Kibana alerting v2, you need: + +- **{{stack}} 9.4 or later.** +- **ES|QL knowledge.** Kibana alerting v2 rules are defined using ES|QL queries. Familiarity with ES|QL syntax, aggregations, and the `STATS`, `WHERE`, `EVAL`, and `KEEP` commands is essential. Refer to the [ES|QL reference](elasticsearch://reference/query-languages/esql.md) for details. +- **Data indexed in {{es}}.** Your source data (logs, metrics, traces, or alert events from other rules) must be indexed and accessible from the cluster where you create rules. +- **Appropriate privileges.** You need Kibana privileges to create and manage rules, notification policies, and workflows. Refer to [Alerting privileges](before-you-begin/alerting-privileges.md) for details. + +## Key differences from Kibana alerting v1 + +If you are coming from Kibana alerting v1, note these differences: + +- **You write the query.** Instead of selecting a rule type and filling in parameters, you write an ES|QL query that defines exactly what to look for and what data to include in each alert event. +- **Alerts are immutable.** Each rule evaluation appends new event documents rather than updating existing ones. This gives you a full history of every evaluation. +- **Notifications are separate from rules.** Instead of configuring actions on each rule, you create notification policies that match alerts and route them to workflow destinations. One policy can serve many rules. +- **Snooze is per series, not per rule.** You can snooze notifications for a specific host or service without silencing the entire rule. +- **Alert data is queryable.** Alert events are stored in standard {{es}} indices and can be queried with ES|QL in Discover, used in dashboards, or fed to other rules. + +## Coexistence with Kibana alerting v1 + +Kibana alerting v2 runs alongside Kibana alerting v1. Both systems are fully operational: + +- You access Kibana alerting v2 rules and Kibana alerting v1 rules from the same **Rules** navigation entry, in separate tabs. +- Each system writes to its own indices. Kibana alerting v2 alert events go to `.alerts-events-*`; Kibana alerting v1 alerts go to `.alerts-*`. +- There is no automatic migration. You can copy rules from Kibana alerting v1 to Kibana alerting v2 manually when you are ready. +- You can create rules on alerts that correlate across both systems by querying both alert indices. diff --git a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md new file mode 100644 index 0000000000..f773dc2bee --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md @@ -0,0 +1,54 @@ +--- +navigation_title: Alerting privileges +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Required privileges for creating and managing Kibana alerting v2 rules, notification policies, and alert actions." +--- + +# Kibana alerting v2 privileges [alerting-privileges-v2] + +Kibana alerting v2 uses {{es}} index-level security to control access to alert data, combined with {{kib}} feature privileges for rule and policy management. + +## Required privileges + +### Rule management + +To create, edit, and manage Kibana alerting v2 rules, you need: + +- **{{kib}} feature privilege**: `Rules V2` with the appropriate access level (read, create, edit, or all). +- **{{es}} index privileges**: Read access to the source indices your rules query (for example, `logs-*`, `metrics-*`). + +Rule execution uses the API key of the user who created or last updated the rule. This means the rule runs with the privileges of that user. If the user's privileges change, rule execution reflects those changes. + +### Notification policy management + +To create and manage notification policies, you need: + +- **{{kib}} feature privilege**: `Rules V2` with create or edit access. +- **Workflow permissions**: To add a workflow as a destination on a policy, you need permissions for that workflow. This prevents privilege escalation through policy configuration. + +### Alert management + +To view and take actions on alerts (acknowledge, snooze, tag, assign), you need: + +- **{{kib}} feature privilege**: `Rules V2` with at least read access. +- **{{es}} index privileges**: Read access to `.alerts-events-*` for viewing alerts. Write access to `.alerts-actions` for taking alert actions. + +### Discover and dashboard access + +Because Kibana alerting v2 alert events are stored in standard {{es}} indices, any user with read access to `.alerts-events-*` can query them in Discover and use them in dashboards. No additional {{kib}} privileges are required beyond the standard Discover feature access. + +## Space boundaries + +Rule and notification policy management respects {{kib}} space boundaries. Rules created in one space are not visible in another. Alert events are indexed globally, but UI access is filtered by space. + +## API key management + +Rules and notification policies use API keys for execution: + +- An API key is created when a rule or policy is saved. +- The API key inherits the privileges of the user who created it. +- You can update the API key from the rule or policy management page if the original user's privileges change. diff --git a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md new file mode 100644 index 0000000000..b8fb32c948 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md @@ -0,0 +1,44 @@ +--- +navigation_title: Alerting setup +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Enable and configure Kibana alerting v2, including plugin dependencies, index configuration, and verification steps." +--- + +# Set up Kibana alerting v2 [alerting-set-up-v2] + +Kibana alerting v2 is available in {{stack}} 9.4 and later. This page explains how to enable it and configure initial settings. + +## Enable Kibana alerting v2 + +Kibana alerting v2 is enabled by default in 9.4. When enabled, a **Rules V2** tab appears in the rules management area under **Management > Alerts and Insights > Rules V2**. + +## Required plugins + +Kibana alerting v2 depends on the following {{kib}} plugins, which are enabled by default: + +- **Task Manager** — schedules and executes rule evaluations. +- **Encrypted Saved Objects** — stores API keys securely for rule and notification policy execution. +- **ES|QL** — provides query execution for rule evaluation. +- **Spaces** — enforces space-level isolation for rules and policies. + +## Index configuration + +Kibana alerting v2 automatically creates and manages the following data streams: + +- **`.alerts-events-*`** — stores signal and alert event documents produced by rule evaluations. This is an append-only data stream. +- **`.alerts-actions`** — stores alert action records (acknowledge, snooze, deactivate, fire, suppress) used by the dispatcher for suppression tracking and audit. + +No manual index configuration is required. The system creates these data streams with the appropriate mappings when the first rule executes. + +## Verify the installation + +To verify that Kibana alerting v2 is working: + +1. Navigate to **Management > Alerts and Insights > Rules V2**. +2. Confirm that the rules list page loads. +3. Click **Create rule** to confirm the rule form opens. +4. Optionally, create a test rule with a simple ES|QL query and verify that alert events appear in Discover by querying the `.alerts-events-*` index. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts.md new file mode 100644 index 0000000000..3b70b88c03 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts.md @@ -0,0 +1,13 @@ +--- +navigation_title: Manage alerts +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "View, triage, and respond to alerts produced by Kibana alerting v2 rules using the alert inbox." +--- + +# Manage Kibana alerting v2 alerts [manage-alerts-v2] + +View, triage, and respond to alerts produced by Kibana alerting v2 rules. The alert inbox provides a centralized view of all active and recent alerts with filtering, investigation, and action capabilities. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md new file mode 100644 index 0000000000..676ff5d8f0 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md @@ -0,0 +1,13 @@ +--- +navigation_title: Explore alerts and signals in Discover +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Query Kibana alerting v2 alert events in Discover using ES|QL for trend analysis, operational reporting, and ad hoc investigation." +--- + +# Explore Kibana alerting v2 alerts and signals in Discover [explore-alerts-discover-v2] + +Because Kibana alerting v2 alert events are stored as queryable data in standard {{es}} indices, you can explore them in Discover using ES|QL. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond.md new file mode 100644 index 0000000000..fb12a0df35 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond.md @@ -0,0 +1,13 @@ +--- +navigation_title: Investigate and respond +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Use the Kibana alerting v2 alert flyout and detail pages to investigate alert context, review the timeline, and take action." +--- + +# Investigate and respond to Kibana alerting v2 alerts [investigate-respond-v2] + +When an alert needs attention, use the alert flyout or detail page to investigate its context, review the timeline, and take action. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md new file mode 100644 index 0000000000..5ef5ebd6af --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md @@ -0,0 +1,13 @@ +--- +navigation_title: Alert actions +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Actions you can take on Kibana alerting v2 alerts: acknowledge, snooze, deactivate, assign, tag, resolve, and add to cases." +--- + +# Kibana alerting v2 alert actions [alert-actions-v2] + +Alert actions are operations you perform on Kibana alerting v2 alerts to manage their lifecycle, suppress notifications, and organize your triage workflow. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md new file mode 100644 index 0000000000..4cd2106b79 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md @@ -0,0 +1,13 @@ +--- +navigation_title: Alert episode details +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Understand Kibana alerting v2 alert episodes — the full lifecycle arc from first breach to recovery — including states, identity, and status tracking." +--- + +# Kibana alerting v2 alert episode details [alert-episode-details-v2] + +An episode is one full lifecycle arc of an alert, from the first breach to final recovery. Each episode groups the state transitions for a single alert series and is identified by a unique `episode_id`. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/view-alerts.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/view-alerts.md new file mode 100644 index 0000000000..939e9c33c8 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/view-alerts.md @@ -0,0 +1,13 @@ +--- +navigation_title: View alerts +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Filter, sort, and search Kibana alerting v2 alerts in the alert inbox using quick filters, severity, tags, and custom fields." +--- + +# View Kibana alerting v2 alerts [view-alerts-v2] + +The alert inbox shows all Kibana alerting v2 alert episodes with filtering, sorting, and quick actions for efficient triage. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-rules.md b/explore-analyze/alerting/kibana-alerting-v2/manage-rules.md new file mode 100644 index 0000000000..e92f0ad11e --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-rules.md @@ -0,0 +1,13 @@ +--- +navigation_title: Manage rules +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "View, filter, and manage Kibana alerting v2 rules from the rules list." +--- + +# Manage Kibana alerting v2 rules [manage-rules-v2] + +View, filter, and manage your Kibana alerting v2 rules from a single entry point. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-rules/snooze-disable-rules.md b/explore-analyze/alerting/kibana-alerting-v2/manage-rules/snooze-disable-rules.md new file mode 100644 index 0000000000..8362237694 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-rules/snooze-disable-rules.md @@ -0,0 +1,13 @@ +--- +navigation_title: Snooze and disable rules +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Temporarily suppress notifications with per-series snooze or stop rule execution by disabling a Kibana alerting v2 rule." +--- + +# Snooze and disable Kibana alerting v2 rules [snooze-disable-rules-v2] + +You can temporarily suppress notifications or stop rule execution entirely. Kibana alerting v2 provides granular control at the rule and series level. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md b/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md new file mode 100644 index 0000000000..69586e9cd6 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md @@ -0,0 +1,13 @@ +--- +navigation_title: View and manage rules +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "View rule details, execution history, related rules, and alerts generated by a Kibana alerting v2 rule." +--- + +# View and manage Kibana alerting v2 rules [view-manage-rules-v2] + +The rule details page provides a comprehensive view of a single rule's configuration, execution history, and generated alerts. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md new file mode 100644 index 0000000000..c2ea78e6b2 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md @@ -0,0 +1,13 @@ +--- +navigation_title: Reduce noise and false positives +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Reduce Kibana alerting v2 alert noise and false positives using activation thresholds, notification policy controls, rules on alerts, and manual suppression." +--- + +# Reduce Kibana alerting v2 noise and false positives [reduce-noise-v2] + +Kibana alerting v2 provides multiple mechanisms to reduce alert noise and prevent false positives. Each mechanism operates at a different stage of the alerting pipeline. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/activation-thresholds.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/activation-thresholds.md new file mode 100644 index 0000000000..b2856b563f --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/activation-thresholds.md @@ -0,0 +1,13 @@ +--- +navigation_title: Activation thresholds +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Require consecutive breaches or a minimum duration before a Kibana alerting v2 alert activates, filtering out transient spikes." +--- + +# Kibana alerting v2 activation thresholds [activation-thresholds-v2] + +Activation thresholds require a condition to be met a certain number of consecutive times or for a minimum duration before an alert transitions from `pending` to `active`. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md new file mode 100644 index 0000000000..1213573f40 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md @@ -0,0 +1,13 @@ +--- +navigation_title: Deactivate alerts +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Stop lifecycle processing and notifications for a Kibana alerting v2 alert episode while the rule continues detecting new episodes." +--- + +# Deactivate Kibana alerting v2 alerts [deactivate-alerts-v2] + +Deactivating an alert episode stops lifecycle processing and notifications for that episode. The rule continues running and can detect new episodes, but the deactivated episode is no longer tracked. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md new file mode 100644 index 0000000000..c350a6986c --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md @@ -0,0 +1,13 @@ +--- +navigation_title: Notification grouping +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Batch related Kibana alerting v2 alerts into fewer notifications using notification policy grouping by host, service, or custom fields." +--- + +# Kibana alerting v2 notification grouping [reduce-noise-grouping-v2] + +Notification policy grouping batches related alerts into a single notification, reducing the number of messages sent without losing context. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md new file mode 100644 index 0000000000..fd4af4eafa --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md @@ -0,0 +1,13 @@ +--- +navigation_title: Maintenance windows +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Schedule periods during which Kibana alerting v2 notifications are paused for planned deployments or recurring maintenance." +--- + +# Kibana alerting v2 maintenance windows [maintenance-windows-v2] + +Maintenance windows are scheduled periods during which notifications are paused. Use them for planned deployments, infrastructure changes, or recurring maintenance. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md new file mode 100644 index 0000000000..52edea9812 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md @@ -0,0 +1,13 @@ +--- +navigation_title: Matchers +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Route only matching Kibana alerting v2 alerts to notification destinations using KQL matcher conditions on notification policies." +--- + +# Kibana alerting v2 notification matchers [matcher-v2] + +Notification policy matchers are KQL expressions that determine which alerts a policy applies to. Only alerts matching the condition are routed to the policy's workflow destinations. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/no-data-handling.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/no-data-handling.md new file mode 100644 index 0000000000..72cc816237 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/no-data-handling.md @@ -0,0 +1,15 @@ +--- +navigation_title: No-data handling +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Prevent false recoveries and false alerts when data sources stop reporting by configuring Kibana alerting v2 no-data behavior." +--- + +# Kibana alerting v2 no-data handling [reduce-noise-no-data-v2] + +Proper no-data handling prevents false recoveries and false alerts when data sources stop reporting. + +Refer to [No-data handling (rule settings)](/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/no-data-handling.md) for configuration details and examples. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/recovery-thresholds.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/recovery-thresholds.md new file mode 100644 index 0000000000..d3b4a68269 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/recovery-thresholds.md @@ -0,0 +1,13 @@ +--- +navigation_title: Recovery thresholds +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Require sustained recovery before a Kibana alerting v2 alert deactivates, preventing rapid toggling between active and recovered." +--- + +# Kibana alerting v2 recovery thresholds [recovery-thresholds-v2] + +Recovery thresholds require a condition to be absent for a certain number of consecutive evaluations or for a minimum duration before an alert transitions from `recovering` to `inactive`. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/rules-on-alerts.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/rules-on-alerts.md new file mode 100644 index 0000000000..e392f3efc2 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/rules-on-alerts.md @@ -0,0 +1,15 @@ +--- +navigation_title: Rules on alerts +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Replace many individual Kibana alerting v2 alert notifications with a single meaningful one using rules that correlate across alerts." +--- + +# Kibana alerting v2 rules on alerts [reduce-noise-rules-on-alerts-v2] + +Rules on alerts are a noise reduction strategy that replaces many individual low-level notifications with a single meaningful one. + +Refer to [Rules on alerts (authoring)](/explore-analyze/alerting/kibana-alerting-v2/author-rules/rules-on-alerts.md) for detailed configuration guidance. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/snooze-or-silence.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/snooze-or-silence.md new file mode 100644 index 0000000000..1f196f46a0 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/snooze-or-silence.md @@ -0,0 +1,13 @@ +--- +navigation_title: Snooze or silence +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Temporarily suppress Kibana alerting v2 notifications using per-series snooze, attribute-based silence, or per-episode acknowledgment." +--- + +# Snooze or silence Kibana alerting v2 alerts [snooze-or-silence-v2] + +Snooze, silence, and acknowledge are three ways to temporarily suppress notifications for Kibana alerting v2 alerts. Each operates at a different scope. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/throttle.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/throttle.md new file mode 100644 index 0000000000..998e4d56d7 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/throttle.md @@ -0,0 +1,13 @@ +--- +navigation_title: Throttling +applies_to: + stack: + since: "9.4" +products: + - id: kibana +description: "Limit Kibana alerting v2 notification frequency by setting a minimum interval between notifications for the same group." +--- + +# Kibana alerting v2 throttle [throttle-v2] + +Throttling sets a minimum interval between notifications for the same notification group. It reduces notification volume without affecting alert detection or lifecycle tracking. diff --git a/explore-analyze/alerting/watcher.md b/explore-analyze/alerting/watcher.md index a90e3a4787..c1a67df629 100644 --- a/explore-analyze/alerting/watcher.md +++ b/explore-analyze/alerting/watcher.md @@ -17,7 +17,7 @@ products: # {{watcher}} ::::{tip} -{{kib}} Alerting provides a set of built-in actions and alerts that are integrated with applications such as APM, Metrics, Security, and Uptime. You can use {{kib}} Alerting to detect complex conditions within different {{kib}} apps and trigger actions when those conditions are met. For more information, refer to [Alerting](../alerting.md). +{{kib}} Alerting provides a set of built-in actions and alerts that are integrated with applications such as APM, Metrics, Security, and Uptime. You can use {{kib}} Alerting to detect complex conditions within different {{kib}} apps and trigger actions when those conditions are met. For more information, refer to [Alerting](../alerting-overview.md). :::: You can use {{watcher}} to watch for changes or anomalies in your data and perform the necessary actions in response. For example, you might want to: diff --git a/explore-analyze/alerting/watcher/enable-watcher.md b/explore-analyze/alerting/watcher/enable-watcher.md index e4ca04d971..18950bd57b 100644 --- a/explore-analyze/alerting/watcher/enable-watcher.md +++ b/explore-analyze/alerting/watcher/enable-watcher.md @@ -10,7 +10,7 @@ products: # Enable Watcher [enable-watcher] ::::{note} -If you are looking for Kibana alerting, check [Alerting](../../../explore-analyze/alerting.md). +If you are looking for Kibana alerting, check [Alerting](../../../explore-analyze/alerting-overview.md). :::: Watcher can be enabled when configuring your cluster. You can run Alerting on a separate cluster from the cluster whose data you are actually watching. @@ -23,7 +23,7 @@ To enable Watcher on a cluster, you may first need to perform one or several of * To receive default Elasticsearch Watcher alerts (cluster status, nodes changed, version mismatch), you need to have monitoring enabled to send to the Admin email address specified in Kibana. To enable this, go to **Advanced Settings > Admin email**. -To learn more about Kibana alerting and how to use it, check [Alerting and Actions](../../../explore-analyze/alerting.md). +To learn more about Kibana alerting and how to use it, check [Alerting and Actions](../../../explore-analyze/alerting-overview.md). ## Send alerts by email [watcher-allowlist] diff --git a/explore-analyze/cases/create-cases.md b/explore-analyze/cases/create-cases.md index b9d4d644a1..40a8dc41c5 100644 --- a/explore-analyze/cases/create-cases.md +++ b/explore-analyze/cases/create-cases.md @@ -71,7 +71,7 @@ Set up email notifications to alert users when they're assigned to a case, so th :::{tab-item} {{ecloud}} -Add the email domains to the [notifications domain allowlist](/explore-analyze/alerting/alerts.md). +Add the email domains to the [notifications domain allowlist](/explore-analyze/alerting/kibana-alerting-v1.md). You do not need to configure an email connector or update {{kib}} user settings—the preconfigured Elastic-Cloud-SMTP connector is used by default. diff --git a/explore-analyze/discover/discover-get-started.md b/explore-analyze/discover/discover-get-started.md index d6ad57b4e3..2ab61c5aee 100644 --- a/explore-analyze/discover/discover-get-started.md +++ b/explore-analyze/discover/discover-get-started.md @@ -395,10 +395,10 @@ From **Discover**, you can create a rule to periodically check when data goes ab The **Create rule** form is pre-filled with the latest query sent to {{es}}. -3. [Configure your query](../alerting/alerts/rule-type-es-query.md) and [select a connector type](../../deploy-manage/manage-connectors.md). +3. [Configure your query](../alerting/kibana-alerting-v1/rule-type-es-query-v1.md) and [select a connector type](../../deploy-manage/manage-connectors.md). 4. Click **Save**. -For more about this and other rules provided in {{alert-features}}, go to [Alerting](../alerting/alerts.md). +For more about this and other rules provided in {{alert-features}}, go to [Alerting](../alerting/kibana-alerting-v1.md). ## What’s next? [_whats_next_4] diff --git a/explore-analyze/geospatial-analysis.md b/explore-analyze/geospatial-analysis.md index 3138d6e040..f4f47664e8 100644 --- a/explore-analyze/geospatial-analysis.md +++ b/explore-analyze/geospatial-analysis.md @@ -89,7 +89,7 @@ Put machine learning to work for you and find the data that should stand out wit ## Alerting [geospatial-alerting] -Let your location data drive insights and action with [geographic alerts](alerting/alerts/geo-alerting.md). Commonly referred to as geo-fencing, track moving objects as they enter or exit a boundary to receive notifications through common business systems (email, Slack, Teams, PagerDuty, and more). +Let your location data drive insights and action with [geographic alerts](alerting/kibana-alerting-v1/geo-alerting-v1.md). Commonly referred to as geo-fencing, track moving objects as they enter or exit a boundary to receive notifications through common business systems (email, Slack, Teams, PagerDuty, and more). Interested in learning more? Follow [step-by-step instructions](visualize/maps/asset-tracking-tutorial.md) for setting up tracking containment alerts to monitor moving vehicles. diff --git a/explore-analyze/kibana-data-exploration-learning-tutorial.md b/explore-analyze/kibana-data-exploration-learning-tutorial.md index 1f2fdf4316..02d0064197 100644 --- a/explore-analyze/kibana-data-exploration-learning-tutorial.md +++ b/explore-analyze/kibana-data-exploration-learning-tutorial.md @@ -432,7 +432,7 @@ You've completed the core workflow, from sample data to a shareable dashboard. H : The sample web logs data includes `geo.src` and `geo.dest` fields. [Maps](visualize/maps.md) lets you visualize this data on interactive maps and add them to dashboards. **Set up alerts** -: Don't wait for problems to show up on a dashboard. [Create alerting rules](alerting/alerts/alerting-getting-started.md) to get notified when your data crosses a threshold. +: Don't wait for problems to show up on a dashboard. [Create alerting rules](alerting/kibana-alerting-v1/alerting-getting-started-v1.md) to get notified when your data crosses a threshold. **Try machine learning** : Use {{ml}} to [detect anomalies](/explore-analyze/machine-learning/anomaly-detection/ml-getting-started.md) in time-series data, forecast trends, or categorize log messages. The sample data sets include pre-configured {{anomaly-jobs}} you can experiment with. diff --git a/explore-analyze/machine-learning/anomaly-detection/ml-configuring-alerts.md b/explore-analyze/machine-learning/anomaly-detection/ml-configuring-alerts.md index 27ddac5d13..8da6a3158e 100644 --- a/explore-analyze/machine-learning/anomaly-detection/ml-configuring-alerts.md +++ b/explore-analyze/machine-learning/anomaly-detection/ml-configuring-alerts.md @@ -249,14 +249,14 @@ and the **Alerts** panel. If necessary, you can snooze rules to prevent them from generating actions. For more details, refer to -[Snooze and disable rules](/explore-analyze/alerting/alerts/create-manage-rules.md#controlling-rules). +[Snooze and disable rules](/explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md#controlling-rules). ## Action variables [action-variables] The following variables are specific to the {{ml}} rule types. An asterisk (`*`) marks the variables that you can use in actions related to recovered alerts. -You can also specify [variables common to all rules](/explore-analyze/alerting/alerts/rule-action-variables.md). +You can also specify [variables common to all rules](/explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md). ### {{anomaly-detect-cap}} alert action variables [anomaly-alert-action-variables] diff --git a/explore-analyze/query-filter/languages/esql-kibana.md b/explore-analyze/query-filter/languages/esql-kibana.md index 7da2437c53..8d7674912a 100644 --- a/explore-analyze/query-filter/languages/esql-kibana.md +++ b/explore-analyze/query-filter/languages/esql-kibana.md @@ -19,7 +19,7 @@ The {{esql}} editor is available in the following areas of {{kib}}: - [**Discover**](/explore-analyze/discover/try-esql.md): Explore and analyze your data using {{esql}} queries, visualize results, and save your findings to dashboards. - [**Dashboards**](/explore-analyze/dashboards.md): Create {{esql}}-powered visualization panels and interactive controls. -- [**Alerting**](/explore-analyze/alerting/alerts/rule-type-es-query.md): Create alerting rules based on {{esql}} queries. +- [**Alerting**](/explore-analyze/alerting/kibana-alerting-v1/rule-type-es-query-v1.md): Create alerting rules based on {{esql}} queries. - [**{{elastic-sec}} solution**](/solutions/security/esql-for-security.md): Use {{esql}} for threat hunting, detection rules, and investigation workflows. Find the complete list of supported commands, functions, and operators in the [{{esql}} reference](elasticsearch://reference/query-languages/esql/esql-syntax-reference.md). diff --git a/explore-analyze/report-and-share/automating-report-generation.md b/explore-analyze/report-and-share/automating-report-generation.md index c6ce3a3d86..864f76cf63 100644 --- a/explore-analyze/report-and-share/automating-report-generation.md +++ b/explore-analyze/report-and-share/automating-report-generation.md @@ -226,7 +226,7 @@ Save time by setting up a recurring task that automatically generates reports an notifications.connectors.default.email: my-email ``` -* (Optional) To control who can receive email notifications from {{kib}}, add the [`xpack.actions.email.domain_allowlist` setting](kibana://reference/configuration-reference/alerting-settings.md) to your `kibana.yml` file. To learn more about configuring this setting, refer to [Notifications domain allowlist](../alerting/alerts/notifications-domain-allowlist.md). +* (Optional) To control who can receive email notifications from {{kib}}, add the [`xpack.actions.email.domain_allowlist` setting](kibana://reference/configuration-reference/alerting-settings.md) to your `kibana.yml` file. To learn more about configuring this setting, refer to [Notifications domain allowlist](../alerting/kibana-alerting-v1/notifications-domain-allowlist-v1.md). ### Create a schedule [create-scheduled-report] @@ -253,7 +253,7 @@ Save time by setting up a recurring task that automatically generates reports an * **Message**: Keep the default email message, or enter your own. To format and structure your message text, use Markdown. ::::{note} - In the subject and message, you can also use the [Mustache](https://mustache.github.io/mustache.5.html) template syntax (`{{variable name}}`) to dynamically pass values from data sources when the email is generated. Enhancing the values passed by Mustache variables is also supported. Refer to [](../../explore-analyze/alerting/alerts/rule-action-variables.md#enhance-mustache-variables) to learn more. + In the subject and message, you can also use the [Mustache](https://mustache.github.io/mustache.5.html) template syntax (`{{variable name}}`) to dynamically pass values from data sources when the email is generated. Enhancing the values passed by Mustache variables is also supported. Refer to [](../../explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md#enhance-mustache-variables) to learn more. :::: 6. Click **Schedule exports** to save the schedule. diff --git a/explore-analyze/toc.yml b/explore-analyze/toc.yml index 429c36448b..7b441202d5 100644 --- a/explore-analyze/toc.yml +++ b/explore-analyze/toc.yml @@ -359,27 +359,80 @@ toc: children: - file: report-and-share/reporting-troubleshooting-csv.md - file: report-and-share/reporting-troubleshooting-pdf.md - - file: alerting.md + - file: alerting-overview.md children: - - file: alerting/alerts.md + - file: alerting/choose-an-alerting-system.md + - file: alerting/kibana-alerting-v1.md children: - - file: alerting/alerts/alerting-getting-started.md - - file: alerting/alerts/alerting-setup.md - - file: alerting/alerts/create-manage-rules.md - - file: alerting/alerts/view-alerts.md - - file: alerting/alerts/rule-types.md - children: - - file: alerting/alerts/rule-type-index-threshold.md - - file: alerting/alerts/rule-type-es-query.md - - file: alerting/alerts/geo-alerting.md - - file: alerting/alerts/rule-action-variables.md - - file: alerting/alerts/notifications-domain-allowlist.md - - file: alerting/alerts/alerting-troubleshooting.md - children: - - file: alerting/alerts/alerting-common-issues.md - - file: alerting/alerts/event-log-index.md - - file: alerting/alerts/testing-connectors.md - - file: alerting/alerts/maintenance-windows.md + - file: alerting/kibana-alerting-v1/alerting-getting-started-v1.md + - file: alerting/kibana-alerting-v1/alerting-setup-v1.md + - file: alerting/kibana-alerting-v1/create-manage-rules-v1.md + - file: alerting/kibana-alerting-v1/view-alerts-v1.md + - file: alerting/kibana-alerting-v1/rule-types-v1.md + children: + - file: alerting/kibana-alerting-v1/rule-type-index-threshold-v1.md + - file: alerting/kibana-alerting-v1/rule-type-es-query-v1.md + - file: alerting/kibana-alerting-v1/geo-alerting-v1.md + - file: alerting/kibana-alerting-v1/rule-action-variables-v1.md + - file: alerting/kibana-alerting-v1/notifications-domain-allowlist-v1.md + - file: alerting/kibana-alerting-v1/alerting-troubleshooting-v1.md + children: + - file: alerting/kibana-alerting-v1/alerting-common-issues-v1.md + - file: alerting/kibana-alerting-v1/event-log-index-v1.md + - file: alerting/kibana-alerting-v1/testing-connectors-v1.md + - file: alerting/kibana-alerting-v1/maintenance-windows-v1.md + - file: alerting/kibana-alerting-v2.md + children: + - file: alerting/kibana-alerting-v2/before-you-begin.md + children: + - file: alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md + - file: alerting/kibana-alerting-v2/before-you-begin/set-up.md + - file: alerting/kibana-alerting-v2/author-rules.md + children: + - file: alerting/kibana-alerting-v2/author-rules/rule-types.md + - file: alerting/kibana-alerting-v2/author-rules/rule-templates.md + - file: alerting/kibana-alerting-v2/author-rules/create-rules-ui.md + - file: alerting/kibana-alerting-v2/author-rules/create-rules-discover.md + - file: alerting/kibana-alerting-v2/author-rules/create-rules-yaml.md + - file: alerting/kibana-alerting-v2/author-rules/rule-settings.md + children: + - file: alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md + - file: alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md + - file: alerting/kibana-alerting-v2/author-rules/rule-settings/no-data-handling.md + - file: alerting/kibana-alerting-v2/author-rules/rule-settings/grouping.md + - file: alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md + children: + - file: alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md + - file: alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md + - file: alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md + - file: alerting/kibana-alerting-v2/author-rules/set-rule-data-sources.md + - file: alerting/kibana-alerting-v2/author-rules/rules-on-alerts.md + - file: alerting/kibana-alerting-v2/author-rules/production-considerations.md + - file: alerting/kibana-alerting-v2/manage-rules.md + children: + - file: alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md + - file: alerting/kibana-alerting-v2/manage-rules/snooze-disable-rules.md + - file: alerting/kibana-alerting-v2/manage-alerts.md + children: + - file: alerting/kibana-alerting-v2/manage-alerts/view-alerts.md + - file: alerting/kibana-alerting-v2/manage-alerts/investigate-respond.md + children: + - file: alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md + - file: alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md + - file: alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md + - file: alerting/kibana-alerting-v2/reduce-noise.md + children: + - file: alerting/kibana-alerting-v2/reduce-noise/activation-thresholds.md + - file: alerting/kibana-alerting-v2/reduce-noise/recovery-thresholds.md + - file: alerting/kibana-alerting-v2/reduce-noise/no-data-handling.md + - file: alerting/kibana-alerting-v2/reduce-noise/throttle.md + - file: alerting/kibana-alerting-v2/reduce-noise/grouping.md + - file: alerting/kibana-alerting-v2/reduce-noise/matcher.md + - file: alerting/kibana-alerting-v2/reduce-noise/snooze-or-silence.md + - file: alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md + - file: alerting/kibana-alerting-v2/reduce-noise/rules-on-alerts.md + - file: alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md + - file: alerting/kibana-alerting-v2/alert-event-field-reference.md - file: alerting/watcher.md children: - file: alerting/watcher/watcher-getting-started.md diff --git a/explore-analyze/transforms/transform-alerts.md b/explore-analyze/transforms/transform-alerts.md index ced21c8f00..e34fd26360 100644 --- a/explore-analyze/transforms/transform-alerts.md +++ b/explore-analyze/transforms/transform-alerts.md @@ -10,7 +10,7 @@ products: # Generating alerts for transforms [transform-alerts] -{{kib}} {{alert-features}} include support for transform health rules, which check the health of {{ctransforms}} with certain conditions. If the conditions of the rule are met, an alert is created and the associated actions run. For example, you can create a rule to check if a {{ctransform}} is started and to notify you in an email if it is not. To learn more about {{kib}} {{alert-features}}, refer to [Alerting](../alerting/alerts/alerting-getting-started.md). +{{kib}} {{alert-features}} include support for transform health rules, which check the health of {{ctransforms}} with certain conditions. If the conditions of the rule are met, an alert is created and the associated actions run. For example, you can create a rule to check if a {{ctransform}} is started and to notify you in an email if it is not. To learn more about {{kib}} {{alert-features}}, refer to [Alerting](../alerting/kibana-alerting-v1/alerting-getting-started-v1.md). ## Creating a rule [creating-transform-rules] @@ -75,7 +75,7 @@ The name of an alert is always the same as the transform ID of the associated tr ## Action variables [transform-action-variables] -The following variables are specific to the transform health rule type. You can also specify [variables common to all rules](../alerting/alerts/rule-action-variables.md). +The following variables are specific to the transform health rule type. You can also specify [variables common to all rules](../alerting/kibana-alerting-v1/rule-action-variables-v1.md). `context.message` : A preconstructed message for the rule. For example: `Transform test-1 is not started.` @@ -104,4 +104,4 @@ The following variables are specific to the transform health rule type. You can {{/context.results}} ``` -For more examples, refer to [Rule action variables](../alerting/alerts/rule-action-variables.md). +For more examples, refer to [Rule action variables](../alerting/kibana-alerting-v1/rule-action-variables-v1.md). diff --git a/explore-analyze/visualize/_snippets/emoji-table-esql.md b/explore-analyze/visualize/_snippets/emoji-table-esql.md index 3222d27a1d..7481f71156 100644 --- a/explore-analyze/visualize/_snippets/emoji-table-esql.md +++ b/explore-analyze/visualize/_snippets/emoji-table-esql.md @@ -55,4 +55,4 @@ To create the visualization: 6. Optionally, once the panel is saved, select the panel title to give it a meaningful name like `Status per host`. -Once you have your visualization working, you can add [controls](/explore-analyze/dashboards/add-controls.md#add-variable-control) to filter by host or time range, use [LOOKUP JOIN](elasticsearch://reference/query-languages/esql/esql-lookup-join.md) to enrich your data with metadata from other indices, or create [alerts](/explore-analyze/alerting/alerts/rule-type-es-query.md) based on the same query to get notified when status changes. \ No newline at end of file +Once you have your visualization working, you can add [controls](/explore-analyze/dashboards/add-controls.md#add-variable-control) to filter by host or time range, use [LOOKUP JOIN](elasticsearch://reference/query-languages/esql/esql-lookup-join.md) to enrich your data with metadata from other indices, or create [alerts](/explore-analyze/alerting/kibana-alerting-v1/rule-type-es-query-v1.md) based on the same query to get notified when status changes. \ No newline at end of file diff --git a/get-started/evaluate-elastic.md b/get-started/evaluate-elastic.md index 06069646fe..470979961d 100644 --- a/get-started/evaluate-elastic.md +++ b/get-started/evaluate-elastic.md @@ -307,7 +307,7 @@ For the second week, focus on the following activities: - Add a few additional data sources relevant to your use case. Refer to [Fleet integrations](/reference/fleet/manage-integrations.md) for available integrations. - Focus on metrics that demonstrate clear business value. Use [Lens visualizations](/explore-analyze/visualize/lens.md) to highlight KPIs. -- Set up alerts for critical conditions or thresholds. Refer to [Alerting](/explore-analyze/alerting.md) for configuration options. +- Set up alerts for critical conditions or thresholds. Refer to [Alerting](/explore-analyze/alerting-overview.md) for configuration options. - Create dashboards that answer key stakeholder questions. Refer to [Create a dashboard](/explore-analyze/dashboards/create-dashboard.md) for guidance. - Compare results against your success criteria. - Quantify time savings, efficiency gains, or risk reduction. diff --git a/get-started/the-stack.md b/get-started/the-stack.md index 67fec86113..fcd6e2d4ca 100644 --- a/get-started/the-stack.md +++ b/get-started/the-stack.md @@ -81,7 +81,7 @@ With {{kib}}, you can: - Build custom [visualizations](/explore-analyze/visualize.md) like charts, graphs, and metrics with tools like **Lens**, which offers a drag-and-drop experience. - Assemble your visualizations into interactive [dashboards](/explore-analyze/dashboards.md) to get a comprehensive overview of your information. - Perform [geospatial analysis](/explore-analyze/geospatial-analysis.md) and add maps to your dashboards. -- Configure notifications for significant data events and track incidents with [alerts and cases](/explore-analyze/alerting.md). +- Configure notifications for significant data events and track incidents with [alerts and cases](/explore-analyze/alerting-overview.md). - Manage resources such as processors, pipelines, data streams, trained models, and more. Each solution or project type provides access to customized features in {{kib}} such as built-in dashboards and [AI assistants](/explore-analyze/ai-features/ai-chat-experiences/ai-assistant.md). diff --git a/manage-data/data-store/data-streams/failure-store-recipes.md b/manage-data/data-store/data-streams/failure-store-recipes.md index ee56d86aaf..82e493a06a 100644 --- a/manage-data/data-store/data-streams/failure-store-recipes.md +++ b/manage-data/data-store/data-streams/failure-store-recipes.md @@ -307,7 +307,7 @@ Without tags in place it would not be as clear where in the pipeline the indexin ## Alerting on failed ingestion [failure-store-examples-alerting] -Since failure stores can be searched like a normal data stream, we can use them as inputs to [alerting rules](../../../explore-analyze/alerting/alerts.md) in +Since failure stores can be searched like a normal data stream, we can use them as inputs to [alerting rules](../../../explore-analyze/alerting/kibana-alerting-v1.md) in {{kib}}. Here is a simple alerting example that is triggered when more than ten indexing failures have occurred in the last five minutes for a data stream: :::::{stepper} diff --git a/redirects.yml b/redirects.yml index 247b177a35..69e856a10c 100644 --- a/redirects.yml +++ b/redirects.yml @@ -748,9 +748,9 @@ redirects: # Related to cases and alerting documentation restructuring # Main pages - 'explore-analyze/alerts-cases.md': 'explore-analyze/alerting.md' + 'explore-analyze/alerts-cases.md': 'explore-analyze/alerting-overview.md' 'explore-analyze/alerts-cases/cases.md': 'explore-analyze/cases.md' - 'explore-analyze/alerts-cases/alerts.md': 'explore-analyze/alerting/alerts.md' + 'explore-analyze/alerts-cases/alerts.md': 'explore-analyze/alerting/kibana-alerting-v1.md' 'explore-analyze/alerts-cases/watcher.md': 'explore-analyze/alerting/watcher.md' # Cases redirects @@ -763,22 +763,41 @@ redirects: 'explore-analyze/cases/configure-case-access.md': 'explore-analyze/cases/control-case-access.md' 'explore-analyze/cases/find-share-cases.md': 'explore-analyze/cases/search-share-cases.md' - # Alerts redirects - 'explore-analyze/alerts-cases/alerts/alerting-getting-started.md': 'explore-analyze/alerting/alerts/alerting-getting-started.md' - 'explore-analyze/alerts-cases/alerts/alerting-setup.md': 'explore-analyze/alerting/alerts/alerting-setup.md' - 'explore-analyze/alerts-cases/alerts/create-manage-rules.md': 'explore-analyze/alerting/alerts/create-manage-rules.md' - 'explore-analyze/alerts-cases/alerts/view-alerts.md': 'explore-analyze/alerting/alerts/view-alerts.md' - 'explore-analyze/alerts-cases/alerts/rule-types.md': 'explore-analyze/alerting/alerts/rule-types.md' - 'explore-analyze/alerts-cases/alerts/rule-type-index-threshold.md': 'explore-analyze/alerting/alerts/rule-type-index-threshold.md' - 'explore-analyze/alerts-cases/alerts/rule-type-es-query.md': 'explore-analyze/alerting/alerts/rule-type-es-query.md' - 'explore-analyze/alerts-cases/alerts/geo-alerting.md': 'explore-analyze/alerting/alerts/geo-alerting.md' - 'explore-analyze/alerts-cases/alerts/rule-action-variables.md': 'explore-analyze/alerting/alerts/rule-action-variables.md' - 'explore-analyze/alerts-cases/alerts/notifications-domain-allowlist.md': 'explore-analyze/alerting/alerts/notifications-domain-allowlist.md' - 'explore-analyze/alerts-cases/alerts/alerting-troubleshooting.md': 'explore-analyze/alerting/alerts/alerting-troubleshooting.md' - 'explore-analyze/alerts-cases/alerts/alerting-common-issues.md': 'explore-analyze/alerting/alerts/alerting-common-issues.md' - 'explore-analyze/alerts-cases/alerts/event-log-index.md': 'explore-analyze/alerting/alerts/event-log-index.md' - 'explore-analyze/alerts-cases/alerts/testing-connectors.md': 'explore-analyze/alerting/alerts/testing-connectors.md' - 'explore-analyze/alerts-cases/alerts/maintenance-windows.md': 'explore-analyze/alerting/alerts/maintenance-windows.md' + # Alerts redirects (alerts-cases → alerting/alerts → alerting/kibana-alerting-v1) + 'explore-analyze/alerts-cases/alerts/alerting-getting-started.md': 'explore-analyze/alerting/kibana-alerting-v1/alerting-getting-started-v1.md' + 'explore-analyze/alerts-cases/alerts/alerting-setup.md': 'explore-analyze/alerting/kibana-alerting-v1/alerting-setup-v1.md' + 'explore-analyze/alerts-cases/alerts/create-manage-rules.md': 'explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md' + 'explore-analyze/alerts-cases/alerts/view-alerts.md': 'explore-analyze/alerting/kibana-alerting-v1/view-alerts-v1.md' + 'explore-analyze/alerts-cases/alerts/rule-types.md': 'explore-analyze/alerting/kibana-alerting-v1/rule-types-v1.md' + 'explore-analyze/alerts-cases/alerts/rule-type-index-threshold.md': 'explore-analyze/alerting/kibana-alerting-v1/rule-type-index-threshold-v1.md' + 'explore-analyze/alerts-cases/alerts/rule-type-es-query.md': 'explore-analyze/alerting/kibana-alerting-v1/rule-type-es-query-v1.md' + 'explore-analyze/alerts-cases/alerts/geo-alerting.md': 'explore-analyze/alerting/kibana-alerting-v1/geo-alerting-v1.md' + 'explore-analyze/alerts-cases/alerts/rule-action-variables.md': 'explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md' + 'explore-analyze/alerts-cases/alerts/notifications-domain-allowlist.md': 'explore-analyze/alerting/kibana-alerting-v1/notifications-domain-allowlist-v1.md' + 'explore-analyze/alerts-cases/alerts/alerting-troubleshooting.md': 'explore-analyze/alerting/kibana-alerting-v1/alerting-troubleshooting-v1.md' + 'explore-analyze/alerts-cases/alerts/alerting-common-issues.md': 'explore-analyze/alerting/kibana-alerting-v1/alerting-common-issues-v1.md' + 'explore-analyze/alerts-cases/alerts/event-log-index.md': 'explore-analyze/alerting/kibana-alerting-v1/event-log-index-v1.md' + 'explore-analyze/alerts-cases/alerts/testing-connectors.md': 'explore-analyze/alerting/kibana-alerting-v1/testing-connectors-v1.md' + 'explore-analyze/alerts-cases/alerts/maintenance-windows.md': 'explore-analyze/alerting/kibana-alerting-v1/maintenance-windows-v1.md' + + # Alerting v1 restructure redirects (alerting/alerts → alerting/kibana-alerting-v1) + 'explore-analyze/alerting.md': 'explore-analyze/alerting-overview.md' + 'explore-analyze/alerting/alerts.md': 'explore-analyze/alerting/kibana-alerting-v1.md' + 'explore-analyze/alerting/alerts/alerting-getting-started.md': 'explore-analyze/alerting/kibana-alerting-v1/alerting-getting-started-v1.md' + 'explore-analyze/alerting/alerts/alerting-setup.md': 'explore-analyze/alerting/kibana-alerting-v1/alerting-setup-v1.md' + 'explore-analyze/alerting/alerts/create-manage-rules.md': 'explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md' + 'explore-analyze/alerting/alerts/view-alerts.md': 'explore-analyze/alerting/kibana-alerting-v1/view-alerts-v1.md' + 'explore-analyze/alerting/alerts/rule-types.md': 'explore-analyze/alerting/kibana-alerting-v1/rule-types-v1.md' + 'explore-analyze/alerting/alerts/rule-type-index-threshold.md': 'explore-analyze/alerting/kibana-alerting-v1/rule-type-index-threshold-v1.md' + 'explore-analyze/alerting/alerts/rule-type-es-query.md': 'explore-analyze/alerting/kibana-alerting-v1/rule-type-es-query-v1.md' + 'explore-analyze/alerting/alerts/geo-alerting.md': 'explore-analyze/alerting/kibana-alerting-v1/geo-alerting-v1.md' + 'explore-analyze/alerting/alerts/rule-action-variables.md': 'explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md' + 'explore-analyze/alerting/alerts/notifications-domain-allowlist.md': 'explore-analyze/alerting/kibana-alerting-v1/notifications-domain-allowlist-v1.md' + 'explore-analyze/alerting/alerts/alerting-troubleshooting.md': 'explore-analyze/alerting/kibana-alerting-v1/alerting-troubleshooting-v1.md' + 'explore-analyze/alerting/alerts/alerting-common-issues.md': 'explore-analyze/alerting/kibana-alerting-v1/alerting-common-issues-v1.md' + 'explore-analyze/alerting/alerts/event-log-index.md': 'explore-analyze/alerting/kibana-alerting-v1/event-log-index-v1.md' + 'explore-analyze/alerting/alerts/testing-connectors.md': 'explore-analyze/alerting/kibana-alerting-v1/testing-connectors-v1.md' + 'explore-analyze/alerting/alerts/maintenance-windows.md': 'explore-analyze/alerting/kibana-alerting-v1/maintenance-windows-v1.md' # Watcher redirects 'explore-analyze/alerts-cases/watcher/watcher-getting-started.md': 'explore-analyze/alerting/watcher/watcher-getting-started.md' diff --git a/reference/fleet/alerting-rule-templates.md b/reference/fleet/alerting-rule-templates.md index f9a492a510..88640acfb1 100644 --- a/reference/fleet/alerting-rule-templates.md +++ b/reference/fleet/alerting-rule-templates.md @@ -64,6 +64,6 @@ The preconfigured defaults include: - **Alert delay (alert suppression)** : The number of consecutive runs for which conditions must be met before an alert is created. -For details about fields in the Create rule form and how the rule evaluates data, refer to the [{{es}} query rule type](/explore-analyze/alerting/alerts/rule-type-es-query.md). +For details about fields in the Create rule form and how the rule evaluates data, refer to the [{{es}} query rule type](/explore-analyze/alerting/kibana-alerting-v1/rule-type-es-query-v1.md). diff --git a/reference/fleet/monitor-elastic-agent.md b/reference/fleet/monitor-elastic-agent.md index 8545d437a1..666efd4d70 100644 --- a/reference/fleet/monitor-elastic-agent.md +++ b/reference/fleet/monitor-elastic-agent.md @@ -255,7 +255,7 @@ stack: ga 9.0-9.1 For versions 9.2.0 and later, {{agent}} includes out-of-the-box alert rules for the most common health checks. Check out [Elastic Agent built-in alerts](/reference/fleet/alert-templates.md). ::: -You can access the health status of {{fleet}}-managed {{agents}} and other {{fleet}} settings through internal {{fleet}} indices. This enables you to leverage various applications within the {{stack}} that can be triggered by the provided information. For instance, you can now create alerts and machine learning (ML) jobs based on these specific fields. Refer to the [Alerting documentation](/explore-analyze/alerting.md) or see the [example](#fleet-alerting-example) on this page to learn how to define rules that can trigger actions when certain conditions are met. +You can access the health status of {{fleet}}-managed {{agents}} and other {{fleet}} settings through internal {{fleet}} indices. This enables you to leverage various applications within the {{stack}} that can be triggered by the provided information. For instance, you can now create alerts and machine learning (ML) jobs based on these specific fields. Refer to the [Alerting documentation](/explore-analyze/alerting-overview.md) or see the [example](#fleet-alerting-example) on this page to learn how to define rules that can trigger actions when certain conditions are met. This functionality allows you to effectively track an agent’s status, and identify scenarios where it has gone offline, is experiencing health issues, or is facing challenges related to input or output. diff --git a/reference/glossary/index.md b/reference/glossary/index.md index 3397d564e4..abdaf58ac3 100644 --- a/reference/glossary/index.md +++ b/reference/glossary/index.md @@ -658,7 +658,7 @@ $$$glossary-rule$$$ rule : A set of [conditions](/reference/glossary/index.md#glossary-condition), schedules, and [actions](/reference/glossary/index.md#glossary-action) that enable notifications. See [{{rules-ui}}](/reference/glossary/index.md#glossary-rules). $$$glossary-rules$$$ Rules -: A comprehensive view of all your alerting rules. Enables you to access and manage rules for all {{kib}} apps from one place. See [{{rules-ui}}](/explore-analyze/alerting.md). +: A comprehensive view of all your alerting rules. Enables you to access and manage rules for all {{kib}} apps from one place. See [{{rules-ui}}](/explore-analyze/alerting-overview.md). $$$glossary-runner$$$ runner : A local control agent that runs on all hosts, used to deploy local containers based on role definitions. Ensures that containers assigned to it exist and are able to run, and creates or recreates the containers if necessary. @@ -733,7 +733,7 @@ $$$glossary-split$$$ split : Adds more [primary shards](/reference/glossary/index.md#glossary-primary-shard) to an [index](/reference/glossary/index.md#glossary-index). $$$glossary-stack-alert$$$ stack rule -: The general purpose rule types {{kib}} provides out of the box. Refer to [Stack rules](/explore-analyze/alerting/alerts/rule-types.md#stack-rules). +: The general purpose rule types {{kib}} provides out of the box. Refer to [Stack rules](/explore-analyze/alerting/kibana-alerting-v1/rule-types-v1.md#stack-rules). $$$glossary-standalone$$$ standalone : This mode allows manual configuration and management of {{agent}}s locally on the systems where they are installed. See [Install standalone {{agent}}s](/reference/fleet/install-standalone-elastic-agent.md). diff --git a/solutions/observability/apm/create-apm-rules-alerts.md b/solutions/observability/apm/create-apm-rules-alerts.md index 72f371a1b4..c1d7e3b322 100644 --- a/solutions/observability/apm/create-apm-rules-alerts.md +++ b/solutions/observability/apm/create-apm-rules-alerts.md @@ -28,7 +28,7 @@ The following APM rules are supported: | **Latency threshold** | Alert when the latency or failed transaction rate is abnormal.Threshold rules can be as broad or as granular as you’d like, enabling you to define exactly when you want to be alerted—whether that’s at the environment level, service name level, transaction type level, and/or transaction name level. Read more in [Latency threshold rule →](/solutions/observability/incident-management/create-latency-threshold-rule.md) | ::::{tip} -For a complete walkthrough of the **Create rule** flyout panel, including detailed information on each configurable property, see Kibana’s [Create and manage rules](/explore-analyze/alerting/alerts/create-manage-rules.md). +For a complete walkthrough of the **Create rule** flyout panel, including detailed information on each configurable property, see Kibana’s [Create and manage rules](/explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md). :::: @@ -67,8 +67,8 @@ From the Applications UI, select **Alerts and rules** → **Manage rules** to be ### More information [apm-alert-more-info] -See [Alerting](/explore-analyze/alerting.md) for more information. +See [Alerting](/explore-analyze/alerting-overview.md) for more information. ::::{note} -If you are using an **on-premise** Elastic Stack deployment with security, communication between Elasticsearch and Kibana must have TLS configured. More information is in the alerting [prerequisites](/explore-analyze/alerting/alerts/alerting-setup.md#alerting-prerequisites). +If you are using an **on-premise** Elastic Stack deployment with security, communication between Elasticsearch and Kibana must have TLS configured. More information is in the alerting [prerequisites](/explore-analyze/alerting/kibana-alerting-v1/alerting-setup-v1.md#alerting-prerequisites). :::: \ No newline at end of file diff --git a/solutions/observability/incident-management/create-a-degraded-docs-rule.md b/solutions/observability/incident-management/create-a-degraded-docs-rule.md index 6550b88530..2f39fb7728 100644 --- a/solutions/observability/incident-management/create-a-degraded-docs-rule.md +++ b/solutions/observability/incident-management/create-a-degraded-docs-rule.md @@ -125,7 +125,7 @@ Use the default notification message or customize it. You can add more context t :screenshot: ::: -The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/alerts/rule-action-variables.md). +The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md). `context.alertDetailsUrl` : Link to the alert troubleshooting view for further context and details. This will be an empty string if the `server.publicBaseUrl` is not configured. diff --git a/solutions/observability/incident-management/create-a-failed-docs-rule.md b/solutions/observability/incident-management/create-a-failed-docs-rule.md index c097e655a1..86f87a554b 100644 --- a/solutions/observability/incident-management/create-a-failed-docs-rule.md +++ b/solutions/observability/incident-management/create-a-failed-docs-rule.md @@ -133,7 +133,7 @@ Use the default notification message or customize it. You can add more context t :screenshot: ::: -The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/alerts/rule-action-variables.md). +The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md). `context.alertDetailsUrl` : Link to the alert troubleshooting view for further context and details. This will be an empty string if the `server.publicBaseUrl` is not configured. diff --git a/solutions/observability/incident-management/create-an-anomaly-detection-rule.md b/solutions/observability/incident-management/create-an-anomaly-detection-rule.md index 57464ab832..946bb5c691 100644 --- a/solutions/observability/incident-management/create-an-anomaly-detection-rule.md +++ b/solutions/observability/incident-management/create-an-anomaly-detection-rule.md @@ -149,7 +149,7 @@ Use the default notification message or customize it. You can add more context t :screenshot: ::: -The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/alerts/rule-action-variables.md). +The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md). `context.anomalyExplorerUrl` : URL to open in the Anomaly Explorer. diff --git a/solutions/observability/incident-management/create-an-apm-anomaly-rule.md b/solutions/observability/incident-management/create-an-apm-anomaly-rule.md index 09be558ea7..b592229796 100644 --- a/solutions/observability/incident-management/create-an-apm-anomaly-rule.md +++ b/solutions/observability/incident-management/create-an-apm-anomaly-rule.md @@ -116,7 +116,7 @@ Use the default notification message or customize it. You can add more context t :screenshot: ::: -The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/alerts/rule-action-variables.md). +The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md). `context.alertDetailsUrl` : Link to the alert troubleshooting view for further context and details. This will be an empty string if the `server.publicBaseUrl` is not configured. diff --git a/solutions/observability/incident-management/create-an-elasticsearch-query-rule.md b/solutions/observability/incident-management/create-an-elasticsearch-query-rule.md index e206480658..71a03c5bb3 100644 --- a/solutions/observability/incident-management/create-an-elasticsearch-query-rule.md +++ b/solutions/observability/incident-management/create-an-elasticsearch-query-rule.md @@ -187,7 +187,7 @@ Use the default notification message or customize it. You can add more context t :screenshot: ::: -The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/alerts/rule-action-variables.md). +The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md). `context.conditions` : A string that describes the threshold condition. Example: `count greater than 4`. diff --git a/solutions/observability/incident-management/create-an-error-count-threshold-rule.md b/solutions/observability/incident-management/create-an-error-count-threshold-rule.md index 510c90df6e..8edcef087a 100644 --- a/solutions/observability/incident-management/create-an-error-count-threshold-rule.md +++ b/solutions/observability/incident-management/create-an-error-count-threshold-rule.md @@ -117,7 +117,7 @@ Use the default notification message or customize it. You can add more context t :screenshot: ::: -The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/alerts/rule-action-variables.md). +The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md). `context.alertDetailsUrl` : Link to the alert troubleshooting view for further context and details. This will be an empty string if the `server.publicBaseUrl` is not configured. diff --git a/solutions/observability/incident-management/create-an-inventory-rule.md b/solutions/observability/incident-management/create-an-inventory-rule.md index 6eee6c3af6..1f532dfc64 100644 --- a/solutions/observability/incident-management/create-an-inventory-rule.md +++ b/solutions/observability/incident-management/create-an-inventory-rule.md @@ -135,7 +135,7 @@ Use the default notification message or customize it. You can add more context t :screenshot: ::: -The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/alerts/rule-action-variables.md). +The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md). `context.alertDetailsUrl` : Link to the alert troubleshooting view for further context and details. This will be an empty string if the `server.publicBaseUrl` is not configured. diff --git a/solutions/observability/incident-management/create-an-slo-burn-rate-rule.md b/solutions/observability/incident-management/create-an-slo-burn-rate-rule.md index 736baac24d..795a2f6384 100644 --- a/solutions/observability/incident-management/create-an-slo-burn-rate-rule.md +++ b/solutions/observability/incident-management/create-an-slo-burn-rate-rule.md @@ -127,7 +127,7 @@ Use the default notification message or customize it. You can add more context t :screenshot: ::: -The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/alerts/rule-action-variables.md). +The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md). `context.alertDetailsUrl` : Link to the alert troubleshooting view for further context and details. This will be an empty string if the `server.publicBaseUrl` is not configured. diff --git a/solutions/observability/incident-management/create-custom-threshold-rule.md b/solutions/observability/incident-management/create-custom-threshold-rule.md index 16b36df140..50c2733333 100644 --- a/solutions/observability/incident-management/create-custom-threshold-rule.md +++ b/solutions/observability/incident-management/create-custom-threshold-rule.md @@ -225,7 +225,7 @@ Use the default notification message or customize it. You can add more context t :screenshot: ::: -The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/alerts/rule-action-variables.md). +The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md). `context.alertDetailsUrl` : Link to the alert troubleshooting view for further context and details. This will be an empty string if the `server.publicBaseUrl` is not configured. diff --git a/solutions/observability/incident-management/create-failed-transaction-rate-threshold-rule.md b/solutions/observability/incident-management/create-failed-transaction-rate-threshold-rule.md index 7ed3389c28..4409f95f79 100644 --- a/solutions/observability/incident-management/create-failed-transaction-rate-threshold-rule.md +++ b/solutions/observability/incident-management/create-failed-transaction-rate-threshold-rule.md @@ -117,7 +117,7 @@ Use the default notification message or customize it. You can add more context t :screenshot: ::: -The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/alerts/rule-action-variables.md). +The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md). `context.alertDetailsUrl` : Link to the alert troubleshooting view for further context and details. This will be an empty string if the `server.publicBaseUrl` is not configured. diff --git a/solutions/observability/incident-management/create-latency-threshold-rule.md b/solutions/observability/incident-management/create-latency-threshold-rule.md index befe2f368e..955f70af22 100644 --- a/solutions/observability/incident-management/create-latency-threshold-rule.md +++ b/solutions/observability/incident-management/create-latency-threshold-rule.md @@ -121,7 +121,7 @@ Use the default notification message or customize it. You can add more context t :screenshot: ::: -The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/alerts/rule-action-variables.md). +The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md). `context.alertDetailsUrl` : Link to the alert troubleshooting view for further context and details. This will be an empty string if the `server.publicBaseUrl` is not configured. diff --git a/solutions/observability/incident-management/create-log-threshold-rule.md b/solutions/observability/incident-management/create-log-threshold-rule.md index c71792e17e..98060160b3 100644 --- a/solutions/observability/incident-management/create-log-threshold-rule.md +++ b/solutions/observability/incident-management/create-log-threshold-rule.md @@ -157,7 +157,7 @@ Use the default notification message or customize it. You can add more context t :screenshot: ::: -The following variables are specific to this rule type. You an also specify [variables common to all rules](/explore-analyze/alerting/alerts/rule-action-variables.md). +The following variables are specific to this rule type. You an also specify [variables common to all rules](/explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md). `context.alertDetailsUrl` : Link to the alert troubleshooting view for further context and details. This will be an empty string if the `server.publicBaseUrl` is not configured. diff --git a/solutions/observability/incident-management/create-manage-rules.md b/solutions/observability/incident-management/create-manage-rules.md index 5a1871becf..d0dbc0b530 100644 --- a/solutions/observability/incident-management/create-manage-rules.md +++ b/solutions/observability/incident-management/create-manage-rules.md @@ -96,7 +96,7 @@ When you snooze a rule, the rule checks continue to run on a schedule but the al When a rule is in a snoozed state, you can cancel or change the duration of this state. -To temporarily suppress notifications for *all* rules, create a [maintenance window](/explore-analyze/alerting/alerts/maintenance-windows.md). +To temporarily suppress notifications for *all* rules, create a [maintenance window](/explore-analyze/alerting/kibana-alerting-v1/maintenance-windows-v1.md). ## Import and export rules [observability-create-manage-rules-import-and-export-rules] diff --git a/solutions/observability/incident-management/create-metric-threshold-rule.md b/solutions/observability/incident-management/create-metric-threshold-rule.md index 874837132d..93b493dee1 100644 --- a/solutions/observability/incident-management/create-metric-threshold-rule.md +++ b/solutions/observability/incident-management/create-metric-threshold-rule.md @@ -154,7 +154,7 @@ Use the default notification message or customize it. You can add more context t :screenshot: ::: -The following variables are specific to this rule type. You an also specify [variables common to all rules](/explore-analyze/alerting/alerts/rule-action-variables.md). +The following variables are specific to this rule type. You an also specify [variables common to all rules](/explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md). `context.alertDetailsUrl` : Link to the alert troubleshooting view for further context and details. This will be an empty string if the `server.publicBaseUrl` is not configured. diff --git a/solutions/observability/incident-management/create-monitor-status-rule.md b/solutions/observability/incident-management/create-monitor-status-rule.md index c5149ea62e..155c086781 100644 --- a/solutions/observability/incident-management/create-monitor-status-rule.md +++ b/solutions/observability/incident-management/create-monitor-status-rule.md @@ -133,7 +133,7 @@ Use the default notification message or customize it. You can add more context t :screenshot: ::: -The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/alerts/rule-action-variables.md). +The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md). `context.checkedAt` : Timestamp of the monitor run. diff --git a/solutions/observability/incident-management/create-tls-certificate-rule.md b/solutions/observability/incident-management/create-tls-certificate-rule.md index 6ec99e9c40..d258f411e5 100644 --- a/solutions/observability/incident-management/create-tls-certificate-rule.md +++ b/solutions/observability/incident-management/create-tls-certificate-rule.md @@ -126,7 +126,7 @@ Use the default notification message or customize it. You can add more context t :screenshot: ::: -The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/alerts/rule-action-variables.md). +The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md). `context.checkedAt` : Timestamp of the monitor run. @@ -278,7 +278,7 @@ Use the default notification message or customize it. You can add more context t :screenshot: ::: -The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/alerts/rule-action-variables.md). +The following variables are specific to this rule type. You can also specify [variables common to all rules](/explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md). `context.agingCommonNameAndDate` : The common names and expiration date/time of the detected certs. diff --git a/solutions/observability/incident-management/view-alerts.md b/solutions/observability/incident-management/view-alerts.md index a175249969..838a3466b6 100644 --- a/solutions/observability/incident-management/view-alerts.md +++ b/solutions/observability/incident-management/view-alerts.md @@ -26,7 +26,7 @@ You can track and manage alerts for your applications and SLOs from the **Alerts % Stateful only for the following note ::::{note} -You can centrally manage rules from the [{{kib}} Management UI](/explore-analyze/alerting/alerts/create-manage-rules.md) that provides a set of built-in [rule types](/explore-analyze/alerting/alerts/rule-types.md) and [connectors](/deploy-manage/manage-connectors.md) for you to use. Click **Manage Rules**. +You can centrally manage rules from the [{{kib}} Management UI](/explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md) that provides a set of built-in [rule types](/explore-analyze/alerting/kibana-alerting-v1/rule-types-v1.md) and [connectors](/deploy-manage/manage-connectors.md) for you to use. Click **Manage Rules**. :::: :::{image} /solutions/images/serverless-observability-alerts-view.png @@ -86,14 +86,14 @@ The relevancy of alerts is determined by how closely they match the current aler There are four common alert statuses: `active` -: The conditions for the rule are met. If the rule has [actions](../../../explore-analyze/alerting/alerts/create-manage-rules.md#defining-rules-actions-details), {{kib}} generates notifications based on the actions' notification settings. +: The conditions for the rule are met. If the rule has [actions](../../../explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md#defining-rules-actions-details), {{kib}} generates notifications based on the actions' notification settings. `flapping` -: The alert switched repeatedly between active and recovered states. If actions are configured to run when its status changes, they are suppressed. Refer to [Configure alert flapping](/explore-analyze/alerting/alerts/create-manage-rules.md#defining-rules-flapping-details) to learn more about configuring alert flapping for rules. +: The alert switched repeatedly between active and recovered states. If actions are configured to run when its status changes, they are suppressed. Refer to [Configure alert flapping](/explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md#defining-rules-flapping-details) to learn more about configuring alert flapping for rules. `recovered` -: The conditions for the rule are no longer met. If the rule has [recovery actions](../../../explore-analyze/alerting/alerts/create-manage-rules.md#defining-rules-actions-details), {{kib}} generates notifications based on the actions' notification settings. Recovery actions only run if the rule's conditions aren't met during the current rule execution, but were in the previous one. +: The conditions for the rule are no longer met. If the rule has [recovery actions](../../../explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md#defining-rules-actions-details), {{kib}} generates notifications based on the actions' notification settings. Recovery actions only run if the rule's conditions aren't met during the current rule execution, but were in the previous one. An active alert changes to recovered if the conditions for the rule that generated it are no longer met. @@ -169,7 +169,7 @@ Use the toolbar buttons in the upper-left of the alerts table to customize the c * **x fields sorted**: Sort the table by one or more columns. * **Fields**: Select the fields to display in the table. -For example, click **Fields** and choose the `Maintenance Windows` field. If an alert was affected by a maintenance window, its identifier appears in the new column. For more information about their impact on alert notifications, refer to [{{maint-windows-cap}}](/explore-analyze/alerting/alerts/maintenance-windows.md). +For example, click **Fields** and choose the `Maintenance Windows` field. If an alert was affected by a maintenance window, its identifier appears in the new column. For more information about their impact on alert notifications, refer to [{{maint-windows-cap}}](/explore-analyze/alerting/kibana-alerting-v1/maintenance-windows-v1.md). You can also use the toolbar buttons in the upper-right to customize the display options or view the table in full-screen mode. @@ -185,4 +185,4 @@ stack: ga 9.4+, preview 9.1-9.3 serverless: ga ``` -Manage the size of alert indices in your space by clearing out alerts that are older or infrequently accessed. You can do this by [running an alert cleanup task](../../../explore-analyze/alerting/alerts/view-alerts.md#clean-up-alerts), which deletes alerts according to the criteria that you define. \ No newline at end of file +Manage the size of alert indices in your space by clearing out alerts that are older or infrequently accessed. You can do this by [running an alert cleanup task](../../../explore-analyze/alerting/kibana-alerting-v1/view-alerts-v1.md#clean-up-alerts), which deletes alerts according to the criteria that you define. \ No newline at end of file diff --git a/solutions/observability/synthetics/cli.md b/solutions/observability/synthetics/cli.md index a6a68757c3..7da06b781f 100644 --- a/solutions/observability/synthetics/cli.md +++ b/solutions/observability/synthetics/cli.md @@ -181,7 +181,7 @@ If the journey contains external NPM packages other than the `@elastic/synthetic This can also be set in the configuration file using [the `monitor.fields` option](/solutions/observability/synthetics/configure-projects.md#synthetics-configuration-monitor). The value defined via the CLI will take precedence. `--maintenance-windows Array` -: A list of maintenance window IDs used to associate every monitor with one or more [maintenance windows](/explore-analyze/alerting/alerts/maintenance-windows.md). This argument accepts a variable number of values as shown in the example. +: A list of maintenance window IDs used to associate every monitor with one or more [maintenance windows](/explore-analyze/alerting/kibana-alerting-v1/maintenance-windows-v1.md). This argument accepts a variable number of values as shown in the example. Example: `--maintenance-windows "maintenance-window-ID-1" "maintenance-window-ID-2` diff --git a/solutions/observability/synthetics/configure-lightweight-monitors.md b/solutions/observability/synthetics/configure-lightweight-monitors.md index 3870286ab4..68aa232557 100644 --- a/solutions/observability/synthetics/configure-lightweight-monitors.md +++ b/solutions/observability/synthetics/configure-lightweight-monitors.md @@ -404,7 +404,7 @@ $$$monitor-maintenanceWindows$$$ **`maintenance_windows`** : Type: [string](/solutions/observability/synthetics/configure-lightweight-monitors.md#synthetics-lightweight-data-string) - A list of maintenance window IDs used to associate this monitor with one or more [maintenance windows](/explore-analyze/alerting/alerts/maintenance-windows.md). + A list of maintenance window IDs used to associate this monitor with one or more [maintenance windows](/explore-analyze/alerting/kibana-alerting-v1/maintenance-windows-v1.md). **Examples**: diff --git a/solutions/observability/synthetics/configure-projects.md b/solutions/observability/synthetics/configure-projects.md index dbf47653ef..81c3733ed4 100644 --- a/solutions/observability/synthetics/configure-projects.md +++ b/solutions/observability/synthetics/configure-projects.md @@ -302,7 +302,7 @@ For information on configuring monitors individually, refer to: * [Configure lightweight monitors](/solutions/observability/synthetics/configure-lightweight-monitors.md) for lightweight monitors `maintenanceWindows` (`Array`) -: A list of maintenance window IDs used to associate this monitor with one or more [maintenance windows](/explore-analyze/alerting/alerts/maintenance-windows.md). +: A list of maintenance window IDs used to associate this monitor with one or more [maintenance windows](/explore-analyze/alerting/kibana-alerting-v1/maintenance-windows-v1.md). ## `proxy` [synthetics-configuration-proxy] diff --git a/solutions/security/detect-and-alert/common-rule-settings.md b/solutions/security/detect-and-alert/common-rule-settings.md index 25535c4f4b..e73867ab75 100644 --- a/solutions/security/detect-and-alert/common-rule-settings.md +++ b/solutions/security/detect-and-alert/common-rule-settings.md @@ -215,7 +215,7 @@ Host isolation involves quarantining a host from the network to prevent further You can use [mustache syntax](http://mustache.github.io/) to add variables to notification messages. The action frequency you select determines the available variables. ::::{note} -Refer to [Action frequency: Summary of alerts](/explore-analyze/alerting/alerts/rule-action-variables.md#alert-summary-action-variables) to learn about additional variables that can be passed if the rule's action frequency is **Summary of alerts**. +Refer to [Action frequency: Summary of alerts](/explore-analyze/alerting/kibana-alerting-v1/rule-action-variables-v1.md#alert-summary-action-variables) to learn about additional variables that can be passed if the rule's action frequency is **Summary of alerts**. :::: ### Variables for all rules [all-rule-variables] diff --git a/solutions/security/detect-and-alert/cross-cluster-search-detection-rules.md b/solutions/security/detect-and-alert/cross-cluster-search-detection-rules.md index c6270b70c2..1158ae5c44 100644 --- a/solutions/security/detect-and-alert/cross-cluster-search-detection-rules.md +++ b/solutions/security/detect-and-alert/cross-cluster-search-detection-rules.md @@ -78,7 +78,7 @@ This section explains the general process for setting up cross-cluster search in ## Update a rule’s API key [update-api-key] -Each detection rule has its own [API key](../../../explore-analyze/alerting/alerts/alerting-setup.md#alerting-authorization), which determines the data and actions the rule is allowed to access. When a user creates a new rule or changes an existing rule, their current privileges are saved to the rule’s API key. If that user’s privileges change in the future, the rule **does not** automatically update with the user’s latest privileges — you must update the rule’s API key if you want to update its privileges. +Each detection rule has its own [API key](../../../explore-analyze/alerting/kibana-alerting-v1/alerting-setup-v1.md#alerting-authorization), which determines the data and actions the rule is allowed to access. When a user creates a new rule or changes an existing rule, their current privileges are saved to the rule’s API key. If that user’s privileges change in the future, the rule **does not** automatically update with the user’s latest privileges — you must update the rule’s API key if you want to update its privileges. ::::{important} A rule’s API key is different from the API key you might have created for [authentication between local and remote clusters](#set-up-ccs-rules). diff --git a/solutions/security/detect-and-alert/manage-detection-alerts.md b/solutions/security/detect-and-alert/manage-detection-alerts.md index 14489623c7..45a9d14126 100644 --- a/solutions/security/detect-and-alert/manage-detection-alerts.md +++ b/solutions/security/detect-and-alert/manage-detection-alerts.md @@ -274,4 +274,4 @@ stack: ga 9.4+, preview 9.1-9.3 serverless: ga ``` -Manage the size of alert indices in your space by clearing out alerts that are older or infrequently accessed. You can do this by [running an alert cleanup task](../../../explore-analyze/alerting/alerts/view-alerts.md#clean-up-alerts), which deletes alerts according to the criteria that you define. \ No newline at end of file +Manage the size of alert indices in your space by clearing out alerts that are older or infrequently accessed. You can do this by [running an alert cleanup task](../../../explore-analyze/alerting/kibana-alerting-v1/view-alerts-v1.md#clean-up-alerts), which deletes alerts according to the criteria that you define. \ No newline at end of file diff --git a/solutions/security/detect-and-alert/manage-detection-rules.md b/solutions/security/detect-and-alert/manage-detection-rules.md index 52d9111ce9..9760bd5e21 100644 --- a/solutions/security/detect-and-alert/manage-detection-rules.md +++ b/solutions/security/detect-and-alert/manage-detection-rules.md @@ -79,7 +79,7 @@ Use bulk editing to update settings on multiple rules simultaneously. Rules that * **Index patterns**: Add or delete the index patterns used by all selected rules. * **Tags**: Add or delete tags on all selected rules. * **Custom highlighted fields**: Add custom highlighted fields on all selected rules. You can choose any fields that are available in the [default {{elastic-sec}} indices](/solutions/security/get-started/configure-advanced-settings.md#update-sec-indices), or enter field names from other indices. To overwrite a rule's current set of custom highlighted fields, select the **Overwrite all selected rules' custom highlighted fields** option, then click **Save**. - * **Add rule actions**: Add [rule actions](/solutions/security/detect-and-alert/common-rule-settings.md#rule-notifications) on all selected rules. If you add multiple rule actions, you can specify an action frequency for each of them. To overwrite the frequency of existing rule actions, select the option to **Overwrite all selected rules actions**. Keep in mind that rule actions won't run during a [maintenance window](/explore-analyze/alerting/alerts/maintenance-windows.md) or while the rule is [snoozed](#snooze-rule-actions); they'll resume after the maintenance window or snooze period ends. + * **Add rule actions**: Add [rule actions](/solutions/security/detect-and-alert/common-rule-settings.md#rule-notifications) on all selected rules. If you add multiple rule actions, you can specify an action frequency for each of them. To overwrite the frequency of existing rule actions, select the option to **Overwrite all selected rules actions**. Keep in mind that rule actions won't run during a [maintenance window](/explore-analyze/alerting/kibana-alerting-v1/maintenance-windows-v1.md) or while the rule is [snoozed](#snooze-rule-actions); they'll resume after the maintenance window or snooze period ends. * **Update rule schedules**: Update the [schedules](/solutions/security/detect-and-alert/common-rule-settings.md#rule-schedule) and look-back times on all selected rules. * **Apply Timeline template**: Apply a specified [Timeline template](/solutions/security/investigate/timeline-templates.md) to the selected rules. You can also choose **None** to remove Timeline templates from the selected rules. diff --git a/solutions/security/detect-and-alert/reduce-noise-and-false-positives.md b/solutions/security/detect-and-alert/reduce-noise-and-false-positives.md index 4c7ca38344..93d9cbd434 100644 --- a/solutions/security/detect-and-alert/reduce-noise-and-false-positives.md +++ b/solutions/security/detect-and-alert/reduce-noise-and-false-positives.md @@ -66,7 +66,7 @@ Acts on: **notifications, after alerts are created and stored** *"Don't trigger any actions right now. I'll review later."* -Temporarily pause all of a rule's actions—including notifications (emails, Slack messages, webhooks), ticket creation, and other automated responses—without affecting rule execution or alert creation. Alerts generated during a snooze period are stored normally and visible in the Alerts UI. Snoozing expires automatically or can be canceled manually. For space-wide pausing, use a [maintenance window](/explore-analyze/alerting/alerts/maintenance-windows.md). +Temporarily pause all of a rule's actions—including notifications (emails, Slack messages, webhooks), ticket creation, and other automated responses—without affecting rule execution or alert creation. Alerts generated during a snooze period are stored normally and visible in the Alerts UI. Snoozing expires automatically or can be canceled manually. For space-wide pausing, use a [maintenance window](/explore-analyze/alerting/kibana-alerting-v1/maintenance-windows-v1.md). Refer to [Snooze rule actions](/solutions/security/detect-and-alert/manage-detection-rules.md#snooze-rule-actions) for more guidance. diff --git a/solutions/security/detect-and-alert/using-logsdb-index-mode-with-elastic-security.md b/solutions/security/detect-and-alert/using-logsdb-index-mode-with-elastic-security.md index 373702c0da..ced819ea49 100644 --- a/solutions/security/detect-and-alert/using-logsdb-index-mode-with-elastic-security.md +++ b/solutions/security/detect-and-alert/using-logsdb-index-mode-with-elastic-security.md @@ -63,7 +63,7 @@ Alerts that are generated by threshold, {{ml}}, and event correlation sequence r While we do not recommend using `_source` for actions, in cases where the action relies on the `_source`, the same limitations and changes apply. -If you send alert notifications by enabling [actions](/explore-analyze/alerting/alerts.md#rules-actions) to the external systems that have workflows or automations based on fields formatted from the original source, they may be affected. In particular, this can happen when the fields used are arrays of objects. +If you send alert notifications by enabling [actions](/explore-analyze/alerting/kibana-alerting-v1.md#rules-actions) to the external systems that have workflows or automations based on fields formatted from the original source, they may be affected. In particular, this can happen when the fields used are arrays of objects. We recommend checking and adjusting the rule actions using `_source` before switching to logsdb index mode. diff --git a/troubleshoot/elasticsearch/mapping-explosion.md b/troubleshoot/elasticsearch/mapping-explosion.md index 9dd0e2b2bc..f3f1be97cd 100644 --- a/troubleshoot/elasticsearch/mapping-explosion.md +++ b/troubleshoot/elasticsearch/mapping-explosion.md @@ -32,7 +32,7 @@ Mapping explosion may surface as the following performance symptoms: * [CAT pending tasks](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-cat-pending-tasks) reporting a task queue backlog with a lot of `put-mapping [MY_INDEX_NAME/MY_INDEX_UUID]` messages. * Discover’s **Fields for wildcard** page-loading API command or [Dev Tools](../../explore-analyze/query-filter/tools/console.md) page-refreshing Autocomplete API commands are taking a long time (more than 10 seconds) or timing out in the browser’s Developer Tools Network tab. For more information, refer to our [walkthrough on troubleshooting Discover](https://www.elastic.co/blog/troubleshooting-guide-common-issues-kibana-discover-load). * Discover’s **Available fields** taking a long time to compile Javascript in the browser’s Developer Tools Performance tab. This may potentially escalate to temporary browser page unresponsiveness. -* Kibana’s [alerting](../../explore-analyze/alerting/alerts.md) or [security rules](../../solutions/security/detect-and-alert.md) may error `The content length (X) is bigger than the maximum allowed string (Y)` where `X` is attempted payload and `Y` is {{kib}}'s [`server-maxPayload`](kibana://reference/configuration-reference/general-settings.md#server-maxpayload). +* Kibana’s [alerting](../../explore-analyze/alerting/kibana-alerting-v1.md) or [security rules](../../solutions/security/detect-and-alert.md) may error `The content length (X) is bigger than the maximum allowed string (Y)` where `X` is attempted payload and `Y` is {{kib}}'s [`server-maxPayload`](kibana://reference/configuration-reference/general-settings.md#server-maxpayload). * Long {{es}} start-up durations. * Kibana Javascript erring within browser while loading a Dashboard or Discover with message `Maximum call stack size exceeded`. diff --git a/troubleshoot/elasticsearch/task-queue-backlog.md b/troubleshoot/elasticsearch/task-queue-backlog.md index 5b66aa80e0..eab242563f 100644 --- a/troubleshoot/elasticsearch/task-queue-backlog.md +++ b/troubleshoot/elasticsearch/task-queue-backlog.md @@ -141,7 +141,7 @@ If an individual task is causing a [thread pool `queue`](#diagnose-task-queue-th This problem can surface due to a number of possible causes: -* Creating new tasks or modifying scheduled tasks which either run frequently or are broad in their effect, such as [{{ilm}}](/manage-data/lifecycle/index-lifecycle-management.md) policies or [rules](/explore-analyze/alerting.md) +* Creating new tasks or modifying scheduled tasks which either run frequently or are broad in their effect, such as [{{ilm}}](/manage-data/lifecycle/index-lifecycle-management.md) policies or [rules](/explore-analyze/alerting-overview.md) * Performing traffic load testing * Doing extended look-backs, especially across [data tiers](/manage-data/lifecycle/data-tiers.md) * [Searching](https://www.elastic.co/docs/api/doc/elasticsearch/group/endpoint-search) or performing [bulk updates](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-bulk) to a high number of indices in a single request diff --git a/troubleshoot/kibana/alerts.md b/troubleshoot/kibana/alerts.md index 83ac222de9..0e8bc5211e 100644 --- a/troubleshoot/kibana/alerts.md +++ b/troubleshoot/kibana/alerts.md @@ -29,13 +29,13 @@ Some of the resources, such as saved objects and API keys, may no longer be avai The following debugging tools are available: -* {{kib}} versions 7.10 and above have a [Test connector](../../explore-analyze/alerting/alerts/testing-connectors.md) UI. +* {{kib}} versions 7.10 and above have a [Test connector](../../explore-analyze/alerting/kibana-alerting-v1/testing-connectors-v1.md) UI. * {{kib}} versions 7.11 and above include improved Webhook error messages, better overall debug logging for actions and connectors, and Task Manager [diagnostics endpoints](task-manager.md#task-manager-diagnosing-root-cause). ## Using rules and connectors list for the current state and finding issues [alerting-managment-detail] -**{{rules-ui}}** in **{{stack-manage-app}}** lists the rules available in the space you’re currently in. When you click a rule name, you are navigated to the [details page](../../explore-analyze/alerting/alerts/create-manage-rules.md#rule-details) for the rule, where you can see currently active alerts. The start date on this page indicates when a rule is triggered, and for what alerts. In addition, the duration of the condition indicates how long the instance is active. +**{{rules-ui}}** in **{{stack-manage-app}}** lists the rules available in the space you’re currently in. When you click a rule name, you are navigated to the [details page](../../explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md#rule-details) for the rule, where you can see currently active alerts. The start date on this page indicates when a rule is triggered, and for what alerts. In addition, the duration of the condition indicates how long the instance is active. :::{image} /troubleshoot/images/kibana-rule-details-alerts-inactive.png :alt: Alerting management details @@ -182,9 +182,9 @@ Investigating the underlying task can help you gauge whether the problem you’r In addition to the above methods, refer to the following approaches and common issues: -* [Alerting common issues](../../explore-analyze/alerting/alerts/alerting-common-issues.md) -* [Querying event log index](../../explore-analyze/alerting/alerts/event-log-index.md) -* [Testing connectors using {{connectors-ui}} UI and the `kbn-action` tool](../../explore-analyze/alerting/alerts/testing-connectors.md) +* [Alerting common issues](../../explore-analyze/alerting/kibana-alerting-v1/alerting-common-issues-v1.md) +* [Querying event log index](../../explore-analyze/alerting/kibana-alerting-v1/event-log-index-v1.md) +* [Testing connectors using {{connectors-ui}} UI and the `kbn-action` tool](../../explore-analyze/alerting/kibana-alerting-v1/testing-connectors-v1.md) ### Temporarily throttle all tasks [alerting-kibana-throttle] @@ -197,7 +197,7 @@ xpack.task_manager.poll_interval: 1h ``` ::::{warning} -This approach should be used only temporarily as a last resort to restore function to {{kib}} when it is unresponsive and attempts to identify and [snooze or disable](../../explore-analyze/alerting/alerts/create-manage-rules.md#controlling-rules) slow-running rules have not fixed the situation. It severely throttles all background tasks, not just those relating to {{alert-features}}. The task manager will run only one task at a time and will look for more work each hour. +This approach should be used only temporarily as a last resort to restore function to {{kib}} when it is unresponsive and attempts to identify and [snooze or disable](../../explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md#controlling-rules) slow-running rules have not fixed the situation. It severely throttles all background tasks, not just those relating to {{alert-features}}. The task manager will run only one task at a time and will look for more work each hour. :::: diff --git a/troubleshoot/kibana/task-manager.md b/troubleshoot/kibana/task-manager.md index c8e49be64c..8dba27a915 100644 --- a/troubleshoot/kibana/task-manager.md +++ b/troubleshoot/kibana/task-manager.md @@ -54,7 +54,7 @@ For most performance issues, the subsections indicate explicit health issues thr ::::{important} Some tasks (such as [connector](/deploy-manage/manage-connectors.md) tasks) can incorrectly report their status as successful even when the task failed. The runtime and workload block return data about successes and failures and don't take this into consideration. -To get a better sense of action failures, refer to the [Event log index](/explore-analyze/alerting/alerts/event-log-index.md) for more accurate context about failures and successes. +To get a better sense of action failures, refer to the [Event log index](/explore-analyze/alerting/kibana-alerting-v1/event-log-index-v1.md) for more accurate context about failures and successes. :::: From 3910ffd84d03b8c1a2b55f112aa303ed6aac33fc Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Tue, 17 Mar 2026 00:15:09 -0400 Subject: [PATCH 02/40] Fix broken cross-references in kibana-alerting-v1 files Update internal links to use -v1 suffixed filenames after the alerting directory restructure (create-manage-rules-v1.md, view-alerts-v1.md, alerting-setup-v1.md). Made-with: Cursor --- .../kibana-alerting-v1/alerting-common-issues-v1.md | 6 +++--- .../kibana-alerting-v1/alerting-getting-started-v1.md | 2 +- .../kibana-alerting-v1/alerting-troubleshooting-v1.md | 4 ++-- .../kibana-alerting-v1/create-manage-rules-v1.md | 4 ++-- .../kibana-alerting-v1/maintenance-windows-v1.md | 2 +- .../kibana-alerting-v1/rule-type-es-query-v1.md | 2 +- .../kibana-alerting-v1/rule-type-index-threshold-v1.md | 2 +- .../alerting/kibana-alerting-v1/view-alerts-v1.md | 10 +++++----- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/explore-analyze/alerting/kibana-alerting-v1/alerting-common-issues-v1.md b/explore-analyze/alerting/kibana-alerting-v1/alerting-common-issues-v1.md index 2576afdef2..90cc033313 100644 --- a/explore-analyze/alerting/kibana-alerting-v1/alerting-common-issues-v1.md +++ b/explore-analyze/alerting/kibana-alerting-v1/alerting-common-issues-v1.md @@ -72,7 +72,7 @@ By default, rules have a `5m` timeout. Rules that run longer than this timeout a [2022-03-28T13:14:04.062-04:00][WARN ][plugins.taskManager] Cancelling task alerting:.index-threshold "a6ea0070-aec0-11ec-9985-dd576a3fe205" as it expired at 2022-03-28T17:14:03.980Z after running for 05m 10s (with timeout set at 5m). ``` -and in the [details page](create-manage-rules.md#rule-details): +and in the [details page](create-manage-rules-v1.md#rule-details): :::{image} /explore-analyze/images/kibana-rule-details-timeout-error.png :alt: Rule details page with timeout error @@ -81,7 +81,7 @@ and in the [details page](create-manage-rules.md#rule-details): If you want your rules to run longer, update the `xpack.alerting.rules.run.timeout` configuration in your [Alerting settings](kibana://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. +Rules that consistently run longer than their [check interval](create-manage-rules-v1.md#create-edit-rules) may produce unexpected results. If the average run duration, visible on the [details page](create-manage-rules-v1.md#rule-details), is greater than the check interval, consider increasing the check interval. To get all long-running rules, you can query for a list of rule ids, bucketed by their run times: @@ -262,4 +262,4 @@ Alerting rules that were created or edited in 8.2 stop running after you upgrade **Solution**: -Upgrade to 8.3.2 or later releases to avoid the problem. To fix failing rules, go to **{{stack-manage-app}} > {{rules-ui}}** and multi-select the rules. Choose **Manage rules > Update API Keys** to generate new API keys. For more details about API key authorization, refer to [API keys](alerting-setup.md#alerting-authorization). +Upgrade to 8.3.2 or later releases to avoid the problem. To fix failing rules, go to **{{stack-manage-app}} > {{rules-ui}}** and multi-select the rules. Choose **Manage rules > Update API Keys** to generate new API keys. For more details about API key authorization, refer to [API keys](alerting-setup-v1.md#alerting-authorization). diff --git a/explore-analyze/alerting/kibana-alerting-v1/alerting-getting-started-v1.md b/explore-analyze/alerting/kibana-alerting-v1/alerting-getting-started-v1.md index 7dcc0fa826..e2cb9fb727 100644 --- a/explore-analyze/alerting/kibana-alerting-v1/alerting-getting-started-v1.md +++ b/explore-analyze/alerting/kibana-alerting-v1/alerting-getting-started-v1.md @@ -23,7 +23,7 @@ Alerting enables you to define *rules*, which detect complex conditions within d ::: ::::{important} -To make sure you can access alerting and actions, see the [setup and prerequisites](alerting-setup.md#alerting-prerequisites) section. +To make sure you can access alerting and actions, see the [setup and prerequisites](alerting-setup-v1.md#alerting-prerequisites) section. :::: diff --git a/explore-analyze/alerting/kibana-alerting-v1/alerting-troubleshooting-v1.md b/explore-analyze/alerting/kibana-alerting-v1/alerting-troubleshooting-v1.md index 545616d8df..4846b39c68 100644 --- a/explore-analyze/alerting/kibana-alerting-v1/alerting-troubleshooting-v1.md +++ b/explore-analyze/alerting/kibana-alerting-v1/alerting-troubleshooting-v1.md @@ -32,7 +32,7 @@ The following debugging tools are available: ## Using rules and connectors list for the current state and finding issues [alerting-managment-detail] -**{{rules-ui}}** in **{{stack-manage-app}}** lists the rules available in the space you’re currently in. When you click a rule name, you are navigated to the [details page](create-manage-rules.md#rule-details) for the rule, where you can see currently active alerts. The start date on this page indicates when a rule is triggered, and for what alerts. In addition, the duration of the condition indicates how long the instance is active. +**{{rules-ui}}** in **{{stack-manage-app}}** lists the rules available in the space you’re currently in. When you click a rule name, you are navigated to the [details page](create-manage-rules-v1.md#rule-details) for the rule, where you can see currently active alerts. The start date on this page indicates when a rule is triggered, and for what alerts. In addition, the duration of the condition indicates how long the instance is active. :::{image} /explore-analyze/images/kibana-rule-details-alerts-inactive.png :alt: Alerting management details @@ -188,7 +188,7 @@ xpack.task_manager.poll_interval: 1h ``` ::::{warning} -This approach should be used only temporarily as a last resort to restore function to {{kib}} when it is unresponsive and attempts to identify and [snooze or disable](create-manage-rules.md#controlling-rules) slow-running rules have not fixed the situation. It severely throttles all background tasks, not just those relating to {{alert-features}}. The task manager will run only one task at a time and will look for more work each hour. +This approach should be used only temporarily as a last resort to restore function to {{kib}} when it is unresponsive and attempts to identify and [snooze or disable](create-manage-rules-v1.md#controlling-rules) slow-running rules have not fixed the situation. It severely throttles all background tasks, not just those relating to {{alert-features}}. The task manager will run only one task at a time and will look for more work each hour. :::: diff --git a/explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md b/explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md index c177589880..df6c8708c5 100644 --- a/explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md +++ b/explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md @@ -32,7 +32,7 @@ For more information on alerting concepts and the types of rules and connectors ## Required permissions [_required_permissions] -Access to rules is granted based on your {{alert-features}} privileges. For more information, go to [Security](alerting-setup.md#alerting-security). +Access to rules is granted based on your {{alert-features}} privileges. For more information, go to [Security](alerting-setup-v1.md#alerting-security). ## Create and edit rules [create-edit-rules] @@ -61,7 +61,7 @@ For details on what types of rules are available and how to configure them, refe ### Alert flapping [defining-rules-flapping-details] -You can modify the criteria for changing an alert's status to [`flapping`](view-alerts.md#alert-status) by configuring the **Alert flapping detection** settings, which are turned on by default. When configuring flapping settings, you must set a look back window and threshold for alert status changes. For example, you can specify that alerts with at least 6 status changes in the last 10 runs are `flapping`. +You can modify the criteria for changing an alert's status to [`flapping`](view-alerts-v1.md#alert-status) by configuring the **Alert flapping detection** settings, which are turned on by default. When configuring flapping settings, you must set a look back window and threshold for alert status changes. For example, you can specify that alerts with at least 6 status changes in the last 10 runs are `flapping`. {applies_to}`stack: ga 9.3+` You can modify the flapping settings for a specific rule while creating or editing it. You can also modify the flapping settings for all rules in your {{kib}} space or {{serverless-short}} project. To do this, go to the **Rules** page (find the **Rules** management page using the navigation menu or the [global search field](/explore-analyze/find-and-organize/find-apps-and-objects.md)), click **Settings**, then go to the **Alert flapping detection** settings. diff --git a/explore-analyze/alerting/kibana-alerting-v1/maintenance-windows-v1.md b/explore-analyze/alerting/kibana-alerting-v1/maintenance-windows-v1.md index 947e19616c..0ebb85664a 100644 --- a/explore-analyze/alerting/kibana-alerting-v1/maintenance-windows-v1.md +++ b/explore-analyze/alerting/kibana-alerting-v1/maintenance-windows-v1.md @@ -78,4 +78,4 @@ A maintenance window can have any one of the following statuses: * `Finished`: It ended and does not have a repeat schedule. * `Archived`: It is archived. In a future release, archived maintenance windows will be queued for deletion. -When you [view alert details](create-manage-rules.md#rule-details) in {{kib}}, each alert shows unique identifiers for maintenance windows that affected it. +When you [view alert details](create-manage-rules-v1.md#rule-details) in {{kib}}, each alert shows unique identifiers for maintenance windows that affected it. diff --git a/explore-analyze/alerting/kibana-alerting-v1/rule-type-es-query-v1.md b/explore-analyze/alerting/kibana-alerting-v1/rule-type-es-query-v1.md index 653700e025..572a6c4ab8 100644 --- a/explore-analyze/alerting/kibana-alerting-v1/rule-type-es-query-v1.md +++ b/explore-analyze/alerting/kibana-alerting-v1/rule-type-es-query-v1.md @@ -154,7 +154,7 @@ Elasticsearch query rule '{{rule.name}}' is active: - Link: {{context.link}} ``` -Rules use rule action variables and Mustache templates to pass contextual details into the alert notifications. There is a set of [variables common to all rules](create-manage-rules.md#defining-rules-actions-variables) and a set that is specific to this rule. To view the list of variables in {{kib}}, click the "add rule variable" button. For example: +Rules use rule action variables and Mustache templates to pass contextual details into the alert notifications. There is a set of [variables common to all rules](create-manage-rules-v1.md#defining-rules-actions-variables) and a set that is specific to this rule. To view the list of variables in {{kib}}, click the "add rule variable" button. For example: :::{image} /explore-analyze/images/kibana-es-query-rule-action-variables.png :alt: Passing rule values to an action diff --git a/explore-analyze/alerting/kibana-alerting-v1/rule-type-index-threshold-v1.md b/explore-analyze/alerting/kibana-alerting-v1/rule-type-index-threshold-v1.md index 388ad773df..872549d16e 100644 --- a/explore-analyze/alerting/kibana-alerting-v1/rule-type-index-threshold-v1.md +++ b/explore-analyze/alerting/kibana-alerting-v1/rule-type-index-threshold-v1.md @@ -132,7 +132,7 @@ In this example, you will use the {{kib}} [sample weblog data set](/explore-anal :screenshot: ::: - The unique action variables that you can use in the notification are listed in [Add action variables](#action-variables-index-threshold). For more information, refer to [Actions](create-manage-rules.md#defining-rules-actions-details) and [*Connectors*](../../../deploy-manage/manage-connectors.md). + The unique action variables that you can use in the notification are listed in [Add action variables](#action-variables-index-threshold). For more information, refer to [Actions](create-manage-rules-v1.md#defining-rules-actions-details) and [*Connectors*](../../../deploy-manage/manage-connectors.md). 9. Save the rule. diff --git a/explore-analyze/alerting/kibana-alerting-v1/view-alerts-v1.md b/explore-analyze/alerting/kibana-alerting-v1/view-alerts-v1.md index a7cc97847c..4ef7a953e0 100644 --- a/explore-analyze/alerting/kibana-alerting-v1/view-alerts-v1.md +++ b/explore-analyze/alerting/kibana-alerting-v1/view-alerts-v1.md @@ -26,7 +26,7 @@ Manage alerts from the following places: ::: ::::{note} -You must have the appropriate {{kib}} {{alert-features}} and index privileges to view alerts. Refer to [Alerting security requirements](alerting-setup.md#alerting-security). +You must have the appropriate {{kib}} {{alert-features}} and index privileges to view alerts. Refer to [Alerting security requirements](alerting-setup-v1.md#alerting-security). :::: @@ -58,14 +58,14 @@ If an alert is affected by a maintenance window, the alert details include its i There are four common alert statuses: `active` -: The conditions for the rule are met. If the rule has [actions](create-manage-rules.md#defining-rules-actions-details), {{kib}} generates notifications based on the actions' notification settings. +: The conditions for the rule are met. If the rule has [actions](create-manage-rules-v1.md#defining-rules-actions-details), {{kib}} generates notifications based on the actions' notification settings. `flapping` -: The alert switched repeatedly between active and recovered states. If actions are configured to run when its status changes, they are suppressed. Refer to [Alert flapping](create-manage-rules.md#defining-rules-flapping-details) to learn more about configuring alert flapping for rules. +: The alert switched repeatedly between active and recovered states. If actions are configured to run when its status changes, they are suppressed. Refer to [Alert flapping](create-manage-rules-v1.md#defining-rules-flapping-details) to learn more about configuring alert flapping for rules. `recovered` -: The conditions for the rule are no longer met. If the rule has [recovery actions](create-manage-rules.md#defining-rules-actions-details), {{kib}} generates notifications based on the actions' notification settings. Recovery actions only run if the rule's conditions aren't met during the current rule execution, but were in the previous one. +: The conditions for the rule are no longer met. If the rule has [recovery actions](create-manage-rules-v1.md#defining-rules-actions-details), {{kib}} generates notifications based on the actions' notification settings. Recovery actions only run if the rule's conditions aren't met during the current rule execution, but were in the previous one. An active alert changes to recovered if the conditions for the rule that generated it are no longer met. @@ -102,7 +102,7 @@ You can only mute individual alerts. To mute an alert, find the **Alerts** manag To permanently suppress an alert's actions, open the actions menu for the appropriate alert, then select **Mark as untracked**. In this case, the alert's status is no longer updated and actions are no longer run. These changes are only applied to the alert that you untracked and cannot be reverted. Future alerts with the same alert ID are unaffected. -To affect the behavior of the rule rather than individual alerts, check out [Snooze and disable rules](create-manage-rules.md#controlling-rules). +To affect the behavior of the rule rather than individual alerts, check out [Snooze and disable rules](create-manage-rules-v1.md#controlling-rules). :::: ## Apply and filter alert tags [tag-alerts] From 99f1faba6ae8558265a1c02aa608ab84a387b889 Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Mon, 23 Mar 2026 13:32:01 -0400 Subject: [PATCH 03/40] Add alerting v2 manifest Maps alerting v2 doc pages to Kibana implementation PRs and codebase watch paths. Used by Docs Patrol External to detect code changes that require documentation updates. Co-Authored-By: Claude Sonnet 4.6 --- docs/manifests/alerting-v2.yaml | 746 ++++++++++++++++++++++++++++++++ 1 file changed, 746 insertions(+) create mode 100644 docs/manifests/alerting-v2.yaml diff --git a/docs/manifests/alerting-v2.yaml b/docs/manifests/alerting-v2.yaml new file mode 100644 index 0000000000..c2d65526c5 --- /dev/null +++ b/docs/manifests/alerting-v2.yaml @@ -0,0 +1,746 @@ +# docs/manifests/alerting-v2.yaml +# +# Maps alerting v2 documentation pages to their Kibana implementation PRs +# and codebase locations. Used by Docs Patrol External and the workflow +# docs skill to detect changes that require documentation updates. +# +# Owner: docs team (@nastasha-solomon) +# Last updated: 2026-03-23 +# Docs PR: https://github.com/elastic/docs-content/pull/5528 + +feature: alerting-v2 +feature_label: Kibana Alerting v2 +status: in-progress +doc_set: + serverless: preview + stack: ga # v1 content; v2 stack availability TBD (since 9.4) + +# NOTE — index rename chain: +# Original (247464): .alerts-events .alerts-actions +# After 254901: .alerting-events .alerting-actions +# After 258651: .rule-events .alert-actions ← current / final +# Every page that references index names must use the final names (.rule-events, .alert-actions). +# ESQL views also renamed in 258651: $.alerting-episodes → $.alert-episodes, +# $.alerting-events → $.rule-events, $.alerting-actions → $.alert-actions. + +# Implementation PRs — add new entries as features ship +implementation_prs: + + # --- Foundational --- + + - url: https://github.com/elastic/kibana/pull/247464 + title: "[ResponseOps][Alerting] Alerting v2" + summary: > + Foundational v2 alerting framework — core rule engine, scheduling and execution + architecture, ES|QL-native rule evaluation, alert lifecycle management, dispatcher, + notification policies CRUD and UI, rule authoring UI (standalone and embedded in + Discover), rule management UI, APM instrumentation, and InversifyJS DI wiring. + This is an umbrella PR covering ~50 sub-PRs across engine, UI, and infrastructure. + author: cnasikas + + # --- Index renames (two-step; see chain note above) --- + + - url: https://github.com/elastic/kibana/pull/254901 + title: "[ResponseOps][AlertingV2] Rename indexes for alert events and actions" + summary: > + First rename: `.alerts-events` → `.alerting-events`, `.alerts-actions` → `.alerting-actions`. + Superseded by PR #258651, which performs the second (final) rename. + Retained in the manifest because some doc files were drafted against these intermediate names. + author: adcoelho + + - url: https://github.com/elastic/kibana/pull/258651 + title: "[Alerting V2] Rename indices and ESQL views" + summary: > + Second (final) rename: `.alerting-events` → `.rule-events`, `.alerting-actions` → `.alert-actions`. + Also renames ES|QL views: `$.alerting-episodes` → `$.alert-episodes`, + `$.alerting-events` → `$.rule-events`, `$.alerting-actions` → `$.alert-actions`. + All doc pages that reference index or view names must be updated to these final values. + Supersedes PR #254901. + author: adcoelho + + # --- Alert actions and episodes --- + + - url: https://github.com/elastic/kibana/pull/258353 + title: "[Alerting V2] bulk get alert actions" + summary: > + Adds `POST /internal/alerting/v2/alerts/action/_bulk_get` for retrieving action records + for multiple episode IDs in one request. Required to display per-episode status in the + alert episodes table UI. + author: adcoelho + + - url: https://github.com/elastic/kibana/pull/258643 + title: "[Alerting V2] Remove 'untag' alert action" + summary: > + Removes the `untag` action type from the alert actions schema. Tags are now managed + exclusively via the `tag` action. The bulk-get query now returns the last `tag` action + per episode. Affects alert-actions.md (action type table) and any UI docs listing + available alert actions. + author: adcoelho + + - url: https://github.com/elastic/kibana/pull/257347 + title: "[Alerting V2] Update the alert episodes view query." + summary: > + Updates the ES|QL view query for alert episodes to include episode duration. + Surfaces the Duration column in the alert list UI and alert episode detail view. + author: adcoelho + + - url: https://github.com/elastic/kibana/pull/256527 + title: "Store 'unmatched' action for unmatched alert episodes" + summary: > + Fixes a dispatcher bug where alert episodes matching no notification policy were + silently dropped and re-fetched every run. Now persists them with + `action_type: 'unmatched'` and reason `'no matching notification policy'`, + and adds `unmatched` to the fetch query's INLINE STATS filter. + Affects dispatcher pipeline docs, notification policy evaluation docs, and the + alert actions field reference. + author: kdelemme + + # --- Notification policies --- + + - url: https://github.com/elastic/kibana/pull/256940 + title: "Make notification policies global with optional rule-label scoping" + summary: > + Decouples notification policies from rules. Policies are now global — all NPs are + evaluated for every alert episode by default. Rules no longer reference specific policies + via `notification_policies: [{ ref: policyId }]`. An optional `rule_labels` field on + the NP scopes it to rules whose `metadata.labels` match. The dispatcher fetches all + NPs every tick via `findAllDecrypted()`. The Step 6 matcher now uses two-phase matching: + first rule-label scoping (empty `ruleLabels` = catch-all), then KQL episode evaluation. + Affects notification policy schema docs, create/manage how-to, and dispatcher pipeline docs. + author: kdelemme + + - url: https://github.com/elastic/kibana/pull/258010 + title: "Add dynamic workflow selection to notification policy form" + summary: > + Replaces hardcoded workflow options in the NP form with dynamic search via the + `/api/workflows/search` API. Users can now search and select real workflows when + creating or editing a notification policy. Affects create/manage NP how-to docs. + author: kdelemme + + - url: https://github.com/elastic/kibana/pull/258917 + title: "[Alerting v2] Replace custom matcher input with KQL QueryStringInput" + summary: > + Replaces the custom `MatcherInput` with KQL's `QueryStringInput`, adding syntax + highlighting, autocomplete, and validation. Defines a typed `MatcherContext` schema + with field descriptors (`MATCHER_CONTEXT_FIELDS`) so the input auto-suggests valid + field names: `episode_status`, `rule.name`, `rule.labels`, and `data.*` fields. + Affects any doc describing the notification policy matcher field. + author: kdelemme + + - url: https://github.com/elastic/kibana/pull/258862 + title: "[Alerting v2] Add bulk actions for notification policies" + summary: > + Adds bulk enable, disable, snooze, and delete actions to the notification policies + list page, including confirmation modals for destructive operations. + Affects create/manage NP how-to and any NP management reference. + author: kdelemme + + - url: https://github.com/elastic/kibana/pull/257377 + title: "[Alerting V2] mark np api keys for invalidation" + summary: > + Introduces a saved object type for pending API key invalidations. When a notification + policy is updated, the old API key is marked for invalidation and a new one is created. + When deleted, the API key is marked for invalidation. Related to PR #258094 which + schedules the actual invalidation task. + author: adcoelho + + - url: https://github.com/elastic/kibana/pull/258094 + title: "[Alerting V2] Schedule task for notification policies API key invalidation" + summary: > + Introduces a recurring Task Manager task (`alerts_invalidate_api_keys`) that + invalidates API keys marked for removal. Configurable via: + `xpack.alerting.invalidateApiKeysTask.interval` (default: `5m`) + `xpack.alerting.invalidateApiKeysTask.removalDelay` (default: `1h`) + Affects setup/configuration docs and production considerations. + author: adcoelho + + # --- Rule authoring UI --- + + - url: https://github.com/elastic/kibana/pull/255734 + title: "[Alerting V2] [UI] Add no-data handling feature to rule form" + summary: > + Adds the No-data handling control block to the v2 rule form. Controls are visible + for `kind=alert` only; hidden for `kind=signal`. Adds `noData.behavior` and related + fields to the rule schema. Affects rule-settings/no-data-handling.md and + author-rules/create-rules-ui.md. + author: yiannisnikolopoulos + + - url: https://github.com/elastic/kibana/pull/257324 + title: "[Alerting v2] rule form - preview chart" + summary: > + Adds a Lens-powered bar chart histogram to the rule preview panels (evaluation and + recovery), showing the count of matching rows over time. Affects create-rules-ui.md + and any doc describing the rule form preview experience. + author: dominiqueclarke + + # --- Rule management UI --- + + - url: https://github.com/elastic/kibana/pull/256692 + title: "[Alerting v2] Rule Details Page" + summary: > + Implements the v2 rule details page: header with rule name, kind (Detect/Alert) + badge, enabled/disabled state, tags, rule conditions (ES|QL base query and alert + condition section), and rule-level actions. Affects manage-rules/view-manage-rules.md. + author: yiannisnikolopoulos + + - url: https://github.com/elastic/kibana/pull/258341 + title: "[Alerting v2] rule list bulk enable disable delete select all" + summary: > + Adds bulk operations (enable, disable, delete) and select-all to the v2 rules list. + Affects manage-rules/view-manage-rules.md. + author: dominiqueclarke + + # --- Observability integration --- + + - url: https://github.com/elastic/kibana/pull/257638 + title: "[ResponseOps][RnA] Minimal alerting episodes o11y page" + summary: > + Introduces a minimal alerting episodes page in Observability at + `/app/observability/alerts_v2`. Creates `@kbn/alerting-v2-episodes-ui` package + with reusable components, ES|QL-based data fetching, pagination, and an episode + status badge. No corresponding doc page exists yet — flagged as a docs gap. + author: umbopepato + + # --- Rule execution history --- + + - url: https://github.com/elastic/kibana/pull/254990 + title: "[AlertingV2] Rule execution history and status" + summary: > + Adds event log integration to Task Manager to record rule execution outcomes + (success, failure, cancelled) in `.kibana-event-log*`. No corresponding doc + page exists yet — flagged as a docs gap. + author: doakalexi + + +entries: + + # --------------------------------------------------------------------------- + # Top-level navigation and overview pages + # --------------------------------------------------------------------------- + + - id: alerting-overview-main + content_type: conceptual + docs_file: explore-analyze/alerting-overview.md + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: + - https://github.com/elastic/kibana/pull/247464 + watch_paths: + - x-pack/platform/plugins/shared/alerting/common/ + - x-pack/platform/plugins/shared/alerting/public/ + doc_set: + serverless: preview + stack: ga + notes: > + Top-level alerting landing page. Covers all three alerting systems (v1, v2, Watcher). + Review when any system changes significantly or when v2 reaches GA on stack. + + - id: alerting-landing + content_type: conceptual + docs_file: explore-analyze/alerting.md + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: + - https://github.com/elastic/kibana/pull/247464 + watch_paths: + - x-pack/platform/plugins/shared/alerting/common/ + doc_set: + serverless: preview + stack: ga + notes: > + Section landing page / TOC for the alerting area. Review if the IA changes + (new v2 sections added, v1 deprecated, Watcher removed). + + - id: alerting-choose-system + content_type: conceptual + docs_file: explore-analyze/alerting/choose-an-alerting-system.md + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: + - https://github.com/elastic/kibana/pull/247464 + watch_paths: + - x-pack/platform/plugins/shared/alerting/common/ + doc_set: + serverless: preview + notes: > + Comparison guide: v1 vs v2 vs Watcher. Needs review when feature parity between + v1 and v2 changes, when v2 reaches GA, or when v1 deprecation is announced. + This page will need significant revision at each of those milestones. + + # --------------------------------------------------------------------------- + # Kibana alerting v1 (existing, reorganized under new IA) + # --------------------------------------------------------------------------- + + - id: alerting-v1 + content_type: conceptual + docs_file: explore-analyze/alerting/kibana-alerting-v1/ + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: [] + watch_paths: + - x-pack/platform/plugins/shared/alerting/common/ + - x-pack/platform/plugins/shared/alerting/public/ + doc_set: + serverless: ga + stack: ga + notes: > + Existing v1 alerting docs, reorganized under the new alerting IA. Content largely + stable. Review if v1 feature set changes or if v1 deprecation is announced. + Covers: getting started, setup, create/manage rules, rule types, action variables, + event log, maintenance windows, notifications allowlist, troubleshooting. + + # --------------------------------------------------------------------------- + # Kibana alerting v2 — overview + # --------------------------------------------------------------------------- + + - id: alerting-v2-overview + content_type: conceptual + docs_file: explore-analyze/alerting/kibana-alerting-v2.md + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: + - https://github.com/elastic/kibana/pull/247464 + watch_paths: + - x-pack/platform/plugins/shared/alerting/common/ + - x-pack/platform/plugins/shared/alerting/public/ + doc_set: + serverless: preview + notes: > + V2 alerting section landing page and conceptual overview. Review on major v2 + architectural changes or when new top-level v2 capabilities ship. + + # --------------------------------------------------------------------------- + # Kibana alerting v2 — before you begin + # --------------------------------------------------------------------------- + + - id: alerting-v2-before-you-begin + content_type: conceptual + docs_file: explore-analyze/alerting/kibana-alerting-v2/before-you-begin/ + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: + - https://github.com/elastic/kibana/pull/247464 + watch_paths: + - x-pack/platform/plugins/shared/alerting/server/feature.ts + - x-pack/platform/plugins/shared/alerting/server/routes/ + doc_set: + serverless: preview + notes: > + Covers privileges (alerting-privileges.md) and setup (set-up.md). + See alerting-v2-set-up for the setup page entry, which tracks additional PRs + for the index renames and new API key invalidation task config. + + - id: alerting-v2-set-up + content_type: procedural + docs_file: explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: + - https://github.com/elastic/kibana/pull/247464 + - https://github.com/elastic/kibana/pull/254901 + - https://github.com/elastic/kibana/pull/258651 + - https://github.com/elastic/kibana/pull/258094 + watch_paths: + - x-pack/platform/plugins/shared/alerting/server/data_streams/ + - x-pack/platform/plugins/shared/alerting/server/index.ts + - x-pack/platform/plugins/shared/alerting/server/task_manager/ + doc_set: + serverless: preview + notes: > + Documents index configuration, plugin dependencies, and verification steps. + High-priority for updates on three counts: + • Index rename chain — final names are `.rule-events` and `.alert-actions` + (see chain note at top of file). The current draft uses `.alerts-events-*` and + `.alerts-actions`; these must be updated. + • PR #258094 — adds a new Task Manager task for API key invalidation with two + configurable Kibana settings to document: + `xpack.alerting.invalidateApiKeysTask.interval` (default: `5m`) + `xpack.alerting.invalidateApiKeysTask.removalDelay` (default: `1h`) + • Review the "Verify the installation" step if the navigation path + (`Management > Alerts and Insights > Rules V2`) changes. + + # --------------------------------------------------------------------------- + # Kibana alerting v2 — author rules + # --------------------------------------------------------------------------- + + - id: alerting-v2-author-rules + content_type: procedural + docs_file: explore-analyze/alerting/kibana-alerting-v2/author-rules/ + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: + - https://github.com/elastic/kibana/pull/247464 + - https://github.com/elastic/kibana/pull/255734 + - https://github.com/elastic/kibana/pull/257324 + watch_paths: + - x-pack/platform/plugins/shared/alerting/common/rules/ + - x-pack/platform/plugins/shared/alerting/server/rules_client/ + - x-pack/platform/plugins/shared/alerting/public/pages/rules/ + - packages/kbn-alerting-v2-rule-form/ + doc_set: + serverless: preview + notes: > + How-to content for creating and configuring v2 rules. Covers: create via UI, + Discover flyout, YAML; rule types; rule templates; rules on alerts; set data sources; + production considerations; and the full rule-settings subtree. + • PR #255734 — no-data handling UI now live in the rule form (kind=alert only); + no-data-handling.md needs to reflect the form controls and the `noData.behavior` field. + • PR #257324 — preview chart added to rule form (Lens histogram showing matching + row counts over time for evaluation and recovery previews). create-rules-ui.md + should describe this panel. + See separate entries for notification-policies pages, which track additional PRs. + + - id: alerting-v2-notification-policies + content_type: procedural + docs_file: explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: + - https://github.com/elastic/kibana/pull/247464 + - https://github.com/elastic/kibana/pull/256527 + - https://github.com/elastic/kibana/pull/256940 + - https://github.com/elastic/kibana/pull/258010 + - https://github.com/elastic/kibana/pull/258917 + - https://github.com/elastic/kibana/pull/258862 + watch_paths: + - x-pack/platform/plugins/shared/alerting/server/notification_policy/ + - x-pack/platform/plugins/shared/alerting/public/pages/notification_policies/ + doc_set: + serverless: preview + notes: > + Overview page for notification policies. Several significant implementation changes + affect the conceptual description of what NPs are and how they work: + • PR #256940 — NPs are now global, not rule-scoped. The concept page must drop any + description of rules referencing specific NPs by ID. Scoping is now done via + `rule_labels` on the NP itself. + • PR #256527 — describes what happens when no NP matches an episode (`unmatched`). + • PR #258917 — matcher is now a KQL field with autocomplete; the context schema + (`episode_status`, `rule.name`, `rule.labels`, `data.*`) is worth documenting here. + • PR #258862 — bulk enable/disable/snooze/delete now available in the NP list UI. + • PR #258010 — workflow selection is dynamic (search-based); update any description + of the workflow field in the NP form. + + - id: alerting-v2-create-notification-policies + content_type: procedural + docs_file: explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: + - https://github.com/elastic/kibana/pull/247464 + - https://github.com/elastic/kibana/pull/256940 + - https://github.com/elastic/kibana/pull/258010 + - https://github.com/elastic/kibana/pull/258862 + - https://github.com/elastic/kibana/pull/257377 + - https://github.com/elastic/kibana/pull/258094 + watch_paths: + - x-pack/platform/plugins/shared/alerting/server/notification_policy/ + - x-pack/platform/plugins/shared/alerting/public/pages/notification_policies/ + doc_set: + serverless: preview + notes: > + CRUD how-to for notification policies. + • PR #256940 — schema change: remove any reference to `notification_policies` on rules. + Add documentation for the new `rule_labels` field (scoping NPs to specific rules). + • PR #258010 — workflow selector is now a dynamic search field, not a static dropdown. + • PR #258862 — document bulk actions (enable, disable, snooze, delete) from the list page. + • PR #257377 and #258094 — API keys are automatically managed; when a NP is updated or + deleted, the old key is marked for invalidation. May be worth a note in an API key + section or production guidance callout. + + - id: alerting-v2-notification-policies-eval + content_type: conceptual + docs_file: explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: + - https://github.com/elastic/kibana/pull/247464 + - https://github.com/elastic/kibana/pull/256527 + - https://github.com/elastic/kibana/pull/256940 + - https://github.com/elastic/kibana/pull/258917 + watch_paths: + - x-pack/platform/plugins/shared/alerting/server/dispatcher/ + - x-pack/platform/plugins/shared/alerting/server/dispatcher/steps/store_actions_step.ts + - x-pack/platform/plugins/shared/alerting/server/dispatcher/steps/evaluate_matchers_step.ts + doc_set: + serverless: preview + notes: > + Documents the 10-step dispatcher pipeline. Three PRs change the pipeline logic: + • PR #256940 — Step 4 now fetches ALL notification policies via `findAllDecrypted()`, + not just those referenced by rules. Step 6 (evaluate matchers) now uses two-phase + matching: (1) check `rule_labels` scoping (empty = catch-all), then (2) evaluate + the KQL episode matcher. Update the step descriptions accordingly. + • PR #256527 — Step 10 outcomes table is missing `unmatched` (episodes with no matching + NP). Add: `unmatched` / "Episode did not match any notification policy". + • PR #258917 — matcher is a KQL expression evaluated in-process. The `MatcherContext` + schema now has named fields with autocomplete: `episode_status`, `rule.name`, + `rule.labels`, `data.*`. Update Step 6 to reflect the available matcher fields. + + # --------------------------------------------------------------------------- + # Kibana alerting v2 — manage alerts + # --------------------------------------------------------------------------- + + - id: alerting-v2-manage-alerts + content_type: procedural + docs_file: explore-analyze/alerting/kibana-alerting-v2/manage-alerts/ + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: + - https://github.com/elastic/kibana/pull/247464 + watch_paths: + - x-pack/platform/plugins/shared/alerting/common/alerts/ + - x-pack/platform/plugins/shared/alerting/public/pages/alerts/ + doc_set: + serverless: preview + notes: > + How-to content for managing and triaging alerts. See per-file entries below + for view-alerts, explore-alerts-discover, investigate-respond/alert-actions, + and investigate-respond/alert-episode-details, which each carry additional PR dependencies. + + - id: alerting-v2-view-alerts + content_type: procedural + docs_file: explore-analyze/alerting/kibana-alerting-v2/manage-alerts/view-alerts.md + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: + - https://github.com/elastic/kibana/pull/247464 + - https://github.com/elastic/kibana/pull/258353 + - https://github.com/elastic/kibana/pull/257347 + - https://github.com/elastic/kibana/pull/258643 + watch_paths: + - x-pack/platform/plugins/shared/alerting/public/pages/alerts/ + - x-pack/platform/plugins/shared/alerting/server/routes/alerts/bulk_get_alert_actions.ts + doc_set: + serverless: preview + notes: > + Alert inbox UI: columns, quick filters, search, timeline chart, pagination. + • PR #257347 — adds the Duration column to the alert list (via episode view query update). + • PR #258353 — bulk-get alert actions populates per-episode status in alert list rows. + • PR #258643 — `untag` is removed from available alert actions; update the "Alert actions" + section to remove any reference to untagging. + + - id: alerting-v2-explore-alerts-discover + content_type: procedural + docs_file: explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: + - https://github.com/elastic/kibana/pull/247464 + - https://github.com/elastic/kibana/pull/254901 + - https://github.com/elastic/kibana/pull/258651 + watch_paths: + - x-pack/platform/plugins/shared/alerting/common/ + - x-pack/platform/plugins/shared/alerting/public/ + doc_set: + serverless: preview + notes: > + How to query alerting data in Discover. References alerting index/view names — must + use final values from PR #258651: `.rule-events`, `.alert-actions`, `$.alert-episodes`, + `$.rule-events`. The current draft uses older names and needs updating. + + - id: alerting-v2-investigate-respond + content_type: procedural + docs_file: explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond.md + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: + - https://github.com/elastic/kibana/pull/247464 + - https://github.com/elastic/kibana/pull/258353 + - https://github.com/elastic/kibana/pull/258643 + watch_paths: + - x-pack/platform/plugins/shared/alerting/public/pages/alerts/ + - x-pack/platform/plugins/shared/alerting/server/routes/alerts/ + doc_set: + serverless: preview + notes: > + Section landing for the investigate and respond subtree. See child page entries + for the more specifically-mapped alert-actions and alert-episode-details pages. + + - id: alerting-v2-alert-actions + content_type: reference + docs_file: explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: + - https://github.com/elastic/kibana/pull/247464 + - https://github.com/elastic/kibana/pull/258353 + - https://github.com/elastic/kibana/pull/258643 + - https://github.com/elastic/kibana/pull/256527 + - https://github.com/elastic/kibana/pull/254901 + - https://github.com/elastic/kibana/pull/258651 + watch_paths: + - x-pack/platform/plugins/shared/alerting/server/routes/alerts/bulk_get_alert_actions.ts + - x-pack/platform/plugins/shared/alerting/server/dispatcher/steps/store_actions_step.ts + - x-pack/platform/plugins/shared/alerting/common/alerts/ + doc_set: + serverless: preview + notes: > + Reference page for all alert actions and the `.alerts-actions` index schema. + This page needs four distinct updates: + • PR #258643 — remove `untag` from the action type table and the "Available actions" + section; tags are managed only via the `tag` action type. + • PR #256527 — add `action_type: unmatched` with reason `no matching notification policy` + to the "Alert actions fields" table; the current page omits this type. + • PR #258651 — update index name throughout: `.alerts-actions` → `.alert-actions` + (final name after second rename). Also update any ESQL view references. + • PR #258353 — the bulk-get API (`_bulk_get`) is described implicitly here; verify + accuracy of the API reference once the route stabilises. + + - id: alerting-v2-episode-details + content_type: procedural + docs_file: explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: + - https://github.com/elastic/kibana/pull/247464 + - https://github.com/elastic/kibana/pull/258353 + - https://github.com/elastic/kibana/pull/257347 + watch_paths: + - x-pack/platform/plugins/shared/alerting/public/pages/alerts/ + - x-pack/platform/plugins/shared/alerting/server/routes/alerts/bulk_get_alert_actions.ts + doc_set: + serverless: preview + notes: > + Alert episode detail flyout / page. + • PR #258353 — bulk-get alert actions enables the episode status display in this view. + • PR #257347 — episode duration surfaces in the episode detail panel from the updated view query. + + # --------------------------------------------------------------------------- + # Kibana alerting v2 — manage rules + # --------------------------------------------------------------------------- + + - id: alerting-v2-manage-rules + content_type: procedural + docs_file: explore-analyze/alerting/kibana-alerting-v2/manage-rules/ + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: + - https://github.com/elastic/kibana/pull/247464 + - https://github.com/elastic/kibana/pull/256692 + - https://github.com/elastic/kibana/pull/258341 + watch_paths: + - x-pack/platform/plugins/shared/alerting/public/pages/rules/ + - x-pack/platform/plugins/shared/alerting/server/rules_client/ + doc_set: + serverless: preview + notes: > + How-to content for the rule management UI: view, edit, clone, enable/disable, + delete, and snooze rules. Two post-foundation features need documentation: + • PR #256692 — rule details page: shows rule name, kind badge (Detect/Alert), + enabled/disabled state, tags, ES|QL base query, and alert conditions. + view-manage-rules.md should describe navigation to this page and what's visible. + • PR #258341 — bulk enable, disable, and delete from the rules list with select-all. + Add a bulk operations section to view-manage-rules.md. + + # --------------------------------------------------------------------------- + # Kibana alerting v2 — reduce noise + # --------------------------------------------------------------------------- + + - id: alerting-v2-reduce-noise + content_type: conceptual + docs_file: explore-analyze/alerting/kibana-alerting-v2/reduce-noise/ + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: + - https://github.com/elastic/kibana/pull/247464 + - https://github.com/elastic/kibana/pull/255734 + watch_paths: + - x-pack/platform/plugins/shared/alerting/common/rules/ + - x-pack/platform/plugins/shared/alerting/server/dispatcher/ + doc_set: + serverless: preview + notes: > + Covers all noise-reduction mechanisms. Several pages reference index names that + must be updated to final values (see chain note at top of file): `.rule-events`, + `.alert-actions`. PR #255734 adds the no-data handling UI to the rule form + (kind=alert only) — no-data-handling.md in this directory should reflect the + form controls and `noData.behavior` field values. + See alerting-v2-deactivate-alerts for the deactivate page, which also tracks #256527. + + - id: alerting-v2-deactivate-alerts + content_type: procedural + docs_file: explore-analyze/alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: + - https://github.com/elastic/kibana/pull/247464 + - https://github.com/elastic/kibana/pull/256527 + watch_paths: + - x-pack/platform/plugins/shared/alerting/server/dispatcher/steps/store_actions_step.ts + - x-pack/platform/plugins/shared/alerting/common/alerts/ + doc_set: + serverless: preview + notes: > + How to deactivate (and reactivate) alert episodes. PR #256527 changes dispatcher + behavior: episodes that are deactivated and also unmatched by any NP now receive + an `unmatched` action record in addition to the deactivation. Review if this page + describes what happens to deactivated episodes in the dispatcher pipeline. + + # --------------------------------------------------------------------------- + # Kibana alerting v2 — alert event field reference + # --------------------------------------------------------------------------- + + - id: alerting-v2-event-field-ref + content_type: reference + docs_file: explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: + - https://github.com/elastic/kibana/pull/247464 + - https://github.com/elastic/kibana/pull/257347 + - https://github.com/elastic/kibana/pull/256527 + - https://github.com/elastic/kibana/pull/254901 + - https://github.com/elastic/kibana/pull/258651 + watch_paths: + - x-pack/platform/plugins/shared/alerting/common/alert_event/ + - x-pack/platform/plugins/shared/alerting/server/data_streams/ + doc_set: + serverless: preview + notes: > + Field reference for alert event documents and the alert actions index schema. + High-priority page — several PRs require updates: + • PR #258651 (final rename) — update ALL index and view name references: + `.alerts-events-*` → `.rule-events` + `.alerts-actions` → `.alert-actions` + `$.alerting-episodes` → `$.alert-episodes` + The page description, body text, and index mapping section all use old names. + • PR #256527 — add `action_type: unmatched` with reason + `no matching notification policy` to the "Alert actions fields" table. + • PR #257347 — verify whether a duration field is added to the alert event document + schema (the PR adds duration to the episodes view query, not necessarily the raw event). + This page should be reviewed before every preview release cycle. + + # --------------------------------------------------------------------------- + # Features without doc pages yet (implementation has shipped, docs are gaps) + # --------------------------------------------------------------------------- + + - id: alerting-v2-o11y-episodes + content_type: procedural + docs_file: TBD # No page exists yet + docs_pr: ~ + implementation_prs: + - https://github.com/elastic/kibana/pull/257638 + watch_paths: + - packages/kbn-alerting-v2-episodes-ui/ + - x-pack/solutions/observability/plugins/observability/public/pages/alerts_v2/ + doc_set: + serverless: preview + notes: > + PR #257638 introduces an alerting episodes page in Observability at + `/app/observability/alerts_v2`. The page uses `@kbn/alerting-v2-episodes-ui` + for ES|QL-based data fetching, pagination, and episode status badges. + A doc page under solutions/observability/ is needed. Coordinate with the + Observability docs team to determine scope and placement. + + - id: alerting-v2-rule-execution-history + content_type: reference + docs_file: TBD # No page exists yet + docs_pr: ~ + implementation_prs: + - https://github.com/elastic/kibana/pull/254990 + watch_paths: + - x-pack/platform/plugins/shared/task_manager/server/task_events.ts + doc_set: + serverless: preview + notes: > + PR #254990 adds event log entries to Task Manager for rule execution outcomes + (success, failure, cancelled) in `.kibana-event-log*`. This enables a rule + execution history view. No doc page exists yet — determine if this should live + under manage-rules/ or be a standalone reference page. Coordinate with the + ResponseOps team on planned UI surface before writing the doc. + + # --------------------------------------------------------------------------- + # Watcher (existing, reorganized under alerting IA) + # --------------------------------------------------------------------------- + + - id: alerting-watcher + content_type: reference + docs_file: explore-analyze/alerting/watcher/ + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: [] + watch_paths: + - x-pack/plugin/watcher/ + doc_set: + stack: ga + notes: > + Existing Watcher docs (watcher.md and enable-watcher.md), now surfaced under + the alerting IA alongside v1 and v2. Content stable. Review only if Watcher + receives significant changes, which is unlikely given its maintenance-mode status. From 99e6ac9f582461cc1ae813081389daf5d60aa5cf Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Mon, 23 Mar 2026 13:51:03 -0400 Subject: [PATCH 04/40] Addresses issues in audit report The fixes fall into two categories: blocking errors (wrong information that must be corrected before publishing) and incomplete sections (additive work needed). --- .../alerting/kibana-alerting-v2.md | 2 +- .../alert-event-field-reference.md | 25 ++++- .../author-rules/create-rules-ui.md | 3 +- .../rule-settings/notification-policies.md | 17 ++- .../create-manage-notification-policies.md | 31 +++++- ...how-notification-policies-are-evaluated.md | 25 +++++ .../kibana-alerting-v2/before-you-begin.md | 2 +- .../before-you-begin/alerting-privileges.md | 4 +- .../before-you-begin/set-up.md | 17 ++- .../manage-alerts/explore-alerts-discover.md | 105 ++++++++++++++++++ .../investigate-respond/alert-actions.md | 31 ++++++ .../manage-rules/view-manage-rules.md | 39 ++++++- 12 files changed, 287 insertions(+), 14 deletions(-) diff --git a/explore-analyze/alerting/kibana-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2.md index 6689f2a531..426afe7fbd 100644 --- a/explore-analyze/alerting/kibana-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2.md @@ -63,7 +63,7 @@ You can switch a rule between modes at any time. Switching from alert to detect The Kibana alerting v2 pipeline has three main components: -1. **Rule executor** — Runs on a configurable schedule via Task Manager. Builds and executes the ES|QL query, writes signal or alert event documents to the `.alerts-events-*` data stream, and computes state transitions for alert-mode rules. +1. **Rule executor** — Runs on a configurable schedule via Task Manager. Builds and executes the ES|QL query, writes signal or alert event documents to the `.rule-events` data stream, and computes state transitions for alert-mode rules. 2. **Director** — Embedded in the rule executor. Manages episode state transitions using configurable strategies (basic transitions or count/timeframe-gated transitions). diff --git a/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md b/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md index 4fda631029..7f97021bfe 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md @@ -5,12 +5,12 @@ applies_to: since: "9.4" products: - id: kibana -description: "Field reference for Kibana alerting v2 alert event documents in .alerts-events-*, including common fields, alert-only fields, and the index mapping." +description: "Field reference for Kibana alerting v2 alert event documents in .rule-events, including common fields, alert-only fields, and the index mapping." --- # Kibana alerting v2 alert event field reference [alert-event-field-reference-v2] -Kibana alerting v2 rules write alert event documents to the `.alerts-events-*` data stream. This page describes the fields in each document. +Kibana alerting v2 rules write alert event documents to the **`.rule-events`** data stream. This page describes the fields in each document. ## Common fields @@ -33,3 +33,24 @@ Kibana alerting v2 rules write alert event documents to the `.alerts-events-*` d | `episode.id` | `keyword` | The episode identifier | | `episode.status` | `keyword` | Current episode state: `inactive`, `pending`, `active`, or `recovering` | | `episode.status_count` | `long` | Count of consecutive evaluations in the current status | + +::::{note} +**SME follow-up:** Whether **`duration`** appears on the raw alert event document in **`.rule-events`** (versus only in aggregated or episode views) is not finalized in this reference. Confirm with engineering before documenting `duration` in the raw event table. +:::: + +## Index mapping (`.rule-events`) + +The **`.rule-events`** data stream uses mappings defined by the alerting v2 storage layer. Treat `data` as **flattened** for arbitrary query output; avoid relying on undocumented subfields until they are listed in product reference material. + +## Alert action records (`.alert-actions`) + +User and system **alert actions** (for example acknowledge, snooze, tag) are stored in the **`.alert-actions`** data stream. Use these documents for auditing, MTTA-style metrics, and action history. + +| Field | Type | Description | +|---|---|---| +| `@timestamp` | `date` | When the action was recorded | +| `episode.id` | `keyword` | Target episode | +| `rule.id` | `keyword` | Rule that owns the episode | +| `action.type` | `keyword` | Action type, for example `acknowledge`, `snooze`, `tag`, `fire`, **`unmatched`** | + +The **`unmatched`** value indicates a dispatcher outcome where the episode did not match any notification policy. Other action types reflect user or system operations (see [Alert actions](manage-alerts/investigate-respond/alert-actions.md)). diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md index 3bb742dc73..af1f4edfb7 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md @@ -49,7 +49,7 @@ When the rule is in alert mode, additional settings are available: - **Alert delay** (activation threshold) — require the condition to be met a specified number of consecutive times or for a minimum duration before an alert becomes active. - **Recovery conditions** — define how recovery is detected. - **No-data handling** — configure behavior when the query returns no results. -- **Notification policies** — link one or more notification policies to route alerts to workflow destinations. +- **Notification policies** — policies are global; scoping uses **rule labels** and matchers on the policy side, not links from this form. Configure policies under **Notification Policies** (see [Notification policies](rule-settings/notification-policies.md)). - **Tags** — add free-form tags for filtering and organization. - **Investigation guide** — attach a runbook or investigation guide to the rule. @@ -60,6 +60,7 @@ Before saving, click **Preview** to evaluate the query against recent data. The - How many rows the query returns. - How many alert events would be generated. - Sample alert event documents. +- A **Lens-powered bar chart histogram** of matching row counts over time, for both **evaluation** previews and **recovery** previews (when recovery logic applies). ## Save the rule diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md index 4a08889a63..e2114f3fa1 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md @@ -10,7 +10,22 @@ description: "Notification policies control how and when Kibana alerting v2 aler # Kibana alerting v2 notification policies [notification-policies-v2] -A notification policy defines how and when alerts reach people and systems. Notification policies are standalone, reusable entities. One policy can apply across multiple rules. +A notification policy defines how and when alerts reach people and systems. In Kibana alerting v2, notification policies are **global** saved objects: they are not attached to individual rules. Which rules a policy applies to is determined by **`rule_labels`** on the policy and by the episode matcher, not by references from the rule. + +## Compare Kibana alerting v1 and v2 notification policies + +| | Kibana alerting v1 | Kibana alerting v2 | +|---|---|---| +| **Scope** | Per-rule connectors and actions on the rule | **Global** notification policies; rules do not reference specific policies | +| **Matching** | Rule execution drives connector runs | **`rule_labels`** scoping on the policy, then KQL episode matching | +| **Matcher context** | N/A (rule-centric) | Typed fields including `episode_status`, `rule.name`, `rule.labels`, and `data.*` | + +## How notification policies apply to rules + +Notification policies are **global** — rules do not store or reference a list of notification policies. + +- **Scoping** is expressed on the policy itself using **`rule_labels`**. Only episodes for rules whose labels satisfy the policy’s label selector are candidates for that policy. +- After label scoping, the policy’s **KQL episode matcher** runs against the typed matcher context (for example `episode_status`, `rule.name`, `rule.labels`, and fields under `data.*`). ## Learn more diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md index 2d17407544..26b6a71a25 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md @@ -10,11 +10,38 @@ description: "Create, configure, and manage Kibana alerting v2 notification poli # Create and manage Kibana alerting v2 notification policies [create-manage-notification-policies-v2] -Create notification policies to control which alerts trigger notifications, how alerts are grouped, how frequently notifications are sent, and where they are routed. +Create notification policies to control which alerts trigger notifications, how alerts are grouped, how frequently notifications are sent, and where they are routed. Policies are **global**: you create and edit them from the **Notification Policies** area, not from the rule form. Rules do not “link” to policies; scoping is defined on the policy with **`rule_labels`** and matchers (see [Notification policies](../notification-policies.md)). ## Create a notification policy 1. Navigate to **Management > Alerts and Insights > Rules V2 > Notification Policies**. 2. Click **Create policy**. -3. Configure the policy settings. +3. Configure the policy settings (matching, grouping, throttling, destinations, and optional snooze). 4. Click **Save**. + +## Policy list columns + +| Column | Description | +|---|---| +| **Name** | Policy display name | +| **Status** | Whether the policy is active | +| **Rule labels** | Label selector used to scope which rules this policy can apply to | +| **Last updated** | Last save time | + +There is **no “linked rule count”** in the global model: policies are not attached to a fixed set of rules. Use **rule labels** and matcher behavior to understand effective coverage (see [How notification policies are evaluated](how-notification-policies-are-evaluated.md)). + +## Destinations + +Destinations route matching episodes to workflows and channels. Instead of choosing from a static list, the UI provides a **search field** that queries available workflows through the **`/api/workflows/search`** endpoint. Type to search and select the workflow to use for this policy. + +## Snooze and maintenance + +You can snooze a policy for a defined window so that it does not dispatch notifications during that period. + +::::{important} Production considerations +When you **update** or **delete** a notification policy, API keys used for execution are **invalidated** by a background task (`invalidateApiKeysTask`). Allow for brief propagation delay before new keys are used for dispatch. For intervals and delays, see [Set up](../../../before-you-begin/set-up.md). +:::: + +## Bulk actions + +On the notification policies list, select one or more policies to **enable**, **disable**, or **delete** in bulk. **Select all** selects every policy on the current page of results; clear the selection before changing filters if you need a different set. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md index 61e181b10b..922678a0b1 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md @@ -13,3 +13,28 @@ description: "How the Kibana alerting v2 dispatcher processes alert episodes thr The dispatcher is the asynchronous component that bridges rule execution and notification delivery. It polls for new alert episodes and processes them through a 10-step pipeline. The dispatcher runs every 10 seconds and processes up to 10,000 episodes per run. + +## Dispatcher pipeline + +1. **Load candidate episodes** — Fetch episodes that are ready for notification processing. +2. **Apply suppression rules** — Remove or defer episodes that match active suppression configuration. +3. **Resolve rule context** — Load rule metadata needed for matching and routing. +4. **Build matcher context** — Construct the typed context used for policy evaluation (including rule and episode fields). +5. **Load notification policies** — Call **`findAllDecrypted()`** and load **all** notification policies for the space. Policies are not filtered by per-rule references; loading is independent of which rule produced the episode. +6. **Evaluate policies (two phases)** — For each policy: + 1. **Rule label scoping** — Determine whether the episode’s rule satisfies the policy’s **`rule_labels`** selector. If not, skip this policy for the episode. + 2. **KQL episode matcher** — If label scoping passes, evaluate the policy’s KQL condition against the typed **`MatcherContext`**, including fields such as **`rule.name`**, **`rule.labels`**, and **`data.*`** (alongside other context fields the platform exposes for matching). +7. **Group and throttle** — Apply grouping keys and throttling windows according to matching policies. +8. **Select destinations** — Resolve workflow destinations and channels for dispatch. +9. **Dispatch notifications** — Send notifications and record outcomes. +10. **Record outcomes** — Persist dispatcher results for auditing and follow-up processing. + +### Outcomes (step 10) + +| Outcome | Description | +|---|---| +| **dispatched** | Notifications were sent according to policy | +| **throttled** | Delivery was suppressed by throttling rules | +| **suppressed** | Episode was suppressed before dispatch | +| **unmatched** | Episode did not match any notification policy | +| **error** | Processing failed; see logs and health indicators | diff --git a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md index 66a6c1f199..7137694050 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md +++ b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md @@ -36,6 +36,6 @@ If you are coming from Kibana alerting v1, note these differences: Kibana alerting v2 runs alongside Kibana alerting v1. Both systems are fully operational: - You access Kibana alerting v2 rules and Kibana alerting v1 rules from the same **Rules** navigation entry, in separate tabs. -- Each system writes to its own indices. Kibana alerting v2 alert events go to `.alerts-events-*`; Kibana alerting v1 alerts go to `.alerts-*`. +- Each system writes to its own indices. Kibana alerting v2 alert events go to `.rule-events`; Kibana alerting v1 alerts go to `.alerts-*`. - There is no automatic migration. You can copy rules from Kibana alerting v1 to Kibana alerting v2 manually when you are ready. - You can create rules on alerts that correlate across both systems by querying both alert indices. diff --git a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md index f773dc2bee..cc0a539291 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md +++ b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md @@ -35,11 +35,11 @@ To create and manage notification policies, you need: To view and take actions on alerts (acknowledge, snooze, tag, assign), you need: - **{{kib}} feature privilege**: `Rules V2` with at least read access. -- **{{es}} index privileges**: Read access to `.alerts-events-*` for viewing alerts. Write access to `.alerts-actions` for taking alert actions. +- **{{es}} index privileges**: Read access to `.rule-events` for viewing alerts. Write access to `.alert-actions` for taking alert actions. ### Discover and dashboard access -Because Kibana alerting v2 alert events are stored in standard {{es}} indices, any user with read access to `.alerts-events-*` can query them in Discover and use them in dashboards. No additional {{kib}} privileges are required beyond the standard Discover feature access. +Because Kibana alerting v2 alert events are stored in standard {{es}} indices, any user with read access to `.rule-events` can query them in Discover and use them in dashboards. No additional {{kib}} privileges are required beyond the standard Discover feature access. ## Space boundaries diff --git a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md index b8fb32c948..99fa444af5 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md +++ b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md @@ -29,11 +29,22 @@ Kibana alerting v2 depends on the following {{kib}} plugins, which are enabled b Kibana alerting v2 automatically creates and manages the following data streams: -- **`.alerts-events-*`** — stores signal and alert event documents produced by rule evaluations. This is an append-only data stream. -- **`.alerts-actions`** — stores alert action records (acknowledge, snooze, deactivate, fire, suppress) used by the dispatcher for suppression tracking and audit. +- **`.rule-events`** — stores signal and alert event documents produced by rule evaluations. This is an append-only data stream. +- **`.alert-actions`** — stores alert action records (acknowledge, snooze, deactivate, fire, suppress) used by the dispatcher for suppression tracking and audit. No manual index configuration is required. The system creates these data streams with the appropriate mappings when the first rule executes. +## {{kib}} advanced settings + +Optional Task Manager settings control how API keys for notification policies are invalidated after policy updates or deletes: + +| Setting | Default | Purpose | +|---|---|---| +| `xpack.alerting.invalidateApiKeysTask.interval` | `5m` | How often the background invalidation task runs | +| `xpack.alerting.invalidateApiKeysTask.removalDelay` | `1h` | Delay before removing old API key material after invalidation | + +Adjust these only when directed by operations or support; incorrect values can affect dispatch reliability or key rotation timing. + ## Verify the installation To verify that Kibana alerting v2 is working: @@ -41,4 +52,4 @@ To verify that Kibana alerting v2 is working: 1. Navigate to **Management > Alerts and Insights > Rules V2**. 2. Confirm that the rules list page loads. 3. Click **Create rule** to confirm the rule form opens. -4. Optionally, create a test rule with a simple ES|QL query and verify that alert events appear in Discover by querying the `.alerts-events-*` index. +4. Optionally, create a test rule with a simple ES|QL query and verify that alert events appear in Discover by querying the **`.rule-events`** data stream. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md index 676ff5d8f0..e24719ac1e 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md @@ -11,3 +11,108 @@ description: "Query Kibana alerting v2 alert events in Discover using ES|QL for # Explore Kibana alerting v2 alerts and signals in Discover [explore-alerts-discover-v2] Because Kibana alerting v2 alert events are stored as queryable data in standard {{es}} indices, you can explore them in Discover using ES|QL. + +## Query alert events + +Run ES|QL in Discover against the **`.rule-events`** data stream to analyze signal and alert documents written by rule executions. + +### Example: Recent alert and signal events + +**What it does:** Returns the most recent rows from `.rule-events`, with timestamps, rule id, breach/recovery/no-data **status**, whether the row is a **signal** or **alert**, and current **episode** state. + +**Why use it:** Start here for ad hoc investigation—see what your rules produced today without aggregating, so you can spot spikes, wrong rules, or unexpected episode states in raw order. + +```esql +FROM .rule-events +| WHERE @timestamp > NOW() - 1 day +| KEEP @timestamp, rule.id, status, type, episode.status +| SORT @timestamp DESC +| LIMIT 100 +``` + +### Example: Event counts by status + +**What it does:** Counts how many events fall into each **status** value (`breached`, `recovered`, `no_data`, and so on) over the last seven days. + +**Why use it:** Understand the mix of breach vs recovery vs no-data at a glance—useful for health checks, reporting, and seeing whether no-data dominates (query or data-source issues). + +```esql +FROM .rule-events +| WHERE @timestamp > NOW() - 7 days +| STATS event_count = COUNT(*) BY status +| SORT event_count DESC +``` + +### Example: Hourly event volume + +**What it does:** Buckets events by hour with `DATE_TRUNC` and counts events per hour for the last 24 hours. + +**Why use it:** Spot time-of-day patterns, rule schedule effects, or incident windows—compare quiet hours vs bursts without picking a single rule yet. + +```esql +FROM .rule-events +| WHERE @timestamp > NOW() - 24 hours +| STATS c = COUNT(*) BY hour = DATE_TRUNC(1 hour, @timestamp) +| SORT hour ASC +``` + +### Example: Events for a specific rule + +**What it does:** Filters to one **rule id**, keeps time, **group_hash**, status, type, and the **data** payload from your ES|QL rule output. + +**Why use it:** Drill into a single rule you care about—validate field shapes in `data`, follow one rule’s volume, or share a reproducible slice with another engineer (replace `YOUR_RULE_ID` with the real id). + +```esql +FROM .rule-events +| WHERE rule.id == "YOUR_RULE_ID" + AND @timestamp > NOW() - 7 days +| KEEP @timestamp, group_hash, status, type, data +| SORT @timestamp DESC +``` + +### Example: Group hash series for an episode + +**What it does:** Selects all events for one **group_hash** (one alert series) and keeps time, status, and **episode** identifiers and state, sorted oldest to newest. + +**Why use it:** Reconstruct the timeline for a single series—how an episode opened, changed state, and recovered—using the same key the executor uses for grouping. + +```esql +FROM .rule-events +| WHERE group_hash == "YOUR_GROUP_HASH" + AND @timestamp > NOW() - 7 days +| KEEP @timestamp, status, episode.id, episode.status +| SORT @timestamp ASC +``` + +### Example: Breached rows trend + +**What it does:** Counts only rows where **status** is `breached`, aggregated by calendar day for the last week. + +**Why use it:** Track whether breach volume is trending up or down day over day—useful for capacity, noisy rules, or validating a change after a deployment. + +```esql +FROM .rule-events +| WHERE status == "breached" AND @timestamp > NOW() - 7 days +| STATS breaches = COUNT(*) BY day = DATE_TRUNC(1 day, @timestamp) +| SORT day ASC +``` + +## Query alert actions (for example, MTTA) + +Operational metrics such as **mean time to acknowledge (MTTA)** use action documents in **`.alert-actions`**. + +### Example: Acknowledgment events for MTTA-style analysis + +**What it does:** Reads **`.alert-actions`** and returns rows where **action.type** is `acknowledge`, with time, episode, and rule identifiers. + +**Why use it:** Acknowledgments are the usual anchor for MTTA-style metrics; from here you can join or compare against `fire` actions or episode start times in your own aggregations to match your org’s definition of “time to acknowledge.” + +```esql +FROM .alert-actions +| WHERE action.type == "acknowledge" + AND @timestamp > NOW() - 30 days +| KEEP @timestamp, episode.id, rule.id, action.type +| SORT @timestamp DESC +``` + +Adjust filters and aggregations to match how your organization defines MTTA (for example, time from first `fire` to first `acknowledge` for an episode). diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md index 5ef5ebd6af..a82f695a02 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md @@ -11,3 +11,34 @@ description: "Actions you can take on Kibana alerting v2 alerts: acknowledge, sn # Kibana alerting v2 alert actions [alert-actions-v2] Alert actions are operations you perform on Kibana alerting v2 alerts to manage their lifecycle, suppress notifications, and organize your triage workflow. + +## Where action records are stored + +When you take an action on an alert, {{kib}} records it in the **`.alert-actions`** data stream. You can query these documents in Discover (ES|QL) for auditing, reporting, and metrics such as mean time to acknowledge (MTTA). + +## Action types + +The `action.type` field identifies what happened. Common values include: + +| `action.type` | Description | +|---|---| +| `fire` | Notification or escalation fired for the episode | +| `acknowledge` | User acknowledged the alert | +| `snooze` | Notifications snoozed for a period | +| `deactivate` | Alert or episode deactivated | +| `suppress` | Suppression applied | +| `assign` | Assignment changed | +| `tag` | Tag applied to the alert (**recorded** action) | +| `resolve` | Episode or alert resolved | +| `unmatched` | Episode did not match any notification policy (dispatcher outcome) | + +The **`untag`** action type is not used; tagging is recorded with the **`tag`** action type. + +## Available actions in the UI + +From the alert and episode views you can: + +- **Acknowledge**, **snooze**, **deactivate**, **assign**, **resolve**, and **add to cases** as described in the triage workflow. +- **Tag** alerts for organization. Tagging is persisted as a **`tag`** action in **`.alert-actions`**, consistent with bulk-get and query behavior for recorded actions. + +For field-level detail on action documents, see [Alert event field reference](../../alert-event-field-reference.md). diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md b/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md index 69586e9cd6..5120089c7a 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md @@ -10,4 +10,41 @@ description: "View rule details, execution history, related rules, and alerts ge # View and manage Kibana alerting v2 rules [view-manage-rules-v2] -The rule details page provides a comprehensive view of a single rule's configuration, execution history, and generated alerts. +The **Rules V2** list and the **rule details** page give you a full view of Kibana alerting v2 rules: configuration, execution history, related rules, and alerts generated by a rule. + +## Rules list + +The rules list is the entry point under **Management > Alerts and Insights > Rules V2**. + +### Columns + +Typical columns include: + +- **Name** — Rule name; click to open the rule **details** page. +- **Type** — Rule type (for example detect vs alert mode, where applicable). +- **Schedule** — How often the rule runs. +- **Last run** — Last execution time and status. +- **Tags** — Labels for filtering and notification policy scoping. +- **Enabled** — Whether the rule is active. + +Exact columns can vary by release; use column controls if your build exposes them. + +### Filters and search + +Use the search field and filters (for example by tag, status, or space) to narrow the list. Search matches rule metadata such as name and description depending on implementation. + +### Open rule details + +Click a rule **name** to open the rule details page. The details page shows configuration, execution history, related rules, and alerts for that rule (documented on that page). + +## Bulk actions + +From the rules list, select one or more rules to run bulk operations: + +- **Enable** — Turn on selected rules. +- **Disable** — Turn off selected rules (they stop scheduling until re-enabled). +- **Delete** — Remove selected rules (confirm when prompted). + +**Select all** selects every rule on the **current page** of results. If you need to act on more than one page, change page size or repeat the action, or refine filters so the desired rules appear together. + +The rule details page content (single-rule views) is unchanged by these list behaviors; see that page for execution history and per-rule actions. From 801e820e12b67df3c0cde075bbdf361c278142ca Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Mon, 23 Mar 2026 14:06:45 -0400 Subject: [PATCH 05/40] updated old terms --- .../manage-alerts/explore-alerts-discover.md | 86 +++++++----- .../kibana-alerting-v2/manage-rules.md | 20 ++- .../kibana-alerting-v2/reduce-noise.md | 127 +++++++++++++++++- .../reduce-noise/activation-thresholds.md | 6 +- .../reduce-noise/deactivate-alerts.md | 4 +- .../reduce-noise/grouping.md | 6 +- .../reduce-noise/maintenance-windows.md | 4 +- .../reduce-noise/matcher.md | 6 +- .../reduce-noise/no-data-handling.md | 6 +- .../reduce-noise/recovery-thresholds.md | 6 +- .../reduce-noise/rules-on-alerts.md | 8 +- .../reduce-noise/snooze-or-silence.md | 4 +- .../reduce-noise/throttle.md | 4 +- 13 files changed, 220 insertions(+), 67 deletions(-) diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md index e24719ac1e..f614328e5a 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md @@ -5,92 +5,108 @@ applies_to: since: "9.4" products: - id: kibana -description: "Query Kibana alerting v2 alert events in Discover using ES|QL for trend analysis, operational reporting, and ad hoc investigation." +description: "Query Kibana alerting v2 alert events in Discover with ES|QL for trend analysis, operational reporting, and on-demand investigation." --- -# Explore Kibana alerting v2 alerts and signals in Discover [explore-alerts-discover-v2] +# Explore {{kib}} alerting v2 alerts and signals in Discover [explore-alerts-discover-v2] -Because Kibana alerting v2 alert events are stored as queryable data in standard {{es}} indices, you can explore them in Discover using ES|QL. +**What this page is for:** {{kib}} alerting v2 stores rule output in **`.rule-events`** and user or system actions in **`.alert-actions`**. Both are ordinary {{es}} data you query with **{{esql}}** in **Discover**. **When you land here**, use the examples to **investigate** what rules produced (recent rows, status mix, hourly volume), **drill into** one rule or one alert series, **track** breach trends over days, and **support operational metrics** such as mean time to acknowledge (MTTA) from acknowledgment rows. + +**How to use it:** Open Discover, choose **{{esql}}**, paste a query, then adjust time ranges and placeholders (`YOUR_RULE_ID`, `YOUR_GROUP_HASH`) to match your environment. Save views, export results, or reuse clauses in dashboards and reports. + +The examples below follow that workflow: they start with **broad** views of **`.rule-events`**, move to **narrow** filters (single rule, single `group_hash`), add a **daily breach trend**, then switch to **`.alert-actions`** for acknowledgment history. ## Query alert events -Run ES|QL in Discover against the **`.rule-events`** data stream to analyze signal and alert documents written by rule executions. +These queries target **`.rule-events`**: signal and alert documents from rule evaluations. Use them before the **alert actions** section when you care about rule output and episode fields, not action audit rows. ### Example: Recent alert and signal events -**What it does:** Returns the most recent rows from `.rule-events`, with timestamps, rule id, breach/recovery/no-data **status**, whether the row is a **signal** or **alert**, and current **episode** state. - -**Why use it:** Start here for ad hoc investigation—see what your rules produced today without aggregating, so you can spot spikes, wrong rules, or unexpected episode states in raw order. +This example shows a **non-aggregated** sample of the newest documents in **`.rule-events`**: one row per evaluation output, with core fields so you can scan what happened in roughly the **last day**. The results are capped at **100** rows so the query stays responsive in Discover. ```esql +// ═══════════════════════════════════════════════════════════════ +// LATEST ROWS — Sample across rules (raw timeline) +// Why: See what ran recently without aggregating; spot spikes or odd episode state +// ═══════════════════════════════════════════════════════════════ FROM .rule-events -| WHERE @timestamp > NOW() - 1 day -| KEEP @timestamp, rule.id, status, type, episode.status +| WHERE @timestamp > NOW() - 1 day // Rolling last 24 hours +| KEEP @timestamp, rule.id, status, type, episode.status // When, rule id, status, signal or alert type, episode state | SORT @timestamp DESC -| LIMIT 100 +| LIMIT 100 // Cap rows for a quick scan ``` ### Example: Event counts by status -**What it does:** Counts how many events fall into each **status** value (`breached`, `recovered`, `no_data`, and so on) over the last seven days. - -**Why use it:** Understand the mix of breach vs recovery vs no-data at a glance—useful for health checks, reporting, and seeing whether no-data dominates (query or data-source issues). +This example **aggregates** all events from the **last seven days** and counts how many documents fall into each **`status`** value (for example `breached`, `recovered`, or `no_data`). Use it to see whether the stream is mostly healthy transitions or dominated by a single status. ```esql +// ═══════════════════════════════════════════════════════════════ +// STATUS MIX — How many events per status over the week +// Why: Health check; see if no_data dominates (data or query issues) +// ═══════════════════════════════════════════════════════════════ FROM .rule-events | WHERE @timestamp > NOW() - 7 days -| STATS event_count = COUNT(*) BY status +| STATS event_count = COUNT(*) BY status // One bucket per status value | SORT event_count DESC ``` ### Example: Hourly event volume -**What it does:** Buckets events by hour with `DATE_TRUNC` and counts events per hour for the last 24 hours. - -**Why use it:** Spot time-of-day patterns, rule schedule effects, or incident windows—compare quiet hours vs bursts without picking a single rule yet. +This example buckets events by **clock hour** over the **last 24 hours** using `DATE_TRUNC` and counts events per hour. It highlights **when** volume rises or falls, which helps correlate activity with rule schedules, deployments, or incidents. ```esql +// ═══════════════════════════════════════════════════════════════ +// THROUGHPUT — Event counts per clock hour +// Why: Compare quiet versus busy windows; correlate with schedules or incidents +// ═══════════════════════════════════════════════════════════════ FROM .rule-events | WHERE @timestamp > NOW() - 24 hours -| STATS c = COUNT(*) BY hour = DATE_TRUNC(1 hour, @timestamp) +| STATS c = COUNT(*) BY hour = DATE_TRUNC(1 hour, @timestamp) // Bucket by hour | SORT hour ASC ``` ### Example: Events for a specific rule -**What it does:** Filters to one **rule id**, keeps time, **group_hash**, status, type, and the **data** payload from your ES|QL rule output. - -**Why use it:** Drill into a single rule you care about—validate field shapes in `data`, follow one rule’s volume, or share a reproducible slice with another engineer (replace `YOUR_RULE_ID` with the real id). +This example filters **`.rule-events`** to a **single rule** by **`rule.id`**. Replace **`YOUR_RULE_ID`** with the id from the rule’s details or API. It keeps **`data`**, which holds the fields your {{esql}} rule selected—useful for validating field names and shapes. The window is **seven days**. ```esql +// ═══════════════════════════════════════════════════════════════ +// SINGLE RULE — All events for one rule id (replace YOUR_RULE_ID) +// Why: Validate the data field payload; isolate volume for one definition +// ═══════════════════════════════════════════════════════════════ FROM .rule-events -| WHERE rule.id == "YOUR_RULE_ID" +| WHERE rule.id == "YOUR_RULE_ID" // Narrow to one rule AND @timestamp > NOW() - 7 days -| KEEP @timestamp, group_hash, status, type, data +| KEEP @timestamp, group_hash, status, type, data // Series key and query output fields | SORT @timestamp DESC ``` ### Example: Group hash series for an episode -**What it does:** Selects all events for one **group_hash** (one alert series) and keeps time, status, and **episode** identifiers and state, sorted oldest to newest. - -**Why use it:** Reconstruct the timeline for a single series—how an episode opened, changed state, and recovered—using the same key the executor uses for grouping. +This example follows **one alert series** (`group_hash`) over **seven days**, sorted **oldest to newest**, so you can read the timeline for that series. Replace **`YOUR_GROUP_HASH`** with the value from an event or the rule details. **Episode** fields show how state changed across evaluations. ```esql +// ═══════════════════════════════════════════════════════════════ +// ONE SERIES — Timeline for a single group_hash (replace YOUR_GROUP_HASH) +// Why: Replay how an episode progressed (same key the executor uses to group) +// ═══════════════════════════════════════════════════════════════ FROM .rule-events | WHERE group_hash == "YOUR_GROUP_HASH" AND @timestamp > NOW() - 7 days -| KEEP @timestamp, status, episode.id, episode.status +| KEEP @timestamp, status, episode.id, episode.status // Chronological episode story | SORT @timestamp ASC ``` ### Example: Breached rows trend -**What it does:** Counts only rows where **status** is `breached`, aggregated by calendar day for the last week. - -**Why use it:** Track whether breach volume is trending up or down day over day—useful for capacity, noisy rules, or validating a change after a deployment. +This example counts only rows where **`status`** is **`breached`** (the condition was met for that evaluation), then totals **breaches per calendar day** for the **last week**. It is suited to **trend** questions (getting louder or quieter over days), not to total signal volume. ```esql +// ═══════════════════════════════════════════════════════════════ +// BREACH TREND — Daily breach counts (condition met rows only) +// Why: Day-over-day trend; noisy rules; validate a change after deploy +// ═══════════════════════════════════════════════════════════════ FROM .rule-events | WHERE status == "breached" AND @timestamp > NOW() - 7 days | STATS breaches = COUNT(*) BY day = DATE_TRUNC(1 day, @timestamp) @@ -99,15 +115,17 @@ FROM .rule-events ## Query alert actions (for example, MTTA) -Operational metrics such as **mean time to acknowledge (MTTA)** use action documents in **`.alert-actions`**. +Earlier on this page, the **`.rule-events`** examples covered **what the rule wrote**; this section covers **what people did** to alerts. Operational metrics such as **mean time to acknowledge (MTTA)** build on action documents in **`.alert-actions`** (for example acknowledgments), often combined with episode or `fire` timestamps in a separate step. ### Example: Acknowledgment events for MTTA-style analysis -**What it does:** Reads **`.alert-actions`** and returns rows where **action.type** is `acknowledge`, with time, episode, and rule identifiers. - -**Why use it:** Acknowledgments are the usual anchor for MTTA-style metrics; from here you can join or compare against `fire` actions or episode start times in your own aggregations to match your org’s definition of “time to acknowledge.” +This example reads **`.alert-actions`** (not **`.rule-events`**) and returns rows where **`action.type`** is **`acknowledge`**, limited to **30 days** of history. It is a typical **starting point** for MTTA: you still need timestamps for “start” (for example first `fire` or episode start) and your own definition of acknowledge time, which may require a second query or aggregation. ```esql +// ═══════════════════════════════════════════════════════════════ +// ACKNOWLEDGMENTS — Rows users acknowledged (MTTA anchor) +// Why: Pair with fire or episode start in a follow-up query for your organization's MTTA definition +// ═══════════════════════════════════════════════════════════════ FROM .alert-actions | WHERE action.type == "acknowledge" AND @timestamp > NOW() - 30 days diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-rules.md b/explore-analyze/alerting/kibana-alerting-v2/manage-rules.md index e92f0ad11e..4603aa2862 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-rules.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-rules.md @@ -5,9 +5,23 @@ applies_to: since: "9.4" products: - id: kibana -description: "View, filter, and manage Kibana alerting v2 rules from the rules list." +description: "Navigate Kibana alerting v2 rule management: rules list and details, bulk actions, snooze, and disabling rules." --- -# Manage Kibana alerting v2 rules [manage-rules-v2] +# Manage {{kib}} alerting v2 rules [manage-rules-v2] -View, filter, and manage your Kibana alerting v2 rules from a single entry point. +Use this section after rules exist in your space: find rules in the **Rules V2** list, open a rule to inspect configuration and execution history, run bulk operations, and change whether rules run or notify. **Managing rules** is separate from **authoring** definitions—refer to [Author rules](author-rules.md) to create or edit the {{esql}} query, schedule, and mode. + +**Where to work in {{kib}}:** **Management** → **Alerts and Insights** → **Rules V2**. + +## In this section + +| Page | Use it to | +|---|---| +| [View and manage rules](manage-rules/view-manage-rules.md) | Use the rules list (columns, filters, search, bulk enable, disable, delete) and open **rule details** for a single rule. | +| [Snooze and disable rules](manage-rules/snooze-disable-rules.md) | Temporarily suppress notifications (including per-series snooze) or **disable** a rule so it stops executing. | + +## Related + +- [Author rules](author-rules.md) — Create rules, set detect or alert mode, and edit query and schedule. +- [Manage alerts](manage-alerts.md) — Triage and respond to alerts produced by rules. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md index c2ea78e6b2..a62440d72d 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md @@ -5,9 +5,130 @@ applies_to: since: "9.4" products: - id: kibana -description: "Reduce Kibana alerting v2 alert noise and false positives using activation thresholds, notification policy controls, rules on alerts, and manual suppression." +description: "Select the right Kibana alerting v2 feature to reduce noise: thresholds, no-data handling, notification policies, throttling, snooze, rules on alerts, and more." --- -# Reduce Kibana alerting v2 noise and false positives [reduce-noise-v2] +# Reduce {{kib}} alerting v2 noise and false positives [reduce-noise-v2] -Kibana alerting v2 provides multiple mechanisms to reduce alert noise and prevent false positives. Each mechanism operates at a different stage of the alerting pipeline. +{{kib}} alerting v2 offers many ways to reduce noise, each applied at a different stage—from the {{esql}} query and lifecycle thresholds through notification policies, throttling, and manual controls. Selecting the wrong lever wastes effort and can hide real problems. This page helps you **match a situation to a mechanism** and explains **how mechanisms fit in the pipeline** so you can combine them deliberately. + +If multiple rows in the table apply, see [Using them together](#using-them-together). + +## Select the right approach + +| Your situation | Use this | What it does | +|---|---|---| +| The {{esql}} query matches too much normal traffic (too many breaching rows) | [Author and tune the rule](../author-rules.md) | Narrows the query, `WHERE` clause, schedule, or lookback so evaluations only surface what matters | +| Short spikes or flapping metrics open alerts before they should | [Activation thresholds](reduce-noise/activation-thresholds.md) | Requires consecutive breaches or a minimum duration before an episode becomes **active** | +| The alert recovers and reopens too often (flapping) | [Recovery thresholds](reduce-noise/recovery-thresholds.md) | Requires sustained clear conditions before an episode leaves **recovering** | +| The query returns no rows and **no_data** or recovery behavior is misleading | [No-data handling](reduce-noise/no-data-handling.md) | Configures how empty results are interpreted so gaps do not look like false recoveries or false alerts | +| Notifications repeat for the same group on every evaluation | [Throttling](reduce-noise/throttle.md) | Enforces a minimum interval between notifications **per notification group** | +| Recipients get too many separate messages for related episodes | [Notification grouping](reduce-noise/grouping.md) | Batches related alerts into fewer notifications | +| Notifications should only go out for certain episodes (severity, labels, payload fields) | [Matchers](reduce-noise/matcher.md) | Applies notification policy **rule_labels** scoping and **KQL** episode matching so only matching episodes route to workflows | +| Planned maintenance: evaluations should continue but on-call should not be paged | [Maintenance windows](reduce-noise/maintenance-windows.md) | Pauses notifications for a scheduled window | +| A temporary quiet period is needed for a series or episode without changing the rule | [Snooze or silence](reduce-noise/snooze-or-silence.md) | Snoozes or silences notifications; **acknowledge** can also quiet an episode while work proceeds | +| Many low-level alerts should roll up into one higher-level signal | [Rules on alerts](reduce-noise/rules-on-alerts.md) | Runs follow-on rules on **`.rule-events`** (or related data) to correlate and notify once | +| One **alert episode** should stop notifying and leave the triage queue while the rule keeps running | [Deactivate alerts](reduce-noise/deactivate-alerts.md) | **Deactivates** that episode; the rule still evaluates and can detect new episodes for other **series** | + +## How each mechanism works + +Mechanisms are listed in **rough pipeline order**: from what happens during rule evaluation and lifecycle, through notification policy processing, to operator controls. + +### Author and tune the rule + +Acts on: **the {{esql}} query and rule schedule, before interpretation as breach or no_data** + +**Problem:** The detector fires on the wrong things. + +Refine the base query, alert `WHERE` clause, schedule, and lookback. This is the only option that improves the underlying signal. Other tools filter or route what the rule already emits. See [Author rules](../author-rules.md). + +### Activation and recovery thresholds + +Acts on: **episode lifecycle transitions** (pending → active, recovering → inactive) + +**Problem:** Conditions flicker, or recovery should hold steady before closing. + +[Activation thresholds](reduce-noise/activation-thresholds.md) delay promotion to **active**. [Recovery thresholds](reduce-noise/recovery-thresholds.md) delay return to **inactive**. Both reduce flip-flopping without hiding rows in the source data. + +### No-data handling + +Acts on: **evaluations that return zero rows** + +**Problem:** Data stopped arriving, or empty results should not imply recovery or a **no_data** storm. + +Configure how the rule treats empty results. See [No-data handling](reduce-noise/no-data-handling.md) and [No-data handling (rule settings)](../author-rules/rule-settings/no-data-handling.md). + +### Notification matchers and grouping + +Acts on: **which episodes a notification policy considers and how they are batched** + +**Problem:** Only some episodes should page the team, or messages should batch by service or host. + +[Matchers](reduce-noise/matcher.md) scope policies (labels + KQL). [Grouping](reduce-noise/grouping.md) combines related episodes into fewer notifications. + +### Throttling + +Acts on: **notification send rate for a group** + +**Problem:** The same notification repeats on every run. + +[Throttling](reduce-noise/throttle.md) limits how often a policy may notify for the same group. Detection and episode state are unchanged; only dispatch spacing changes. + +### Maintenance windows + +Acts on: **notification dispatch during a window** + +**Problem:** Maintenance is scheduled; events should still be recorded without paging. + +[Maintenance windows](reduce-noise/maintenance-windows.md) pause notifications for planned work. Evaluations continue unless the rule is no longer enabled in the {{rules-ui}}. + +### Snooze, silence, and acknowledgment + +Acts on: **notifications for a scope (series, attributes, episode)** + +**Problem:** Quiet a series for a time, or mark ownership of an episode. + +[Snooze or silence](reduce-noise/snooze-or-silence.md) covers temporary suppression and acknowledgment-driven quieting. + +### Rules on alerts + +Acts on: **downstream correlation and routing** + +**Problem:** One summary notification is enough when the pattern is severe, not one per underlying row. + +[Rules on alerts](reduce-noise/rules-on-alerts.md) uses alert event data as input to another rule so operations can escalate or summarize. + +### Deactivate alerts + +Acts on: **a single alert episode** (lifecycle processing and notifications) + +**Problem:** One **alert episode** should drop out of triage while other **series** keep running. + +[Deactivate alerts](reduce-noise/deactivate-alerts.md) **deactivates** that episode: lifecycle processing and notifications stop for it, while the rule continues to evaluate and can open new episodes for other **group_hash** values. + +## Key distinctions + +| | Tune rule / schedule | Activation / recovery thresholds | No-data handling | Matchers / grouping / throttle | {{maint-windows-cap}} / snooze / silence | Rules on alerts | **Deactivate alerts** | +|---|---|---|---|---|---|---|---| +| **Rule still evaluates** | Yes | Yes | Yes | Yes | Yes | Yes (source rules) | Yes | +| **Changes breach detection logic** | Yes | No (delays state) | Yes (empty-result policy) | No | No | N/A | No | +| **Reduces notifications** | If fewer breaches | Indirectly | Indirectly | Yes | Yes | Yes | Yes | +| **Typical time scope** | Until next edit | Consecutive runs / duration | Per evaluation | Policy config | Window or until cleared | N/A | Until episode handled | + +## Using them together [using-them-together] + +These options stack. A common pattern is: **tune the query** for precision, add **activation** thresholds to ignore spikes, use **matchers and throttling** so notification policies only fire for the right episodes at a sustainable rate, and use **{{maint-windows-cap}}** or **snooze** during known change windows. + +**Example: Noisy CPU rule** + +| Situation | Action | Mechanism | +|---|---|---| +| The {{esql}} query flags any host over 70% | Tighten the query or add a stricter `WHERE` | Author and tune the rule | +| Legitimate bursts open alerts for 1-minute spikes | Require 3 consecutive breaches before **active** | Activation thresholds | +| The same host pages every run for an hour | Add **throttle** and **grouping** on the notification policy | Throttle, grouping | +| Only production hosts should page on-call | Add **rule_labels** and **KQL** on the policy | Matchers | +| Database change window this evening | Open a {{maint-windows-cap}} or **snooze** the series | {{maint-windows-cap}}, snooze | + +::::{note} +**Order of application matters.** Thresholds and no-data behavior affect **lifecycle state** before notification policies run. Matchers and throttling apply when the **dispatcher** processes episodes. Snooze and {{maint-windows-cap}} affect **whether notifications send**, not whether `.rule-events` documents are written—check Discover if raw history is needed. +:::: diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/activation-thresholds.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/activation-thresholds.md index b2856b563f..e0e8e4370d 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/activation-thresholds.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/activation-thresholds.md @@ -5,9 +5,9 @@ applies_to: since: "9.4" products: - id: kibana -description: "Require consecutive breaches or a minimum duration before a Kibana alerting v2 alert activates, filtering out transient spikes." +description: "Require consecutive breaches or a minimum duration before a Kibana alerting v2 alert episode becomes active, filtering out transient spikes." --- -# Kibana alerting v2 activation thresholds [activation-thresholds-v2] +# {{kib}} alerting v2 activation thresholds [activation-thresholds-v2] -Activation thresholds require a condition to be met a certain number of consecutive times or for a minimum duration before an alert transitions from `pending` to `active`. +**Activation thresholds** require a condition to be met a certain number of consecutive times or for a minimum duration before an **alert episode** transitions from `pending` to `active`. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md index 1213573f40..0660f2288c 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md @@ -8,6 +8,6 @@ products: description: "Stop lifecycle processing and notifications for a Kibana alerting v2 alert episode while the rule continues detecting new episodes." --- -# Deactivate Kibana alerting v2 alerts [deactivate-alerts-v2] +# Deactivate {{kib}} alerting v2 alerts [deactivate-alerts-v2] -Deactivating an alert episode stops lifecycle processing and notifications for that episode. The rule continues running and can detect new episodes, but the deactivated episode is no longer tracked. +**Deactivate** stops lifecycle processing and notifications for one **alert episode**. The rule continues to run and can open new **episodes** for other **series** (`group_hash`), but the **deactivated** episode is no longer tracked. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md index c350a6986c..38cf98b53f 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md @@ -5,9 +5,9 @@ applies_to: since: "9.4" products: - id: kibana -description: "Batch related Kibana alerting v2 alerts into fewer notifications using notification policy grouping by host, service, or custom fields." +description: "Batch related Kibana alerting v2 alert episodes into fewer notifications using notification policy grouping by host, service, or custom fields." --- -# Kibana alerting v2 notification grouping [reduce-noise-grouping-v2] +# {{kib}} alerting v2 notification grouping [reduce-noise-grouping-v2] -Notification policy grouping batches related alerts into a single notification, reducing the number of messages sent without losing context. +**Notification grouping** on a notification policy batches related **alert episodes** into fewer messages, reducing notification count without dropping evaluation results. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md index fd4af4eafa..2b61e2af54 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md @@ -8,6 +8,6 @@ products: description: "Schedule periods during which Kibana alerting v2 notifications are paused for planned deployments or recurring maintenance." --- -# Kibana alerting v2 maintenance windows [maintenance-windows-v2] +# {{kib}} alerting v2 maintenance windows [maintenance-windows-v2] -Maintenance windows are scheduled periods during which notifications are paused. Use them for planned deployments, infrastructure changes, or recurring maintenance. +**{{maint-windows-cap}}** are scheduled periods during which notifications are paused. Rule evaluation continues and **alert episodes** can still be recorded in **`.rule-events`**; dispatch is what pauses. Use them for planned deployments, infrastructure changes, or recurring maintenance. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md index 52edea9812..278f90af82 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md @@ -5,9 +5,9 @@ applies_to: since: "9.4" products: - id: kibana -description: "Route only matching Kibana alerting v2 alerts to notification destinations using KQL matcher conditions on notification policies." +description: "Route only matching Kibana alerting v2 alert episodes to notification destinations using KQL matcher conditions on notification policies." --- -# Kibana alerting v2 notification matchers [matcher-v2] +# {{kib}} alerting v2 notification matchers [matcher-v2] -Notification policy matchers are KQL expressions that determine which alerts a policy applies to. Only alerts matching the condition are routed to the policy's workflow destinations. +**Notification policy matchers** are KQL expressions that determine which **alert episodes** a policy applies to. Only **episodes** that match the condition (after **rule_labels** scoping) are routed to the policy's workflow destinations. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/no-data-handling.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/no-data-handling.md index 72cc816237..2fa15974c6 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/no-data-handling.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/no-data-handling.md @@ -8,8 +8,8 @@ products: description: "Prevent false recoveries and false alerts when data sources stop reporting by configuring Kibana alerting v2 no-data behavior." --- -# Kibana alerting v2 no-data handling [reduce-noise-no-data-v2] +# {{kib}} alerting v2 no-data handling [reduce-noise-no-data-v2] -Proper no-data handling prevents false recoveries and false alerts when data sources stop reporting. +Proper **no-data** handling prevents false recoveries and misleading **no_data** events when data sources stop reporting. -Refer to [No-data handling (rule settings)](/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/no-data-handling.md) for configuration details and examples. +Refer to [No-data handling (rule settings)](../author-rules/rule-settings/no-data-handling.md) for configuration details and examples. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/recovery-thresholds.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/recovery-thresholds.md index d3b4a68269..59ae422f59 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/recovery-thresholds.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/recovery-thresholds.md @@ -5,9 +5,9 @@ applies_to: since: "9.4" products: - id: kibana -description: "Require sustained recovery before a Kibana alerting v2 alert deactivates, preventing rapid toggling between active and recovered." +description: "Require sustained recovery before a Kibana alerting v2 alert episode returns to inactive, preventing rapid toggling between active and recovered." --- -# Kibana alerting v2 recovery thresholds [recovery-thresholds-v2] +# {{kib}} alerting v2 recovery thresholds [recovery-thresholds-v2] -Recovery thresholds require a condition to be absent for a certain number of consecutive evaluations or for a minimum duration before an alert transitions from `recovering` to `inactive`. +**Recovery thresholds** require a condition to be absent for a certain number of consecutive evaluations or for a minimum duration before an **alert episode** transitions from `recovering` to `inactive`. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/rules-on-alerts.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/rules-on-alerts.md index e392f3efc2..b013c90b3f 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/rules-on-alerts.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/rules-on-alerts.md @@ -5,11 +5,11 @@ applies_to: since: "9.4" products: - id: kibana -description: "Replace many individual Kibana alerting v2 alert notifications with a single meaningful one using rules that correlate across alerts." +description: "Replace many individual Kibana alerting v2 notifications with a single meaningful one using rules that correlate across alert event data." --- -# Kibana alerting v2 rules on alerts [reduce-noise-rules-on-alerts-v2] +# {{kib}} alerting v2 rules on alerts [reduce-noise-rules-on-alerts-v2] -Rules on alerts are a noise reduction strategy that replaces many individual low-level notifications with a single meaningful one. +Follow-on **rules on alert data** reduce noise by running another rule against **`.rule-events`** (or related indices) so many low-level **episodes** can roll up into one higher-level notification. -Refer to [Rules on alerts (authoring)](/explore-analyze/alerting/kibana-alerting-v2/author-rules/rules-on-alerts.md) for detailed configuration guidance. +Refer to [Author rules: rules on alert data](../author-rules/rules-on-alerts.md) for detailed configuration guidance. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/snooze-or-silence.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/snooze-or-silence.md index 1f196f46a0..468c38cb91 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/snooze-or-silence.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/snooze-or-silence.md @@ -8,6 +8,6 @@ products: description: "Temporarily suppress Kibana alerting v2 notifications using per-series snooze, attribute-based silence, or per-episode acknowledgment." --- -# Snooze or silence Kibana alerting v2 alerts [snooze-or-silence-v2] +# Snooze or silence {{kib}} alerting v2 alerts [snooze-or-silence-v2] -Snooze, silence, and acknowledge are three ways to temporarily suppress notifications for Kibana alerting v2 alerts. Each operates at a different scope. +**Snooze**, **silence**, and **acknowledge** are ways to temporarily suppress notifications for {{kib}} alerting v2 **alert episodes** or **series**. Each operates at a different scope. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/throttle.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/throttle.md index 998e4d56d7..04fffd0b89 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/throttle.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/throttle.md @@ -8,6 +8,6 @@ products: description: "Limit Kibana alerting v2 notification frequency by setting a minimum interval between notifications for the same group." --- -# Kibana alerting v2 throttle [throttle-v2] +# {{kib}} alerting v2 throttle [throttle-v2] -Throttling sets a minimum interval between notifications for the same notification group. It reduces notification volume without affecting alert detection or lifecycle tracking. +**Throttling** sets a minimum interval between notifications for the same **notification group**. It reduces notification volume without changing rule evaluation or **alert episode** lifecycle state. From 0526d32735c0b5dd8850dff481e30bd964cdb6ee Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Mon, 23 Mar 2026 14:25:44 -0400 Subject: [PATCH 06/40] fixed links --- explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md | 6 +++--- redirects.yml | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md index a62440d72d..f4c267b362 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md @@ -18,7 +18,7 @@ If multiple rows in the table apply, see [Using them together](#using-them-toget | Your situation | Use this | What it does | |---|---|---| -| The {{esql}} query matches too much normal traffic (too many breaching rows) | [Author and tune the rule](../author-rules.md) | Narrows the query, `WHERE` clause, schedule, or lookback so evaluations only surface what matters | +| The {{esql}} query matches too much normal traffic (too many breaching rows) | [Author and tune the rule](author-rules.md) | Narrows the query, `WHERE` clause, schedule, or lookback so evaluations only surface what matters | | Short spikes or flapping metrics open alerts before they should | [Activation thresholds](reduce-noise/activation-thresholds.md) | Requires consecutive breaches or a minimum duration before an episode becomes **active** | | The alert recovers and reopens too often (flapping) | [Recovery thresholds](reduce-noise/recovery-thresholds.md) | Requires sustained clear conditions before an episode leaves **recovering** | | The query returns no rows and **no_data** or recovery behavior is misleading | [No-data handling](reduce-noise/no-data-handling.md) | Configures how empty results are interpreted so gaps do not look like false recoveries or false alerts | @@ -40,7 +40,7 @@ Acts on: **the {{esql}} query and rule schedule, before interpretation as breach **Problem:** The detector fires on the wrong things. -Refine the base query, alert `WHERE` clause, schedule, and lookback. This is the only option that improves the underlying signal. Other tools filter or route what the rule already emits. See [Author rules](../author-rules.md). +Refine the base query, alert `WHERE` clause, schedule, and lookback. This is the only option that improves the underlying signal. Other tools filter or route what the rule already emits. See [Author rules](author-rules.md). ### Activation and recovery thresholds @@ -56,7 +56,7 @@ Acts on: **evaluations that return zero rows** **Problem:** Data stopped arriving, or empty results should not imply recovery or a **no_data** storm. -Configure how the rule treats empty results. See [No-data handling](reduce-noise/no-data-handling.md) and [No-data handling (rule settings)](../author-rules/rule-settings/no-data-handling.md). +Configure how the rule treats empty results. See [No-data handling](reduce-noise/no-data-handling.md) and [No-data handling (rule settings)](author-rules/rule-settings/no-data-handling.md). ### Notification matchers and grouping diff --git a/redirects.yml b/redirects.yml index 7055629b2a..cf49018cf2 100644 --- a/redirects.yml +++ b/redirects.yml @@ -800,7 +800,10 @@ redirects: 'explore-analyze/alerting/alerts/event-log-index.md': 'explore-analyze/alerting/kibana-alerting-v1/event-log-index-v1.md' 'explore-analyze/alerting/alerts/testing-connectors.md': 'explore-analyze/alerting/kibana-alerting-v1/testing-connectors-v1.md' 'explore-analyze/alerting/alerts/maintenance-windows.md': 'explore-analyze/alerting/kibana-alerting-v1/maintenance-windows-v1.md' - + + # Mistaken path under alerting/ (author rules live under kibana-alerting-v2/) + 'explore-analyze/alerting/author-rules.md': 'explore-analyze/alerting/kibana-alerting-v2/author-rules.md' + # Watcher redirects 'explore-analyze/alerts-cases/watcher/watcher-getting-started.md': 'explore-analyze/alerting/watcher/watcher-getting-started.md' 'explore-analyze/alerts-cases/watcher/how-watcher-works.md': 'explore-analyze/alerting/watcher/how-watcher-works.md' From adc6f447cb7ffcd4b57969de18ffa6ab245f29a6 Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Mon, 30 Mar 2026 15:21:02 -0400 Subject: [PATCH 07/40] Remove implementation details --- .../alerting/kibana-alerting-v2.md | 15 ++--- .../alert-event-field-reference.md | 55 ++++++++++--------- .../author-rules/create-rules-discover.md | 2 +- .../author-rules/create-rules-ui.md | 2 - .../author-rules/production-considerations.md | 2 +- .../activation-and-recovery-thresholds.md | 4 ++ ...how-notification-policies-are-evaluated.md | 46 ++++++++-------- .../rule-settings/schedule-and-lookback.md | 4 ++ .../kibana-alerting-v2/before-you-begin.md | 2 +- .../before-you-begin/set-up.md | 23 +++----- .../manage-alerts/explore-alerts-discover.md | 2 +- .../investigate-respond/alert-actions.md | 2 +- .../manage-rules/view-manage-rules.md | 2 +- .../kibana-alerting-v2/reduce-noise.md | 6 +- 14 files changed, 85 insertions(+), 82 deletions(-) diff --git a/explore-analyze/alerting/kibana-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2.md index 426afe7fbd..dc9c6756cc 100644 --- a/explore-analyze/alerting/kibana-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2.md @@ -4,7 +4,7 @@ applies_to: since: "9.4" products: - id: kibana -description: "Overview of Kibana alerting v2 — an ES|QL-based alerting framework with immutable alert events, notification policies, and alert lifecycle tracking." +description: "Overview of Kibana alerting v2: an ES|QL-based alerting framework with immutable alert events, notification policies, and alert lifecycle tracking." --- # Kibana alerting v2 [alerting-overview-v2] @@ -59,15 +59,16 @@ Every rule operates in one of two modes: You can switch a rule between modes at any time. Switching from alert to detect stops lifecycle tracking and notifications but continues producing signal events. -## Architecture +## What happens when a rule runs -The Kibana alerting v2 pipeline has three main components: +From your perspective, a rule does the following on each run: -1. **Rule executor** — Runs on a configurable schedule via Task Manager. Builds and executes the ES|QL query, writes signal or alert event documents to the `.rule-events` data stream, and computes state transitions for alert-mode rules. +- It evaluates your ES|QL query over the lookback window you configured. +- It appends new rows to the **`.rule-events`** data stream: signal rows in detect mode, or signal and alert rows with episode fields in alert mode. +- In alert mode, it updates episode lifecycle (for example **pending**, **active**, **recovering**) according to your activation, recovery, and no-data settings. +- When an episode is ready for notifications, **notification policies** decide whether and how it is routed to workflows. Policies apply **after** lifecycle and thresholds; a short delay between “episode ready” and “notification sent” is normal when many policies or episodes are in play. -2. **Director** — Embedded in the rule executor. Manages episode state transitions using configurable strategies (basic transitions or count/timeframe-gated transitions). - -3. **Dispatcher** — An asynchronous component that polls for new alert episodes and processes them through a 10-step pipeline: fetch episodes, apply suppressions, evaluate notification policy matchers, build notification groups, apply throttling, dispatch to workflow destinations, and record outcomes. +You can inspect raw history in Discover on **`.rule-events`** at any time, independent of whether notifications were sent. ## What you can do with Kibana alerting v2 diff --git a/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md b/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md index 7f97021bfe..4ab7a24e07 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md @@ -5,42 +5,47 @@ applies_to: since: "9.4" products: - id: kibana -description: "Field reference for Kibana alerting v2 alert event documents in .rule-events, including common fields, alert-only fields, and the index mapping." +description: "Field reference for Kibana alerting v2 documents in .rule-events: shared fields for all events, episode fields only when type is alert, and .alert-actions." --- # Kibana alerting v2 alert event field reference [alert-event-field-reference-v2] -Kibana alerting v2 rules write alert event documents to the **`.rule-events`** data stream. This page describes the fields in each document. +{{kib}} alerting v2 writes one document per rule evaluation output to the **`.rule-events`** data stream. This page lists the fields stored in those documents. -## Common fields +**Signal vs alert:** When **`type`** is **`signal`**, only the [fields shared by all events](#fields-for-all-events) are populated. When **`type`** is **`alert`**, the document includes the same fields plus **`episode.*`** ([episode fields](#episode-fields-only-when-type-is-alert)). The **`episode`** object is the **only** extra field group on alert events compared to signal events. For the authoritative mapping and enums, see the Kibana resource definition ([`alert_events.ts`](https://github.com/elastic/kibana/blob/main/x-pack/platform/plugins/shared/alerting_v2/server/resources/alert_events.ts)). -| Field | Type | Description | -|---|---|---| -| `@timestamp` | `date` | When this alert event document was written | -| `scheduled_timestamp` | `date` | The scheduled execution timestamp for the rule run | -| `rule.id` | `keyword` | The rule identifier | -| `rule.version` | `long` | The rule version at the time this event was emitted | -| `group_hash` | `keyword` | Series identity key | -| `data` | `flattened` | Event payload containing the ES\|QL query output | -| `status` | `keyword` | Event status: `breached`, `recovered`, or `no_data` | -| `source` | `keyword` | Source of this event | -| `type` | `keyword` | Event type: `signal` or `alert` | - -## Alert-only fields +## Fields for all events + +These fields appear on both **`signal`** and **`alert`** documents. + +| Field | Type | Required | Description | +|---|---|---|---| +| `@timestamp` | `date` | Yes | When this document was written to **`.rule-events`**. | +| `scheduled_timestamp` | `date` | No | Scheduled execution time for this rule run. | +| `rule.id` | `keyword` | Yes | Rule identifier. | +| `rule.version` | `long` | Yes | Rule version at the time this event was emitted. | +| `group_hash` | `keyword` | Yes | Series identity key for grouped evaluations. | +| `data` | `flattened` | Yes | Payload from the ES\|QL query output (shape depends on your rule). | +| `status` | `keyword` | Yes | One of: `breached`, `recovered`, `no_data`. | +| `source` | `keyword` | Yes | Origin of this event (product-specific identifier). | +| `type` | `keyword` | Yes | `signal` (detect mode) or `alert` (alert mode with lifecycle). | + +## Episode fields (only when `type` is `alert`) + +Present only when **`type`** is **`alert`**. Omit **`episode`** on **`signal`** events. | Field | Type | Description | |---|---|---| -| `episode.id` | `keyword` | The episode identifier | -| `episode.status` | `keyword` | Current episode state: `inactive`, `pending`, `active`, or `recovering` | -| `episode.status_count` | `long` | Count of consecutive evaluations in the current status | +| `episode.id` | `keyword` | Episode identifier for this series. | +| `episode.status` | `keyword` | One of: `inactive`, `pending`, `active`, `recovering`. | +| `episode.status_count` | `long` | Count of consecutive evaluations in the current **`episode.status`**. Set when status is **`pending`** or **`recovering`**; not used for **`inactive`** or **`active`** in the stored mapping. | -::::{note} -**SME follow-up:** Whether **`duration`** appears on the raw alert event document in **`.rule-events`** (versus only in aggregated or episode views) is not finalized in this reference. Confirm with engineering before documenting `duration` in the raw event table. -:::: +There is **no** top-level or nested **`duration`** field on raw **`.rule-events`** documents in this schema. Duration for triage or reporting may come from [ES\|QL views](manage-alerts/explore-alerts-discover.md), the alert UI, or your own queries over timestamps and episode identifiers. -## Index mapping (`.rule-events`) +## Mapping notes (`.rule-events`) -The **`.rule-events`** data stream uses mappings defined by the alerting v2 storage layer. Treat `data` as **flattened** for arbitrary query output; avoid relying on undocumented subfields until they are listed in product reference material. +- The data stream uses **`dynamic: false`**: only the mapped paths above are indexed at the top level. Rely on **`data`** (flattened) for arbitrary ES\|QL output; treat paths under **`data`** as defined by your rule until you confirm them in Discover or dashboards. +- The stream is versioned and managed by {{kib}} (including ILM). Do not change mappings on managed backing indices. ## Alert action records (`.alert-actions`) @@ -53,4 +58,4 @@ User and system **alert actions** (for example acknowledge, snooze, tag) are sto | `rule.id` | `keyword` | Rule that owns the episode | | `action.type` | `keyword` | Action type, for example `acknowledge`, `snooze`, `tag`, `fire`, **`unmatched`** | -The **`unmatched`** value indicates a dispatcher outcome where the episode did not match any notification policy. Other action types reflect user or system operations (see [Alert actions](manage-alerts/investigate-respond/alert-actions.md)). +The **`unmatched`** value indicates that no notification policy matched the episode, so no workflow ran for it under those policies. Other action types reflect user or system operations (see [Alert actions](manage-alerts/investigate-respond/alert-actions.md)). diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md index 36ae25d34e..8b4541f567 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md @@ -17,7 +17,7 @@ Create Kibana alerting v2 rules directly from Discover. When you build an ES|QL 1. Open **Discover** and switch to ES|QL mode. 2. Write and run an ES|QL query that returns the data you want to monitor. 3. Review the results to confirm the query captures the pattern you want to alert on. -4. Click **Create rule** (or **Alerts > Create rule**) from the Discover toolbar. +4. Open the **Rules** menu on the Discover toolbar and choose **Create v2 ES|QL rule** (wording may vary slightly by release). Legacy rule types from solutions or plugins appear under **Create v1 rules** when your deployment exposes them. 5. The rule creation form opens with the ES|QL query pre-populated in the evaluation field. 6. Configure the remaining rule settings: - **Name** and **description**. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md index af1f4edfb7..b108e6035d 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md @@ -8,8 +8,6 @@ products: description: "Create Kibana alerting v2 rules using the interactive rule creation form with query editor, preview, and YAML toggle." --- -% TODO: Content will be updated when the rule creation UI is implemented. - # Create Kibana alerting v2 rules in the UI [create-rules-ui-v2] Create Kibana alerting v2 rules using the interactive rule creation form. The form provides a guided experience for configuring all rule settings, with the option to toggle between interactive and YAML modes. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/production-considerations.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/production-considerations.md index 1005e62dc3..321229fe33 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/production-considerations.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/production-considerations.md @@ -5,7 +5,7 @@ applies_to: since: "9.4" products: - id: kibana -description: "Guidance for running Kibana alerting v2 rules in production — scheduling, query performance, dispatcher capacity, and data retention." +description: "Guidance for running Kibana alerting v2 rules in production — scheduling, query performance, and data retention." --- % TODO: Content will be updated after performance testing is complete. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md index c8a9a0238b..12df2b5b66 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md @@ -32,6 +32,8 @@ Configure activation using count, timeframe, or both: | `pending_timeframe` | Minimum duration the condition must persist | | `pending_operator` | How to combine count and timeframe (`AND` or `OR`) | +Each **timeframe** value must be between **5 seconds** and **365 days** (the same bounds as schedule and lookback durations). + ## Recovery thresholds | Field | Description | @@ -39,3 +41,5 @@ Configure activation using count, timeframe, or both: | `recovering_count` | Consecutive recoveries required | | `recovering_timeframe` | Minimum duration for recovery | | `recovering_operator` | How to combine count and timeframe (`AND` or `OR`) | + +**Timeframe** fields use the same **5 seconds** to **365 days** bounds as activation timeframes. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md index 922678a0b1..81df1e8a56 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md @@ -5,36 +5,36 @@ applies_to: since: "9.4" products: - id: kibana -description: "How the Kibana alerting v2 dispatcher processes alert episodes through a 10-step pipeline: suppressions, matchers, grouping, throttling, and dispatch." +description: "How Kibana alerting v2 notification policies match alert episodes, apply throttling and suppression, and produce dispatch outcomes." --- # How Kibana alerting v2 notification policies are evaluated [how-notification-policies-evaluated-v2] -The dispatcher is the asynchronous component that bridges rule execution and notification delivery. It polls for new alert episodes and processes them through a 10-step pipeline. +Notification policies are separate from rules. After rule evaluation produces or updates **alert episodes**, the system decides **which policies apply**, **whether notifications should go out**, and **which workflows** receive them. You configure policies once; they can apply to many rules. -The dispatcher runs every 10 seconds and processes up to 10,000 episodes per run. +## How policies are matched to episodes -## Dispatcher pipeline +Policies are **global** in the space unless you narrow them: -1. **Load candidate episodes** — Fetch episodes that are ready for notification processing. -2. **Apply suppression rules** — Remove or defer episodes that match active suppression configuration. -3. **Resolve rule context** — Load rule metadata needed for matching and routing. -4. **Build matcher context** — Construct the typed context used for policy evaluation (including rule and episode fields). -5. **Load notification policies** — Call **`findAllDecrypted()`** and load **all** notification policies for the space. Policies are not filtered by per-rule references; loading is independent of which rule produced the episode. -6. **Evaluate policies (two phases)** — For each policy: - 1. **Rule label scoping** — Determine whether the episode’s rule satisfies the policy’s **`rule_labels`** selector. If not, skip this policy for the episode. - 2. **KQL episode matcher** — If label scoping passes, evaluate the policy’s KQL condition against the typed **`MatcherContext`**, including fields such as **`rule.name`**, **`rule.labels`**, and **`data.*`** (alongside other context fields the platform exposes for matching). -7. **Group and throttle** — Apply grouping keys and throttling windows according to matching policies. -8. **Select destinations** — Resolve workflow destinations and channels for dispatch. -9. **Dispatch notifications** — Send notifications and record outcomes. -10. **Record outcomes** — Persist dispatcher results for auditing and follow-up processing. +1. **Rule labels:** If a policy specifies **rule labels**, only rules whose labels satisfy that selector are considered. If you leave rule labels empty, the policy acts as a catch-all for every rule (subject to the KQL matcher below). +2. **KQL matcher:** For each candidate policy, the **KQL** condition is evaluated against the episode and rule context. For example, it can use rule name, rule labels, episode status, and fields from the alert payload (often under **`data.*`** in the matcher). Use the matcher editor suggestions to see which fields are available in your build. -### Outcomes (step 10) +An episode can match **zero, one, or many** policies. If it matches **none**, notifications are not sent for that episode under those policies; an **unmatched** outcome is recorded for auditing (see below). -| Outcome | Description | +## What happens after a policy matches + +For episodes that match a policy, the system applies **suppression** (if configured), **grouping** (how messages are batched), and **throttling** (minimum time between notifications for the same group). Then it sends notifications to the **workflow** destinations you configured on the policy. + +**Order matters:** Lifecycle thresholds and no-data behavior on the rule run **before** notification policies. Policies only affect **routing and delivery**, not whether rows are written to **`.rule-events`**. + +## Outcomes you may see + +| Outcome | What it means for you | |---|---| -| **dispatched** | Notifications were sent according to policy | -| **throttled** | Delivery was suppressed by throttling rules | -| **suppressed** | Episode was suppressed before dispatch | -| **unmatched** | Episode did not match any notification policy | -| **error** | Processing failed; see logs and health indicators | +| **dispatched** | Notifications were sent according to the policy | +| **throttled** | Delivery was suppressed because throttling rules said to wait | +| **suppressed** | The episode was suppressed (for example by an active suppression) before a notification went out | +| **unmatched** | No notification policy matched this episode, so no workflow ran for it under these policies | +| **error** | Processing failed; check {{kib}} logs and any health indicators your team uses | + +Notifications can arrive shortly after an episode becomes eligible; heavy load or many policies can add noticeable delay. If something seems stuck, verify matchers, throttling, maintenance windows, and that the episode matches at least one policy. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md index 4850912145..05a08505e3 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md @@ -16,8 +16,12 @@ The schedule and lookback settings control how often a rule runs and how far bac The execution interval (`schedule.every`) determines how frequently the rule evaluates. +{{kib}} enforces a **minimum** interval of **5 seconds** and a **maximum** of **365 days** for duration fields (including this one). The rule form and API reject values outside that range. + ## Lookback window The lookback window (`schedule.lookback`) determines the time range that the ES|QL query covers. +The lookback must not exceed **365 days**. If the lookback is **shorter** than the execution interval, the rule form shows a warning because you can miss data between runs—set the lookback to at least the execution interval unless you have a deliberate reason not to. + Choose a lookback window that is at least as long as the execution interval to avoid gaps in coverage. diff --git a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md index 7137694050..3c34e511f6 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md +++ b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md @@ -35,7 +35,7 @@ If you are coming from Kibana alerting v1, note these differences: Kibana alerting v2 runs alongside Kibana alerting v1. Both systems are fully operational: -- You access Kibana alerting v2 rules and Kibana alerting v1 rules from the same **Rules** navigation entry, in separate tabs. +- You manage v2 rules under **Management > Alerts and Insights > Rules V2**. v1 rules stay in the existing **Rules** (or equivalent) experience for your deployment—navigation labels can vary by version. - Each system writes to its own indices. Kibana alerting v2 alert events go to `.rule-events`; Kibana alerting v1 alerts go to `.alerts-*`. - There is no automatic migration. You can copy rules from Kibana alerting v1 to Kibana alerting v2 manually when you are ready. - You can create rules on alerts that correlate across both systems by querying both alert indices. diff --git a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md index 99fa444af5..57b3397562 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md +++ b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md @@ -5,7 +5,7 @@ applies_to: since: "9.4" products: - id: kibana -description: "Enable and configure Kibana alerting v2, including plugin dependencies, index configuration, and verification steps." +description: "Enable Kibana alerting v2, data streams created for alert events and actions, optional API key cleanup settings, and verification steps." --- # Set up Kibana alerting v2 [alerting-set-up-v2] @@ -14,36 +14,27 @@ Kibana alerting v2 is available in {{stack}} 9.4 and later. This page explains h ## Enable Kibana alerting v2 -Kibana alerting v2 is enabled by default in 9.4. When enabled, a **Rules V2** tab appears in the rules management area under **Management > Alerts and Insights > Rules V2**. - -## Required plugins - -Kibana alerting v2 depends on the following {{kib}} plugins, which are enabled by default: - -- **Task Manager** — schedules and executes rule evaluations. -- **Encrypted Saved Objects** — stores API keys securely for rule and notification policy execution. -- **ES|QL** — provides query execution for rule evaluation. -- **Spaces** — enforces space-level isolation for rules and policies. +Kibana alerting v2 is available in 9.4 and later. When it is enabled for your deployment, use **Management > Alerts and Insights > Rules V2** to open the v2 rules list and author rules. If you do not see **Rules V2**, ask your administrator whether alerting v2 is enabled in your environment. ## Index configuration Kibana alerting v2 automatically creates and manages the following data streams: - **`.rule-events`** — stores signal and alert event documents produced by rule evaluations. This is an append-only data stream. -- **`.alert-actions`** — stores alert action records (acknowledge, snooze, deactivate, fire, suppress) used by the dispatcher for suppression tracking and audit. +- **`.alert-actions`** — stores alert action records (acknowledge, snooze, deactivate, fire, suppress) for suppression tracking and audit. No manual index configuration is required. The system creates these data streams with the appropriate mappings when the first rule executes. ## {{kib}} advanced settings -Optional Task Manager settings control how API keys for notification policies are invalidated after policy updates or deletes: +Optional `kibana.yml` settings control how often {{kib}} cleans up API keys for notification policies after a policy is updated or deleted: | Setting | Default | Purpose | |---|---|---| -| `xpack.alerting.invalidateApiKeysTask.interval` | `5m` | How often the background invalidation task runs | -| `xpack.alerting.invalidateApiKeysTask.removalDelay` | `1h` | Delay before removing old API key material after invalidation | +| `xpack.alerting.invalidateApiKeysTask.interval` | `5m` | How often {{kib}} processes keys that are marked for invalidation | +| `xpack.alerting.invalidateApiKeysTask.removalDelay` | `1h` | How long to wait after invalidation before old key material can be removed | -Adjust these only when directed by operations or support; incorrect values can affect dispatch reliability or key rotation timing. +Change these only when your operations team or Elastic Support recommends it; aggressive values can affect how reliably workflows run after policy changes. ## Verify the installation diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md index f614328e5a..e97e31845e 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md @@ -89,7 +89,7 @@ This example follows **one alert series** (`group_hash`) over **seven days**, so ```esql // ═══════════════════════════════════════════════════════════════ // ONE SERIES — Timeline for a single group_hash (replace YOUR_GROUP_HASH) -// Why: Replay how an episode progressed (same key the executor uses to group) +// Why: Replay how an episode progressed (same series key as in the rule and alert UI) // ═══════════════════════════════════════════════════════════════ FROM .rule-events | WHERE group_hash == "YOUR_GROUP_HASH" diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md index a82f695a02..bfda588b76 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md @@ -30,7 +30,7 @@ The `action.type` field identifies what happened. Common values include: | `assign` | Assignment changed | | `tag` | Tag applied to the alert (**recorded** action) | | `resolve` | Episode or alert resolved | -| `unmatched` | Episode did not match any notification policy (dispatcher outcome) | +| `unmatched` | No notification policy matched the episode, so no workflow ran for it under those policies | The **`untag`** action type is not used; tagging is recorded with the **`tag`** action type. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md b/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md index 5120089c7a..bc8a39f007 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md @@ -31,7 +31,7 @@ Exact columns can vary by release; use column controls if your build exposes the ### Filters and search -Use the search field and filters (for example by tag, status, or space) to narrow the list. Search matches rule metadata such as name and description depending on implementation. +Use the search field and filters (for example by tag, status, or space) to narrow the list. Search matches rule metadata such as name and description. ### Open rule details diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md index f4c267b362..90d38ccd60 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md @@ -10,7 +10,7 @@ description: "Select the right Kibana alerting v2 feature to reduce noise: thres # Reduce {{kib}} alerting v2 noise and false positives [reduce-noise-v2] -{{kib}} alerting v2 offers many ways to reduce noise, each applied at a different stage—from the {{esql}} query and lifecycle thresholds through notification policies, throttling, and manual controls. Selecting the wrong lever wastes effort and can hide real problems. This page helps you **match a situation to a mechanism** and explains **how mechanisms fit in the pipeline** so you can combine them deliberately. +{{kib}} alerting v2 offers many ways to reduce noise, each applied at a different stage—from the {{esql}} query and lifecycle thresholds through notification policies, throttling, and manual controls. Selecting the wrong lever wastes effort and can hide real problems. This page helps you **match a situation to a mechanism** and explains **how mechanisms combine in order** so you can use them deliberately. If multiple rows in the table apply, see [Using them together](#using-them-together). @@ -32,7 +32,7 @@ If multiple rows in the table apply, see [Using them together](#using-them-toget ## How each mechanism works -Mechanisms are listed in **rough pipeline order**: from what happens during rule evaluation and lifecycle, through notification policy processing, to operator controls. +Mechanisms are listed in **rough order**: from what happens during rule evaluation and lifecycle, through notification policy processing, to operator controls. ### Author and tune the rule @@ -130,5 +130,5 @@ These options stack. A common pattern is: **tune the query** for precision, add | Database change window this evening | Open a {{maint-windows-cap}} or **snooze** the series | {{maint-windows-cap}}, snooze | ::::{note} -**Order of application matters.** Thresholds and no-data behavior affect **lifecycle state** before notification policies run. Matchers and throttling apply when the **dispatcher** processes episodes. Snooze and {{maint-windows-cap}} affect **whether notifications send**, not whether `.rule-events` documents are written—check Discover if raw history is needed. +**Order of application matters.** Thresholds and no-data behavior affect **lifecycle state** before notification policies run. Matchers and throttling apply when **notification policies** are evaluated for each episode. Snooze and {{maint-windows-cap}} affect **whether notifications send**, not whether `.rule-events` documents are written—check Discover if raw history is needed. :::: From 38d6001c37abe958e88964b198602fed6472cdb4 Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Mon, 30 Mar 2026 16:31:40 -0400 Subject: [PATCH 08/40] Refresh and updates to event and action indices --- .../alerting/kibana-alerting-v2.md | 38 ++++---- .../alert-event-field-reference.md | 62 +++++++----- .../kibana-alerting-v2/author-rules.md | 14 +-- .../author-rules/create-rules-discover.md | 20 ++-- .../author-rules/create-rules-ui.md | 30 +++--- .../author-rules/production-considerations.md | 2 +- .../activation-and-recovery-thresholds.md | 4 +- .../rule-settings/notification-policies.md | 6 +- .../create-manage-notification-policies.md | 12 +-- ...how-notification-policies-are-evaluated.md | 28 +++--- .../rule-settings/schedule-and-lookback.md | 4 +- .../kibana-alerting-v2/before-you-begin.md | 22 ++--- .../before-you-begin/set-up.md | 14 +-- .../manage-alerts/explore-alerts-discover.md | 66 +++++++------ .../investigate-respond/alert-actions.md | 14 +-- .../alert-episode-details.md | 2 +- .../kibana-alerting-v2/manage-rules.md | 6 +- .../manage-rules/view-manage-rules.md | 32 +++---- .../kibana-alerting-v2/reduce-noise.md | 96 +++++++++---------- .../reduce-noise/maintenance-windows.md | 2 +- .../reduce-noise/throttle.md | 2 +- 21 files changed, 254 insertions(+), 222 deletions(-) diff --git a/explore-analyze/alerting/kibana-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2.md index dc9c6756cc..b3756cf67c 100644 --- a/explore-analyze/alerting/kibana-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2.md @@ -17,44 +17,44 @@ Kibana alerting v2 runs alongside [Kibana alerting v1](/explore-analyze/alerting Kibana alerting v2 introduces a layered model that separates detection from notification: -**Signals** +Signals : Immutable documents produced each time a rule evaluates and its query returns results. Signals are the raw output of every rule, written to an append-only data stream. Use signals for exploration, dashboards, and retroactive analysis. -**Alerts** +Alerts : Signals with lifecycle tracking. When a rule runs in alert mode, the system tracks state transitions for each alert series: `inactive` → `pending` → `active` → `recovering` → `inactive`. Alerts are the primary operational unit for triage and response. -**Episodes** +Episodes : A full lifecycle arc of an alert, from first breach to final recovery. Each episode groups the state transitions for a single alert series and is identified by an `episode_id`. -**Series** +Series : A grouped time series of signals for a given rule and grouping key. Identified by a `group_hash` computed from the rule ID and grouping field values. Series are the unit for per-group snooze and recovery detection. -**Notification policies** +Notification policies : Standalone, reusable entities that control how and when alerts reach people and systems. Policies define matching conditions, grouping, throttling, and routing to workflow destinations. One policy can apply across multiple rules. -**Workflows** +Workflows : User-defined automated sequences of tasks for delivering notifications and integrating with external systems. Notification policies reference workflows as destinations. ## How Kibana alerting v2 differs from Kibana alerting v1 | Aspect | Kibana alerting v1 | Kibana alerting v2 | |---|---|---| -| **Query language** | Rule type defines what data is evaluated | You write the ES\|QL query directly | -| **Alert persistence** | Mutable documents updated in place | Immutable, append-only event documents | -| **Alert queryability** | Limited; alerts live in system indices | Full ES\|QL access in Discover and dashboards | -| **Notification control** | Per-action frequency and throttle on each rule | Notification policies: centralized matching, grouping, throttling, suppression | -| **Noise reduction** | Snooze per rule; limited grouping | Per-series snooze, acknowledgment per episode, activation thresholds, matcher-based routing, rules on alerts | -| **Rule definition** | Plugin-registered rule types with fixed schemas | ES\|QL queries with `KEEP` to control what data is stored | -| **Recovery detection** | Rule-type specific | Group hash comparison between consecutive evaluations | +| Query language | Rule type defines what data is evaluated | You write the ES\|QL query directly | +| Alert persistence | Mutable documents updated in place | Immutable, append-only event documents | +| Alert queryability | Limited; alerts live in system indices | Full ES\|QL access in Discover and dashboards | +| Notification control | Per-action frequency and throttle on each rule | Notification policies: centralized matching, grouping, throttling, suppression | +| Noise reduction | Snooze per rule; limited grouping | Per-series snooze, acknowledgment per episode, activation thresholds, matcher-based routing, rules on alerts | +| Rule definition | Plugin-registered rule types with fixed schemas | ES\|QL queries with `KEEP` to control what data is stored | +| Recovery detection | Rule-type specific | Group hash comparison between consecutive evaluations | ## How detection and alert modes work Every rule operates in one of two modes: -**Detect mode** (`kind: signal`) +Detect mode (`kind: signal`) : The rule produces signal events for every query result. Signals are written to the alert events data stream and are available for exploration in Discover, but no lifecycle tracking or notifications occur. Use detect mode for broad monitoring with zero noise. -**Alert mode** (`kind: alert`) +Alert mode (`kind: alert`) : The rule produces alert events with full lifecycle management. Alerts transition through episode states, trigger notification policies, and support triage actions like acknowledge and snooze. Use alert mode when you need actionable alerts. You can switch a rule between modes at any time. Switching from alert to detect stops lifecycle tracking and notifications but continues producing signal events. @@ -64,11 +64,11 @@ You can switch a rule between modes at any time. Switching from alert to detect From your perspective, a rule does the following on each run: - It evaluates your ES|QL query over the lookback window you configured. -- It appends new rows to the **`.rule-events`** data stream: signal rows in detect mode, or signal and alert rows with episode fields in alert mode. -- In alert mode, it updates episode lifecycle (for example **pending**, **active**, **recovering**) according to your activation, recovery, and no-data settings. -- When an episode is ready for notifications, **notification policies** decide whether and how it is routed to workflows. Policies apply **after** lifecycle and thresholds; a short delay between “episode ready” and “notification sent” is normal when many policies or episodes are in play. +- It appends new rows to the `.rule-events` data stream: signal rows in detect mode, or signal and alert rows with episode fields in alert mode. +- In alert mode, it updates episode lifecycle (for example pending, active, recovering) according to your activation, recovery, and no-data settings. +- When an episode is ready for notifications, notification policies decide whether and how it is routed to workflows. Policies apply after lifecycle and thresholds; a short delay between “episode ready” and “notification sent” is normal when many policies or episodes are in play. -You can inspect raw history in Discover on **`.rule-events`** at any time, independent of whether notifications were sent. +You can inspect raw history in Discover on `.rule-events` at any time, independent of whether notifications were sent. ## What you can do with Kibana alerting v2 diff --git a/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md b/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md index 4ab7a24e07..9489bcd8dc 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md @@ -1,61 +1,79 @@ --- -navigation_title: Event field reference +navigation_title: Field reference for alerting v2 rule and action data applies_to: stack: since: "9.4" products: - id: kibana -description: "Field reference for Kibana alerting v2 documents in .rule-events: shared fields for all events, episode fields only when type is alert, and .alert-actions." +description: "Fields in the {{kib}} alerting v2 `.rule-events` data stream for signals and alerts, episode fields on lifecycle alerts, and action records in `.alert-actions`." --- -# Kibana alerting v2 alert event field reference [alert-event-field-reference-v2] +# {{kib}} alerting v2 rule event and action field reference [alert-event-field-reference-v2] -{{kib}} alerting v2 writes one document per rule evaluation output to the **`.rule-events`** data stream. This page lists the fields stored in those documents. +This page is the field reference for {{kib}} alerting v2 data written to {{es}}. It covers names, types, required fields, and valid values. Use it when you author {{esql}} in Discover, build dashboards or reports, or integrate automation against alert and signal documents. -**Signal vs alert:** When **`type`** is **`signal`**, only the [fields shared by all events](#fields-for-all-events) are populated. When **`type`** is **`alert`**, the document includes the same fields plus **`episode.*`** ([episode fields](#episode-fields-only-when-type-is-alert)). The **`episode`** object is the **only** extra field group on alert events compared to signal events. For the authoritative mapping and enums, see the Kibana resource definition ([`alert_events.ts`](https://github.com/elastic/kibana/blob/main/x-pack/platform/plugins/shared/alerting_v2/server/resources/alert_events.ts)). +:::{important} +The `.rule-events` and `.alert-actions` data streams are [system indices](/reference/glossary/index.md#glossary-system-index). {{kib}} manages their versioning, retention, and lifecycle. Do not change mappings or index settings for these stream yourself. +::: -## Fields for all events +## Rule events index -These fields appear on both **`signal`** and **`alert`** documents. +All rules write their signal and alert events to the **rule events index**, implemented as the **`.rule-events`** data stream. Each document has a `type` of `signal` or `alert`. + +- **`signal`:** Point-in-time facts you query or chain into other rules. For example, rows a follow-on rule reads from `.rule-events` to build a rule on alert data. These documents do not include `episode.*` fields. +- **`alert`:** Lifecycle-tracked episodes in the alert UI: inbox, episode details, and triage. For example, a breach that stays open as an episode until the condition clears. These documents include `episode.*` fields. + +Both kinds share the same [base fields](#fields-on-every-signal-and-alert-document). Only `alert` documents add [`episode.*`](#episode-fields-for-alerts-with-lifecycle-tracking) fields. + +### Signal and alert document fields + +The following table lists each top-level field that appears on both `signal` and `alert` documents in **`.rule-events`**. [Episode fields for alerts with lifecycle tracking](#episode-fields-for-alerts-with-lifecycle-tracking) lists additional fields for `alert` rows only. | Field | Type | Required | Description | |---|---|---|---| -| `@timestamp` | `date` | Yes | When this document was written to **`.rule-events`**. | +| `@timestamp` | `date` | Yes | When this document was written to `.rule-events`. | | `scheduled_timestamp` | `date` | No | Scheduled execution time for this rule run. | | `rule.id` | `keyword` | Yes | Rule identifier. | | `rule.version` | `long` | Yes | Rule version at the time this event was emitted. | | `group_hash` | `keyword` | Yes | Series identity key for grouped evaluations. | -| `data` | `flattened` | Yes | Payload from the ES\|QL query output (shape depends on your rule). | +| `data` | `flattened` | Yes | Payload from the {{esql}} query output. Shape depends on your rule. | | `status` | `keyword` | Yes | One of: `breached`, `recovered`, `no_data`. | -| `source` | `keyword` | Yes | Origin of this event (product-specific identifier). | -| `type` | `keyword` | Yes | `signal` (detect mode) or `alert` (alert mode with lifecycle). | +| `source` | `keyword` | Yes | Origin of this event. Product-specific identifier. | +| `type` | `keyword` | Yes | `signal` or `alert`. Application field on each rule event document written by {{kib}}. | -## Episode fields (only when `type` is `alert`) -Present only when **`type`** is **`alert`**. Omit **`episode`** on **`signal`** events. +:::{admonition} Fields not stored as a dedicated column +There is no top-level or nested `duration` field on **`.rule-events`** documents. For triage or reporting, derive duration from [{{esql}} views](manage-alerts/explore-alerts-discover.md), the alert UI, or your own queries over timestamps and episode identifiers. +::: + +### Episode fields for alerts with lifecycle tracking + +The table below describes `episode.*` fields on documents in **`.rule-events`** where `type` is `alert`, when {{kib}} is managing that alert’s lifecycle in the alert inbox and related views. `signal` documents do not include an `episode` section. | Field | Type | Description | |---|---|---| | `episode.id` | `keyword` | Episode identifier for this series. | | `episode.status` | `keyword` | One of: `inactive`, `pending`, `active`, `recovering`. | -| `episode.status_count` | `long` | Count of consecutive evaluations in the current **`episode.status`**. Set when status is **`pending`** or **`recovering`**; not used for **`inactive`** or **`active`** in the stored mapping. | +| `episode.status_count` | `long` | Count of consecutive evaluations in the current `episode.status`. This field is only set when `episode.status` is `pending` or `recovering`. | -There is **no** top-level or nested **`duration`** field on raw **`.rule-events`** documents in this schema. Duration for triage or reporting may come from [ES\|QL views](manage-alerts/explore-alerts-discover.md), the alert UI, or your own queries over timestamps and episode identifiers. +## Alert actions index -## Mapping notes (`.rule-events`) +When a user or the system records an action on an alert episode, {{kib}} writes a document to the **alert actions index**, implemented as the **`.alert-actions`** data stream. Each document is one action. The `action.type` field records what happened, for example acknowledge, snooze, tag, fire, or unmatched. -- The data stream uses **`dynamic: false`**: only the mapped paths above are indexed at the top level. Rely on **`data`** (flattened) for arbitrary ES\|QL output; treat paths under **`data`** as defined by your rule until you confirm them in Discover or dashboards. -- The stream is versioned and managed by {{kib}} (including ILM). Do not change mappings on managed backing indices. +Use **`.alert-actions`** for triage history, metrics such as MTTA, and auditing. This stream does not store what your rule query returned on each run. That output exists only in **`.rule-events`**. -## Alert action records (`.alert-actions`) +### Alert action document fields -User and system **alert actions** (for example acknowledge, snooze, tag) are stored in the **`.alert-actions`** data stream. Use these documents for auditing, MTTA-style metrics, and action history. +The following table lists fields on each document in **`.alert-actions`**. | Field | Type | Description | |---|---|---| | `@timestamp` | `date` | When the action was recorded | | `episode.id` | `keyword` | Target episode | | `rule.id` | `keyword` | Rule that owns the episode | -| `action.type` | `keyword` | Action type, for example `acknowledge`, `snooze`, `tag`, `fire`, **`unmatched`** | +| `action.type` | `keyword` | The action type, for example:
- **`acknowledge`:** User acknowledged the alert.
- **`snooze`:** Notifications snoozed for a period.
- **`tag`:** Tag applied to the alert.
- **`fire`:** Notification or escalation fired for the episode.
- **`unmatched`:** No notification policy matched the episode, so no workflow ran for it under those policies.

For the full set of action types and UI behavior, refer to [Alert actions](manage-alerts/investigate-respond/alert-actions.md). | + +## Related documentation -The **`unmatched`** value indicates that no notification policy matched the episode, so no workflow ran for it under those policies. Other action types reflect user or system operations (see [Alert actions](manage-alerts/investigate-respond/alert-actions.md)). +- [Explore {{kib}} alerting v2 alerts and signals in Discover](manage-alerts/explore-alerts-discover.md): How rule event documents map to rows in Discover, how Detect and Alert mode relate to `type`, and how multiple rules share the `.rule-events` stream. +- [Where query output appears in each document](manage-alerts/explore-alerts-discover.md#where-query-output-appears-in-each-document): Top-level fields versus the `data` field when you query in Discover. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules.md index bff9dabd00..bd7a312dde 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules.md @@ -5,19 +5,19 @@ applies_to: since: "9.4" products: - id: kibana -description: "Create Kibana alerting v2 rules using ES|QL queries — from the UI, Discover, or YAML — in detect or alert mode." +description: "Create Kibana alerting v2 rules using ES|QL queries from the UI, Discover, or YAML in detect or alert mode." --- # Author Kibana alerting v2 rules [author-rules-v2] -A Kibana alerting v2 rule defines what to look for in your data. It evaluates source data — logs, metrics, traces, or alert events from other rules — on a configurable schedule using an ES|QL query and produces alert event documents when conditions are met. +A Kibana alerting v2 rule defines what to look for in your data. It evaluates source data such as logs, metrics, traces, or alert events from other rules on a configurable schedule using an ES|QL query and produces alert event documents when conditions are met. ## Rule modes Every rule operates in one of two modes: -- **Detect mode** (`kind: signal`) — produces signal events for exploration and analysis. No lifecycle tracking, no notifications. Use detect mode for broad monitoring without noise. -- **Alert mode** (`kind: alert`) — produces alert events with full lifecycle management. Alerts transition through episode states (`inactive` → `pending` → `active` → `recovering` → `inactive`), trigger notification policies, and support triage actions. Use alert mode when conditions require human response. +- **Detect mode** (`kind: signal`): produces signal events for exploration and analysis. No lifecycle tracking, no notifications. Use detect mode for broad monitoring without noise. +- **Alert mode** (`kind: alert`): produces alert events with full lifecycle management. Alerts transition through episode states (`inactive` → `pending` → `active` → `recovering` → `inactive`), trigger notification policies, and support triage actions. Use alert mode when conditions require human response. You can switch between modes at any time from the rule list or rule details page. @@ -25,9 +25,9 @@ You can switch between modes at any time from the rule list or rule details page You can create rules in three ways: -- **[From the UI](author-rules/create-rules-ui.md)** — use the rule creation form with interactive controls and YAML mode toggle. Preview results before saving. -- **[From Discover](author-rules/create-rules-discover.md)** — convert an ES|QL query you've built in Discover directly into a rule. The query pre-populates the rule definition. -- **[With YAML](author-rules/create-rules-yaml.md)** — define rules as YAML documents for infrastructure-as-code workflows, version control, and bulk provisioning. +- **[From the UI](author-rules/create-rules-ui.md)**: use the rule creation form with interactive controls and YAML mode toggle. Preview results before saving. +- **[From Discover](author-rules/create-rules-discover.md)**: convert an ES|QL query you've built in Discover directly into a rule. The query pre-populates the rule definition. +- **[With YAML](author-rules/create-rules-yaml.md)**: define rules as YAML documents for infrastructure-as-code workflows, version control, and bulk provisioning. ## What a rule contains diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md index 8b4541f567..496a3e6e83 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md @@ -12,22 +12,24 @@ description: "Convert an ES|QL query from Discover into a Kibana alerting v2 rul Create Kibana alerting v2 rules directly from Discover. When you build an ES|QL query in Discover that surfaces interesting patterns, you can convert it into a rule without rewriting the query. +While you prototype in Discover, each row in the result table is one document in {{es}}. After you save a rule, each evaluation run writes documents to `.rule-events`. The mode you select for the rule (Detect or Alert) determines whether those events are stored as `signal` or `alert` documents and whether `episode.*` fields exist. For how that maps to rows in Discover and how the stream is structured, refer to [Explore {{kib}} alerting v2 alerts and signals in Discover](../manage-alerts/explore-alerts-discover.md) and [Rule event and action field reference](../alert-event-field-reference.md). + ## Create a rule from Discover -1. Open **Discover** and switch to ES|QL mode. +1. Open Discover and switch to ES|QL mode. 2. Write and run an ES|QL query that returns the data you want to monitor. 3. Review the results to confirm the query captures the pattern you want to alert on. -4. Open the **Rules** menu on the Discover toolbar and choose **Create v2 ES|QL rule** (wording may vary slightly by release). Legacy rule types from solutions or plugins appear under **Create v1 rules** when your deployment exposes them. +4. Open the Rules menu on the Discover toolbar and choose Create v2 ES|QL rule (wording may vary slightly by release). Legacy rule types from solutions or plugins appear under Create v1 rules when your deployment exposes them. 5. The rule creation form opens with the ES|QL query pre-populated in the evaluation field. 6. Configure the remaining rule settings: - - **Name** and **description**. - - **Mode** (detect or alert). - - **Schedule** (execution interval and lookback window). - - **Grouping** fields if applicable. - - **Alert delay**, **recovery**, and **no-data** settings for alert mode. - - **Notification policies** to link. + - Name and description. + - Mode (detect or alert). + - Schedule (execution interval and lookback window). + - Grouping fields if applicable. + - Alert delay, recovery, and no-data settings for alert mode. + - Notification policies to link. 7. Optionally preview the rule results. -8. Click **Save**. +8. Click Save. ## What gets pre-populated diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md index b108e6035d..e9e4230eb0 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md @@ -14,23 +14,23 @@ Create Kibana alerting v2 rules using the interactive rule creation form. The fo ## Open the rule creation form -1. Navigate to **Management > Alerts and Insights > Rules V2**. -2. Click **Create rule**. +1. Navigate to Management > Alerts and Insights > Rules V2. +2. Click Create rule. ## Configure the rule ### Mode -Choose between **Detect** (signals only) and **Alert** (lifecycle tracking and notifications). +Choose between Detect (signals only) and Alert (lifecycle tracking and notifications). ### ES|QL query Write the ES|QL query that defines what to detect. The query has two parts: -- **Base query** (required) — the main ES|QL query that selects, aggregates, and transforms data. -- **Alert condition** (optional) — a `WHERE` clause that filters to breaching rows. +- Base query (required): the main ES|QL query that selects, aggregates, and transforms data. +- Alert condition (optional): a `WHERE` clause that filters to breaching rows. -Use the **YAML mode** toggle to switch between the interactive form and a YAML editor for the full rule definition. +Use the YAML mode toggle to switch between the interactive form and a YAML editor for the full rule definition. ### Grouping @@ -44,22 +44,22 @@ Configure the execution interval and the lookback window that determines how far When the rule is in alert mode, additional settings are available: -- **Alert delay** (activation threshold) — require the condition to be met a specified number of consecutive times or for a minimum duration before an alert becomes active. -- **Recovery conditions** — define how recovery is detected. -- **No-data handling** — configure behavior when the query returns no results. -- **Notification policies** — policies are global; scoping uses **rule labels** and matchers on the policy side, not links from this form. Configure policies under **Notification Policies** (see [Notification policies](rule-settings/notification-policies.md)). -- **Tags** — add free-form tags for filtering and organization. -- **Investigation guide** — attach a runbook or investigation guide to the rule. +- Alert delay (activation threshold): require the condition to be met a specified number of consecutive times or for a minimum duration before an alert becomes active. +- Recovery conditions: define how recovery is detected. +- No-data handling: configure behavior when the query returns no results. +- Notification policies: policies are global. Scoping uses rule labels and matchers on the policy side, not links from this form. Configure policies under Notification Policies. For an overview, refer to [Notification policies](rule-settings/notification-policies.md). +- Tags: add free-form tags for filtering and organization. +- Investigation guide: attach a runbook or investigation guide to the rule. ### Preview results -Before saving, click **Preview** to evaluate the query against recent data. The preview shows: +Before saving, click Preview to evaluate the query against recent data. The preview shows: - How many rows the query returns. - How many alert events would be generated. - Sample alert event documents. -- A **Lens-powered bar chart histogram** of matching row counts over time, for both **evaluation** previews and **recovery** previews (when recovery logic applies). +- A Lens-powered bar chart histogram of matching row counts over time, for both evaluation previews and recovery previews (when recovery logic applies). ## Save the rule -Click **Save** to create the rule. The rule starts executing on its configured schedule. +Click Save to create the rule. The rule starts executing on its configured schedule. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/production-considerations.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/production-considerations.md index 321229fe33..033fddc38c 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/production-considerations.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/production-considerations.md @@ -5,7 +5,7 @@ applies_to: since: "9.4" products: - id: kibana -description: "Guidance for running Kibana alerting v2 rules in production — scheduling, query performance, and data retention." +description: "Guidance for running Kibana alerting v2 rules in production, including scheduling, query performance, and data retention." --- % TODO: Content will be updated after performance testing is complete. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md index 12df2b5b66..0b4499f1d0 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md @@ -32,7 +32,7 @@ Configure activation using count, timeframe, or both: | `pending_timeframe` | Minimum duration the condition must persist | | `pending_operator` | How to combine count and timeframe (`AND` or `OR`) | -Each **timeframe** value must be between **5 seconds** and **365 days** (the same bounds as schedule and lookback durations). +Each timeframe value must be between 5 seconds and 365 days (the same bounds as schedule and lookback durations). ## Recovery thresholds @@ -42,4 +42,4 @@ Each **timeframe** value must be between **5 seconds** and **365 days** (the sam | `recovering_timeframe` | Minimum duration for recovery | | `recovering_operator` | How to combine count and timeframe (`AND` or `OR`) | -**Timeframe** fields use the same **5 seconds** to **365 days** bounds as activation timeframes. +Timeframe fields use the same 5 seconds to 365 days bounds as activation timeframes. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md index e2114f3fa1..ea700b1ffa 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md @@ -5,7 +5,7 @@ applies_to: since: "9.4" products: - id: kibana -description: "Notification policies control how and when Kibana alerting v2 alerts reach people and systems — matching, grouping, throttling, and routing." +description: "Notification policies control how and when Kibana alerting v2 alerts reach people and systems, including matching, grouping, throttling, and routing." --- # Kibana alerting v2 notification policies [notification-policies-v2] @@ -16,13 +16,13 @@ A notification policy defines how and when alerts reach people and systems. In K | | Kibana alerting v1 | Kibana alerting v2 | |---|---|---| -| **Scope** | Per-rule connectors and actions on the rule | **Global** notification policies; rules do not reference specific policies | +| **Scope** | Per-rule connectors and actions on the rule | **Global** notification policies. Rules do not reference specific policies | | **Matching** | Rule execution drives connector runs | **`rule_labels`** scoping on the policy, then KQL episode matching | | **Matcher context** | N/A (rule-centric) | Typed fields including `episode_status`, `rule.name`, `rule.labels`, and `data.*` | ## How notification policies apply to rules -Notification policies are **global** — rules do not store or reference a list of notification policies. +Notification policies are **global**. Rules do not store or reference a list of notification policies. - **Scoping** is expressed on the policy itself using **`rule_labels`**. Only episodes for rules whose labels satisfy the policy’s label selector are candidates for that policy. - After label scoping, the policy’s **KQL episode matcher** runs against the typed matcher context (for example `episode_status`, `rule.name`, `rule.labels`, and fields under `data.*`). diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md index 26b6a71a25..a6f3c1fc75 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md @@ -5,18 +5,18 @@ applies_to: since: "9.4" products: - id: kibana -description: "Create, configure, and manage Kibana alerting v2 notification policies — matching conditions, grouping, throttling, destinations, and snooze." +description: "Create, configure, and manage Kibana alerting v2 notification policies, including matching conditions, grouping, throttling, destinations, and snooze." --- # Create and manage Kibana alerting v2 notification policies [create-manage-notification-policies-v2] -Create notification policies to control which alerts trigger notifications, how alerts are grouped, how frequently notifications are sent, and where they are routed. Policies are **global**: you create and edit them from the **Notification Policies** area, not from the rule form. Rules do not “link” to policies; scoping is defined on the policy with **`rule_labels`** and matchers (see [Notification policies](../notification-policies.md)). +Create notification policies to control which alerts trigger notifications, how alerts are grouped, how frequently notifications are sent, and where they are routed. Policies are **global**: you create and edit them from the **Notification Policies** area, not from the rule form. Rules do not “link” to policies. Scoping is defined on the policy with **`rule_labels`** and matchers. Refer to [Notification policies](../notification-policies.md). ## Create a notification policy 1. Navigate to **Management > Alerts and Insights > Rules V2 > Notification Policies**. 2. Click **Create policy**. -3. Configure the policy settings (matching, grouping, throttling, destinations, and optional snooze). +3. Configure the policy settings: matching, grouping, throttling, destinations, and optional snooze. 4. Click **Save**. ## Policy list columns @@ -28,7 +28,7 @@ Create notification policies to control which alerts trigger notifications, how | **Rule labels** | Label selector used to scope which rules this policy can apply to | | **Last updated** | Last save time | -There is **no “linked rule count”** in the global model: policies are not attached to a fixed set of rules. Use **rule labels** and matcher behavior to understand effective coverage (see [How notification policies are evaluated](how-notification-policies-are-evaluated.md)). +There is **no “linked rule count”** in the global model. Policies are not attached to a fixed set of rules. Use **rule labels** and matcher behavior to understand effective coverage. For the evaluation flow, refer to [How notification policies are evaluated](how-notification-policies-are-evaluated.md). ## Destinations @@ -39,9 +39,9 @@ Destinations route matching episodes to workflows and channels. Instead of choos You can snooze a policy for a defined window so that it does not dispatch notifications during that period. ::::{important} Production considerations -When you **update** or **delete** a notification policy, API keys used for execution are **invalidated** by a background task (`invalidateApiKeysTask`). Allow for brief propagation delay before new keys are used for dispatch. For intervals and delays, see [Set up](../../../before-you-begin/set-up.md). +When you **update** or **delete** a notification policy, API keys used for execution are **invalidated** by a background task named `invalidateApiKeysTask`. Allow for brief propagation delay before new keys are used for dispatch. For intervals and delays, refer to [Set up](../../../before-you-begin/set-up.md). :::: ## Bulk actions -On the notification policies list, select one or more policies to **enable**, **disable**, or **delete** in bulk. **Select all** selects every policy on the current page of results; clear the selection before changing filters if you need a different set. +On the notification policies list, select one or more policies to **enable**, **disable**, or **delete** in bulk. **Select all** selects every policy on the current page of results. Clear the selection before changing filters if you need a different set. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md index 81df1e8a56..b3b36cd932 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md @@ -10,31 +10,31 @@ description: "How Kibana alerting v2 notification policies match alert episodes, # How Kibana alerting v2 notification policies are evaluated [how-notification-policies-evaluated-v2] -Notification policies are separate from rules. After rule evaluation produces or updates **alert episodes**, the system decides **which policies apply**, **whether notifications should go out**, and **which workflows** receive them. You configure policies once; they can apply to many rules. +Notification policies are separate from rules. After a rule runs and produces or updates alert episodes, the system decides which policies apply, whether notifications should go out, and which workflows receive them. You configure policies once. They can apply to many rules. ## How policies are matched to episodes -Policies are **global** in the space unless you narrow them: +Policies are global in the space unless you narrow them: -1. **Rule labels:** If a policy specifies **rule labels**, only rules whose labels satisfy that selector are considered. If you leave rule labels empty, the policy acts as a catch-all for every rule (subject to the KQL matcher below). -2. **KQL matcher:** For each candidate policy, the **KQL** condition is evaluated against the episode and rule context. For example, it can use rule name, rule labels, episode status, and fields from the alert payload (often under **`data.*`** in the matcher). Use the matcher editor suggestions to see which fields are available in your build. +1. Rule labels: If a policy specifies rule labels, only rules whose labels satisfy that selector are considered. If you leave rule labels empty, the policy acts as a catch-all for every rule, subject to the KQL matcher below. +2. KQL matcher: For each candidate policy, the KQL condition is evaluated against the episode and rule context. For example, it can use rule name, rule labels, episode status, and fields from the alert payload, often under `data.*` in the matcher. Use the matcher editor suggestions to find which fields are available in your build. -An episode can match **zero, one, or many** policies. If it matches **none**, notifications are not sent for that episode under those policies; an **unmatched** outcome is recorded for auditing (see below). +An episode can match zero, one, or many policies. If it matches none, notifications are not sent for that episode under those policies. An `unmatched` outcome is recorded for auditing, as defined in the [Possible outcomes](#possible-outcomes) section. ## What happens after a policy matches -For episodes that match a policy, the system applies **suppression** (if configured), **grouping** (how messages are batched), and **throttling** (minimum time between notifications for the same group). Then it sends notifications to the **workflow** destinations you configured on the policy. +For episodes that match a policy, the system applies suppression if configured, grouping for how messages are batched, and throttling for the minimum time between notifications for the same group. Then it sends notifications to the workflow destinations you configured on the policy. -**Order matters:** Lifecycle thresholds and no-data behavior on the rule run **before** notification policies. Policies only affect **routing and delivery**, not whether rows are written to **`.rule-events`**. +Order matters: Lifecycle thresholds and no-data behavior on the rule run before notification policies. Policies only affect routing and delivery, not whether rows are written to `.rule-events`. -## Outcomes you may see +## Possible outcomes | Outcome | What it means for you | |---|---| -| **dispatched** | Notifications were sent according to the policy | -| **throttled** | Delivery was suppressed because throttling rules said to wait | -| **suppressed** | The episode was suppressed (for example by an active suppression) before a notification went out | -| **unmatched** | No notification policy matched this episode, so no workflow ran for it under these policies | -| **error** | Processing failed; check {{kib}} logs and any health indicators your team uses | +| dispatched | Notifications were sent according to the policy | +| throttled | Delivery was suppressed because throttling rules said to wait | +| suppressed | The episode was suppressed before a notification went out, for example by an active suppression | +| unmatched | No notification policy matched this episode, so no workflow ran for it under these policies | +| error | Processing failed. Check {{kib}} logs and any health indicators your team uses | -Notifications can arrive shortly after an episode becomes eligible; heavy load or many policies can add noticeable delay. If something seems stuck, verify matchers, throttling, maintenance windows, and that the episode matches at least one policy. +Notifications can arrive shortly after an episode becomes eligible. Heavy load or many policies can add noticeable delay. If something seems stuck, verify matchers, throttling, maintenance windows, and that the episode matches at least one policy. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md index 05a08505e3..35c137a187 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md @@ -16,12 +16,12 @@ The schedule and lookback settings control how often a rule runs and how far bac The execution interval (`schedule.every`) determines how frequently the rule evaluates. -{{kib}} enforces a **minimum** interval of **5 seconds** and a **maximum** of **365 days** for duration fields (including this one). The rule form and API reject values outside that range. +{{kib}} enforces a minimum interval of 5 seconds and a maximum of 365 days for duration fields (including this one). The rule form and API reject values outside that range. ## Lookback window The lookback window (`schedule.lookback`) determines the time range that the ES|QL query covers. -The lookback must not exceed **365 days**. If the lookback is **shorter** than the execution interval, the rule form shows a warning because you can miss data between runs—set the lookback to at least the execution interval unless you have a deliberate reason not to. +The lookback must not exceed 365 days. If the lookback is shorter than the execution interval, the rule form shows a warning because you can miss data between runs. Set the lookback to at least the execution interval unless you have a deliberate reason not to. Choose a lookback window that is at least as long as the execution interval to avoid gaps in coverage. diff --git a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md index 3c34e511f6..b331f973d5 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md +++ b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md @@ -16,26 +16,26 @@ Before creating Kibana alerting v2 rules, review the following prerequisites and To use Kibana alerting v2, you need: -- **{{stack}} 9.4 or later.** -- **ES|QL knowledge.** Kibana alerting v2 rules are defined using ES|QL queries. Familiarity with ES|QL syntax, aggregations, and the `STATS`, `WHERE`, `EVAL`, and `KEEP` commands is essential. Refer to the [ES|QL reference](elasticsearch://reference/query-languages/esql.md) for details. -- **Data indexed in {{es}}.** Your source data (logs, metrics, traces, or alert events from other rules) must be indexed and accessible from the cluster where you create rules. -- **Appropriate privileges.** You need Kibana privileges to create and manage rules, notification policies, and workflows. Refer to [Alerting privileges](before-you-begin/alerting-privileges.md) for details. +- {{stack}} 9.4 or later. +- ES|QL knowledge. Kibana alerting v2 rules are defined using ES|QL queries. Familiarity with ES|QL syntax, aggregations, and the `STATS`, `WHERE`, `EVAL`, and `KEEP` commands is essential. Refer to the [ES|QL reference](elasticsearch://reference/query-languages/esql.md) for details. +- Data indexed in {{es}}. Your source data must be indexed and accessible from the cluster where you create rules, such as logs, metrics, traces, or alert events from other rules. +- Appropriate privileges. You need Kibana privileges to create and manage rules, notification policies, and workflows. Refer to [Alerting privileges](before-you-begin/alerting-privileges.md) for details. ## Key differences from Kibana alerting v1 If you are coming from Kibana alerting v1, note these differences: -- **You write the query.** Instead of selecting a rule type and filling in parameters, you write an ES|QL query that defines exactly what to look for and what data to include in each alert event. -- **Alerts are immutable.** Each rule evaluation appends new event documents rather than updating existing ones. This gives you a full history of every evaluation. -- **Notifications are separate from rules.** Instead of configuring actions on each rule, you create notification policies that match alerts and route them to workflow destinations. One policy can serve many rules. -- **Snooze is per series, not per rule.** You can snooze notifications for a specific host or service without silencing the entire rule. -- **Alert data is queryable.** Alert events are stored in standard {{es}} indices and can be queried with ES|QL in Discover, used in dashboards, or fed to other rules. +- You write the query. Instead of selecting a rule type and filling in parameters, you write an ES|QL query that defines exactly what to look for and what data to include in each alert event. +- Alerts are immutable. Each time a rule runs, it appends new event documents rather than updating existing ones. This gives you a full history of every run. +- Notifications are separate from rules. Instead of configuring actions on each rule, you create notification policies that match alerts and route them to workflow destinations. One policy can serve many rules. +- Snooze is per series, not per rule. You can snooze notifications for a specific host or service without silencing the entire rule. +- Alert data is queryable. Alert events are stored in standard {{es}} indices and can be queried with ES|QL in Discover, used in dashboards, or fed to other rules. ## Coexistence with Kibana alerting v1 Kibana alerting v2 runs alongside Kibana alerting v1. Both systems are fully operational: -- You manage v2 rules under **Management > Alerts and Insights > Rules V2**. v1 rules stay in the existing **Rules** (or equivalent) experience for your deployment—navigation labels can vary by version. -- Each system writes to its own indices. Kibana alerting v2 alert events go to `.rule-events`; Kibana alerting v1 alerts go to `.alerts-*`. +- You manage v2 rules under Management > Alerts and Insights > Rules V2. v1 rules stay in the existing Rules or equivalent experience for your deployment. Navigation labels can vary by version. +- Each system writes to its own indices. Kibana alerting v2 alert events go to `.rule-events`. Kibana alerting v1 alerts go to `.alerts-*`. - There is no automatic migration. You can copy rules from Kibana alerting v1 to Kibana alerting v2 manually when you are ready. - You can create rules on alerts that correlate across both systems by querying both alert indices. diff --git a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md index 57b3397562..f2a0563ec3 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md +++ b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md @@ -14,14 +14,14 @@ Kibana alerting v2 is available in {{stack}} 9.4 and later. This page explains h ## Enable Kibana alerting v2 -Kibana alerting v2 is available in 9.4 and later. When it is enabled for your deployment, use **Management > Alerts and Insights > Rules V2** to open the v2 rules list and author rules. If you do not see **Rules V2**, ask your administrator whether alerting v2 is enabled in your environment. +Kibana alerting v2 is available in 9.4 and later. When it is enabled for your deployment, use Management > Alerts and Insights > Rules V2 to open the v2 rules list and author rules. If Rules V2 does not appear in the navigation, ask your administrator whether alerting v2 is enabled in your environment. ## Index configuration Kibana alerting v2 automatically creates and manages the following data streams: -- **`.rule-events`** — stores signal and alert event documents produced by rule evaluations. This is an append-only data stream. -- **`.alert-actions`** — stores alert action records (acknowledge, snooze, deactivate, fire, suppress) for suppression tracking and audit. +- `.rule-events` stores signal and alert event documents produced each time a rule runs. This is an append-only data stream. +- `.alert-actions` stores alert action records such as acknowledge, snooze, deactivate, fire, and suppress for suppression tracking and audit. No manual index configuration is required. The system creates these data streams with the appropriate mappings when the first rule executes. @@ -34,13 +34,13 @@ Optional `kibana.yml` settings control how often {{kib}} cleans up API keys for | `xpack.alerting.invalidateApiKeysTask.interval` | `5m` | How often {{kib}} processes keys that are marked for invalidation | | `xpack.alerting.invalidateApiKeysTask.removalDelay` | `1h` | How long to wait after invalidation before old key material can be removed | -Change these only when your operations team or Elastic Support recommends it; aggressive values can affect how reliably workflows run after policy changes. +Change these only when your operations team or Elastic Support recommends it. Aggressive values can affect how reliably workflows run after policy changes. ## Verify the installation To verify that Kibana alerting v2 is working: -1. Navigate to **Management > Alerts and Insights > Rules V2**. +1. Navigate to Management > Alerts and Insights > Rules V2. 2. Confirm that the rules list page loads. -3. Click **Create rule** to confirm the rule form opens. -4. Optionally, create a test rule with a simple ES|QL query and verify that alert events appear in Discover by querying the **`.rule-events`** data stream. +3. Click Create rule to confirm the rule form opens. +4. Optionally, create a test rule with a simple ES|QL query and verify that alert events appear in Discover by querying the `.rule-events` data stream. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md index e97e31845e..232b197e98 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md @@ -10,24 +10,36 @@ description: "Query Kibana alerting v2 alert events in Discover with ES|QL for t # Explore {{kib}} alerting v2 alerts and signals in Discover [explore-alerts-discover-v2] -**What this page is for:** {{kib}} alerting v2 stores rule output in **`.rule-events`** and user or system actions in **`.alert-actions`**. Both are ordinary {{es}} data you query with **{{esql}}** in **Discover**. **When you land here**, use the examples to **investigate** what rules produced (recent rows, status mix, hourly volume), **drill into** one rule or one alert series, **track** breach trends over days, and **support operational metrics** such as mean time to acknowledge (MTTA) from acknowledgment rows. +What this page is for: {{kib}} alerting v2 stores rule output in `.rule-events` and user or system actions in `.alert-actions`. Both are ordinary {{es}} data you query with {{esql}} in Discover. When you land here, use the examples to investigate what rules produced, including recent rows, status mix, and hourly volume, and drill into one rule or one alert series, track breach trends over days, and support operational metrics such as mean time to acknowledge, MTTA, from acknowledgment rows. -**How to use it:** Open Discover, choose **{{esql}}**, paste a query, then adjust time ranges and placeholders (`YOUR_RULE_ID`, `YOUR_GROUP_HASH`) to match your environment. Save views, export results, or reuse clauses in dashboards and reports. +How to use it: Open Discover, select {{esql}}, paste a query, then adjust time ranges and placeholders (`YOUR_RULE_ID`, `YOUR_GROUP_HASH`) to match your environment. Save views, export results, or reuse clauses in dashboards and reports. -The examples below follow that workflow: they start with **broad** views of **`.rule-events`**, move to **narrow** filters (single rule, single `group_hash`), add a **daily breach trend**, then switch to **`.alert-actions`** for acknowledgment history. +The examples below follow that workflow. They start with broad views of `.rule-events`, move to narrow filters for a single rule or single `group_hash`, add a daily breach trend, then switch to `.alert-actions` for acknowledgment history. + +## How rule events appear in Discover + +Each write to `.rule-events` is one document in {{es}}. In Discover, each document is one row. A row is either a signal event or an alert event, not both. The `type` field is `signal` or `alert`. Rules in Detect mode emit `type: signal` documents without `episode.*` fields. Rules in Alert mode emit `type: alert` documents that include episode lifecycle fields. Each write creates a single document with one `type`. The same data stream can hold both kinds of documents from different rules. + +For field names, types, and episode fields, refer to [Rule event and action field reference](../alert-event-field-reference.md). + +## Where query output appears in each document + +This section summarizes how top-level fields and the `data` field are laid out in `.rule-events` and how to work with that stream safely. + +The fields documented in the [Rule event and action field reference](../alert-event-field-reference.md) are what you can count on at the top level of each document. Columns and values from your {{esql}} query that are not part of that fixed shape are stored under `data`. In Discover and dashboards, look under `data` for your rule output until you confirm field names and types. Your rule definition decides what appears there. ## Query alert events -These queries target **`.rule-events`**: signal and alert documents from rule evaluations. Use them before the **alert actions** section when you care about rule output and episode fields, not action audit rows. +These queries target `.rule-events`: signal and alert documents written when rules run. Use them before the alert actions section when you care about what rules wrote to the index and about episode fields, not action audit rows. ### Example: Recent alert and signal events -This example shows a **non-aggregated** sample of the newest documents in **`.rule-events`**: one row per evaluation output, with core fields so you can scan what happened in roughly the **last day**. The results are capped at **100** rows so the query stays responsive in Discover. +This example shows a non-aggregated sample of the newest documents in `.rule-events`: one row per event from a rule run, with core fields so you can scan what happened in roughly the last day. The results are capped at 100 rows so the query stays responsive in Discover. ```esql // ═══════════════════════════════════════════════════════════════ -// LATEST ROWS — Sample across rules (raw timeline) -// Why: See what ran recently without aggregating; spot spikes or odd episode state +// LATEST ROWS - Sample across rules, raw timeline +// Why: Inspect recent runs without aggregating. Spot spikes or odd episode state // ═══════════════════════════════════════════════════════════════ FROM .rule-events | WHERE @timestamp > NOW() - 1 day // Rolling last 24 hours @@ -38,12 +50,12 @@ FROM .rule-events ### Example: Event counts by status -This example **aggregates** all events from the **last seven days** and counts how many documents fall into each **`status`** value (for example `breached`, `recovered`, or `no_data`). Use it to see whether the stream is mostly healthy transitions or dominated by a single status. +This example aggregates all events from the last seven days and counts how many documents fall into each `status` value, such as `breached`, `recovered`, or `no_data`. Use it to check whether the stream is mostly healthy transitions or dominated by a single status. ```esql // ═══════════════════════════════════════════════════════════════ -// STATUS MIX — How many events per status over the week -// Why: Health check; see if no_data dominates (data or query issues) +// STATUS MIX - How many events per status over the week +// Why: Health check. Check whether no_data dominates for data or query issues // ═══════════════════════════════════════════════════════════════ FROM .rule-events | WHERE @timestamp > NOW() - 7 days @@ -53,12 +65,12 @@ FROM .rule-events ### Example: Hourly event volume -This example buckets events by **clock hour** over the **last 24 hours** using `DATE_TRUNC` and counts events per hour. It highlights **when** volume rises or falls, which helps correlate activity with rule schedules, deployments, or incidents. +This example buckets events by clock hour over the last 24 hours using `DATE_TRUNC` and counts events per hour. It highlights when volume rises or falls, which helps correlate activity with rule schedules, deployments, or incidents. ```esql // ═══════════════════════════════════════════════════════════════ -// THROUGHPUT — Event counts per clock hour -// Why: Compare quiet versus busy windows; correlate with schedules or incidents +// THROUGHPUT - Event counts per clock hour +// Why: Compare quiet versus busy windows. Correlate with schedules or incidents // ═══════════════════════════════════════════════════════════════ FROM .rule-events | WHERE @timestamp > NOW() - 24 hours @@ -68,12 +80,12 @@ FROM .rule-events ### Example: Events for a specific rule -This example filters **`.rule-events`** to a **single rule** by **`rule.id`**. Replace **`YOUR_RULE_ID`** with the id from the rule’s details or API. It keeps **`data`**, which holds the fields your {{esql}} rule selected—useful for validating field names and shapes. The window is **seven days**. +This example filters `.rule-events` to a single rule by `rule.id`. Replace `YOUR_RULE_ID` with the id from the rule's details or API. It keeps `data`, which holds the fields your {{esql}} rule selected. That is useful for validating field names and shapes. The window is seven days. ```esql // ═══════════════════════════════════════════════════════════════ -// SINGLE RULE — All events for one rule id (replace YOUR_RULE_ID) -// Why: Validate the data field payload; isolate volume for one definition +// SINGLE RULE - All events for one rule id, replace YOUR_RULE_ID +// Why: Validate the data field payload. Isolate volume for one definition // ═══════════════════════════════════════════════════════════════ FROM .rule-events | WHERE rule.id == "YOUR_RULE_ID" // Narrow to one rule @@ -84,12 +96,12 @@ FROM .rule-events ### Example: Group hash series for an episode -This example follows **one alert series** (`group_hash`) over **seven days**, sorted **oldest to newest**, so you can read the timeline for that series. Replace **`YOUR_GROUP_HASH`** with the value from an event or the rule details. **Episode** fields show how state changed across evaluations. +This example follows one alert series identified by `group_hash` over seven days, sorted oldest to newest, so you can read the timeline for that series. Replace `YOUR_GROUP_HASH` with the value from an event or the rule details. Episode fields show how state changed across evaluations. ```esql // ═══════════════════════════════════════════════════════════════ -// ONE SERIES — Timeline for a single group_hash (replace YOUR_GROUP_HASH) -// Why: Replay how an episode progressed (same series key as in the rule and alert UI) +// ONE SERIES - Timeline for a single group_hash, replace YOUR_GROUP_HASH +// Why: Replay how an episode progressed with the same series key as in the rule and alert UI // ═══════════════════════════════════════════════════════════════ FROM .rule-events | WHERE group_hash == "YOUR_GROUP_HASH" @@ -100,12 +112,12 @@ FROM .rule-events ### Example: Breached rows trend -This example counts only rows where **`status`** is **`breached`** (the condition was met for that evaluation), then totals **breaches per calendar day** for the **last week**. It is suited to **trend** questions (getting louder or quieter over days), not to total signal volume. +This example counts only rows where `status` is `breached` when the condition was met for that evaluation, then totals breaches per calendar day for the last week. It is suited to trend questions about getting louder or quieter over days, not to total signal volume. ```esql // ═══════════════════════════════════════════════════════════════ -// BREACH TREND — Daily breach counts (condition met rows only) -// Why: Day-over-day trend; noisy rules; validate a change after deploy +// BREACH TREND - Daily breach counts, condition met rows only +// Why: Day-over-day trend, noisy rules, validate a change after deploy // ═══════════════════════════════════════════════════════════════ FROM .rule-events | WHERE status == "breached" AND @timestamp > NOW() - 7 days @@ -113,17 +125,17 @@ FROM .rule-events | SORT day ASC ``` -## Query alert actions (for example, MTTA) +## Query alert actions for example MTTA -Earlier on this page, the **`.rule-events`** examples covered **what the rule wrote**; this section covers **what people did** to alerts. Operational metrics such as **mean time to acknowledge (MTTA)** build on action documents in **`.alert-actions`** (for example acknowledgments), often combined with episode or `fire` timestamps in a separate step. +Earlier on this page, the `.rule-events` examples covered what the rule wrote. This section covers what people did to alerts. Operational metrics such as mean time to acknowledge, MTTA, build on action documents in `.alert-actions`, such as acknowledgments, often combined with episode or `fire` timestamps in a separate step. ### Example: Acknowledgment events for MTTA-style analysis -This example reads **`.alert-actions`** (not **`.rule-events`**) and returns rows where **`action.type`** is **`acknowledge`**, limited to **30 days** of history. It is a typical **starting point** for MTTA: you still need timestamps for “start” (for example first `fire` or episode start) and your own definition of acknowledge time, which may require a second query or aggregation. +This example reads `.alert-actions` instead of `.rule-events` and returns rows where `action.type` is `acknowledge`, limited to 30 days of history. It is a typical starting point for MTTA. You still need timestamps for “start”, for example first `fire` or episode start, and your own definition of acknowledge time, which may require a second query or aggregation. ```esql // ═══════════════════════════════════════════════════════════════ -// ACKNOWLEDGMENTS — Rows users acknowledged (MTTA anchor) +// ACKNOWLEDGMENTS - Rows users acknowledged, MTTA anchor // Why: Pair with fire or episode start in a follow-up query for your organization's MTTA definition // ═══════════════════════════════════════════════════════════════ FROM .alert-actions @@ -133,4 +145,4 @@ FROM .alert-actions | SORT @timestamp DESC ``` -Adjust filters and aggregations to match how your organization defines MTTA (for example, time from first `fire` to first `acknowledge` for an episode). +Adjust filters and aggregations to match how your organization defines MTTA, for example time from first `fire` to first `acknowledge` for an episode. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md index bfda588b76..c5ed551dd8 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md @@ -5,7 +5,7 @@ applies_to: since: "9.4" products: - id: kibana -description: "Actions you can take on Kibana alerting v2 alerts: acknowledge, snooze, deactivate, assign, tag, resolve, and add to cases." +description: "Actions you can take on Kibana alerting v2 alerts, including acknowledge, snooze, deactivate, assign, tag, resolve, and add to cases." --- # Kibana alerting v2 alert actions [alert-actions-v2] @@ -14,7 +14,7 @@ Alert actions are operations you perform on Kibana alerting v2 alerts to manage ## Where action records are stored -When you take an action on an alert, {{kib}} records it in the **`.alert-actions`** data stream. You can query these documents in Discover (ES|QL) for auditing, reporting, and metrics such as mean time to acknowledge (MTTA). +When you take an action on an alert, {{kib}} records it in the `.alert-actions` data stream. You can query these documents in Discover (ES|QL) for auditing, reporting, and metrics such as mean time to acknowledge (MTTA). ## Action types @@ -28,17 +28,17 @@ The `action.type` field identifies what happened. Common values include: | `deactivate` | Alert or episode deactivated | | `suppress` | Suppression applied | | `assign` | Assignment changed | -| `tag` | Tag applied to the alert (**recorded** action) | +| `tag` | Tag applied to the alert (recorded action) | | `resolve` | Episode or alert resolved | | `unmatched` | No notification policy matched the episode, so no workflow ran for it under those policies | -The **`untag`** action type is not used; tagging is recorded with the **`tag`** action type. +The `untag` action type is not used. Tagging is recorded with the `tag` action type. ## Available actions in the UI From the alert and episode views you can: -- **Acknowledge**, **snooze**, **deactivate**, **assign**, **resolve**, and **add to cases** as described in the triage workflow. -- **Tag** alerts for organization. Tagging is persisted as a **`tag`** action in **`.alert-actions`**, consistent with bulk-get and query behavior for recorded actions. +- Acknowledge, snooze, deactivate, assign, resolve, and add to cases as described in the triage workflow. +- Tag alerts for organization. Tagging is persisted as a `tag` action in `.alert-actions`, consistent with bulk-get and query behavior for recorded actions. -For field-level detail on action documents, see [Alert event field reference](../../alert-event-field-reference.md). +For field-level detail on action documents, refer to [Rule event and action field reference](../../alert-event-field-reference.md). diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md index 4cd2106b79..a50a4e87c9 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md @@ -5,7 +5,7 @@ applies_to: since: "9.4" products: - id: kibana -description: "Understand Kibana alerting v2 alert episodes — the full lifecycle arc from first breach to recovery — including states, identity, and status tracking." +description: "Understand Kibana alerting v2 alert episodes across the full lifecycle from first breach to recovery, including states, identity, and status tracking." --- # Kibana alerting v2 alert episode details [alert-episode-details-v2] diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-rules.md b/explore-analyze/alerting/kibana-alerting-v2/manage-rules.md index 4603aa2862..af47b9bd24 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-rules.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-rules.md @@ -10,7 +10,7 @@ description: "Navigate Kibana alerting v2 rule management: rules list and detail # Manage {{kib}} alerting v2 rules [manage-rules-v2] -Use this section after rules exist in your space: find rules in the **Rules V2** list, open a rule to inspect configuration and execution history, run bulk operations, and change whether rules run or notify. **Managing rules** is separate from **authoring** definitions—refer to [Author rules](author-rules.md) to create or edit the {{esql}} query, schedule, and mode. +Use this section after rules exist in your space: find rules in the **Rules V2** list, open a rule to inspect configuration and execution history, run bulk operations, and change whether rules run or notify. **Managing rules** is separate from **authoring** definitions. Refer to [Author rules](author-rules.md) to create or edit the {{esql}} query, schedule, and mode. **Where to work in {{kib}}:** **Management** → **Alerts and Insights** → **Rules V2**. @@ -23,5 +23,5 @@ Use this section after rules exist in your space: find rules in the **Rules V2** ## Related -- [Author rules](author-rules.md) — Create rules, set detect or alert mode, and edit query and schedule. -- [Manage alerts](manage-alerts.md) — Triage and respond to alerts produced by rules. +- [Author rules](author-rules.md): Create rules, set detect or alert mode, and edit query and schedule. +- [Manage alerts](manage-alerts.md): Triage and respond to alerts produced by rules. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md b/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md index bc8a39f007..e7a9e76928 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md @@ -10,41 +10,41 @@ description: "View rule details, execution history, related rules, and alerts ge # View and manage Kibana alerting v2 rules [view-manage-rules-v2] -The **Rules V2** list and the **rule details** page give you a full view of Kibana alerting v2 rules: configuration, execution history, related rules, and alerts generated by a rule. +The Rules V2 list and the rule details page give you a full view of Kibana alerting v2 rules: configuration, execution history, related rules, and alerts generated by a rule. ## Rules list -The rules list is the entry point under **Management > Alerts and Insights > Rules V2**. +The rules list is the entry point under Management > Alerts and Insights > Rules V2. ### Columns Typical columns include: -- **Name** — Rule name; click to open the rule **details** page. -- **Type** — Rule type (for example detect vs alert mode, where applicable). -- **Schedule** — How often the rule runs. -- **Last run** — Last execution time and status. -- **Tags** — Labels for filtering and notification policy scoping. -- **Enabled** — Whether the rule is active. +- Name: Rule name. Click to open the rule details page. +- Type: Rule type, such as detect versus alert mode where applicable. +- Schedule: How often the rule runs. +- Last run: Last execution time and status. +- Tags: Labels for filtering and notification policy scoping. +- Enabled: Whether the rule is active. -Exact columns can vary by release; use column controls if your build exposes them. +Exact columns can vary by release. Use column controls if your build exposes them. ### Filters and search -Use the search field and filters (for example by tag, status, or space) to narrow the list. Search matches rule metadata such as name and description. +Use the search field and filters, for example by tag, status, or space, to narrow the list. Search matches rule metadata such as name and description. ### Open rule details -Click a rule **name** to open the rule details page. The details page shows configuration, execution history, related rules, and alerts for that rule (documented on that page). +Click a rule name to open the rule details page. The details page shows configuration, execution history, related rules, and alerts for that rule as documented on that page. ## Bulk actions From the rules list, select one or more rules to run bulk operations: -- **Enable** — Turn on selected rules. -- **Disable** — Turn off selected rules (they stop scheduling until re-enabled). -- **Delete** — Remove selected rules (confirm when prompted). +- Enable: Turn on selected rules. +- Disable: Turn off selected rules. They stop scheduling until re-enabled. +- Delete: Remove selected rules. Confirm when prompted. -**Select all** selects every rule on the **current page** of results. If you need to act on more than one page, change page size or repeat the action, or refine filters so the desired rules appear together. +Select all selects every rule on the current page of results. If you need to act on more than one page, change page size or repeat the action, or refine filters so the desired rules appear together. -The rule details page content (single-rule views) is unchanged by these list behaviors; see that page for execution history and per-rule actions. +The rule details page content for single-rule views is unchanged by these list behaviors. Open that page for execution history and per-rule actions. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md index 90d38ccd60..ea20346b0e 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md @@ -10,125 +10,125 @@ description: "Select the right Kibana alerting v2 feature to reduce noise: thres # Reduce {{kib}} alerting v2 noise and false positives [reduce-noise-v2] -{{kib}} alerting v2 offers many ways to reduce noise, each applied at a different stage—from the {{esql}} query and lifecycle thresholds through notification policies, throttling, and manual controls. Selecting the wrong lever wastes effort and can hide real problems. This page helps you **match a situation to a mechanism** and explains **how mechanisms combine in order** so you can use them deliberately. +{{kib}} alerting v2 offers many ways to reduce noise, each applied at a different stage, from the {{esql}} query and lifecycle thresholds through notification policies, throttling, and manual controls. Selecting the wrong lever wastes effort and can hide real problems. This page helps you match a situation to a mechanism and explains how mechanisms combine in order so you can use them deliberately. -If multiple rows in the table apply, see [Using them together](#using-them-together). +If multiple rows in the table apply, refer to [Using them together](#using-them-together). ## Select the right approach | Your situation | Use this | What it does | |---|---|---| -| The {{esql}} query matches too much normal traffic (too many breaching rows) | [Author and tune the rule](author-rules.md) | Narrows the query, `WHERE` clause, schedule, or lookback so evaluations only surface what matters | -| Short spikes or flapping metrics open alerts before they should | [Activation thresholds](reduce-noise/activation-thresholds.md) | Requires consecutive breaches or a minimum duration before an episode becomes **active** | -| The alert recovers and reopens too often (flapping) | [Recovery thresholds](reduce-noise/recovery-thresholds.md) | Requires sustained clear conditions before an episode leaves **recovering** | -| The query returns no rows and **no_data** or recovery behavior is misleading | [No-data handling](reduce-noise/no-data-handling.md) | Configures how empty results are interpreted so gaps do not look like false recoveries or false alerts | -| Notifications repeat for the same group on every evaluation | [Throttling](reduce-noise/throttle.md) | Enforces a minimum interval between notifications **per notification group** | +| The {{esql}} query matches too much normal traffic with too many breaching rows | [Author and tune the rule](author-rules.md) | Narrows the query, `WHERE` clause, schedule, or lookback so evaluations only surface what matters | +| Short spikes or flapping metrics open alerts before they should | [Activation thresholds](reduce-noise/activation-thresholds.md) | Requires consecutive breaches or a minimum duration before an episode becomes active | +| The alert recovers and reopens too often, flapping | [Recovery thresholds](reduce-noise/recovery-thresholds.md) | Requires sustained clear conditions before an episode leaves recovering | +| The query returns no rows and no_data or recovery behavior is misleading | [No-data handling](reduce-noise/no-data-handling.md) | Configures how empty results are interpreted so gaps do not look like false recoveries or false alerts | +| Notifications repeat for the same group on every evaluation | [Throttling](reduce-noise/throttle.md) | Enforces a minimum interval between notifications per notification group | | Recipients get too many separate messages for related episodes | [Notification grouping](reduce-noise/grouping.md) | Batches related alerts into fewer notifications | -| Notifications should only go out for certain episodes (severity, labels, payload fields) | [Matchers](reduce-noise/matcher.md) | Applies notification policy **rule_labels** scoping and **KQL** episode matching so only matching episodes route to workflows | +| Notifications should only go out for certain episodes by severity, labels, or payload fields | [Matchers](reduce-noise/matcher.md) | Applies notification policy rule_labels scoping and KQL episode matching so only matching episodes route to workflows | | Planned maintenance: evaluations should continue but on-call should not be paged | [Maintenance windows](reduce-noise/maintenance-windows.md) | Pauses notifications for a scheduled window | -| A temporary quiet period is needed for a series or episode without changing the rule | [Snooze or silence](reduce-noise/snooze-or-silence.md) | Snoozes or silences notifications; **acknowledge** can also quiet an episode while work proceeds | -| Many low-level alerts should roll up into one higher-level signal | [Rules on alerts](reduce-noise/rules-on-alerts.md) | Runs follow-on rules on **`.rule-events`** (or related data) to correlate and notify once | -| One **alert episode** should stop notifying and leave the triage queue while the rule keeps running | [Deactivate alerts](reduce-noise/deactivate-alerts.md) | **Deactivates** that episode; the rule still evaluates and can detect new episodes for other **series** | +| A temporary quiet period is needed for a series or episode without changing the rule | [Snooze or silence](reduce-noise/snooze-or-silence.md) | Snoozes or silences notifications. Acknowledge can also quiet an episode while work proceeds | +| Many low-level alerts should roll up into one higher-level signal | [Rules on alerts](reduce-noise/rules-on-alerts.md) | Runs follow-on rules on `.rule-events` or related data to correlate and notify once | +| One alert episode should stop notifying and leave the triage queue while the rule keeps running | [Deactivate alerts](reduce-noise/deactivate-alerts.md) | Deactivates that episode. The rule still evaluates and can detect new episodes for other series | ## How each mechanism works -Mechanisms are listed in **rough order**: from what happens during rule evaluation and lifecycle, through notification policy processing, to operator controls. +Mechanisms are listed in rough order: from what happens when rules run and how episodes change, through notification policy processing, to operator controls. ### Author and tune the rule -Acts on: **the {{esql}} query and rule schedule, before interpretation as breach or no_data** +Acts on: the {{esql}} query and rule schedule, before interpretation as breach or no_data -**Problem:** The detector fires on the wrong things. +Problem: The detector fires on the wrong things. -Refine the base query, alert `WHERE` clause, schedule, and lookback. This is the only option that improves the underlying signal. Other tools filter or route what the rule already emits. See [Author rules](author-rules.md). +Refine the base query, alert `WHERE` clause, schedule, and lookback. This is the only option that improves the underlying signal. Other tools filter or route what the rule already emits. Refer to [Author rules](author-rules.md). ### Activation and recovery thresholds -Acts on: **episode lifecycle transitions** (pending → active, recovering → inactive) +Acts on: episode lifecycle transitions from pending to active and from recovering to inactive -**Problem:** Conditions flicker, or recovery should hold steady before closing. +Problem: Conditions flicker, or recovery should hold steady before closing. -[Activation thresholds](reduce-noise/activation-thresholds.md) delay promotion to **active**. [Recovery thresholds](reduce-noise/recovery-thresholds.md) delay return to **inactive**. Both reduce flip-flopping without hiding rows in the source data. +[Activation thresholds](reduce-noise/activation-thresholds.md) delay promotion to active. [Recovery thresholds](reduce-noise/recovery-thresholds.md) delay return to inactive. Both reduce flip-flopping without hiding rows in the source data. ### No-data handling -Acts on: **evaluations that return zero rows** +Acts on: evaluations that return zero rows -**Problem:** Data stopped arriving, or empty results should not imply recovery or a **no_data** storm. +Problem: Data stopped arriving, or empty results should not imply recovery or a no_data storm. -Configure how the rule treats empty results. See [No-data handling](reduce-noise/no-data-handling.md) and [No-data handling (rule settings)](author-rules/rule-settings/no-data-handling.md). +Configure how the rule treats empty results. Refer to [No-data handling](reduce-noise/no-data-handling.md) and [No-data handling (rule settings)](author-rules/rule-settings/no-data-handling.md). ### Notification matchers and grouping -Acts on: **which episodes a notification policy considers and how they are batched** +Acts on: which episodes a notification policy considers and how they are batched -**Problem:** Only some episodes should page the team, or messages should batch by service or host. +Problem: Only some episodes should page the team, or messages should batch by service or host. -[Matchers](reduce-noise/matcher.md) scope policies (labels + KQL). [Grouping](reduce-noise/grouping.md) combines related episodes into fewer notifications. +[Matchers](reduce-noise/matcher.md) scope policies using labels and KQL. [Grouping](reduce-noise/grouping.md) combines related episodes into fewer notifications. ### Throttling -Acts on: **notification send rate for a group** +Acts on: notification send rate for a group -**Problem:** The same notification repeats on every run. +Problem: The same notification repeats on every run. -[Throttling](reduce-noise/throttle.md) limits how often a policy may notify for the same group. Detection and episode state are unchanged; only dispatch spacing changes. +[Throttling](reduce-noise/throttle.md) limits how often a policy may notify for the same group. Detection and episode state are unchanged. Only dispatch spacing changes. ### Maintenance windows -Acts on: **notification dispatch during a window** +Acts on: notification dispatch during a window -**Problem:** Maintenance is scheduled; events should still be recorded without paging. +Problem: Maintenance is scheduled. Events should still be recorded without paging. [Maintenance windows](reduce-noise/maintenance-windows.md) pause notifications for planned work. Evaluations continue unless the rule is no longer enabled in the {{rules-ui}}. ### Snooze, silence, and acknowledgment -Acts on: **notifications for a scope (series, attributes, episode)** +Acts on: notifications for a scope such as series, attributes, or episode -**Problem:** Quiet a series for a time, or mark ownership of an episode. +Problem: Quiet a series for a time, or mark ownership of an episode. [Snooze or silence](reduce-noise/snooze-or-silence.md) covers temporary suppression and acknowledgment-driven quieting. ### Rules on alerts -Acts on: **downstream correlation and routing** +Acts on: downstream correlation and routing -**Problem:** One summary notification is enough when the pattern is severe, not one per underlying row. +Problem: One summary notification is enough when the pattern is severe, not one per underlying row. [Rules on alerts](reduce-noise/rules-on-alerts.md) uses alert event data as input to another rule so operations can escalate or summarize. ### Deactivate alerts -Acts on: **a single alert episode** (lifecycle processing and notifications) +Acts on: a single alert episode for lifecycle processing and notifications -**Problem:** One **alert episode** should drop out of triage while other **series** keep running. +Problem: One alert episode should drop out of triage while other series keep running. -[Deactivate alerts](reduce-noise/deactivate-alerts.md) **deactivates** that episode: lifecycle processing and notifications stop for it, while the rule continues to evaluate and can open new episodes for other **group_hash** values. +[Deactivate alerts](reduce-noise/deactivate-alerts.md) deactivates that episode. Lifecycle processing and notifications stop for it, while the rule continues to evaluate and can open new episodes for other `group_hash` values. ## Key distinctions -| | Tune rule / schedule | Activation / recovery thresholds | No-data handling | Matchers / grouping / throttle | {{maint-windows-cap}} / snooze / silence | Rules on alerts | **Deactivate alerts** | +| | Tune rule / schedule | Activation / recovery thresholds | No-data handling | Matchers / grouping / throttle | {{maint-windows-cap}} / snooze / silence | Rules on alerts | Deactivate alerts | |---|---|---|---|---|---|---|---| -| **Rule still evaluates** | Yes | Yes | Yes | Yes | Yes | Yes (source rules) | Yes | -| **Changes breach detection logic** | Yes | No (delays state) | Yes (empty-result policy) | No | No | N/A | No | -| **Reduces notifications** | If fewer breaches | Indirectly | Indirectly | Yes | Yes | Yes | Yes | -| **Typical time scope** | Until next edit | Consecutive runs / duration | Per evaluation | Policy config | Window or until cleared | N/A | Until episode handled | +| Rule still evaluates | Yes | Yes | Yes | Yes | Yes | Yes, source rules | Yes | +| Changes breach detection logic | Yes | No, delays state only | Yes, empty-result policy | No | No | N/A | No | +| Reduces notifications | If fewer breaches | Indirectly | Indirectly | Yes | Yes | Yes | Yes | +| Typical time scope | Until next edit | Consecutive runs / duration | Per evaluation | Policy config | Window or until cleared | N/A | Until episode handled | ## Using them together [using-them-together] -These options stack. A common pattern is: **tune the query** for precision, add **activation** thresholds to ignore spikes, use **matchers and throttling** so notification policies only fire for the right episodes at a sustainable rate, and use **{{maint-windows-cap}}** or **snooze** during known change windows. +These options stack. A common pattern is: tune the query for precision, add activation thresholds to ignore spikes, use matchers and throttling so notification policies only fire for the right episodes at a sustainable rate, and use {{maint-windows-cap}} or snooze during known change windows. -**Example: Noisy CPU rule** +Example: Noisy CPU rule | Situation | Action | Mechanism | |---|---|---| | The {{esql}} query flags any host over 70% | Tighten the query or add a stricter `WHERE` | Author and tune the rule | -| Legitimate bursts open alerts for 1-minute spikes | Require 3 consecutive breaches before **active** | Activation thresholds | -| The same host pages every run for an hour | Add **throttle** and **grouping** on the notification policy | Throttle, grouping | -| Only production hosts should page on-call | Add **rule_labels** and **KQL** on the policy | Matchers | -| Database change window this evening | Open a {{maint-windows-cap}} or **snooze** the series | {{maint-windows-cap}}, snooze | +| Legitimate bursts open alerts for 1-minute spikes | Require 3 consecutive breaches before active | Activation thresholds | +| The same host pages every run for an hour | Add throttle and grouping on the notification policy | Throttle, grouping | +| Only production hosts should page on-call | Add rule_labels and KQL on the policy | Matchers | +| Database change window this evening | Open a {{maint-windows-cap}} or snooze the series | {{maint-windows-cap}}, snooze | ::::{note} -**Order of application matters.** Thresholds and no-data behavior affect **lifecycle state** before notification policies run. Matchers and throttling apply when **notification policies** are evaluated for each episode. Snooze and {{maint-windows-cap}} affect **whether notifications send**, not whether `.rule-events` documents are written—check Discover if raw history is needed. +Order of application matters. Thresholds and no-data behavior affect lifecycle state before notification policies run. Matchers and throttling apply when notification policies are evaluated for each episode. Snooze and {{maint-windows-cap}} affect whether notifications send, not whether `.rule-events` documents are written. Check Discover if raw history is needed. :::: diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md index 2b61e2af54..699605ca05 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md @@ -10,4 +10,4 @@ description: "Schedule periods during which Kibana alerting v2 notifications are # {{kib}} alerting v2 maintenance windows [maintenance-windows-v2] -**{{maint-windows-cap}}** are scheduled periods during which notifications are paused. Rule evaluation continues and **alert episodes** can still be recorded in **`.rule-events`**; dispatch is what pauses. Use them for planned deployments, infrastructure changes, or recurring maintenance. +**{{maint-windows-cap}}** are scheduled periods during which notifications are paused. Rule evaluation continues and **alert episodes** can still be recorded in **`.rule-events`**. Dispatch is what pauses. Use them for planned deployments, infrastructure changes, or recurring maintenance. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/throttle.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/throttle.md index 04fffd0b89..652329f659 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/throttle.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/throttle.md @@ -10,4 +10,4 @@ description: "Limit Kibana alerting v2 notification frequency by setting a minim # {{kib}} alerting v2 throttle [throttle-v2] -**Throttling** sets a minimum interval between notifications for the same **notification group**. It reduces notification volume without changing rule evaluation or **alert episode** lifecycle state. +**Throttling** sets a minimum interval between notifications for the same **notification group**. It reduces notification volume without affecting rule execution or **alert episode** lifecycle state. From 13c9a8f91a516d5a41421235a6efbfc6cb2f54e7 Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Mon, 30 Mar 2026 16:37:38 -0400 Subject: [PATCH 09/40] fix front matter --- explore-analyze/alerting/kibana-alerting-v2.md | 3 +-- .../kibana-alerting-v2/alert-event-field-reference.md | 7 +++---- .../alerting/kibana-alerting-v2/author-rules.md | 3 +-- .../author-rules/create-rules-discover.md | 3 +-- .../kibana-alerting-v2/author-rules/create-rules-ui.md | 3 +-- .../kibana-alerting-v2/author-rules/create-rules-yaml.md | 3 +-- .../author-rules/production-considerations.md | 3 +-- .../kibana-alerting-v2/author-rules/rule-settings.md | 3 +-- .../rule-settings/activation-and-recovery-thresholds.md | 3 +-- .../author-rules/rule-settings/grouping.md | 3 +-- .../author-rules/rule-settings/no-data-handling.md | 3 +-- .../author-rules/rule-settings/notification-policies.md | 3 +-- .../create-manage-notification-policies.md | 3 +-- .../how-notification-policies-are-evaluated.md | 3 +-- .../author-rules/rule-settings/schedule-and-lookback.md | 3 +-- .../author-rules/rule-settings/workflows.md | 3 +-- .../kibana-alerting-v2/author-rules/rule-templates.md | 3 +-- .../alerting/kibana-alerting-v2/author-rules/rule-types.md | 3 +-- .../kibana-alerting-v2/author-rules/rules-on-alerts.md | 3 +-- .../author-rules/set-rule-data-sources.md | 3 +-- .../alerting/kibana-alerting-v2/before-you-begin.md | 3 +-- .../before-you-begin/alerting-privileges.md | 3 +-- .../alerting/kibana-alerting-v2/before-you-begin/set-up.md | 3 +-- .../alerting/kibana-alerting-v2/manage-alerts.md | 3 +-- .../manage-alerts/explore-alerts-discover.md | 3 +-- .../manage-alerts/investigate-respond.md | 3 +-- .../manage-alerts/investigate-respond/alert-actions.md | 3 +-- .../investigate-respond/alert-episode-details.md | 3 +-- .../kibana-alerting-v2/manage-alerts/view-alerts.md | 3 +-- .../alerting/kibana-alerting-v2/manage-rules.md | 3 +-- .../manage-rules/snooze-disable-rules.md | 3 +-- .../kibana-alerting-v2/manage-rules/view-manage-rules.md | 3 +-- .../alerting/kibana-alerting-v2/reduce-noise.md | 3 +-- .../reduce-noise/activation-thresholds.md | 3 +-- .../kibana-alerting-v2/reduce-noise/deactivate-alerts.md | 3 +-- .../alerting/kibana-alerting-v2/reduce-noise/grouping.md | 3 +-- .../kibana-alerting-v2/reduce-noise/maintenance-windows.md | 3 +-- .../alerting/kibana-alerting-v2/reduce-noise/matcher.md | 3 +-- .../kibana-alerting-v2/reduce-noise/no-data-handling.md | 3 +-- .../kibana-alerting-v2/reduce-noise/recovery-thresholds.md | 3 +-- .../kibana-alerting-v2/reduce-noise/rules-on-alerts.md | 3 +-- .../kibana-alerting-v2/reduce-noise/snooze-or-silence.md | 3 +-- .../alerting/kibana-alerting-v2/reduce-noise/throttle.md | 3 +-- explore-analyze/track-and-respond.md | 6 +++--- 44 files changed, 48 insertions(+), 91 deletions(-) diff --git a/explore-analyze/alerting/kibana-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2.md index b3756cf67c..5f62bd7a3d 100644 --- a/explore-analyze/alerting/kibana-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2.md @@ -1,7 +1,6 @@ --- applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Overview of Kibana alerting v2: an ES|QL-based alerting framework with immutable alert events, notification policies, and alert lifecycle tracking." diff --git a/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md b/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md index 9489bcd8dc..d3c46b2977 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md @@ -1,8 +1,7 @@ --- -navigation_title: Field reference for alerting v2 rule and action data +navigation_title: Fields for rule events and actions applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Fields in the {{kib}} alerting v2 `.rule-events` data stream for signals and alerts, episode fields on lifecycle alerts, and action records in `.alert-actions`." @@ -23,7 +22,7 @@ All rules write their signal and alert events to the **rule events index**, impl - **`signal`:** Point-in-time facts you query or chain into other rules. For example, rows a follow-on rule reads from `.rule-events` to build a rule on alert data. These documents do not include `episode.*` fields. - **`alert`:** Lifecycle-tracked episodes in the alert UI: inbox, episode details, and triage. For example, a breach that stays open as an episode until the condition clears. These documents include `episode.*` fields. -Both kinds share the same [base fields](#fields-on-every-signal-and-alert-document). Only `alert` documents add [`episode.*`](#episode-fields-for-alerts-with-lifecycle-tracking) fields. +Both kinds share the same [base fields](#signal-and-alert-document-fields). Only `alert` documents add [`episode.*`](#episode-fields-for-alerts-with-lifecycle-tracking) fields. ### Signal and alert document fields diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules.md index bd7a312dde..b069e2f148 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules.md @@ -1,8 +1,7 @@ --- navigation_title: Author rules applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Create Kibana alerting v2 rules using ES|QL queries from the UI, Discover, or YAML in detect or alert mode." diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md index 496a3e6e83..ba4b73fa41 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md @@ -1,8 +1,7 @@ --- navigation_title: Using Discover applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Convert an ES|QL query from Discover into a Kibana alerting v2 rule with the query pre-populated." diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md index e9e4230eb0..f39c5b8545 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md @@ -1,8 +1,7 @@ --- navigation_title: Using the UI applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Create Kibana alerting v2 rules using the interactive rule creation form with query editor, preview, and YAML toggle." diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-yaml.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-yaml.md index 7f0471dccd..6ec2d3d0b4 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-yaml.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-yaml.md @@ -1,8 +1,7 @@ --- navigation_title: Using YAML applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Define Kibana alerting v2 rules in YAML for version control and infrastructure-as-code workflows, with full field reference." diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/production-considerations.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/production-considerations.md index 033fddc38c..53fc8500a9 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/production-considerations.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/production-considerations.md @@ -1,8 +1,7 @@ --- navigation_title: Production considerations applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Guidance for running Kibana alerting v2 rules in production, including scheduling, query performance, and data retention." diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings.md index 97be381cf1..0e310e5215 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings.md @@ -1,8 +1,7 @@ --- navigation_title: Rule settings applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Overview of Kibana alerting v2 rule settings: schedule, thresholds, no-data handling, grouping, notification policies, and workflows." diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md index 0b4499f1d0..91b8870018 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md @@ -1,8 +1,7 @@ --- navigation_title: Activation and recovery thresholds applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Control when Kibana alerting v2 alerts transition between lifecycle states using consecutive-breach and duration-based thresholds." diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/grouping.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/grouping.md index 48d53ffa9c..c7ac4f2272 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/grouping.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/grouping.md @@ -1,8 +1,7 @@ --- navigation_title: Rule grouping applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Split Kibana alerting v2 alert event generation by fields like host or service so each entity has independent lifecycle tracking." diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/no-data-handling.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/no-data-handling.md index 30fb5772a5..b25f1a86ac 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/no-data-handling.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/no-data-handling.md @@ -1,8 +1,7 @@ --- navigation_title: No-data handling applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Configure Kibana alerting v2 rule behavior when the query returns no results: record no-data, carry forward status, or treat as recovery." diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md index ea700b1ffa..18318c57ed 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md @@ -1,8 +1,7 @@ --- navigation_title: Notification policies applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Notification policies control how and when Kibana alerting v2 alerts reach people and systems, including matching, grouping, throttling, and routing." diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md index a6f3c1fc75..250412760b 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md @@ -1,8 +1,7 @@ --- navigation_title: Create and manage notification policies applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Create, configure, and manage Kibana alerting v2 notification policies, including matching conditions, grouping, throttling, destinations, and snooze." diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md index b3b36cd932..b7a35d97a1 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md @@ -1,8 +1,7 @@ --- navigation_title: How notification policies are evaluated applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "How Kibana alerting v2 notification policies match alert episodes, apply throttling and suppression, and produce dispatch outcomes." diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md index 35c137a187..be646d566d 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md @@ -1,8 +1,7 @@ --- navigation_title: Schedule and lookback applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Configure how often a Kibana alerting v2 rule runs and how far back it looks when evaluating data." diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md index fbe86e5190..7161b3fc55 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md @@ -1,8 +1,7 @@ --- navigation_title: Alerting workflows applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Workflows are automated task sequences used as notification policy destinations and direct rule links in Kibana alerting v2." diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-templates.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-templates.md index fde6915a08..b8316c1424 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-templates.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-templates.md @@ -1,7 +1,6 @@ --- applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Start with pre-configured Kibana alerting v2 rule templates for common monitoring patterns and install pre-built detection rules." diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-types.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-types.md index bedb42770d..73688d1f20 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-types.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-types.md @@ -1,8 +1,7 @@ --- navigation_title: Rule types applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "ES|QL query patterns for Kibana alerting v2 rules: threshold, change detection, ratio, no-data, event rate, percentile, SLO burn rate, and more." diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rules-on-alerts.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rules-on-alerts.md index 35cec6fd10..a4ff0856a6 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rules-on-alerts.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rules-on-alerts.md @@ -1,8 +1,7 @@ --- navigation_title: Rules on alerts applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Write Kibana alerting v2 rules that query alert events for correlation, escalation, and noise reduction across multiple rules." diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/set-rule-data-sources.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/set-rule-data-sources.md index ee6f848964..a256752934 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/set-rule-data-sources.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/set-rule-data-sources.md @@ -1,8 +1,7 @@ --- navigation_title: Set rule data sources applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Configure Kibana alerting v2 rule data sources using ES|QL FROM commands, including index patterns, cross-cluster search, and alert indices." diff --git a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md index b331f973d5..c3e49b8f1f 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md +++ b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md @@ -1,8 +1,7 @@ --- navigation_title: Before you begin applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Prerequisites and setup steps to review before creating Kibana alerting v2 rules." diff --git a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md index cc0a539291..80c7a0f04c 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md +++ b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md @@ -1,8 +1,7 @@ --- navigation_title: Alerting privileges applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Required privileges for creating and managing Kibana alerting v2 rules, notification policies, and alert actions." diff --git a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md index f2a0563ec3..4f5cceb259 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md +++ b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md @@ -1,8 +1,7 @@ --- navigation_title: Alerting setup applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Enable Kibana alerting v2, data streams created for alert events and actions, optional API key cleanup settings, and verification steps." diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts.md index 3b70b88c03..e8a3bcc607 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts.md @@ -1,8 +1,7 @@ --- navigation_title: Manage alerts applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "View, triage, and respond to alerts produced by Kibana alerting v2 rules using the alert inbox." diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md index 232b197e98..e77cffe089 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md @@ -1,8 +1,7 @@ --- navigation_title: Explore alerts and signals in Discover applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Query Kibana alerting v2 alert events in Discover with ES|QL for trend analysis, operational reporting, and on-demand investigation." diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond.md index fb12a0df35..be4a858820 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond.md @@ -1,8 +1,7 @@ --- navigation_title: Investigate and respond applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Use the Kibana alerting v2 alert flyout and detail pages to investigate alert context, review the timeline, and take action." diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md index c5ed551dd8..bb6ccfa5a7 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md @@ -1,8 +1,7 @@ --- navigation_title: Alert actions applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Actions you can take on Kibana alerting v2 alerts, including acknowledge, snooze, deactivate, assign, tag, resolve, and add to cases." diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md index a50a4e87c9..7a5322e665 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md @@ -1,8 +1,7 @@ --- navigation_title: Alert episode details applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Understand Kibana alerting v2 alert episodes across the full lifecycle from first breach to recovery, including states, identity, and status tracking." diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/view-alerts.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/view-alerts.md index 939e9c33c8..6306255ce0 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/view-alerts.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/view-alerts.md @@ -1,8 +1,7 @@ --- navigation_title: View alerts applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Filter, sort, and search Kibana alerting v2 alerts in the alert inbox using quick filters, severity, tags, and custom fields." diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-rules.md b/explore-analyze/alerting/kibana-alerting-v2/manage-rules.md index af47b9bd24..070d1326c1 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-rules.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-rules.md @@ -1,8 +1,7 @@ --- navigation_title: Manage rules applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Navigate Kibana alerting v2 rule management: rules list and details, bulk actions, snooze, and disabling rules." diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-rules/snooze-disable-rules.md b/explore-analyze/alerting/kibana-alerting-v2/manage-rules/snooze-disable-rules.md index 8362237694..97a05ac2e7 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-rules/snooze-disable-rules.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-rules/snooze-disable-rules.md @@ -1,8 +1,7 @@ --- navigation_title: Snooze and disable rules applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Temporarily suppress notifications with per-series snooze or stop rule execution by disabling a Kibana alerting v2 rule." diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md b/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md index e7a9e76928..a15d54e60b 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md @@ -1,8 +1,7 @@ --- navigation_title: View and manage rules applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "View rule details, execution history, related rules, and alerts generated by a Kibana alerting v2 rule." diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md index ea20346b0e..56b7ceb2b1 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md @@ -1,8 +1,7 @@ --- navigation_title: Reduce noise and false positives applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Select the right Kibana alerting v2 feature to reduce noise: thresholds, no-data handling, notification policies, throttling, snooze, rules on alerts, and more." diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/activation-thresholds.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/activation-thresholds.md index e0e8e4370d..a89805351a 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/activation-thresholds.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/activation-thresholds.md @@ -1,8 +1,7 @@ --- navigation_title: Activation thresholds applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Require consecutive breaches or a minimum duration before a Kibana alerting v2 alert episode becomes active, filtering out transient spikes." diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md index 0660f2288c..4ca46c4525 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md @@ -1,8 +1,7 @@ --- navigation_title: Deactivate alerts applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Stop lifecycle processing and notifications for a Kibana alerting v2 alert episode while the rule continues detecting new episodes." diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md index 38cf98b53f..f5d9bf0a2f 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md @@ -1,8 +1,7 @@ --- navigation_title: Notification grouping applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Batch related Kibana alerting v2 alert episodes into fewer notifications using notification policy grouping by host, service, or custom fields." diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md index 699605ca05..8157e2c3d5 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md @@ -1,8 +1,7 @@ --- navigation_title: Maintenance windows applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Schedule periods during which Kibana alerting v2 notifications are paused for planned deployments or recurring maintenance." diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md index 278f90af82..eba6dc05a6 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md @@ -1,8 +1,7 @@ --- navigation_title: Matchers applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Route only matching Kibana alerting v2 alert episodes to notification destinations using KQL matcher conditions on notification policies." diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/no-data-handling.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/no-data-handling.md index 2fa15974c6..6b4bad4830 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/no-data-handling.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/no-data-handling.md @@ -1,8 +1,7 @@ --- navigation_title: No-data handling applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Prevent false recoveries and false alerts when data sources stop reporting by configuring Kibana alerting v2 no-data behavior." diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/recovery-thresholds.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/recovery-thresholds.md index 59ae422f59..66858345b1 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/recovery-thresholds.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/recovery-thresholds.md @@ -1,8 +1,7 @@ --- navigation_title: Recovery thresholds applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Require sustained recovery before a Kibana alerting v2 alert episode returns to inactive, preventing rapid toggling between active and recovered." diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/rules-on-alerts.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/rules-on-alerts.md index b013c90b3f..451ababea2 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/rules-on-alerts.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/rules-on-alerts.md @@ -1,8 +1,7 @@ --- navigation_title: Rules on alerts applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Replace many individual Kibana alerting v2 notifications with a single meaningful one using rules that correlate across alert event data." diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/snooze-or-silence.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/snooze-or-silence.md index 468c38cb91..5492cc6020 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/snooze-or-silence.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/snooze-or-silence.md @@ -1,8 +1,7 @@ --- navigation_title: Snooze or silence applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Temporarily suppress Kibana alerting v2 notifications using per-series snooze, attribute-based silence, or per-episode acknowledgment." diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/throttle.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/throttle.md index 652329f659..b057bd67ff 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/throttle.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/throttle.md @@ -1,8 +1,7 @@ --- navigation_title: Throttling applies_to: - stack: - since: "9.4" + serverless: preview products: - id: kibana description: "Limit Kibana alerting v2 notification frequency by setting a minimum interval between notifications for the same group." diff --git a/explore-analyze/track-and-respond.md b/explore-analyze/track-and-respond.md index 4a537b5331..390f4ebd6f 100644 --- a/explore-analyze/track-and-respond.md +++ b/explore-analyze/track-and-respond.md @@ -29,7 +29,7 @@ The {{es}} platform provides tools to share insights, get notified about importa ## Get notified when it matters with alerting -[Alerting](alerting.md) monitors your {{es}} data continuously and notifies you when specific conditions are met, so you don't have to watch dashboards around the clock. +[Alerting](alerting-overview.md) monitors your {{es}} data continuously and notifies you when specific conditions are met, so you don't have to watch dashboards around the clock. :::{image} /explore-analyze/images/kibana-create-threshold-alert-created.png :alt: Creating a threshold alert rule in Kibana @@ -48,7 +48,7 @@ Elastic solutions extend this foundation with domain-specific rules. Security de Alerts can also trigger [workflows](/explore-analyze/workflows.md) to automate multi-step responses, such as enriching an alert with context, creating a case, or notifying the on-call team. -[Learn more about alerting →](alerting.md) +[Learn more about alerting →](alerting-overview.md) ## Track and coordinate response with cases @@ -81,5 +81,5 @@ For more complex scenarios, [workflows](/explore-analyze/workflows.md) can autom ## Next steps - **[Automatically generate reports](report-and-share/automating-report-generation.md)**: Set up recurring report delivery for your dashboards. -- **[Getting started with alerting](alerting/alerts/alerting-getting-started.md)**: Create your first alert rule and configure notification channels. +- **[Getting started with alerting](alerting/kibana-alerting-v1/alerting-getting-started-v1.md)**: Create your first alert rule and configure notification channels. - **[Create a case](cases/create-cases.md)**: Start tracking an incident and attach relevant alerts and evidence. From d28c44075ff6c9986dafc3bbc2bfbc94a9055e3f Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Mon, 30 Mar 2026 16:43:32 -0400 Subject: [PATCH 10/40] Simplify table lead ins --- .../alert-event-field-reference.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md b/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md index d3c46b2977..0bd9d90b33 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md @@ -12,21 +12,21 @@ description: "Fields in the {{kib}} alerting v2 `.rule-events` data stream for s This page is the field reference for {{kib}} alerting v2 data written to {{es}}. It covers names, types, required fields, and valid values. Use it when you author {{esql}} in Discover, build dashboards or reports, or integrate automation against alert and signal documents. :::{important} -The `.rule-events` and `.alert-actions` data streams are [system indices](/reference/glossary/index.md#glossary-system-index). {{kib}} manages their versioning, retention, and lifecycle. Do not change mappings or index settings for these stream yourself. +The `.rule-events` and `.alert-actions` data streams are [system indices](/reference/glossary/index.md#glossary-system-index). {{kib}} manages their versioning, retention, and lifecycle. Do not change mappings or index settings for these streams yourself. ::: ## Rule events index -All rules write their signal and alert events to the **rule events index**, implemented as the **`.rule-events`** data stream. Each document has a `type` of `signal` or `alert`. +All rules write their signal and alert events to the rule events index, implemented as the `.rule-events` data stream. Each document has a `type` of `signal` or `alert`. -- **`signal`:** Point-in-time facts you query or chain into other rules. For example, rows a follow-on rule reads from `.rule-events` to build a rule on alert data. These documents do not include `episode.*` fields. -- **`alert`:** Lifecycle-tracked episodes in the alert UI: inbox, episode details, and triage. For example, a breach that stays open as an episode until the condition clears. These documents include `episode.*` fields. +- `signal`: Point-in-time facts you query or chain into other rules. For example, rows a follow-on rule reads from `.rule-events` to build a rule on alert data. These documents do not include `episode.*` fields. +- `alert`: Lifecycle-tracked episodes in the alert UI: inbox, episode details, and triage. For example, a breach that stays open as an episode until the condition clears. These documents include `episode.*` fields. Both kinds share the same [base fields](#signal-and-alert-document-fields). Only `alert` documents add [`episode.*`](#episode-fields-for-alerts-with-lifecycle-tracking) fields. ### Signal and alert document fields -The following table lists each top-level field that appears on both `signal` and `alert` documents in **`.rule-events`**. [Episode fields for alerts with lifecycle tracking](#episode-fields-for-alerts-with-lifecycle-tracking) lists additional fields for `alert` rows only. +The table lists top-level fields shared by `signal` and `alert` documents in `.rule-events`. [Episode fields for alerts with lifecycle tracking](#episode-fields-for-alerts-with-lifecycle-tracking) lists additional fields for `alert` rows only. | Field | Type | Required | Description | |---|---|---|---| @@ -42,12 +42,12 @@ The following table lists each top-level field that appears on both `signal` and :::{admonition} Fields not stored as a dedicated column -There is no top-level or nested `duration` field on **`.rule-events`** documents. For triage or reporting, derive duration from [{{esql}} views](manage-alerts/explore-alerts-discover.md), the alert UI, or your own queries over timestamps and episode identifiers. +There is no top-level or nested `duration` field on `.rule-events` documents. For triage or reporting, derive duration from [{{esql}} views](manage-alerts/explore-alerts-discover.md), the alert UI, or your own queries over timestamps and episode identifiers. ::: ### Episode fields for alerts with lifecycle tracking -The table below describes `episode.*` fields on documents in **`.rule-events`** where `type` is `alert`, when {{kib}} is managing that alert’s lifecycle in the alert inbox and related views. `signal` documents do not include an `episode` section. +The table below describes `episode.*` fields on documents in `.rule-events` where `type` is `alert`, when {{kib}} is managing that alert’s lifecycle in the alert inbox and related views. `signal` documents do not include an `episode` section. | Field | Type | Description | |---|---|---| @@ -57,20 +57,20 @@ The table below describes `episode.*` fields on documents in **`.rule-events`** ## Alert actions index -When a user or the system records an action on an alert episode, {{kib}} writes a document to the **alert actions index**, implemented as the **`.alert-actions`** data stream. Each document is one action. The `action.type` field records what happened, for example acknowledge, snooze, tag, fire, or unmatched. +When a user or the system records an action on an alert episode, {{kib}} writes a document to the alert actions index, implemented as the `.alert-actions` data stream. Each document is one action. The `action.type` field records what happened, for example acknowledge, snooze, tag, fire, or unmatched. -Use **`.alert-actions`** for triage history, metrics such as MTTA, and auditing. This stream does not store what your rule query returned on each run. That output exists only in **`.rule-events`**. +Use `.alert-actions` for triage history, metrics such as MTTA, and auditing. This stream does not store what your rule query returned on each run. That output exists only in `.rule-events`. -### Alert action document fields +### Alert action fields -The following table lists fields on each document in **`.alert-actions`**. +The table lists fields available in the alert action documents. | Field | Type | Description | |---|---|---| | `@timestamp` | `date` | When the action was recorded | | `episode.id` | `keyword` | Target episode | | `rule.id` | `keyword` | Rule that owns the episode | -| `action.type` | `keyword` | The action type, for example:
- **`acknowledge`:** User acknowledged the alert.
- **`snooze`:** Notifications snoozed for a period.
- **`tag`:** Tag applied to the alert.
- **`fire`:** Notification or escalation fired for the episode.
- **`unmatched`:** No notification policy matched the episode, so no workflow ran for it under those policies.

For the full set of action types and UI behavior, refer to [Alert actions](manage-alerts/investigate-respond/alert-actions.md). | +| `action.type` | `keyword` | The action type, for example:
- `acknowledge`: User acknowledged the alert.
- `snooze`: Notifications snoozed for a period.
- `tag`: Tag applied to the alert.
- `fire`: Notification or escalation fired for the episode.
- `unmatched`: No notification policy matched the episode, so no workflow ran for it under those policies.

For the full set of action types and UI behavior, refer to [Alert actions](manage-alerts/investigate-respond/alert-actions.md). | ## Related documentation From 0933fbf225e325f80b05096f7d8118aea294d30b Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Mon, 30 Mar 2026 16:53:04 -0400 Subject: [PATCH 11/40] re-adds episode.status_count --- .../alerting/kibana-alerting-v2/alert-event-field-reference.md | 1 + 1 file changed, 1 insertion(+) diff --git a/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md b/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md index 0bd9d90b33..4748601f2f 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md @@ -71,6 +71,7 @@ The table lists fields available in the alert action documents. | `episode.id` | `keyword` | Target episode | | `rule.id` | `keyword` | Rule that owns the episode | | `action.type` | `keyword` | The action type, for example:
- `acknowledge`: User acknowledged the alert.
- `snooze`: Notifications snoozed for a period.
- `tag`: Tag applied to the alert.
- `fire`: Notification or escalation fired for the episode.
- `unmatched`: No notification policy matched the episode, so no workflow ran for it under those policies.

For the full set of action types and UI behavior, refer to [Alert actions](manage-alerts/investigate-respond/alert-actions.md). | +| `episode.status_count` | `long` | Count of consecutive evaluations in the current `episode.status`. Only set when `episode.status` is `pending` or `recovering`.
For example, if the episode stays `pending` for three rule evaluations in a row, the value is `3`. | ## Related documentation From 640efe7f8b9db8140f4647762a9fef1ca2e3767a Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Tue, 14 Apr 2026 15:49:18 -0400 Subject: [PATCH 12/40] Add unified Rules page note from main to create-manage-rules-v1 Made-with: Cursor --- .../alerting/kibana-alerting-v1/create-manage-rules-v1.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md b/explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md index df6c8708c5..64bfa93a33 100644 --- a/explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md +++ b/explore-analyze/alerting/kibana-alerting-v1/create-manage-rules-v1.md @@ -15,6 +15,13 @@ The **{{stack-manage-app}}** > **{{rules-ui}}** UI provides a cross-app view of 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). +::::{note} +:applies_to: {"stack": "ga 9.4+", "serverless": "ga"} + +All of your alerting rules appear in one list on the **Rules** page. Open the page from **{{stack-manage-app}}** > **Alerts and insights** > **{{rules-ui}}**, or from **Manage rules** (or the equivalent link) in {{observability}}, Discover, or Stack Monitoring. Each of these opens the same **Rules** page, where you can view and manage rules. +:::: + + ![Rules page navigation](/explore-analyze/images/kibana-stack-management-rules.png "") **{{rules-ui}}** provides a central place to: From e27659e00367b3b53130f79280af06cc1cc933e0 Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Fri, 17 Apr 2026 15:52:19 -0400 Subject: [PATCH 13/40] Fix --- docs/manifests/alerting-v2.yaml | 70 +++++++++---------- explore-analyze/alerting-overview.md | 2 +- .../alerting/choose-an-alerting-system.md | 4 +- .../alerting/kibana-alerting-v2.md | 14 ++-- .../alert-event-field-reference.md | 2 +- .../kibana-alerting-v2/author-rules.md | 4 +- .../author-rules/create-rules-discover.md | 2 +- .../author-rules/create-rules-ui.md | 2 +- .../author-rules/rule-settings.md | 6 +- .../rule-settings/action-policies.md | 32 +++++++++ .../create-manage-action-policies.md | 46 ++++++++++++ .../how-action-policies-are-evaluated.md} | 12 ++-- .../rule-settings/notification-policies.md | 32 --------- .../create-manage-notification-policies.md | 46 ------------ .../author-rules/rule-settings/workflows.md | 4 +- .../kibana-alerting-v2/before-you-begin.md | 4 +- .../before-you-begin/alerting-privileges.md | 10 +-- .../before-you-begin/set-up.md | 2 +- .../investigate-respond/alert-actions.md | 2 +- .../manage-rules/view-manage-rules.md | 2 +- .../kibana-alerting-v2/reduce-noise.md | 16 ++--- .../reduce-noise/grouping.md | 4 +- .../reduce-noise/matcher.md | 4 +- explore-analyze/toc.yml | 6 +- redirects.yml | 14 ++++ 25 files changed, 178 insertions(+), 164 deletions(-) create mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md rename explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/{notification-policies/how-notification-policies-are-evaluated.md => action-policies/how-action-policies-are-evaluated.md} (71%) delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md diff --git a/docs/manifests/alerting-v2.yaml b/docs/manifests/alerting-v2.yaml index c2d65526c5..94df256ead 100644 --- a/docs/manifests/alerting-v2.yaml +++ b/docs/manifests/alerting-v2.yaml @@ -33,7 +33,7 @@ implementation_prs: summary: > Foundational v2 alerting framework — core rule engine, scheduling and execution architecture, ES|QL-native rule evaluation, alert lifecycle management, dispatcher, - notification policies CRUD and UI, rule authoring UI (standalone and embedded in + action policies CRUD and UI, rule authoring UI (standalone and embedded in Discover), rule management UI, APM instrumentation, and InversifyJS DI wiring. This is an umbrella PR covering ~50 sub-PRs across engine, UI, and infrastructure. author: cnasikas @@ -87,34 +87,34 @@ implementation_prs: - url: https://github.com/elastic/kibana/pull/256527 title: "Store 'unmatched' action for unmatched alert episodes" summary: > - Fixes a dispatcher bug where alert episodes matching no notification policy were + Fixes a dispatcher bug where alert episodes matching no action policy were silently dropped and re-fetched every run. Now persists them with `action_type: 'unmatched'` and reason `'no matching notification policy'`, and adds `unmatched` to the fetch query's INLINE STATS filter. - Affects dispatcher pipeline docs, notification policy evaluation docs, and the + Affects dispatcher pipeline docs, action policy evaluation docs, and the alert actions field reference. author: kdelemme - # --- Notification policies --- + # --- Action policies (docs); implementation paths may still use notification_policy --- - url: https://github.com/elastic/kibana/pull/256940 title: "Make notification policies global with optional rule-label scoping" summary: > - Decouples notification policies from rules. Policies are now global — all NPs are + Decouples notification policies from rules. Policies are now global — all policies are evaluated for every alert episode by default. Rules no longer reference specific policies via `notification_policies: [{ ref: policyId }]`. An optional `rule_labels` field on - the NP scopes it to rules whose `metadata.labels` match. The dispatcher fetches all - NPs every tick via `findAllDecrypted()`. The Step 6 matcher now uses two-phase matching: + the policy scopes it to rules whose `metadata.labels` match. The dispatcher fetches all + policies every tick via `findAllDecrypted()`. The Step 6 matcher now uses two-phase matching: first rule-label scoping (empty `ruleLabels` = catch-all), then KQL episode evaluation. - Affects notification policy schema docs, create/manage how-to, and dispatcher pipeline docs. + Affects action policy schema docs, create/manage how-to, and dispatcher pipeline docs. author: kdelemme - url: https://github.com/elastic/kibana/pull/258010 title: "Add dynamic workflow selection to notification policy form" summary: > - Replaces hardcoded workflow options in the NP form with dynamic search via the + Replaces hardcoded workflow options in the policy form with dynamic search via the `/api/workflows/search` API. Users can now search and select real workflows when - creating or editing a notification policy. Affects create/manage NP how-to docs. + creating or editing a policy. Affects create/manage action policy how-to docs. author: kdelemme - url: https://github.com/elastic/kibana/pull/258917 @@ -124,21 +124,21 @@ implementation_prs: highlighting, autocomplete, and validation. Defines a typed `MatcherContext` schema with field descriptors (`MATCHER_CONTEXT_FIELDS`) so the input auto-suggests valid field names: `episode_status`, `rule.name`, `rule.labels`, and `data.*` fields. - Affects any doc describing the notification policy matcher field. + Affects any doc describing the action policy matcher field. author: kdelemme - url: https://github.com/elastic/kibana/pull/258862 title: "[Alerting v2] Add bulk actions for notification policies" summary: > - Adds bulk enable, disable, snooze, and delete actions to the notification policies + Adds bulk enable, disable, snooze, and delete actions to the action policies list page, including confirmation modals for destructive operations. - Affects create/manage NP how-to and any NP management reference. + Affects create/manage action policy how-to and any policy management reference. author: kdelemme - url: https://github.com/elastic/kibana/pull/257377 title: "[Alerting V2] mark np api keys for invalidation" summary: > - Introduces a saved object type for pending API key invalidations. When a notification + Introduces a saved object type for pending API key invalidations. When an action policy is updated, the old API key is marked for invalidation and a new one is created. When deleted, the API key is marked for invalidation. Related to PR #258094 which schedules the actual invalidation task. @@ -380,11 +380,11 @@ entries: • PR #257324 — preview chart added to rule form (Lens histogram showing matching row counts over time for evaluation and recovery previews). create-rules-ui.md should describe this panel. - See separate entries for notification-policies pages, which track additional PRs. + See separate entries for action-policies pages, which track additional PRs. - - id: alerting-v2-notification-policies + - id: alerting-v2-action-policies content_type: procedural - docs_file: explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md + docs_file: explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 @@ -399,21 +399,21 @@ entries: doc_set: serverless: preview notes: > - Overview page for notification policies. Several significant implementation changes - affect the conceptual description of what NPs are and how they work: - • PR #256940 — NPs are now global, not rule-scoped. The concept page must drop any - description of rules referencing specific NPs by ID. Scoping is now done via - `rule_labels` on the NP itself. - • PR #256527 — describes what happens when no NP matches an episode (`unmatched`). + Overview page for action policies. Several significant implementation changes + affect the conceptual description of what policies are and how they work: + • PR #256940 — Policies are now global, not rule-scoped. The concept page must drop any + description of rules referencing specific policies by ID. Scoping is now done via + `rule_labels` on the policy itself. + • PR #256527 — describes what happens when no policy matches an episode (`unmatched`). • PR #258917 — matcher is now a KQL field with autocomplete; the context schema (`episode_status`, `rule.name`, `rule.labels`, `data.*`) is worth documenting here. - • PR #258862 — bulk enable/disable/snooze/delete now available in the NP list UI. + • PR #258862 — bulk enable/disable/snooze/delete now available in the policy list UI. • PR #258010 — workflow selection is dynamic (search-based); update any description - of the workflow field in the NP form. + of the workflow field in the policy form. - - id: alerting-v2-create-notification-policies + - id: alerting-v2-create-action-policies content_type: procedural - docs_file: explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md + docs_file: explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 @@ -428,18 +428,18 @@ entries: doc_set: serverless: preview notes: > - CRUD how-to for notification policies. + CRUD how-to for action policies. • PR #256940 — schema change: remove any reference to `notification_policies` on rules. - Add documentation for the new `rule_labels` field (scoping NPs to specific rules). + Add documentation for the new `rule_labels` field (scoping policies to specific rules). • PR #258010 — workflow selector is now a dynamic search field, not a static dropdown. • PR #258862 — document bulk actions (enable, disable, snooze, delete) from the list page. - • PR #257377 and #258094 — API keys are automatically managed; when a NP is updated or + • PR #257377 and #258094 — API keys are automatically managed; when a policy is updated or deleted, the old key is marked for invalidation. May be worth a note in an API key section or production guidance callout. - - id: alerting-v2-notification-policies-eval + - id: alerting-v2-action-policies-eval content_type: conceptual - docs_file: explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md + docs_file: explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 @@ -454,12 +454,12 @@ entries: serverless: preview notes: > Documents the 10-step dispatcher pipeline. Three PRs change the pipeline logic: - • PR #256940 — Step 4 now fetches ALL notification policies via `findAllDecrypted()`, + • PR #256940 — Step 4 now fetches ALL action policies via `findAllDecrypted()`, not just those referenced by rules. Step 6 (evaluate matchers) now uses two-phase matching: (1) check `rule_labels` scoping (empty = catch-all), then (2) evaluate the KQL episode matcher. Update the step descriptions accordingly. • PR #256527 — Step 10 outcomes table is missing `unmatched` (episodes with no matching - NP). Add: `unmatched` / "Episode did not match any notification policy". + policy). Add: `unmatched` / user-facing explanation (stored reason may still be `no matching notification policy`). • PR #258917 — matcher is a KQL expression evaluated in-process. The `MatcherContext` schema now has named fields with autocomplete: `episode_status`, `rule.name`, `rule.labels`, `data.*`. Update Step 6 to reflect the available matcher fields. @@ -651,7 +651,7 @@ entries: serverless: preview notes: > How to deactivate (and reactivate) alert episodes. PR #256527 changes dispatcher - behavior: episodes that are deactivated and also unmatched by any NP now receive + behavior: episodes that are deactivated and also unmatched by any policy now receive an `unmatched` action record in addition to the deactivation. Review if this page describes what happens to deactivated episodes in the dispatcher pipeline. diff --git a/explore-analyze/alerting-overview.md b/explore-analyze/alerting-overview.md index 728afcb708..09a26399ec 100644 --- a/explore-analyze/alerting-overview.md +++ b/explore-analyze/alerting-overview.md @@ -36,7 +36,7 @@ stack: preview 9.4 serverless: preview ``` -Kibana alerting v2 is a redesigned alerting framework built on ES|QL. You write the query that defines what to detect and what data each alert carries. V2 introduces notification policies for centralized notification control, per-series snooze, alert lifecycle tracking with episodes, and the ability to write rules on alerts for correlation and escalation. +Kibana alerting v2 is a redesigned alerting framework built on ES|QL. You write the query that defines what to detect and what data each alert carries. V2 introduces action policies for centralized notification control, per-series snooze, alert lifecycle tracking with episodes, and the ability to write rules on alerts for correlation and escalation. Kibana alerting v2 runs alongside Kibana alerting v1. There is no forced migration. diff --git a/explore-analyze/alerting/choose-an-alerting-system.md b/explore-analyze/alerting/choose-an-alerting-system.md index 0b8378782f..993b572260 100644 --- a/explore-analyze/alerting/choose-an-alerting-system.md +++ b/explore-analyze/alerting/choose-an-alerting-system.md @@ -32,7 +32,7 @@ If you already know which alerting system you are using, go directly to [Kibana | **Best for** | Teams using built-in rule types with form-based setup | Teams that need full control over detection and notification routing | Custom alerting logic requiring scripting | | **Rule definition** | Select a rule type and fill in parameters | Write an ES\|QL query | Write a JSON watch definition | | **Alert data** | Updated in place; limited queryability | Immutable, append-only events queryable with ES\|QL in Discover | Watch history index | -| **Notifications** | Configured per action on each rule | Centralized notification policies, reusable across rules | Action-level throttling and conditions | +| **Notifications** | Configured per action on each rule | Centralized action policies, reusable across rules | Action-level throttling and conditions | | **Noise reduction** | Snooze per rule, maintenance windows | Per-series snooze, per-episode acknowledgment, activation thresholds, matcher-based routing, rules on alerts | Action conditions and throttling | | **Availability** | All deployments | {{stack}} 9.4+ | Self-managed and {{ech}} only | @@ -46,7 +46,7 @@ Choose Kibana alerting v1 if you want broad rule type coverage out of the box an ## Kibana alerting v2 -Kibana alerting v2 is built on ES|QL. You write the query that defines what to detect and what data each alert carries. Notification policies control routing, grouping, and throttling independently of rules, and alert events are stored as queryable data in standard {{es}} indices. +Kibana alerting v2 is built on ES|QL. You write the query that defines what to detect and what data each alert carries. Action policies control routing, grouping, and throttling independently of rules, and alert events are stored as queryable data in standard {{es}} indices. Choose Kibana alerting v2 if you need flexible detection logic, queryable alert history, centralized notification management, or cross-rule correlation. diff --git a/explore-analyze/alerting/kibana-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2.md index 5f62bd7a3d..e4c7d29261 100644 --- a/explore-analyze/alerting/kibana-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2.md @@ -3,7 +3,7 @@ applies_to: serverless: preview products: - id: kibana -description: "Overview of Kibana alerting v2: an ES|QL-based alerting framework with immutable alert events, notification policies, and alert lifecycle tracking." +description: "Overview of Kibana alerting v2: an ES|QL-based alerting framework with immutable alert events, action policies, and alert lifecycle tracking." --- # Kibana alerting v2 [alerting-overview-v2] @@ -28,11 +28,11 @@ Episodes Series : A grouped time series of signals for a given rule and grouping key. Identified by a `group_hash` computed from the rule ID and grouping field values. Series are the unit for per-group snooze and recovery detection. -Notification policies +Action policies : Standalone, reusable entities that control how and when alerts reach people and systems. Policies define matching conditions, grouping, throttling, and routing to workflow destinations. One policy can apply across multiple rules. Workflows -: User-defined automated sequences of tasks for delivering notifications and integrating with external systems. Notification policies reference workflows as destinations. +: User-defined automated sequences of tasks for delivering notifications and integrating with external systems. Action policies reference workflows as destinations. ## How Kibana alerting v2 differs from Kibana alerting v1 @@ -41,7 +41,7 @@ Workflows | Query language | Rule type defines what data is evaluated | You write the ES\|QL query directly | | Alert persistence | Mutable documents updated in place | Immutable, append-only event documents | | Alert queryability | Limited; alerts live in system indices | Full ES\|QL access in Discover and dashboards | -| Notification control | Per-action frequency and throttle on each rule | Notification policies: centralized matching, grouping, throttling, suppression | +| Notification control | Per-action frequency and throttle on each rule | Action policies: centralized matching, grouping, throttling, suppression | | Noise reduction | Snooze per rule; limited grouping | Per-series snooze, acknowledgment per episode, activation thresholds, matcher-based routing, rules on alerts | | Rule definition | Plugin-registered rule types with fixed schemas | ES\|QL queries with `KEEP` to control what data is stored | | Recovery detection | Rule-type specific | Group hash comparison between consecutive evaluations | @@ -54,7 +54,7 @@ Detect mode (`kind: signal`) : The rule produces signal events for every query result. Signals are written to the alert events data stream and are available for exploration in Discover, but no lifecycle tracking or notifications occur. Use detect mode for broad monitoring with zero noise. Alert mode (`kind: alert`) -: The rule produces alert events with full lifecycle management. Alerts transition through episode states, trigger notification policies, and support triage actions like acknowledge and snooze. Use alert mode when you need actionable alerts. +: The rule produces alert events with full lifecycle management. Alerts transition through episode states, trigger action policies, and support triage actions like acknowledge and snooze. Use alert mode when you need actionable alerts. You can switch a rule between modes at any time. Switching from alert to detect stops lifecycle tracking and notifications but continues producing signal events. @@ -65,7 +65,7 @@ From your perspective, a rule does the following on each run: - It evaluates your ES|QL query over the lookback window you configured. - It appends new rows to the `.rule-events` data stream: signal rows in detect mode, or signal and alert rows with episode fields in alert mode. - In alert mode, it updates episode lifecycle (for example pending, active, recovering) according to your activation, recovery, and no-data settings. -- When an episode is ready for notifications, notification policies decide whether and how it is routed to workflows. Policies apply after lifecycle and thresholds; a short delay between “episode ready” and “notification sent” is normal when many policies or episodes are in play. +- When an episode is ready for notifications, action policies decide whether and how it is routed to workflows. Policies apply after lifecycle and thresholds; a short delay between “episode ready” and “notification sent” is normal when many policies or episodes are in play. You can inspect raw history in Discover on `.rule-events` at any time, independent of whether notifications were sent. @@ -74,7 +74,7 @@ You can inspect raw history in Discover on `.rule-events` at any time, independe - Write rules using any ES|QL query pattern: thresholds, change detection, ratios, no-data, SLO burn rate, and more. - Create rules from the UI, from Discover, or with YAML for infrastructure-as-code workflows. - Preview rule results against existing data before saving. -- Use notification policies to control routing, grouping, and throttling independently of rules. +- Use action policies to control routing, grouping, and throttling independently of rules. - Investigate alerts in a dedicated inbox with filtering by status, severity, and custom fields. - Explore alert history in Discover using ES|QL for trend analysis and operational reporting. - Write rules on alerts: use the alert events index as a data source for correlation and escalation patterns. diff --git a/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md b/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md index 4748601f2f..6755b942c8 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md @@ -70,7 +70,7 @@ The table lists fields available in the alert action documents. | `@timestamp` | `date` | When the action was recorded | | `episode.id` | `keyword` | Target episode | | `rule.id` | `keyword` | Rule that owns the episode | -| `action.type` | `keyword` | The action type, for example:
- `acknowledge`: User acknowledged the alert.
- `snooze`: Notifications snoozed for a period.
- `tag`: Tag applied to the alert.
- `fire`: Notification or escalation fired for the episode.
- `unmatched`: No notification policy matched the episode, so no workflow ran for it under those policies.

For the full set of action types and UI behavior, refer to [Alert actions](manage-alerts/investigate-respond/alert-actions.md). | +| `action.type` | `keyword` | The action type, for example:
- `acknowledge`: User acknowledged the alert.
- `snooze`: Notifications snoozed for a period.
- `tag`: Tag applied to the alert.
- `fire`: Notification or escalation fired for the episode.
- `unmatched`: No action policy matched the episode, so no workflow ran for it under those policies.

For the full set of action types and UI behavior, refer to [Alert actions](manage-alerts/investigate-respond/alert-actions.md). | | `episode.status_count` | `long` | Count of consecutive evaluations in the current `episode.status`. Only set when `episode.status` is `pending` or `recovering`.
For example, if the episode stays `pending` for three rule evaluations in a row, the value is `3`. | ## Related documentation diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules.md index b069e2f148..cbc522e870 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules.md @@ -16,7 +16,7 @@ A Kibana alerting v2 rule defines what to look for in your data. It evaluates so Every rule operates in one of two modes: - **Detect mode** (`kind: signal`): produces signal events for exploration and analysis. No lifecycle tracking, no notifications. Use detect mode for broad monitoring without noise. -- **Alert mode** (`kind: alert`): produces alert events with full lifecycle management. Alerts transition through episode states (`inactive` → `pending` → `active` → `recovering` → `inactive`), trigger notification policies, and support triage actions. Use alert mode when conditions require human response. +- **Alert mode** (`kind: alert`): produces alert events with full lifecycle management. Alerts transition through episode states (`inactive` → `pending` → `active` → `recovering` → `inactive`), trigger action policies, and support triage actions. Use alert mode when conditions require human response. You can switch between modes at any time from the rule list or rule details page. @@ -41,7 +41,7 @@ A rule definition includes: | **State transition** | Activation and recovery thresholds (alert mode only) | | **Recovery policy** | How recovery is detected (alert mode only) | | **No-data handling** | Behavior when the query returns no results | -| **Notification policies** | References to policies that control how alerts are routed | +| **Action policies** | Policies that control how alerts are routed (global; not stored on the rule) | | **Workflows** | Direct workflow links for rule-triggered actions | ## ES|QL query structure diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md index ba4b73fa41..aba75d9ce7 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md @@ -26,7 +26,7 @@ While you prototype in Discover, each row in the result table is one document in - Schedule (execution interval and lookback window). - Grouping fields if applicable. - Alert delay, recovery, and no-data settings for alert mode. - - Notification policies to link. + - Action policies (configured globally under Action Policies). 7. Optionally preview the rule results. 8. Click Save. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md index f39c5b8545..7255feb8c8 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md @@ -46,7 +46,7 @@ When the rule is in alert mode, additional settings are available: - Alert delay (activation threshold): require the condition to be met a specified number of consecutive times or for a minimum duration before an alert becomes active. - Recovery conditions: define how recovery is detected. - No-data handling: configure behavior when the query returns no results. -- Notification policies: policies are global. Scoping uses rule labels and matchers on the policy side, not links from this form. Configure policies under Notification Policies. For an overview, refer to [Notification policies](rule-settings/notification-policies.md). +- Action policies: policies are global. Scoping uses rule labels and matchers on the policy side, not links from this form. Configure policies under Action Policies. For an overview, refer to [Action policies](rule-settings/action-policies.md). - Tags: add free-form tags for filtering and organization. - Investigation guide: attach a runbook or investigation guide to the rule. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings.md index 0e310e5215..4255f4e92b 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings.md @@ -4,7 +4,7 @@ applies_to: serverless: preview products: - id: kibana -description: "Overview of Kibana alerting v2 rule settings: schedule, thresholds, no-data handling, grouping, notification policies, and workflows." +description: "Overview of Kibana alerting v2 rule settings: schedule, thresholds, no-data handling, grouping, action policies, and workflows." --- # Kibana alerting v2 rule settings [rule-settings-v2] @@ -27,9 +27,9 @@ The [schedule and lookback](rule-settings/schedule-and-lookback.md) settings con [Grouping](rule-settings/grouping.md) splits alert event generation by one or more fields. Each unique combination produces its own alert series with independent lifecycle tracking. -## Notification policies +## Action policies -[Notification policies](rule-settings/notification-policies.md) are standalone entities that control how alerts reach people and systems. +[Action policies](rule-settings/action-policies.md) are standalone entities that control how alerts reach people and systems. ## Workflows diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md new file mode 100644 index 0000000000..7c831a52b7 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md @@ -0,0 +1,32 @@ +--- +navigation_title: Action policies +applies_to: + serverless: preview +products: + - id: kibana +description: "Action policies control how and when Kibana alerting v2 alerts reach people and systems, including matching, grouping, throttling, and routing." +--- + +# Kibana alerting v2 action policies [action-policies-v2] + +An action policy defines how and when alerts reach people and systems. In Kibana alerting v2, action policies are **global** saved objects: they are not attached to individual rules. Which rules a policy applies to is determined by **`rule_labels`** on the policy and by the episode matcher, not by references from the rule. + +## Compare Kibana alerting v1 and v2 action policies + +| | Kibana alerting v1 | Kibana alerting v2 | +|---|---|---| +| **Scope** | Per-rule connectors and actions on the rule | **Global** action policies. Rules do not reference specific policies | +| **Matching** | Rule execution drives connector runs | **`rule_labels`** scoping on the policy, then KQL episode matching | +| **Matcher context** | N/A (rule-centric) | Typed fields including `episode_status`, `rule.name`, `rule.labels`, and `data.*` | + +## How action policies apply to rules + +Action policies are **global**. Rules do not store or reference a list of action policies. + +- **Scoping** is expressed on the policy itself using **`rule_labels`**. Only episodes for rules whose labels satisfy the policy’s label selector are candidates for that policy. +- After label scoping, the policy’s **KQL episode matcher** runs against the typed matcher context (for example `episode_status`, `rule.name`, `rule.labels`, and fields under `data.*`). + +## Learn more + +- [Create and manage action policies](action-policies/create-manage-action-policies.md) +- [How action policies are evaluated](action-policies/how-action-policies-are-evaluated.md) diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md new file mode 100644 index 0000000000..b9692166a0 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md @@ -0,0 +1,46 @@ +--- +navigation_title: Create and manage action policies +applies_to: + serverless: preview +products: + - id: kibana +description: "Create, configure, and manage Kibana alerting v2 action policies, including matching conditions, grouping, throttling, destinations, and snooze." +--- + +# Create and manage Kibana alerting v2 action policies [create-manage-action-policies-v2] + +Create action policies to control which alerts trigger notifications, how alerts are grouped, how frequently notifications are sent, and where they are routed. Policies are **global**: you create and edit them from the **Action Policies** area, not from the rule form. Rules do not “link” to policies. Scoping is defined on the policy with **`rule_labels`** and matchers. Refer to [Action policies](../action-policies.md). + +## Create an action policy + +1. Navigate to **Management > Alerts and Insights > Rules V2 > Action Policies**. +2. Click **Create policy**. +3. Configure the policy settings: matching, grouping, throttling, destinations, and optional snooze. +4. Click **Save**. + +## Policy list columns + +| Column | Description | +|---|---| +| **Name** | Policy display name | +| **Status** | Whether the policy is active | +| **Rule labels** | Label selector used to scope which rules this policy can apply to | +| **Last updated** | Last save time | + +There is **no “linked rule count”** in the global model. Policies are not attached to a fixed set of rules. Use **rule labels** and matcher behavior to understand effective coverage. For the evaluation flow, refer to [How action policies are evaluated](how-action-policies-are-evaluated.md). + +## Destinations + +Destinations route matching episodes to workflows and channels. Instead of choosing from a static list, the UI provides a **search field** that queries available workflows through the **`/api/workflows/search`** endpoint. Type to search and select the workflow to use for this policy. + +## Snooze and maintenance + +You can snooze a policy for a defined window so that it does not dispatch notifications during that period. + +::::{important} Production considerations +When you **update** or **delete** an action policy, API keys used for execution are **invalidated** by a background task named `invalidateApiKeysTask`. Allow for brief propagation delay before new keys are used for dispatch. For intervals and delays, refer to [Set up](../../../before-you-begin/set-up.md). +:::: + +## Bulk actions + +On the action policies list, select one or more policies to **enable**, **disable**, or **delete** in bulk. **Select all** selects every policy on the current page of results. Clear the selection before changing filters if you need a different set. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md similarity index 71% rename from explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md rename to explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md index b7a35d97a1..0cba526207 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md @@ -1,15 +1,15 @@ --- -navigation_title: How notification policies are evaluated +navigation_title: How action policies are evaluated applies_to: serverless: preview products: - id: kibana -description: "How Kibana alerting v2 notification policies match alert episodes, apply throttling and suppression, and produce dispatch outcomes." +description: "How Kibana alerting v2 action policies match alert episodes, apply throttling and suppression, and produce dispatch outcomes." --- -# How Kibana alerting v2 notification policies are evaluated [how-notification-policies-evaluated-v2] +# How Kibana alerting v2 action policies are evaluated [how-action-policies-evaluated-v2] -Notification policies are separate from rules. After a rule runs and produces or updates alert episodes, the system decides which policies apply, whether notifications should go out, and which workflows receive them. You configure policies once. They can apply to many rules. +Action policies are separate from rules. After a rule runs and produces or updates alert episodes, the system decides which policies apply, whether notifications should go out, and which workflows receive them. You configure policies once. They can apply to many rules. ## How policies are matched to episodes @@ -24,7 +24,7 @@ An episode can match zero, one, or many policies. If it matches none, notificati For episodes that match a policy, the system applies suppression if configured, grouping for how messages are batched, and throttling for the minimum time between notifications for the same group. Then it sends notifications to the workflow destinations you configured on the policy. -Order matters: Lifecycle thresholds and no-data behavior on the rule run before notification policies. Policies only affect routing and delivery, not whether rows are written to `.rule-events`. +Order matters: Lifecycle thresholds and no-data behavior on the rule run before action policies. Policies only affect routing and delivery, not whether rows are written to `.rule-events`. ## Possible outcomes @@ -33,7 +33,7 @@ Order matters: Lifecycle thresholds and no-data behavior on the rule run before | dispatched | Notifications were sent according to the policy | | throttled | Delivery was suppressed because throttling rules said to wait | | suppressed | The episode was suppressed before a notification went out, for example by an active suppression | -| unmatched | No notification policy matched this episode, so no workflow ran for it under these policies | +| unmatched | No action policy matched this episode, so no workflow ran for it under these policies | | error | Processing failed. Check {{kib}} logs and any health indicators your team uses | Notifications can arrive shortly after an episode becomes eligible. Heavy load or many policies can add noticeable delay. If something seems stuck, verify matchers, throttling, maintenance windows, and that the episode matches at least one policy. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md deleted file mode 100644 index 18318c57ed..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -navigation_title: Notification policies -applies_to: - serverless: preview -products: - - id: kibana -description: "Notification policies control how and when Kibana alerting v2 alerts reach people and systems, including matching, grouping, throttling, and routing." ---- - -# Kibana alerting v2 notification policies [notification-policies-v2] - -A notification policy defines how and when alerts reach people and systems. In Kibana alerting v2, notification policies are **global** saved objects: they are not attached to individual rules. Which rules a policy applies to is determined by **`rule_labels`** on the policy and by the episode matcher, not by references from the rule. - -## Compare Kibana alerting v1 and v2 notification policies - -| | Kibana alerting v1 | Kibana alerting v2 | -|---|---|---| -| **Scope** | Per-rule connectors and actions on the rule | **Global** notification policies. Rules do not reference specific policies | -| **Matching** | Rule execution drives connector runs | **`rule_labels`** scoping on the policy, then KQL episode matching | -| **Matcher context** | N/A (rule-centric) | Typed fields including `episode_status`, `rule.name`, `rule.labels`, and `data.*` | - -## How notification policies apply to rules - -Notification policies are **global**. Rules do not store or reference a list of notification policies. - -- **Scoping** is expressed on the policy itself using **`rule_labels`**. Only episodes for rules whose labels satisfy the policy’s label selector are candidates for that policy. -- After label scoping, the policy’s **KQL episode matcher** runs against the typed matcher context (for example `episode_status`, `rule.name`, `rule.labels`, and fields under `data.*`). - -## Learn more - -- [Create and manage notification policies](notification-policies/create-manage-notification-policies.md) -- [How notification policies are evaluated](notification-policies/how-notification-policies-are-evaluated.md) diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md deleted file mode 100644 index 250412760b..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -navigation_title: Create and manage notification policies -applies_to: - serverless: preview -products: - - id: kibana -description: "Create, configure, and manage Kibana alerting v2 notification policies, including matching conditions, grouping, throttling, destinations, and snooze." ---- - -# Create and manage Kibana alerting v2 notification policies [create-manage-notification-policies-v2] - -Create notification policies to control which alerts trigger notifications, how alerts are grouped, how frequently notifications are sent, and where they are routed. Policies are **global**: you create and edit them from the **Notification Policies** area, not from the rule form. Rules do not “link” to policies. Scoping is defined on the policy with **`rule_labels`** and matchers. Refer to [Notification policies](../notification-policies.md). - -## Create a notification policy - -1. Navigate to **Management > Alerts and Insights > Rules V2 > Notification Policies**. -2. Click **Create policy**. -3. Configure the policy settings: matching, grouping, throttling, destinations, and optional snooze. -4. Click **Save**. - -## Policy list columns - -| Column | Description | -|---|---| -| **Name** | Policy display name | -| **Status** | Whether the policy is active | -| **Rule labels** | Label selector used to scope which rules this policy can apply to | -| **Last updated** | Last save time | - -There is **no “linked rule count”** in the global model. Policies are not attached to a fixed set of rules. Use **rule labels** and matcher behavior to understand effective coverage. For the evaluation flow, refer to [How notification policies are evaluated](how-notification-policies-are-evaluated.md). - -## Destinations - -Destinations route matching episodes to workflows and channels. Instead of choosing from a static list, the UI provides a **search field** that queries available workflows through the **`/api/workflows/search`** endpoint. Type to search and select the workflow to use for this policy. - -## Snooze and maintenance - -You can snooze a policy for a defined window so that it does not dispatch notifications during that period. - -::::{important} Production considerations -When you **update** or **delete** a notification policy, API keys used for execution are **invalidated** by a background task named `invalidateApiKeysTask`. Allow for brief propagation delay before new keys are used for dispatch. For intervals and delays, refer to [Set up](../../../before-you-begin/set-up.md). -:::: - -## Bulk actions - -On the notification policies list, select one or more policies to **enable**, **disable**, or **delete** in bulk. **Select all** selects every policy on the current page of results. Clear the selection before changing filters if you need a different set. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md index 7161b3fc55..ce14995058 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md @@ -4,9 +4,9 @@ applies_to: serverless: preview products: - id: kibana -description: "Workflows are automated task sequences used as notification policy destinations and direct rule links in Kibana alerting v2." +description: "Workflows are automated task sequences used as action policy destinations and direct rule links in Kibana alerting v2." --- # Kibana alerting v2 workflows [workflows-v2] -Workflows are user-defined automated sequences of tasks for actions, notifications, and external integrations. In Kibana alerting v2, workflows serve as the destinations for notification policies and can also be linked directly to rules. +Workflows are user-defined automated sequences of tasks for actions, notifications, and external integrations. In Kibana alerting v2, workflows serve as the destinations for action policies and can also be linked directly to rules. diff --git a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md index c3e49b8f1f..89b5af9730 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md +++ b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md @@ -18,7 +18,7 @@ To use Kibana alerting v2, you need: - {{stack}} 9.4 or later. - ES|QL knowledge. Kibana alerting v2 rules are defined using ES|QL queries. Familiarity with ES|QL syntax, aggregations, and the `STATS`, `WHERE`, `EVAL`, and `KEEP` commands is essential. Refer to the [ES|QL reference](elasticsearch://reference/query-languages/esql.md) for details. - Data indexed in {{es}}. Your source data must be indexed and accessible from the cluster where you create rules, such as logs, metrics, traces, or alert events from other rules. -- Appropriate privileges. You need Kibana privileges to create and manage rules, notification policies, and workflows. Refer to [Alerting privileges](before-you-begin/alerting-privileges.md) for details. +- Appropriate privileges. You need Kibana privileges to create and manage rules, action policies, and workflows. Refer to [Alerting privileges](before-you-begin/alerting-privileges.md) for details. ## Key differences from Kibana alerting v1 @@ -26,7 +26,7 @@ If you are coming from Kibana alerting v1, note these differences: - You write the query. Instead of selecting a rule type and filling in parameters, you write an ES|QL query that defines exactly what to look for and what data to include in each alert event. - Alerts are immutable. Each time a rule runs, it appends new event documents rather than updating existing ones. This gives you a full history of every run. -- Notifications are separate from rules. Instead of configuring actions on each rule, you create notification policies that match alerts and route them to workflow destinations. One policy can serve many rules. +- Notifications are separate from rules. Instead of configuring actions on each rule, you create action policies that match alerts and route them to workflow destinations. One policy can serve many rules. - Snooze is per series, not per rule. You can snooze notifications for a specific host or service without silencing the entire rule. - Alert data is queryable. Alert events are stored in standard {{es}} indices and can be queried with ES|QL in Discover, used in dashboards, or fed to other rules. diff --git a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md index 80c7a0f04c..10e68a31aa 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md +++ b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md @@ -4,7 +4,7 @@ applies_to: serverless: preview products: - id: kibana -description: "Required privileges for creating and managing Kibana alerting v2 rules, notification policies, and alert actions." +description: "Required privileges for creating and managing Kibana alerting v2 rules, action policies, and alert actions." --- # Kibana alerting v2 privileges [alerting-privileges-v2] @@ -22,9 +22,9 @@ To create, edit, and manage Kibana alerting v2 rules, you need: Rule execution uses the API key of the user who created or last updated the rule. This means the rule runs with the privileges of that user. If the user's privileges change, rule execution reflects those changes. -### Notification policy management +### Action policy management -To create and manage notification policies, you need: +To create and manage action policies, you need: - **{{kib}} feature privilege**: `Rules V2` with create or edit access. - **Workflow permissions**: To add a workflow as a destination on a policy, you need permissions for that workflow. This prevents privilege escalation through policy configuration. @@ -42,11 +42,11 @@ Because Kibana alerting v2 alert events are stored in standard {{es}} indices, a ## Space boundaries -Rule and notification policy management respects {{kib}} space boundaries. Rules created in one space are not visible in another. Alert events are indexed globally, but UI access is filtered by space. +Rule and action policy management respects {{kib}} space boundaries. Rules created in one space are not visible in another. Alert events are indexed globally, but UI access is filtered by space. ## API key management -Rules and notification policies use API keys for execution: +Rules and action policies use API keys for execution: - An API key is created when a rule or policy is saved. - The API key inherits the privileges of the user who created it. diff --git a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md index 4f5cceb259..faa367167b 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md +++ b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md @@ -26,7 +26,7 @@ No manual index configuration is required. The system creates these data streams ## {{kib}} advanced settings -Optional `kibana.yml` settings control how often {{kib}} cleans up API keys for notification policies after a policy is updated or deleted: +Optional `kibana.yml` settings control how often {{kib}} cleans up API keys for action policies after a policy is updated or deleted: | Setting | Default | Purpose | |---|---|---| diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md index bb6ccfa5a7..3cc9e3a4f4 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md @@ -29,7 +29,7 @@ The `action.type` field identifies what happened. Common values include: | `assign` | Assignment changed | | `tag` | Tag applied to the alert (recorded action) | | `resolve` | Episode or alert resolved | -| `unmatched` | No notification policy matched the episode, so no workflow ran for it under those policies | +| `unmatched` | No action policy matched the episode, so no workflow ran for it under those policies | The `untag` action type is not used. Tagging is recorded with the `tag` action type. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md b/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md index a15d54e60b..3a5483a821 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md @@ -23,7 +23,7 @@ Typical columns include: - Type: Rule type, such as detect versus alert mode where applicable. - Schedule: How often the rule runs. - Last run: Last execution time and status. -- Tags: Labels for filtering and notification policy scoping. +- Tags: Labels for filtering and action policy scoping. - Enabled: Whether the rule is active. Exact columns can vary by release. Use column controls if your build exposes them. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md index 56b7ceb2b1..8987d6520a 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md @@ -4,12 +4,12 @@ applies_to: serverless: preview products: - id: kibana -description: "Select the right Kibana alerting v2 feature to reduce noise: thresholds, no-data handling, notification policies, throttling, snooze, rules on alerts, and more." +description: "Select the right Kibana alerting v2 feature to reduce noise: thresholds, no-data handling, action policies, throttling, snooze, rules on alerts, and more." --- # Reduce {{kib}} alerting v2 noise and false positives [reduce-noise-v2] -{{kib}} alerting v2 offers many ways to reduce noise, each applied at a different stage, from the {{esql}} query and lifecycle thresholds through notification policies, throttling, and manual controls. Selecting the wrong lever wastes effort and can hide real problems. This page helps you match a situation to a mechanism and explains how mechanisms combine in order so you can use them deliberately. +{{kib}} alerting v2 offers many ways to reduce noise, each applied at a different stage, from the {{esql}} query and lifecycle thresholds through action policies, throttling, and manual controls. Selecting the wrong lever wastes effort and can hide real problems. This page helps you match a situation to a mechanism and explains how mechanisms combine in order so you can use them deliberately. If multiple rows in the table apply, refer to [Using them together](#using-them-together). @@ -23,7 +23,7 @@ If multiple rows in the table apply, refer to [Using them together](#using-them- | The query returns no rows and no_data or recovery behavior is misleading | [No-data handling](reduce-noise/no-data-handling.md) | Configures how empty results are interpreted so gaps do not look like false recoveries or false alerts | | Notifications repeat for the same group on every evaluation | [Throttling](reduce-noise/throttle.md) | Enforces a minimum interval between notifications per notification group | | Recipients get too many separate messages for related episodes | [Notification grouping](reduce-noise/grouping.md) | Batches related alerts into fewer notifications | -| Notifications should only go out for certain episodes by severity, labels, or payload fields | [Matchers](reduce-noise/matcher.md) | Applies notification policy rule_labels scoping and KQL episode matching so only matching episodes route to workflows | +| Notifications should only go out for certain episodes by severity, labels, or payload fields | [Matchers](reduce-noise/matcher.md) | Applies action policy rule_labels scoping and KQL episode matching so only matching episodes route to workflows | | Planned maintenance: evaluations should continue but on-call should not be paged | [Maintenance windows](reduce-noise/maintenance-windows.md) | Pauses notifications for a scheduled window | | A temporary quiet period is needed for a series or episode without changing the rule | [Snooze or silence](reduce-noise/snooze-or-silence.md) | Snoozes or silences notifications. Acknowledge can also quiet an episode while work proceeds | | Many low-level alerts should roll up into one higher-level signal | [Rules on alerts](reduce-noise/rules-on-alerts.md) | Runs follow-on rules on `.rule-events` or related data to correlate and notify once | @@ -31,7 +31,7 @@ If multiple rows in the table apply, refer to [Using them together](#using-them- ## How each mechanism works -Mechanisms are listed in rough order: from what happens when rules run and how episodes change, through notification policy processing, to operator controls. +Mechanisms are listed in rough order: from what happens when rules run and how episodes change, through action policy processing, to operator controls. ### Author and tune the rule @@ -59,7 +59,7 @@ Configure how the rule treats empty results. Refer to [No-data handling](reduce- ### Notification matchers and grouping -Acts on: which episodes a notification policy considers and how they are batched +Acts on: which episodes an action policy considers and how they are batched Problem: Only some episodes should page the team, or messages should batch by service or host. @@ -116,7 +116,7 @@ Problem: One alert episode should drop out of triage while other series keep run ## Using them together [using-them-together] -These options stack. A common pattern is: tune the query for precision, add activation thresholds to ignore spikes, use matchers and throttling so notification policies only fire for the right episodes at a sustainable rate, and use {{maint-windows-cap}} or snooze during known change windows. +These options stack. A common pattern is: tune the query for precision, add activation thresholds to ignore spikes, use matchers and throttling so action policies only fire for the right episodes at a sustainable rate, and use {{maint-windows-cap}} or snooze during known change windows. Example: Noisy CPU rule @@ -124,10 +124,10 @@ Example: Noisy CPU rule |---|---|---| | The {{esql}} query flags any host over 70% | Tighten the query or add a stricter `WHERE` | Author and tune the rule | | Legitimate bursts open alerts for 1-minute spikes | Require 3 consecutive breaches before active | Activation thresholds | -| The same host pages every run for an hour | Add throttle and grouping on the notification policy | Throttle, grouping | +| The same host pages every run for an hour | Add throttle and grouping on the action policy | Throttle, grouping | | Only production hosts should page on-call | Add rule_labels and KQL on the policy | Matchers | | Database change window this evening | Open a {{maint-windows-cap}} or snooze the series | {{maint-windows-cap}}, snooze | ::::{note} -Order of application matters. Thresholds and no-data behavior affect lifecycle state before notification policies run. Matchers and throttling apply when notification policies are evaluated for each episode. Snooze and {{maint-windows-cap}} affect whether notifications send, not whether `.rule-events` documents are written. Check Discover if raw history is needed. +Order of application matters. Thresholds and no-data behavior affect lifecycle state before action policies run. Matchers and throttling apply when action policies are evaluated for each episode. Snooze and {{maint-windows-cap}} affect whether notifications send, not whether `.rule-events` documents are written. Check Discover if raw history is needed. :::: diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md index f5d9bf0a2f..13f9384f93 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md @@ -4,9 +4,9 @@ applies_to: serverless: preview products: - id: kibana -description: "Batch related Kibana alerting v2 alert episodes into fewer notifications using notification policy grouping by host, service, or custom fields." +description: "Batch related Kibana alerting v2 alert episodes into fewer notifications using action policy grouping by host, service, or custom fields." --- # {{kib}} alerting v2 notification grouping [reduce-noise-grouping-v2] -**Notification grouping** on a notification policy batches related **alert episodes** into fewer messages, reducing notification count without dropping evaluation results. +**Notification grouping** on an action policy batches related **alert episodes** into fewer messages, reducing notification count without dropping evaluation results. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md index eba6dc05a6..3e61ce3cf0 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md @@ -4,9 +4,9 @@ applies_to: serverless: preview products: - id: kibana -description: "Route only matching Kibana alerting v2 alert episodes to notification destinations using KQL matcher conditions on notification policies." +description: "Route only matching Kibana alerting v2 alert episodes to notification destinations using KQL matcher conditions on action policies." --- # {{kib}} alerting v2 notification matchers [matcher-v2] -**Notification policy matchers** are KQL expressions that determine which **alert episodes** a policy applies to. Only **episodes** that match the condition (after **rule_labels** scoping) are routed to the policy's workflow destinations. +**Action policy matchers** are KQL expressions that determine which **alert episodes** a policy applies to. Only **episodes** that match the condition (after **rule_labels** scoping) are routed to the policy's workflow destinations. diff --git a/explore-analyze/toc.yml b/explore-analyze/toc.yml index f7d8a3222a..3db4b85cd8 100644 --- a/explore-analyze/toc.yml +++ b/explore-analyze/toc.yml @@ -402,10 +402,10 @@ toc: - file: alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md - file: alerting/kibana-alerting-v2/author-rules/rule-settings/no-data-handling.md - file: alerting/kibana-alerting-v2/author-rules/rule-settings/grouping.md - - file: alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md + - file: alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md children: - - file: alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md - - file: alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md + - file: alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md + - file: alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md - file: alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md - file: alerting/kibana-alerting-v2/author-rules/set-rule-data-sources.md - file: alerting/kibana-alerting-v2/author-rules/rules-on-alerts.md diff --git a/redirects.yml b/redirects.yml index 663bd1def2..c494669acc 100644 --- a/redirects.yml +++ b/redirects.yml @@ -876,3 +876,17 @@ redirects: 'reference/fleet/otel-integrations.md': anchors: 'otel-integrations-hybrid-policies': 'agent-policies-multiple-integrations' + +# Kibana alerting v2: notification policies renamed to action policies + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md' + anchors: + 'notification-policies-v2': 'action-policies-v2' + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md' + anchors: + 'create-manage-notification-policies-v2': 'create-manage-action-policies-v2' + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md' + anchors: + 'how-notification-policies-evaluated-v2': 'how-action-policies-evaluated-v2' From 43ebcf92c2a530f70bfe7fe6b554ffea92233510 Mon Sep 17 00:00:00 2001 From: Nastasha Solomon <79124755+nastasha-solomon@users.noreply.github.com> Date: Fri, 17 Apr 2026 15:58:32 -0400 Subject: [PATCH 14/40] Changed instances of notification policy to action policy (#5978) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Fixes https://github.com/elastic/docs-content-internal/issues/1076, Across Kibana alerting v2 docs (plus the v2 sections of [alerting-overview.md](vscode-file://vscode-app/Applications/Cursor.app/Contents/Resources/app/out/vs/code/electron-sandbox/workbench/explore-analyze/alerting-overview.md) and [choose-an-alerting-system.md](vscode-file://vscode-app/Applications/Cursor.app/Contents/Resources/app/out/vs/code/electron-sandbox/workbench/explore-analyze/alerting/choose-an-alerting-system.md)), notification policy / policies is now action policy / policies, including navigation copy (Action Policies and Management > Alerts and Insights > Rules V2 > Action Policies). Section anchors were updated as well(for example action-policies-v2, create-manage-action-policies-v2, how-action-policies-evaluated-v2). ## Generative AI disclosure 1. Did you use a generative AI (GenAI) tool to assist in creating this contribution? - [x] Yes - [ ] No Cursor + Composer 2 --- docs/manifests/alerting-v2.yaml | 70 +++++++++---------- explore-analyze/alerting-overview.md | 2 +- .../alerting/choose-an-alerting-system.md | 4 +- .../alerting/kibana-alerting-v2.md | 14 ++-- .../alert-event-field-reference.md | 2 +- .../kibana-alerting-v2/author-rules.md | 4 +- .../author-rules/create-rules-discover.md | 2 +- .../author-rules/create-rules-ui.md | 2 +- .../author-rules/rule-settings.md | 6 +- .../rule-settings/action-policies.md | 32 +++++++++ .../create-manage-action-policies.md | 46 ++++++++++++ .../how-action-policies-are-evaluated.md} | 12 ++-- .../rule-settings/notification-policies.md | 32 --------- .../create-manage-notification-policies.md | 46 ------------ .../author-rules/rule-settings/workflows.md | 4 +- .../kibana-alerting-v2/before-you-begin.md | 4 +- .../before-you-begin/alerting-privileges.md | 10 +-- .../before-you-begin/set-up.md | 2 +- .../investigate-respond/alert-actions.md | 2 +- .../manage-rules/view-manage-rules.md | 2 +- .../kibana-alerting-v2/reduce-noise.md | 16 ++--- .../reduce-noise/grouping.md | 4 +- .../reduce-noise/matcher.md | 4 +- explore-analyze/toc.yml | 6 +- redirects.yml | 14 ++++ 25 files changed, 178 insertions(+), 164 deletions(-) create mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md rename explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/{notification-policies/how-notification-policies-are-evaluated.md => action-policies/how-action-policies-are-evaluated.md} (71%) delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md diff --git a/docs/manifests/alerting-v2.yaml b/docs/manifests/alerting-v2.yaml index c2d65526c5..94df256ead 100644 --- a/docs/manifests/alerting-v2.yaml +++ b/docs/manifests/alerting-v2.yaml @@ -33,7 +33,7 @@ implementation_prs: summary: > Foundational v2 alerting framework — core rule engine, scheduling and execution architecture, ES|QL-native rule evaluation, alert lifecycle management, dispatcher, - notification policies CRUD and UI, rule authoring UI (standalone and embedded in + action policies CRUD and UI, rule authoring UI (standalone and embedded in Discover), rule management UI, APM instrumentation, and InversifyJS DI wiring. This is an umbrella PR covering ~50 sub-PRs across engine, UI, and infrastructure. author: cnasikas @@ -87,34 +87,34 @@ implementation_prs: - url: https://github.com/elastic/kibana/pull/256527 title: "Store 'unmatched' action for unmatched alert episodes" summary: > - Fixes a dispatcher bug where alert episodes matching no notification policy were + Fixes a dispatcher bug where alert episodes matching no action policy were silently dropped and re-fetched every run. Now persists them with `action_type: 'unmatched'` and reason `'no matching notification policy'`, and adds `unmatched` to the fetch query's INLINE STATS filter. - Affects dispatcher pipeline docs, notification policy evaluation docs, and the + Affects dispatcher pipeline docs, action policy evaluation docs, and the alert actions field reference. author: kdelemme - # --- Notification policies --- + # --- Action policies (docs); implementation paths may still use notification_policy --- - url: https://github.com/elastic/kibana/pull/256940 title: "Make notification policies global with optional rule-label scoping" summary: > - Decouples notification policies from rules. Policies are now global — all NPs are + Decouples notification policies from rules. Policies are now global — all policies are evaluated for every alert episode by default. Rules no longer reference specific policies via `notification_policies: [{ ref: policyId }]`. An optional `rule_labels` field on - the NP scopes it to rules whose `metadata.labels` match. The dispatcher fetches all - NPs every tick via `findAllDecrypted()`. The Step 6 matcher now uses two-phase matching: + the policy scopes it to rules whose `metadata.labels` match. The dispatcher fetches all + policies every tick via `findAllDecrypted()`. The Step 6 matcher now uses two-phase matching: first rule-label scoping (empty `ruleLabels` = catch-all), then KQL episode evaluation. - Affects notification policy schema docs, create/manage how-to, and dispatcher pipeline docs. + Affects action policy schema docs, create/manage how-to, and dispatcher pipeline docs. author: kdelemme - url: https://github.com/elastic/kibana/pull/258010 title: "Add dynamic workflow selection to notification policy form" summary: > - Replaces hardcoded workflow options in the NP form with dynamic search via the + Replaces hardcoded workflow options in the policy form with dynamic search via the `/api/workflows/search` API. Users can now search and select real workflows when - creating or editing a notification policy. Affects create/manage NP how-to docs. + creating or editing a policy. Affects create/manage action policy how-to docs. author: kdelemme - url: https://github.com/elastic/kibana/pull/258917 @@ -124,21 +124,21 @@ implementation_prs: highlighting, autocomplete, and validation. Defines a typed `MatcherContext` schema with field descriptors (`MATCHER_CONTEXT_FIELDS`) so the input auto-suggests valid field names: `episode_status`, `rule.name`, `rule.labels`, and `data.*` fields. - Affects any doc describing the notification policy matcher field. + Affects any doc describing the action policy matcher field. author: kdelemme - url: https://github.com/elastic/kibana/pull/258862 title: "[Alerting v2] Add bulk actions for notification policies" summary: > - Adds bulk enable, disable, snooze, and delete actions to the notification policies + Adds bulk enable, disable, snooze, and delete actions to the action policies list page, including confirmation modals for destructive operations. - Affects create/manage NP how-to and any NP management reference. + Affects create/manage action policy how-to and any policy management reference. author: kdelemme - url: https://github.com/elastic/kibana/pull/257377 title: "[Alerting V2] mark np api keys for invalidation" summary: > - Introduces a saved object type for pending API key invalidations. When a notification + Introduces a saved object type for pending API key invalidations. When an action policy is updated, the old API key is marked for invalidation and a new one is created. When deleted, the API key is marked for invalidation. Related to PR #258094 which schedules the actual invalidation task. @@ -380,11 +380,11 @@ entries: • PR #257324 — preview chart added to rule form (Lens histogram showing matching row counts over time for evaluation and recovery previews). create-rules-ui.md should describe this panel. - See separate entries for notification-policies pages, which track additional PRs. + See separate entries for action-policies pages, which track additional PRs. - - id: alerting-v2-notification-policies + - id: alerting-v2-action-policies content_type: procedural - docs_file: explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md + docs_file: explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 @@ -399,21 +399,21 @@ entries: doc_set: serverless: preview notes: > - Overview page for notification policies. Several significant implementation changes - affect the conceptual description of what NPs are and how they work: - • PR #256940 — NPs are now global, not rule-scoped. The concept page must drop any - description of rules referencing specific NPs by ID. Scoping is now done via - `rule_labels` on the NP itself. - • PR #256527 — describes what happens when no NP matches an episode (`unmatched`). + Overview page for action policies. Several significant implementation changes + affect the conceptual description of what policies are and how they work: + • PR #256940 — Policies are now global, not rule-scoped. The concept page must drop any + description of rules referencing specific policies by ID. Scoping is now done via + `rule_labels` on the policy itself. + • PR #256527 — describes what happens when no policy matches an episode (`unmatched`). • PR #258917 — matcher is now a KQL field with autocomplete; the context schema (`episode_status`, `rule.name`, `rule.labels`, `data.*`) is worth documenting here. - • PR #258862 — bulk enable/disable/snooze/delete now available in the NP list UI. + • PR #258862 — bulk enable/disable/snooze/delete now available in the policy list UI. • PR #258010 — workflow selection is dynamic (search-based); update any description - of the workflow field in the NP form. + of the workflow field in the policy form. - - id: alerting-v2-create-notification-policies + - id: alerting-v2-create-action-policies content_type: procedural - docs_file: explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md + docs_file: explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 @@ -428,18 +428,18 @@ entries: doc_set: serverless: preview notes: > - CRUD how-to for notification policies. + CRUD how-to for action policies. • PR #256940 — schema change: remove any reference to `notification_policies` on rules. - Add documentation for the new `rule_labels` field (scoping NPs to specific rules). + Add documentation for the new `rule_labels` field (scoping policies to specific rules). • PR #258010 — workflow selector is now a dynamic search field, not a static dropdown. • PR #258862 — document bulk actions (enable, disable, snooze, delete) from the list page. - • PR #257377 and #258094 — API keys are automatically managed; when a NP is updated or + • PR #257377 and #258094 — API keys are automatically managed; when a policy is updated or deleted, the old key is marked for invalidation. May be worth a note in an API key section or production guidance callout. - - id: alerting-v2-notification-policies-eval + - id: alerting-v2-action-policies-eval content_type: conceptual - docs_file: explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md + docs_file: explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 @@ -454,12 +454,12 @@ entries: serverless: preview notes: > Documents the 10-step dispatcher pipeline. Three PRs change the pipeline logic: - • PR #256940 — Step 4 now fetches ALL notification policies via `findAllDecrypted()`, + • PR #256940 — Step 4 now fetches ALL action policies via `findAllDecrypted()`, not just those referenced by rules. Step 6 (evaluate matchers) now uses two-phase matching: (1) check `rule_labels` scoping (empty = catch-all), then (2) evaluate the KQL episode matcher. Update the step descriptions accordingly. • PR #256527 — Step 10 outcomes table is missing `unmatched` (episodes with no matching - NP). Add: `unmatched` / "Episode did not match any notification policy". + policy). Add: `unmatched` / user-facing explanation (stored reason may still be `no matching notification policy`). • PR #258917 — matcher is a KQL expression evaluated in-process. The `MatcherContext` schema now has named fields with autocomplete: `episode_status`, `rule.name`, `rule.labels`, `data.*`. Update Step 6 to reflect the available matcher fields. @@ -651,7 +651,7 @@ entries: serverless: preview notes: > How to deactivate (and reactivate) alert episodes. PR #256527 changes dispatcher - behavior: episodes that are deactivated and also unmatched by any NP now receive + behavior: episodes that are deactivated and also unmatched by any policy now receive an `unmatched` action record in addition to the deactivation. Review if this page describes what happens to deactivated episodes in the dispatcher pipeline. diff --git a/explore-analyze/alerting-overview.md b/explore-analyze/alerting-overview.md index 728afcb708..09a26399ec 100644 --- a/explore-analyze/alerting-overview.md +++ b/explore-analyze/alerting-overview.md @@ -36,7 +36,7 @@ stack: preview 9.4 serverless: preview ``` -Kibana alerting v2 is a redesigned alerting framework built on ES|QL. You write the query that defines what to detect and what data each alert carries. V2 introduces notification policies for centralized notification control, per-series snooze, alert lifecycle tracking with episodes, and the ability to write rules on alerts for correlation and escalation. +Kibana alerting v2 is a redesigned alerting framework built on ES|QL. You write the query that defines what to detect and what data each alert carries. V2 introduces action policies for centralized notification control, per-series snooze, alert lifecycle tracking with episodes, and the ability to write rules on alerts for correlation and escalation. Kibana alerting v2 runs alongside Kibana alerting v1. There is no forced migration. diff --git a/explore-analyze/alerting/choose-an-alerting-system.md b/explore-analyze/alerting/choose-an-alerting-system.md index 0b8378782f..993b572260 100644 --- a/explore-analyze/alerting/choose-an-alerting-system.md +++ b/explore-analyze/alerting/choose-an-alerting-system.md @@ -32,7 +32,7 @@ If you already know which alerting system you are using, go directly to [Kibana | **Best for** | Teams using built-in rule types with form-based setup | Teams that need full control over detection and notification routing | Custom alerting logic requiring scripting | | **Rule definition** | Select a rule type and fill in parameters | Write an ES\|QL query | Write a JSON watch definition | | **Alert data** | Updated in place; limited queryability | Immutable, append-only events queryable with ES\|QL in Discover | Watch history index | -| **Notifications** | Configured per action on each rule | Centralized notification policies, reusable across rules | Action-level throttling and conditions | +| **Notifications** | Configured per action on each rule | Centralized action policies, reusable across rules | Action-level throttling and conditions | | **Noise reduction** | Snooze per rule, maintenance windows | Per-series snooze, per-episode acknowledgment, activation thresholds, matcher-based routing, rules on alerts | Action conditions and throttling | | **Availability** | All deployments | {{stack}} 9.4+ | Self-managed and {{ech}} only | @@ -46,7 +46,7 @@ Choose Kibana alerting v1 if you want broad rule type coverage out of the box an ## Kibana alerting v2 -Kibana alerting v2 is built on ES|QL. You write the query that defines what to detect and what data each alert carries. Notification policies control routing, grouping, and throttling independently of rules, and alert events are stored as queryable data in standard {{es}} indices. +Kibana alerting v2 is built on ES|QL. You write the query that defines what to detect and what data each alert carries. Action policies control routing, grouping, and throttling independently of rules, and alert events are stored as queryable data in standard {{es}} indices. Choose Kibana alerting v2 if you need flexible detection logic, queryable alert history, centralized notification management, or cross-rule correlation. diff --git a/explore-analyze/alerting/kibana-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2.md index 5f62bd7a3d..e4c7d29261 100644 --- a/explore-analyze/alerting/kibana-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2.md @@ -3,7 +3,7 @@ applies_to: serverless: preview products: - id: kibana -description: "Overview of Kibana alerting v2: an ES|QL-based alerting framework with immutable alert events, notification policies, and alert lifecycle tracking." +description: "Overview of Kibana alerting v2: an ES|QL-based alerting framework with immutable alert events, action policies, and alert lifecycle tracking." --- # Kibana alerting v2 [alerting-overview-v2] @@ -28,11 +28,11 @@ Episodes Series : A grouped time series of signals for a given rule and grouping key. Identified by a `group_hash` computed from the rule ID and grouping field values. Series are the unit for per-group snooze and recovery detection. -Notification policies +Action policies : Standalone, reusable entities that control how and when alerts reach people and systems. Policies define matching conditions, grouping, throttling, and routing to workflow destinations. One policy can apply across multiple rules. Workflows -: User-defined automated sequences of tasks for delivering notifications and integrating with external systems. Notification policies reference workflows as destinations. +: User-defined automated sequences of tasks for delivering notifications and integrating with external systems. Action policies reference workflows as destinations. ## How Kibana alerting v2 differs from Kibana alerting v1 @@ -41,7 +41,7 @@ Workflows | Query language | Rule type defines what data is evaluated | You write the ES\|QL query directly | | Alert persistence | Mutable documents updated in place | Immutable, append-only event documents | | Alert queryability | Limited; alerts live in system indices | Full ES\|QL access in Discover and dashboards | -| Notification control | Per-action frequency and throttle on each rule | Notification policies: centralized matching, grouping, throttling, suppression | +| Notification control | Per-action frequency and throttle on each rule | Action policies: centralized matching, grouping, throttling, suppression | | Noise reduction | Snooze per rule; limited grouping | Per-series snooze, acknowledgment per episode, activation thresholds, matcher-based routing, rules on alerts | | Rule definition | Plugin-registered rule types with fixed schemas | ES\|QL queries with `KEEP` to control what data is stored | | Recovery detection | Rule-type specific | Group hash comparison between consecutive evaluations | @@ -54,7 +54,7 @@ Detect mode (`kind: signal`) : The rule produces signal events for every query result. Signals are written to the alert events data stream and are available for exploration in Discover, but no lifecycle tracking or notifications occur. Use detect mode for broad monitoring with zero noise. Alert mode (`kind: alert`) -: The rule produces alert events with full lifecycle management. Alerts transition through episode states, trigger notification policies, and support triage actions like acknowledge and snooze. Use alert mode when you need actionable alerts. +: The rule produces alert events with full lifecycle management. Alerts transition through episode states, trigger action policies, and support triage actions like acknowledge and snooze. Use alert mode when you need actionable alerts. You can switch a rule between modes at any time. Switching from alert to detect stops lifecycle tracking and notifications but continues producing signal events. @@ -65,7 +65,7 @@ From your perspective, a rule does the following on each run: - It evaluates your ES|QL query over the lookback window you configured. - It appends new rows to the `.rule-events` data stream: signal rows in detect mode, or signal and alert rows with episode fields in alert mode. - In alert mode, it updates episode lifecycle (for example pending, active, recovering) according to your activation, recovery, and no-data settings. -- When an episode is ready for notifications, notification policies decide whether and how it is routed to workflows. Policies apply after lifecycle and thresholds; a short delay between “episode ready” and “notification sent” is normal when many policies or episodes are in play. +- When an episode is ready for notifications, action policies decide whether and how it is routed to workflows. Policies apply after lifecycle and thresholds; a short delay between “episode ready” and “notification sent” is normal when many policies or episodes are in play. You can inspect raw history in Discover on `.rule-events` at any time, independent of whether notifications were sent. @@ -74,7 +74,7 @@ You can inspect raw history in Discover on `.rule-events` at any time, independe - Write rules using any ES|QL query pattern: thresholds, change detection, ratios, no-data, SLO burn rate, and more. - Create rules from the UI, from Discover, or with YAML for infrastructure-as-code workflows. - Preview rule results against existing data before saving. -- Use notification policies to control routing, grouping, and throttling independently of rules. +- Use action policies to control routing, grouping, and throttling independently of rules. - Investigate alerts in a dedicated inbox with filtering by status, severity, and custom fields. - Explore alert history in Discover using ES|QL for trend analysis and operational reporting. - Write rules on alerts: use the alert events index as a data source for correlation and escalation patterns. diff --git a/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md b/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md index 4748601f2f..6755b942c8 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md @@ -70,7 +70,7 @@ The table lists fields available in the alert action documents. | `@timestamp` | `date` | When the action was recorded | | `episode.id` | `keyword` | Target episode | | `rule.id` | `keyword` | Rule that owns the episode | -| `action.type` | `keyword` | The action type, for example:
- `acknowledge`: User acknowledged the alert.
- `snooze`: Notifications snoozed for a period.
- `tag`: Tag applied to the alert.
- `fire`: Notification or escalation fired for the episode.
- `unmatched`: No notification policy matched the episode, so no workflow ran for it under those policies.

For the full set of action types and UI behavior, refer to [Alert actions](manage-alerts/investigate-respond/alert-actions.md). | +| `action.type` | `keyword` | The action type, for example:
- `acknowledge`: User acknowledged the alert.
- `snooze`: Notifications snoozed for a period.
- `tag`: Tag applied to the alert.
- `fire`: Notification or escalation fired for the episode.
- `unmatched`: No action policy matched the episode, so no workflow ran for it under those policies.

For the full set of action types and UI behavior, refer to [Alert actions](manage-alerts/investigate-respond/alert-actions.md). | | `episode.status_count` | `long` | Count of consecutive evaluations in the current `episode.status`. Only set when `episode.status` is `pending` or `recovering`.
For example, if the episode stays `pending` for three rule evaluations in a row, the value is `3`. | ## Related documentation diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules.md index b069e2f148..cbc522e870 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules.md @@ -16,7 +16,7 @@ A Kibana alerting v2 rule defines what to look for in your data. It evaluates so Every rule operates in one of two modes: - **Detect mode** (`kind: signal`): produces signal events for exploration and analysis. No lifecycle tracking, no notifications. Use detect mode for broad monitoring without noise. -- **Alert mode** (`kind: alert`): produces alert events with full lifecycle management. Alerts transition through episode states (`inactive` → `pending` → `active` → `recovering` → `inactive`), trigger notification policies, and support triage actions. Use alert mode when conditions require human response. +- **Alert mode** (`kind: alert`): produces alert events with full lifecycle management. Alerts transition through episode states (`inactive` → `pending` → `active` → `recovering` → `inactive`), trigger action policies, and support triage actions. Use alert mode when conditions require human response. You can switch between modes at any time from the rule list or rule details page. @@ -41,7 +41,7 @@ A rule definition includes: | **State transition** | Activation and recovery thresholds (alert mode only) | | **Recovery policy** | How recovery is detected (alert mode only) | | **No-data handling** | Behavior when the query returns no results | -| **Notification policies** | References to policies that control how alerts are routed | +| **Action policies** | Policies that control how alerts are routed (global; not stored on the rule) | | **Workflows** | Direct workflow links for rule-triggered actions | ## ES|QL query structure diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md index ba4b73fa41..aba75d9ce7 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md @@ -26,7 +26,7 @@ While you prototype in Discover, each row in the result table is one document in - Schedule (execution interval and lookback window). - Grouping fields if applicable. - Alert delay, recovery, and no-data settings for alert mode. - - Notification policies to link. + - Action policies (configured globally under Action Policies). 7. Optionally preview the rule results. 8. Click Save. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md index f39c5b8545..7255feb8c8 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md @@ -46,7 +46,7 @@ When the rule is in alert mode, additional settings are available: - Alert delay (activation threshold): require the condition to be met a specified number of consecutive times or for a minimum duration before an alert becomes active. - Recovery conditions: define how recovery is detected. - No-data handling: configure behavior when the query returns no results. -- Notification policies: policies are global. Scoping uses rule labels and matchers on the policy side, not links from this form. Configure policies under Notification Policies. For an overview, refer to [Notification policies](rule-settings/notification-policies.md). +- Action policies: policies are global. Scoping uses rule labels and matchers on the policy side, not links from this form. Configure policies under Action Policies. For an overview, refer to [Action policies](rule-settings/action-policies.md). - Tags: add free-form tags for filtering and organization. - Investigation guide: attach a runbook or investigation guide to the rule. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings.md index 0e310e5215..4255f4e92b 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings.md @@ -4,7 +4,7 @@ applies_to: serverless: preview products: - id: kibana -description: "Overview of Kibana alerting v2 rule settings: schedule, thresholds, no-data handling, grouping, notification policies, and workflows." +description: "Overview of Kibana alerting v2 rule settings: schedule, thresholds, no-data handling, grouping, action policies, and workflows." --- # Kibana alerting v2 rule settings [rule-settings-v2] @@ -27,9 +27,9 @@ The [schedule and lookback](rule-settings/schedule-and-lookback.md) settings con [Grouping](rule-settings/grouping.md) splits alert event generation by one or more fields. Each unique combination produces its own alert series with independent lifecycle tracking. -## Notification policies +## Action policies -[Notification policies](rule-settings/notification-policies.md) are standalone entities that control how alerts reach people and systems. +[Action policies](rule-settings/action-policies.md) are standalone entities that control how alerts reach people and systems. ## Workflows diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md new file mode 100644 index 0000000000..7c831a52b7 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md @@ -0,0 +1,32 @@ +--- +navigation_title: Action policies +applies_to: + serverless: preview +products: + - id: kibana +description: "Action policies control how and when Kibana alerting v2 alerts reach people and systems, including matching, grouping, throttling, and routing." +--- + +# Kibana alerting v2 action policies [action-policies-v2] + +An action policy defines how and when alerts reach people and systems. In Kibana alerting v2, action policies are **global** saved objects: they are not attached to individual rules. Which rules a policy applies to is determined by **`rule_labels`** on the policy and by the episode matcher, not by references from the rule. + +## Compare Kibana alerting v1 and v2 action policies + +| | Kibana alerting v1 | Kibana alerting v2 | +|---|---|---| +| **Scope** | Per-rule connectors and actions on the rule | **Global** action policies. Rules do not reference specific policies | +| **Matching** | Rule execution drives connector runs | **`rule_labels`** scoping on the policy, then KQL episode matching | +| **Matcher context** | N/A (rule-centric) | Typed fields including `episode_status`, `rule.name`, `rule.labels`, and `data.*` | + +## How action policies apply to rules + +Action policies are **global**. Rules do not store or reference a list of action policies. + +- **Scoping** is expressed on the policy itself using **`rule_labels`**. Only episodes for rules whose labels satisfy the policy’s label selector are candidates for that policy. +- After label scoping, the policy’s **KQL episode matcher** runs against the typed matcher context (for example `episode_status`, `rule.name`, `rule.labels`, and fields under `data.*`). + +## Learn more + +- [Create and manage action policies](action-policies/create-manage-action-policies.md) +- [How action policies are evaluated](action-policies/how-action-policies-are-evaluated.md) diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md new file mode 100644 index 0000000000..b9692166a0 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md @@ -0,0 +1,46 @@ +--- +navigation_title: Create and manage action policies +applies_to: + serverless: preview +products: + - id: kibana +description: "Create, configure, and manage Kibana alerting v2 action policies, including matching conditions, grouping, throttling, destinations, and snooze." +--- + +# Create and manage Kibana alerting v2 action policies [create-manage-action-policies-v2] + +Create action policies to control which alerts trigger notifications, how alerts are grouped, how frequently notifications are sent, and where they are routed. Policies are **global**: you create and edit them from the **Action Policies** area, not from the rule form. Rules do not “link” to policies. Scoping is defined on the policy with **`rule_labels`** and matchers. Refer to [Action policies](../action-policies.md). + +## Create an action policy + +1. Navigate to **Management > Alerts and Insights > Rules V2 > Action Policies**. +2. Click **Create policy**. +3. Configure the policy settings: matching, grouping, throttling, destinations, and optional snooze. +4. Click **Save**. + +## Policy list columns + +| Column | Description | +|---|---| +| **Name** | Policy display name | +| **Status** | Whether the policy is active | +| **Rule labels** | Label selector used to scope which rules this policy can apply to | +| **Last updated** | Last save time | + +There is **no “linked rule count”** in the global model. Policies are not attached to a fixed set of rules. Use **rule labels** and matcher behavior to understand effective coverage. For the evaluation flow, refer to [How action policies are evaluated](how-action-policies-are-evaluated.md). + +## Destinations + +Destinations route matching episodes to workflows and channels. Instead of choosing from a static list, the UI provides a **search field** that queries available workflows through the **`/api/workflows/search`** endpoint. Type to search and select the workflow to use for this policy. + +## Snooze and maintenance + +You can snooze a policy for a defined window so that it does not dispatch notifications during that period. + +::::{important} Production considerations +When you **update** or **delete** an action policy, API keys used for execution are **invalidated** by a background task named `invalidateApiKeysTask`. Allow for brief propagation delay before new keys are used for dispatch. For intervals and delays, refer to [Set up](../../../before-you-begin/set-up.md). +:::: + +## Bulk actions + +On the action policies list, select one or more policies to **enable**, **disable**, or **delete** in bulk. **Select all** selects every policy on the current page of results. Clear the selection before changing filters if you need a different set. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md similarity index 71% rename from explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md rename to explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md index b7a35d97a1..0cba526207 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md @@ -1,15 +1,15 @@ --- -navigation_title: How notification policies are evaluated +navigation_title: How action policies are evaluated applies_to: serverless: preview products: - id: kibana -description: "How Kibana alerting v2 notification policies match alert episodes, apply throttling and suppression, and produce dispatch outcomes." +description: "How Kibana alerting v2 action policies match alert episodes, apply throttling and suppression, and produce dispatch outcomes." --- -# How Kibana alerting v2 notification policies are evaluated [how-notification-policies-evaluated-v2] +# How Kibana alerting v2 action policies are evaluated [how-action-policies-evaluated-v2] -Notification policies are separate from rules. After a rule runs and produces or updates alert episodes, the system decides which policies apply, whether notifications should go out, and which workflows receive them. You configure policies once. They can apply to many rules. +Action policies are separate from rules. After a rule runs and produces or updates alert episodes, the system decides which policies apply, whether notifications should go out, and which workflows receive them. You configure policies once. They can apply to many rules. ## How policies are matched to episodes @@ -24,7 +24,7 @@ An episode can match zero, one, or many policies. If it matches none, notificati For episodes that match a policy, the system applies suppression if configured, grouping for how messages are batched, and throttling for the minimum time between notifications for the same group. Then it sends notifications to the workflow destinations you configured on the policy. -Order matters: Lifecycle thresholds and no-data behavior on the rule run before notification policies. Policies only affect routing and delivery, not whether rows are written to `.rule-events`. +Order matters: Lifecycle thresholds and no-data behavior on the rule run before action policies. Policies only affect routing and delivery, not whether rows are written to `.rule-events`. ## Possible outcomes @@ -33,7 +33,7 @@ Order matters: Lifecycle thresholds and no-data behavior on the rule run before | dispatched | Notifications were sent according to the policy | | throttled | Delivery was suppressed because throttling rules said to wait | | suppressed | The episode was suppressed before a notification went out, for example by an active suppression | -| unmatched | No notification policy matched this episode, so no workflow ran for it under these policies | +| unmatched | No action policy matched this episode, so no workflow ran for it under these policies | | error | Processing failed. Check {{kib}} logs and any health indicators your team uses | Notifications can arrive shortly after an episode becomes eligible. Heavy load or many policies can add noticeable delay. If something seems stuck, verify matchers, throttling, maintenance windows, and that the episode matches at least one policy. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md deleted file mode 100644 index 18318c57ed..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -navigation_title: Notification policies -applies_to: - serverless: preview -products: - - id: kibana -description: "Notification policies control how and when Kibana alerting v2 alerts reach people and systems, including matching, grouping, throttling, and routing." ---- - -# Kibana alerting v2 notification policies [notification-policies-v2] - -A notification policy defines how and when alerts reach people and systems. In Kibana alerting v2, notification policies are **global** saved objects: they are not attached to individual rules. Which rules a policy applies to is determined by **`rule_labels`** on the policy and by the episode matcher, not by references from the rule. - -## Compare Kibana alerting v1 and v2 notification policies - -| | Kibana alerting v1 | Kibana alerting v2 | -|---|---|---| -| **Scope** | Per-rule connectors and actions on the rule | **Global** notification policies. Rules do not reference specific policies | -| **Matching** | Rule execution drives connector runs | **`rule_labels`** scoping on the policy, then KQL episode matching | -| **Matcher context** | N/A (rule-centric) | Typed fields including `episode_status`, `rule.name`, `rule.labels`, and `data.*` | - -## How notification policies apply to rules - -Notification policies are **global**. Rules do not store or reference a list of notification policies. - -- **Scoping** is expressed on the policy itself using **`rule_labels`**. Only episodes for rules whose labels satisfy the policy’s label selector are candidates for that policy. -- After label scoping, the policy’s **KQL episode matcher** runs against the typed matcher context (for example `episode_status`, `rule.name`, `rule.labels`, and fields under `data.*`). - -## Learn more - -- [Create and manage notification policies](notification-policies/create-manage-notification-policies.md) -- [How notification policies are evaluated](notification-policies/how-notification-policies-are-evaluated.md) diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md deleted file mode 100644 index 250412760b..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -navigation_title: Create and manage notification policies -applies_to: - serverless: preview -products: - - id: kibana -description: "Create, configure, and manage Kibana alerting v2 notification policies, including matching conditions, grouping, throttling, destinations, and snooze." ---- - -# Create and manage Kibana alerting v2 notification policies [create-manage-notification-policies-v2] - -Create notification policies to control which alerts trigger notifications, how alerts are grouped, how frequently notifications are sent, and where they are routed. Policies are **global**: you create and edit them from the **Notification Policies** area, not from the rule form. Rules do not “link” to policies. Scoping is defined on the policy with **`rule_labels`** and matchers. Refer to [Notification policies](../notification-policies.md). - -## Create a notification policy - -1. Navigate to **Management > Alerts and Insights > Rules V2 > Notification Policies**. -2. Click **Create policy**. -3. Configure the policy settings: matching, grouping, throttling, destinations, and optional snooze. -4. Click **Save**. - -## Policy list columns - -| Column | Description | -|---|---| -| **Name** | Policy display name | -| **Status** | Whether the policy is active | -| **Rule labels** | Label selector used to scope which rules this policy can apply to | -| **Last updated** | Last save time | - -There is **no “linked rule count”** in the global model. Policies are not attached to a fixed set of rules. Use **rule labels** and matcher behavior to understand effective coverage. For the evaluation flow, refer to [How notification policies are evaluated](how-notification-policies-are-evaluated.md). - -## Destinations - -Destinations route matching episodes to workflows and channels. Instead of choosing from a static list, the UI provides a **search field** that queries available workflows through the **`/api/workflows/search`** endpoint. Type to search and select the workflow to use for this policy. - -## Snooze and maintenance - -You can snooze a policy for a defined window so that it does not dispatch notifications during that period. - -::::{important} Production considerations -When you **update** or **delete** a notification policy, API keys used for execution are **invalidated** by a background task named `invalidateApiKeysTask`. Allow for brief propagation delay before new keys are used for dispatch. For intervals and delays, refer to [Set up](../../../before-you-begin/set-up.md). -:::: - -## Bulk actions - -On the notification policies list, select one or more policies to **enable**, **disable**, or **delete** in bulk. **Select all** selects every policy on the current page of results. Clear the selection before changing filters if you need a different set. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md index 7161b3fc55..ce14995058 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md @@ -4,9 +4,9 @@ applies_to: serverless: preview products: - id: kibana -description: "Workflows are automated task sequences used as notification policy destinations and direct rule links in Kibana alerting v2." +description: "Workflows are automated task sequences used as action policy destinations and direct rule links in Kibana alerting v2." --- # Kibana alerting v2 workflows [workflows-v2] -Workflows are user-defined automated sequences of tasks for actions, notifications, and external integrations. In Kibana alerting v2, workflows serve as the destinations for notification policies and can also be linked directly to rules. +Workflows are user-defined automated sequences of tasks for actions, notifications, and external integrations. In Kibana alerting v2, workflows serve as the destinations for action policies and can also be linked directly to rules. diff --git a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md index c3e49b8f1f..89b5af9730 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md +++ b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md @@ -18,7 +18,7 @@ To use Kibana alerting v2, you need: - {{stack}} 9.4 or later. - ES|QL knowledge. Kibana alerting v2 rules are defined using ES|QL queries. Familiarity with ES|QL syntax, aggregations, and the `STATS`, `WHERE`, `EVAL`, and `KEEP` commands is essential. Refer to the [ES|QL reference](elasticsearch://reference/query-languages/esql.md) for details. - Data indexed in {{es}}. Your source data must be indexed and accessible from the cluster where you create rules, such as logs, metrics, traces, or alert events from other rules. -- Appropriate privileges. You need Kibana privileges to create and manage rules, notification policies, and workflows. Refer to [Alerting privileges](before-you-begin/alerting-privileges.md) for details. +- Appropriate privileges. You need Kibana privileges to create and manage rules, action policies, and workflows. Refer to [Alerting privileges](before-you-begin/alerting-privileges.md) for details. ## Key differences from Kibana alerting v1 @@ -26,7 +26,7 @@ If you are coming from Kibana alerting v1, note these differences: - You write the query. Instead of selecting a rule type and filling in parameters, you write an ES|QL query that defines exactly what to look for and what data to include in each alert event. - Alerts are immutable. Each time a rule runs, it appends new event documents rather than updating existing ones. This gives you a full history of every run. -- Notifications are separate from rules. Instead of configuring actions on each rule, you create notification policies that match alerts and route them to workflow destinations. One policy can serve many rules. +- Notifications are separate from rules. Instead of configuring actions on each rule, you create action policies that match alerts and route them to workflow destinations. One policy can serve many rules. - Snooze is per series, not per rule. You can snooze notifications for a specific host or service without silencing the entire rule. - Alert data is queryable. Alert events are stored in standard {{es}} indices and can be queried with ES|QL in Discover, used in dashboards, or fed to other rules. diff --git a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md index 80c7a0f04c..10e68a31aa 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md +++ b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md @@ -4,7 +4,7 @@ applies_to: serverless: preview products: - id: kibana -description: "Required privileges for creating and managing Kibana alerting v2 rules, notification policies, and alert actions." +description: "Required privileges for creating and managing Kibana alerting v2 rules, action policies, and alert actions." --- # Kibana alerting v2 privileges [alerting-privileges-v2] @@ -22,9 +22,9 @@ To create, edit, and manage Kibana alerting v2 rules, you need: Rule execution uses the API key of the user who created or last updated the rule. This means the rule runs with the privileges of that user. If the user's privileges change, rule execution reflects those changes. -### Notification policy management +### Action policy management -To create and manage notification policies, you need: +To create and manage action policies, you need: - **{{kib}} feature privilege**: `Rules V2` with create or edit access. - **Workflow permissions**: To add a workflow as a destination on a policy, you need permissions for that workflow. This prevents privilege escalation through policy configuration. @@ -42,11 +42,11 @@ Because Kibana alerting v2 alert events are stored in standard {{es}} indices, a ## Space boundaries -Rule and notification policy management respects {{kib}} space boundaries. Rules created in one space are not visible in another. Alert events are indexed globally, but UI access is filtered by space. +Rule and action policy management respects {{kib}} space boundaries. Rules created in one space are not visible in another. Alert events are indexed globally, but UI access is filtered by space. ## API key management -Rules and notification policies use API keys for execution: +Rules and action policies use API keys for execution: - An API key is created when a rule or policy is saved. - The API key inherits the privileges of the user who created it. diff --git a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md index 4f5cceb259..faa367167b 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md +++ b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md @@ -26,7 +26,7 @@ No manual index configuration is required. The system creates these data streams ## {{kib}} advanced settings -Optional `kibana.yml` settings control how often {{kib}} cleans up API keys for notification policies after a policy is updated or deleted: +Optional `kibana.yml` settings control how often {{kib}} cleans up API keys for action policies after a policy is updated or deleted: | Setting | Default | Purpose | |---|---|---| diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md index bb6ccfa5a7..3cc9e3a4f4 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md @@ -29,7 +29,7 @@ The `action.type` field identifies what happened. Common values include: | `assign` | Assignment changed | | `tag` | Tag applied to the alert (recorded action) | | `resolve` | Episode or alert resolved | -| `unmatched` | No notification policy matched the episode, so no workflow ran for it under those policies | +| `unmatched` | No action policy matched the episode, so no workflow ran for it under those policies | The `untag` action type is not used. Tagging is recorded with the `tag` action type. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md b/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md index a15d54e60b..3a5483a821 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md +++ b/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md @@ -23,7 +23,7 @@ Typical columns include: - Type: Rule type, such as detect versus alert mode where applicable. - Schedule: How often the rule runs. - Last run: Last execution time and status. -- Tags: Labels for filtering and notification policy scoping. +- Tags: Labels for filtering and action policy scoping. - Enabled: Whether the rule is active. Exact columns can vary by release. Use column controls if your build exposes them. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md index 56b7ceb2b1..8987d6520a 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md @@ -4,12 +4,12 @@ applies_to: serverless: preview products: - id: kibana -description: "Select the right Kibana alerting v2 feature to reduce noise: thresholds, no-data handling, notification policies, throttling, snooze, rules on alerts, and more." +description: "Select the right Kibana alerting v2 feature to reduce noise: thresholds, no-data handling, action policies, throttling, snooze, rules on alerts, and more." --- # Reduce {{kib}} alerting v2 noise and false positives [reduce-noise-v2] -{{kib}} alerting v2 offers many ways to reduce noise, each applied at a different stage, from the {{esql}} query and lifecycle thresholds through notification policies, throttling, and manual controls. Selecting the wrong lever wastes effort and can hide real problems. This page helps you match a situation to a mechanism and explains how mechanisms combine in order so you can use them deliberately. +{{kib}} alerting v2 offers many ways to reduce noise, each applied at a different stage, from the {{esql}} query and lifecycle thresholds through action policies, throttling, and manual controls. Selecting the wrong lever wastes effort and can hide real problems. This page helps you match a situation to a mechanism and explains how mechanisms combine in order so you can use them deliberately. If multiple rows in the table apply, refer to [Using them together](#using-them-together). @@ -23,7 +23,7 @@ If multiple rows in the table apply, refer to [Using them together](#using-them- | The query returns no rows and no_data or recovery behavior is misleading | [No-data handling](reduce-noise/no-data-handling.md) | Configures how empty results are interpreted so gaps do not look like false recoveries or false alerts | | Notifications repeat for the same group on every evaluation | [Throttling](reduce-noise/throttle.md) | Enforces a minimum interval between notifications per notification group | | Recipients get too many separate messages for related episodes | [Notification grouping](reduce-noise/grouping.md) | Batches related alerts into fewer notifications | -| Notifications should only go out for certain episodes by severity, labels, or payload fields | [Matchers](reduce-noise/matcher.md) | Applies notification policy rule_labels scoping and KQL episode matching so only matching episodes route to workflows | +| Notifications should only go out for certain episodes by severity, labels, or payload fields | [Matchers](reduce-noise/matcher.md) | Applies action policy rule_labels scoping and KQL episode matching so only matching episodes route to workflows | | Planned maintenance: evaluations should continue but on-call should not be paged | [Maintenance windows](reduce-noise/maintenance-windows.md) | Pauses notifications for a scheduled window | | A temporary quiet period is needed for a series or episode without changing the rule | [Snooze or silence](reduce-noise/snooze-or-silence.md) | Snoozes or silences notifications. Acknowledge can also quiet an episode while work proceeds | | Many low-level alerts should roll up into one higher-level signal | [Rules on alerts](reduce-noise/rules-on-alerts.md) | Runs follow-on rules on `.rule-events` or related data to correlate and notify once | @@ -31,7 +31,7 @@ If multiple rows in the table apply, refer to [Using them together](#using-them- ## How each mechanism works -Mechanisms are listed in rough order: from what happens when rules run and how episodes change, through notification policy processing, to operator controls. +Mechanisms are listed in rough order: from what happens when rules run and how episodes change, through action policy processing, to operator controls. ### Author and tune the rule @@ -59,7 +59,7 @@ Configure how the rule treats empty results. Refer to [No-data handling](reduce- ### Notification matchers and grouping -Acts on: which episodes a notification policy considers and how they are batched +Acts on: which episodes an action policy considers and how they are batched Problem: Only some episodes should page the team, or messages should batch by service or host. @@ -116,7 +116,7 @@ Problem: One alert episode should drop out of triage while other series keep run ## Using them together [using-them-together] -These options stack. A common pattern is: tune the query for precision, add activation thresholds to ignore spikes, use matchers and throttling so notification policies only fire for the right episodes at a sustainable rate, and use {{maint-windows-cap}} or snooze during known change windows. +These options stack. A common pattern is: tune the query for precision, add activation thresholds to ignore spikes, use matchers and throttling so action policies only fire for the right episodes at a sustainable rate, and use {{maint-windows-cap}} or snooze during known change windows. Example: Noisy CPU rule @@ -124,10 +124,10 @@ Example: Noisy CPU rule |---|---|---| | The {{esql}} query flags any host over 70% | Tighten the query or add a stricter `WHERE` | Author and tune the rule | | Legitimate bursts open alerts for 1-minute spikes | Require 3 consecutive breaches before active | Activation thresholds | -| The same host pages every run for an hour | Add throttle and grouping on the notification policy | Throttle, grouping | +| The same host pages every run for an hour | Add throttle and grouping on the action policy | Throttle, grouping | | Only production hosts should page on-call | Add rule_labels and KQL on the policy | Matchers | | Database change window this evening | Open a {{maint-windows-cap}} or snooze the series | {{maint-windows-cap}}, snooze | ::::{note} -Order of application matters. Thresholds and no-data behavior affect lifecycle state before notification policies run. Matchers and throttling apply when notification policies are evaluated for each episode. Snooze and {{maint-windows-cap}} affect whether notifications send, not whether `.rule-events` documents are written. Check Discover if raw history is needed. +Order of application matters. Thresholds and no-data behavior affect lifecycle state before action policies run. Matchers and throttling apply when action policies are evaluated for each episode. Snooze and {{maint-windows-cap}} affect whether notifications send, not whether `.rule-events` documents are written. Check Discover if raw history is needed. :::: diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md index f5d9bf0a2f..13f9384f93 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md @@ -4,9 +4,9 @@ applies_to: serverless: preview products: - id: kibana -description: "Batch related Kibana alerting v2 alert episodes into fewer notifications using notification policy grouping by host, service, or custom fields." +description: "Batch related Kibana alerting v2 alert episodes into fewer notifications using action policy grouping by host, service, or custom fields." --- # {{kib}} alerting v2 notification grouping [reduce-noise-grouping-v2] -**Notification grouping** on a notification policy batches related **alert episodes** into fewer messages, reducing notification count without dropping evaluation results. +**Notification grouping** on an action policy batches related **alert episodes** into fewer messages, reducing notification count without dropping evaluation results. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md index eba6dc05a6..3e61ce3cf0 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md +++ b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md @@ -4,9 +4,9 @@ applies_to: serverless: preview products: - id: kibana -description: "Route only matching Kibana alerting v2 alert episodes to notification destinations using KQL matcher conditions on notification policies." +description: "Route only matching Kibana alerting v2 alert episodes to notification destinations using KQL matcher conditions on action policies." --- # {{kib}} alerting v2 notification matchers [matcher-v2] -**Notification policy matchers** are KQL expressions that determine which **alert episodes** a policy applies to. Only **episodes** that match the condition (after **rule_labels** scoping) are routed to the policy's workflow destinations. +**Action policy matchers** are KQL expressions that determine which **alert episodes** a policy applies to. Only **episodes** that match the condition (after **rule_labels** scoping) are routed to the policy's workflow destinations. diff --git a/explore-analyze/toc.yml b/explore-analyze/toc.yml index feb94a2d11..874d448623 100644 --- a/explore-analyze/toc.yml +++ b/explore-analyze/toc.yml @@ -405,10 +405,10 @@ toc: - file: alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md - file: alerting/kibana-alerting-v2/author-rules/rule-settings/no-data-handling.md - file: alerting/kibana-alerting-v2/author-rules/rule-settings/grouping.md - - file: alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md + - file: alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md children: - - file: alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md - - file: alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md + - file: alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md + - file: alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md - file: alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md - file: alerting/kibana-alerting-v2/author-rules/set-rule-data-sources.md - file: alerting/kibana-alerting-v2/author-rules/rules-on-alerts.md diff --git a/redirects.yml b/redirects.yml index 3e8c70d211..923795b957 100644 --- a/redirects.yml +++ b/redirects.yml @@ -879,3 +879,17 @@ redirects: 'reference/fleet/otel-integrations.md': anchors: 'otel-integrations-hybrid-policies': 'agent-policies-multiple-integrations' + +# Kibana alerting v2: notification policies renamed to action policies + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md' + anchors: + 'notification-policies-v2': 'action-policies-v2' + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md' + anchors: + 'create-manage-notification-policies-v2': 'create-manage-action-policies-v2' + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md' + anchors: + 'how-notification-policies-evaluated-v2': 'how-action-policies-evaluated-v2' From 3218bf4aacc1b153af4ccfb969421de880061c7f Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Fri, 17 Apr 2026 16:14:53 -0400 Subject: [PATCH 15/40] fix(docs): register H1 anchor IDs for action policy redirect remaps Elastic docs-builder only collects anchors from H2+ headings and inline $$$...$$$ markers, not from H1 bracket syntax. Redirect anchor remap targets must exist in that set, so add inline anchors matching the remap values for the three action policies pages. Made-with: Cursor --- .../author-rules/rule-settings/action-policies.md | 2 ++ .../action-policies/create-manage-action-policies.md | 2 ++ .../action-policies/how-action-policies-are-evaluated.md | 2 ++ 3 files changed, 6 insertions(+) diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md index 7c831a52b7..a399e439b8 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md @@ -9,6 +9,8 @@ description: "Action policies control how and when Kibana alerting v2 alerts rea # Kibana alerting v2 action policies [action-policies-v2] +$$$action-policies-v2$$$ + An action policy defines how and when alerts reach people and systems. In Kibana alerting v2, action policies are **global** saved objects: they are not attached to individual rules. Which rules a policy applies to is determined by **`rule_labels`** on the policy and by the episode matcher, not by references from the rule. ## Compare Kibana alerting v1 and v2 action policies diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md index b9692166a0..ef4b576ea5 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md @@ -9,6 +9,8 @@ description: "Create, configure, and manage Kibana alerting v2 action policies, # Create and manage Kibana alerting v2 action policies [create-manage-action-policies-v2] +$$$create-manage-action-policies-v2$$$ + Create action policies to control which alerts trigger notifications, how alerts are grouped, how frequently notifications are sent, and where they are routed. Policies are **global**: you create and edit them from the **Action Policies** area, not from the rule form. Rules do not “link” to policies. Scoping is defined on the policy with **`rule_labels`** and matchers. Refer to [Action policies](../action-policies.md). ## Create an action policy diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md index 0cba526207..477ded363e 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md +++ b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md @@ -9,6 +9,8 @@ description: "How Kibana alerting v2 action policies match alert episodes, apply # How Kibana alerting v2 action policies are evaluated [how-action-policies-evaluated-v2] +$$$how-action-policies-evaluated-v2$$$ + Action policies are separate from rules. After a rule runs and produces or updates alert episodes, the system decides which policies apply, whether notifications should go out, and which workflows receive them. You configure policies once. They can apply to many rules. ## How policies are matched to episodes From beffb409d80070193b05244747c5eaa25ca644b6 Mon Sep 17 00:00:00 2001 From: Nastasha Solomon <79124755+nastasha-solomon@users.noreply.github.com> Date: Mon, 20 Apr 2026 21:18:52 -0400 Subject: [PATCH 16/40] [Alerting v2] Adds to entry points and getting started (#5902) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Restructures the docset based on findings from testing M1. ## Generative AI disclosure 1. Did you use a generative AI (GenAI) tool to assist in creating this contribution? - [x] Yes - [ ] No Cursor + Composer --- docs/manifests/alerting-v2.yaml | 569 ++++++++++++++---- docset.yml | 1 + explore-analyze/alerting-overview.md | 39 +- .../alerting/choose-an-alerting-system.md | 58 +- .../alerting/kibana-alerting-v2.md | 114 ++-- .../alert-event-field-reference.md | 79 --- .../alerting-v2-privileges.md | 51 ++ .../alerting/kibana-alerting-v2/alerts.md | 63 ++ .../alert-states-and-fields-reference.md | 47 ++ .../query-alerts-and-signals-in-discover.md | 125 ++++ .../view-manage-and-reference-alerts.md | 83 +++ .../kibana-alerting-v2/author-rules.md | 66 -- .../author-rules/create-rules-discover.md | 41 -- .../author-rules/create-rules-ui.md | 64 -- .../author-rules/production-considerations.md | 14 - .../author-rules/rule-settings.md | 36 -- .../rule-settings/action-policies.md | 34 -- .../create-manage-action-policies.md | 48 -- .../how-action-policies-are-evaluated.md | 41 -- .../activation-and-recovery-thresholds.md | 44 -- .../author-rules/rule-settings/grouping.md | 23 - .../rule-settings/no-data-handling.md | 20 - .../rule-settings/schedule-and-lookback.md | 26 - .../author-rules/rule-settings/workflows.md | 12 - .../author-rules/rule-templates.md | 13 - .../author-rules/rule-types.md | 128 ---- .../author-rules/rules-on-alerts.md | 12 - .../author-rules/set-rule-data-sources.md | 12 - .../kibana-alerting-v2/before-you-begin.md | 40 -- .../before-you-begin/alerting-privileges.md | 53 -- .../before-you-begin/set-up.md | 45 -- .../kibana-alerting-v2/get-started.md | 61 ++ .../kibana-alerting-v2/manage-alerts.md | 12 - .../manage-alerts/explore-alerts-discover.md | 147 ----- .../manage-alerts/investigate-respond.md | 12 - .../investigate-respond/alert-actions.md | 43 -- .../alert-episode-details.md | 12 - .../manage-alerts/view-alerts.md | 12 - .../kibana-alerting-v2/manage-rules.md | 26 - .../manage-rules/snooze-disable-rules.md | 12 - .../manage-rules/view-manage-rules.md | 49 -- .../kibana-alerting-v2/notifications.md | 77 +++ .../notifications/action-policy-reference.md | 86 +++ .../create-configure-action-policy.md | 65 ++ .../notifications/manage-action-policies.md | 34 ++ .../kibana-alerting-v2/reduce-noise.md | 133 ---- .../reduce-noise/activation-thresholds.md | 12 - .../reduce-noise/deactivate-alerts.md | 12 - .../reduce-noise/grouping.md | 12 - .../reduce-noise/maintenance-windows.md | 12 - .../reduce-noise/matcher.md | 12 - .../reduce-noise/no-data-handling.md | 14 - .../reduce-noise/recovery-thresholds.md | 12 - .../reduce-noise/rules-on-alerts.md | 14 - .../reduce-noise/snooze-or-silence.md | 12 - .../reduce-noise/throttle.md | 12 - .../alerting/kibana-alerting-v2/rules.md | 39 ++ .../kibana-alerting-v2/rules/author-rules.md | 79 +++ .../rules/configure-a-rule.md | 123 ++++ .../rules/create-rule-from-discover.md | 33 + .../rules/create-rule-from-rule-builder.md | 20 + .../create-rule-with-yaml.md} | 20 +- .../rules/rule-event-field-reference.md | 104 ++++ .../rules/view-manage-rules.md | 34 ++ .../troubleshooting-alerting-v2.md | 283 +++++++++ .../workflows-alerting-v2.md | 44 ++ explore-analyze/toc.yml | 73 +-- redirects.yml | 375 +++++++++++- .../elastic-cloud-serverless/index.md | 2 +- 69 files changed, 2432 insertions(+), 1703 deletions(-) delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/alerting-v2-privileges.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/alerts.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/production-considerations.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/grouping.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/no-data-handling.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-templates.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-types.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/rules-on-alerts.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/author-rules/set-rule-data-sources.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/get-started.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/manage-alerts.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/manage-alerts/view-alerts.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/manage-rules.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/manage-rules/snooze-disable-rules.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/notifications.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/reduce-noise/activation-thresholds.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/reduce-noise/no-data-handling.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/reduce-noise/recovery-thresholds.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/reduce-noise/rules-on-alerts.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/reduce-noise/snooze-or-silence.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/reduce-noise/throttle.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/rules.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder.md rename explore-analyze/alerting/kibana-alerting-v2/{author-rules/create-rules-yaml.md => rules/create-rule-with-yaml.md} (71%) create mode 100644 explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/workflows-alerting-v2.md diff --git a/docs/manifests/alerting-v2.yaml b/docs/manifests/alerting-v2.yaml index 94df256ead..8866b7b86e 100644 --- a/docs/manifests/alerting-v2.yaml +++ b/docs/manifests/alerting-v2.yaml @@ -5,7 +5,7 @@ # docs skill to detect changes that require documentation updates. # # Owner: docs team (@nastasha-solomon) -# Last updated: 2026-03-23 +# Last updated: 2026-04-17 # Docs PR: https://github.com/elastic/docs-content/pull/5528 feature: alerting-v2 @@ -73,7 +73,7 @@ implementation_prs: summary: > Removes the `untag` action type from the alert actions schema. Tags are now managed exclusively via the `tag` action. The bulk-get query now returns the last `tag` action - per episode. Affects alert-actions.md (action type table) and any UI docs listing + per episode. Affects investigate-respond.md (action type table) and any UI docs listing available alert actions. author: adcoelho @@ -84,6 +84,57 @@ implementation_prs: Surfaces the Duration column in the alert list UI and alert episode detail view. author: adcoelho + # --- Alert episodes UI (list, detail, filters, row actions, Discover) --- + + - url: https://github.com/elastic/kibana/pull/260218 + title: "[ResponseOps][Alerting v2] Episodes page minimal filtering, searching and sorting" + summary: > + Episodes table: UnifiedDataGrid sorting; **Rule** and **Status** filters; debounced text search + on alert document fields (rule metadata not fully searchable until future rule lookup work). + Pagination removed in favor of a 1000-row cap and footer callout; fixes duration as milliseconds + and episodes query index `.rule-events`. Rule bulk-get accepts single string IDs. + author: umbopepato + + - url: https://github.com/elastic/kibana/pull/260195 + title: "[Alerting V2] Episode table actions" + summary: > + Episodes table actions from `.alert-actions`: **Snooze** / **Unsnooze** per `group_hash` (popover; + bell + expiry in status column); **Acknowledge** / **Unacknowledge** per episode; **Resolve** / + **Unresolve** per group (UI forces `inactive`); **Tags** display (tagging via API in this PR). + Per-action-type HTTP routes (public). Split episode vs group actions in the table. + author: adcoelho + + - url: https://github.com/elastic/kibana/pull/260942 + title: "[ResponseOps][Alerting v2] Episode details page" + summary: > + Full **episode detail page**: lifecycle heatmap, related episodes, grouping, filters, actions + shared with the list. Moves the episodes list into the `alerting_v2` plugin under **Stack Management** + navigation; refactors `@kbn/alerting-v2-episodes-ui` and adds related-episodes fetch wiring. + Observability may still deep-link; primary ownership shifts from PR #257638 o11y-only scope. + author: umbopepato + + - url: https://github.com/elastic/kibana/pull/261966 + title: "[Alerting V2] Edit episode tags" + summary: > + **Edit tags** on the alert episodes table and episode detail page: flyout with suggestions from + top episode tags plus new tag entry. v2-specific implementation (not reused from v1 alerts table). + author: adcoelho + + - url: https://github.com/elastic/kibana/pull/262288 + title: "[ResponseOps][Alerting v2] Implement episodes list filter by tags" + summary: > + **Tags** filter on the episodes list: multi-select with OR semantics on last tag set + (`MV_CONTAINS` / `last_tags`); tag options ES|QL capped at 500 rows; composes with rule, status, + search, and time range; cache invalidation when tags change (with PR #261966). + author: umbopepato + + - url: https://github.com/elastic/kibana/pull/262459 + title: "Add link to discover in alert episodes." + summary: > + **Discover** link from the alert episodes table: opens Discover with the rule ES|QL query and + absolute time ±15 minutes around the episode timestamp. + author: adcoelho + - url: https://github.com/elastic/kibana/pull/256527 title: "Store 'unmatched' action for unmatched alert episodes" summary: > @@ -95,18 +146,84 @@ implementation_prs: alert actions field reference. author: kdelemme + # --- Dispatcher pipeline (suppression, policy fetch, dispatch) --- + + - url: https://github.com/elastic/kibana/pull/256486 + title: "Fix suppression query" + summary: > + Replaces a left-associative OR chain in `getAlertEpisodeSuppressionsQuery` with a + concat + WHERE IN pattern so large episode batches do not exceed the ES|QL parser + expression depth limit. Affects dispatcher suppression logic against `.alert-actions`. + author: kdelemme + + - url: https://github.com/elastic/kibana/pull/256536 + title: "Use stored encrypted API keys from Notification Policy in dispatcher step to trigger workflow" + summary: > + Wires `DispatchStep` to decrypt the policy API key via ESO, build a scoped + `KibanaRequest`, and run workflow destinations through `WorkflowsManagementApi`. + Adds `bulkGetDecryptedByIds` on the action policy saved object service and + refactors `FetchPoliciesStep` to populate decrypted keys in pipeline state. + author: kdelemme + + - url: https://github.com/elastic/kibana/pull/259182 + title: "feat(alertingv2): make dispatcher space-aware" + summary: > + Derives `spaceId` from saved object namespaces for rules and action policies; + enforces same-space matching in the dispatcher; resolves workflows in the policy's + space instead of a hardcoded default. Touches FetchRulesStep, FetchPoliciesStep, + EvaluateMatchersStep, BuildGroupsStep, and DispatchStep. + author: kdelemme + # --- Action policies (docs); implementation paths may still use notification_policy --- + - url: https://github.com/elastic/kibana/pull/253134 + title: "chore(rna): update notification policy" + summary: > + Major action policy schema alignment: replaces `workflow_id` with a + typed `destinations` array; adds optional `matcher`, `group_by`, and `throttle`; + moves shared Zod types into `@kbn/alerting-v2-schemas`; adds `getNotificationPolicies({ ids })` + and SO `bulkGetByIds` for dispatcher batch fetch. Docs should use destinations/matcher + terminology and final field casing from follow-up PR #258237. + author: kdelemme + + - url: https://github.com/elastic/kibana/pull/254808 + title: "Store API key owner on Notification Policy" + summary: > + Stores encrypted ES or UIAM API key on the action policy saved object (ESO), + with `apiKeyOwner` / `apiKeyCreatedByUser` as AAD fields; creates or rotates keys on + create/update; strips secrets from API responses. Precedes dispatcher use in PR #256536 + and invalidation flow in PRs #257377 / #258094. + author: kdelemme + + - url: https://github.com/elastic/kibana/pull/256759 + title: "[Alerting v2] Add enable, disable, snooze and bulk action routes for notification policies" + summary: > + Adds `_enable`, `_disable`, `_snooze`, and `_bulk` routes; introduces `enabled` and + `snoozedUntil` on the policy SO; dispatcher `EvaluateMatchersStep` skips disabled or + snoozed policies; bulk state updates use `bulkUpdate`. + author: kdelemme + - url: https://github.com/elastic/kibana/pull/256940 title: "Make notification policies global with optional rule-label scoping" summary: > - Decouples notification policies from rules. Policies are now global — all policies are + Decouples action policies from rules. Policies are now global — all policies are evaluated for every alert episode by default. Rules no longer reference specific policies via `notification_policies: [{ ref: policyId }]`. An optional `rule_labels` field on the policy scopes it to rules whose `metadata.labels` match. The dispatcher fetches all policies every tick via `findAllDecrypted()`. The Step 6 matcher now uses two-phase matching: first rule-label scoping (empty `ruleLabels` = catch-all), then KQL episode evaluation. Affects action policy schema docs, create/manage how-to, and dispatcher pipeline docs. + Superseded in part by PR #257279 (rule-aware KQL and removal of `rule_labels` from the SO). + author: kdelemme + + - url: https://github.com/elastic/kibana/pull/257279 + title: "[Alerting v2] Add search, filtering, sorting, and state management to notification policies" + summary: > + Extends the list policies API with search, filter, and sort query params; adds UI for + list filtering and per-row enable/disable/snooze/unsnooze; adds unsnooze and bulk + state routes. Removes `rule_labels` from the policy SO and form — matcher KQL is + evaluated with episode + rule context (`EvaluateMatchersStep`); extends `kbn-eval-kql` + for array membership. Overlaps with PR #256759 for state APIs and PR #258862 for bulk list actions. author: kdelemme - url: https://github.com/elastic/kibana/pull/258010 @@ -127,6 +244,22 @@ implementation_prs: Affects any doc describing the action policy matcher field. author: kdelemme + - url: https://github.com/elastic/kibana/pull/258237 + title: "[Alerting v2] align notification policy casing to camelCase" + summary: > + Aligns policy request/response, saved object, UI, and dispatcher contracts to camelCase + (`groupBy`, `snoozedUntil`, etc.); fixes partial updates and field clearing; adds + `createdByUsername` / `updatedByUsername`; list UI shows workflow count popover and + removes redundant filters. Docs and examples must use camelCase field names. + author: kdelemme + + - url: https://github.com/elastic/kibana/pull/259114 + title: "feat(alertingv2): update list notification policies table" + summary: > + Follow-up UX and table behavior for the action policies list page + (builds on PR #257279). Track for list-page screenshots, column labels, and bulk/row actions docs. + author: kdelemme + - url: https://github.com/elastic/kibana/pull/258862 title: "[Alerting v2] Add bulk actions for notification policies" summary: > @@ -135,6 +268,14 @@ implementation_prs: Affects create/manage action policy how-to and any policy management reference. author: kdelemme + - url: https://github.com/elastic/kibana/pull/259390 + title: "[Alerting v2] Add update API key for notification policies" + summary: > + Adds `POST .../notification_policies/{id}/_update_api_key` to rotate the policy API key + without changing other attributes; extends bulk actions with `update_api_key`; surfaces + “Update API key” in the list UI (row and bulk). Complements PRs #257377 and #258094. + author: kdelemme + - url: https://github.com/elastic/kibana/pull/257377 title: "[Alerting V2] mark np api keys for invalidation" summary: > @@ -147,10 +288,10 @@ implementation_prs: - url: https://github.com/elastic/kibana/pull/258094 title: "[Alerting V2] Schedule task for notification policies API key invalidation" summary: > - Introduces a recurring Task Manager task (`alerts_invalidate_api_keys`) that - invalidates API keys marked for removal. Configurable via: - `xpack.alerting.invalidateApiKeysTask.interval` (default: `5m`) - `xpack.alerting.invalidateApiKeysTask.removalDelay` (default: `1h`) + Introduces a recurring Task Manager task (`alerting_v2:invalidate_api_keys`) that + invalidates API keys marked for removal (pending invalidation SOs). Configurable via: + `xpack.alerting_v2.invalidateApiKeysTask.interval` (default: `5m`) + `xpack.alerting_v2.invalidateApiKeysTask.removalDelay` (default: `1h`) Affects setup/configuration docs and production considerations. author: adcoelho @@ -161,44 +302,113 @@ implementation_prs: summary: > Adds the No-data handling control block to the v2 rule form. Controls are visible for `kind=alert` only; hidden for `kind=signal`. Adds `noData.behavior` and related - fields to the rule schema. Affects rule-settings/no-data-handling.md and - author-rules/create-rules-ui.md. + fields to the rule schema. Affects author-rules/rule-settings.md (no-data section) and + author-rules/create-rule-from-rule-builder.md. author: yiannisnikolopoulos - url: https://github.com/elastic/kibana/pull/257324 title: "[Alerting v2] rule form - preview chart" summary: > Adds a Lens-powered bar chart histogram to the rule preview panels (evaluation and - recovery), showing the count of matching rows over time. Affects create-rules-ui.md + recovery), showing the count of matching rows over time. Affects create-rule-from-rule-builder.md and any doc describing the rule form preview experience. author: dominiqueclarke # --- Rule management UI --- + - url: https://github.com/elastic/kibana/pull/256260 + title: "[Alerting v2] foundational rule list" + summary: > + Rewrites the v2 rules list with EuiBasicTable and React Query (paginated list, + create/edit/delete flows, delete confirmation). Precursor to rule details, filters, + and bulk operations. Affects manage-rules docs for list columns and navigation. + author: dominiqueclarke + - url: https://github.com/elastic/kibana/pull/256692 title: "[Alerting v2] Rule Details Page" summary: > Implements the v2 rule details page: header with rule name, kind (Detect/Alert) badge, enabled/disabled state, tags, rule conditions (ES|QL base query and alert - condition section), and rule-level actions. Affects manage-rules/view-manage-rules.md. + condition section), and rule-level actions. Affects manage-rules.md. author: yiannisnikolopoulos - url: https://github.com/elastic/kibana/pull/258341 title: "[Alerting v2] rule list bulk enable disable delete select all" summary: > Adds bulk operations (enable, disable, delete) and select-all to the v2 rules list. - Affects manage-rules/view-manage-rules.md. + Affects manage-rules.md. author: dominiqueclarke + - url: https://github.com/elastic/kibana/pull/260233 + title: "[RnA - Alerting V2] Add filtering and sorting to the rule list (name, mode, tags, status)" + summary: > + Server-side filters (enabled, mode, labels), search, column sorting, tag facet API + (`GET /internal/alerting/v2/rule/_tags`), and pagination reset when query changes. + Affects manage-rules.md. + author: ana-davydova + + - url: https://github.com/elastic/kibana/pull/260270 + title: "[Alerting v2] Runbook UI" + summary: > + Adds a Conditions | Runbook tab bar on the rule details page; renders runbook markdown + from runbook artifacts. Extends PR #256692. Affects rule details documentation. + author: baileycash-elastic + + - url: https://github.com/elastic/kibana/pull/261442 + title: "[Alerting v2] Bulk rules ops: 10k cap, list filter scope, and UI disclosure" + summary: > + Caps filter-based bulk enable/disable/delete at 10,000 rules with truncation metadata; + select-all bulk operations respect active list filters and search (shared KQL with the + list API). Builds on PR #258341. + author: dominiqueclarke + + # --- Alerting v2 navigation (Management URLs and solution entry points) --- + + - url: https://github.com/elastic/kibana/pull/260355 + title: "Alerting v2 navigation updates" + summary: > + Registers a dedicated Management section "V2 Alerting Preview" with separate Rules and + Notification Policies apps, new `/app/management/alertingV2/*` URLs, BreadcrumbContext + for serverless, and solution/serverless nav links (Observability, Security ESS, Search, + Enterprise Search) gated by `alertingVTwo`. Docs must stay aligned with navigation paths. + author: baileycash-elastic + + - url: https://github.com/elastic/kibana/pull/260798 + title: "Add V2 Alerting Preview to Security ESS navigation" + summary: > + Follow-up to PR #260355: adds the capability-gated "V2 Alerting Preview" section under + Stack Management in the Security ESS solution navigation (`management:rules`, + `management:notification_policies` deep links). + author: baileycash-elastic + + # --- Discover: create-rule entry point --- + + - url: https://github.com/elastic/kibana/pull/260844 + title: "Move v2 ES|QL rule creation into Discover Alerts menu" + summary: > + Moves "Create ES|QL rule" into the Discover Alerts popover (with a New badge) instead of + a separate top-level Rules menu item; closes rna-program#292. Affects create-rule-from-rule-builder.md + and Discover integration docs. + author: dominiqueclarke + + # --- RnA program (cross-repo tracking) --- + + - url: https://github.com/elastic/rna-program/issues/115 + title: "[RnA program] Issue #115" + summary: > + Program-level tracking in elastic/rna-program; use the issue for scope and acceptance + criteria alongside Kibana PRs (issue may be private). + author: rna-program + # --- Observability integration --- - url: https://github.com/elastic/kibana/pull/257638 title: "[ResponseOps][RnA] Minimal alerting episodes o11y page" summary: > - Introduces a minimal alerting episodes page in Observability at - `/app/observability/alerts_v2`. Creates `@kbn/alerting-v2-episodes-ui` package - with reusable components, ES|QL-based data fetching, pagination, and an episode - status badge. No corresponding doc page exists yet — flagged as a docs gap. + Foundational alerting episodes experience in Observability at `/app/observability/alerts_v2`: + creates `@kbn/alerting-v2-episodes-ui` (components, ES|QL fetch hooks, episode status badge). + List/detail navigation and Stack Management placement evolved in PR #260942; keep this entry + for package origin and Observability entry points. Doc page still TBD — see `alerting-v2-o11y-episodes`. author: umbopepato # --- Rule execution history --- @@ -286,7 +496,7 @@ entries: event log, maintenance windows, notifications allowlist, troubleshooting. # --------------------------------------------------------------------------- - # Kibana alerting v2 — overview + # {{alerting-v2}} — hub (conceptual landing + glossary) # --------------------------------------------------------------------------- - id: alerting-v2-overview @@ -295,22 +505,45 @@ entries: docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 + - https://github.com/elastic/kibana/pull/260355 + - https://github.com/elastic/kibana/pull/260798 watch_paths: - x-pack/platform/plugins/shared/alerting/common/ - x-pack/platform/plugins/shared/alerting/public/ doc_set: serverless: preview notes: > - V2 alerting section landing page and conceptual overview. Review on major v2 + V2 alerting section hub: conceptual overview, glossary, and setup order. Review on major v2 architectural changes or when new top-level v2 capabilities ship. + PRs #260355 / #260798 — solution and Management entry points for the v2 apps; + keep high-level "where to open Rules V2" language consistent with get-starting.md (setup). + + # --------------------------------------------------------------------------- + # {{alerting-v2}} — send notifications (hub; peers with Getting started, Author rules, etc.) + # --------------------------------------------------------------------------- + + - id: alerting-v2-send-notifications + content_type: conceptual + docs_file: explore-analyze/alerting/kibana-alerting-v2/notifications.md + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: + - https://github.com/elastic/kibana/pull/247464 + watch_paths: + - x-pack/platform/plugins/shared/alerting/server/notification_policy/ + - x-pack/platform/plugins/shared/alerting/server/dispatcher/ + doc_set: + serverless: preview + notes: > + Landing page for the "Send notifications" IA bucket. Links to action policies, + matcher/grouping/throttle under action-policies/, and canonical Workflows docs. # --------------------------------------------------------------------------- - # Kibana alerting v2 — before you begin + # {{alerting-v2}} — get started (setup, privileges, concepts siblings) # --------------------------------------------------------------------------- - - id: alerting-v2-before-you-begin + - id: alerting-v2-get-started content_type: conceptual - docs_file: explore-analyze/alerting/kibana-alerting-v2/before-you-begin/ + docs_file: explore-analyze/alerting/kibana-alerting-v2/get-started.md docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 @@ -320,19 +553,21 @@ entries: doc_set: serverless: preview notes: > - Covers privileges (alerting-privileges.md) and setup (set-up.md). - See alerting-v2-set-up for the setup page entry, which tracks additional PRs - for the index renames and new API key invalidation task config. + Get started hub: enable/verify UI, data streams, stack requirements, privileges, + spaces/API keys, optional `kibana.yml` invalidation settings, next-step links. + alerting-v2-set-up is the procedural manifest entry for the same file. - id: alerting-v2-set-up content_type: procedural - docs_file: explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md + docs_file: explore-analyze/alerting/kibana-alerting-v2/get-started.md docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 - https://github.com/elastic/kibana/pull/254901 - https://github.com/elastic/kibana/pull/258651 - https://github.com/elastic/kibana/pull/258094 + - https://github.com/elastic/kibana/pull/260355 + - https://github.com/elastic/kibana/pull/260798 watch_paths: - x-pack/platform/plugins/shared/alerting/server/data_streams/ - x-pack/platform/plugins/shared/alerting/server/index.ts @@ -340,30 +575,34 @@ entries: doc_set: serverless: preview notes: > - Documents index configuration, plugin dependencies, and verification steps. + Setup and verify (enablement, `.rule-events` / `.alert-actions`, UI checks) and + `kibana.yml` invalidation task settings; lives on get-started.md with setup and verify. High-priority for updates on three counts: • Index rename chain — final names are `.rule-events` and `.alert-actions` (see chain note at top of file). The current draft uses `.alerts-events-*` and `.alerts-actions`; these must be updated. • PR #258094 — adds a new Task Manager task for API key invalidation with two configurable Kibana settings to document: - `xpack.alerting.invalidateApiKeysTask.interval` (default: `5m`) - `xpack.alerting.invalidateApiKeysTask.removalDelay` (default: `1h`) - • Review the "Verify the installation" step if the navigation path - (`Management > Alerts and Insights > Rules V2`) changes. + `xpack.alerting_v2.invalidateApiKeysTask.interval` (default: `5m`) + `xpack.alerting_v2.invalidateApiKeysTask.removalDelay` (default: `1h`) + • PRs #260355 / #260798 — Management and solution navigation for v2 (dedicated + "V2 Alerting Preview" section, `/app/management/alertingV2/*` apps, solution nav + entry points). Review every UI navigation step in this page for path and label drift + versus "Alerts and Insights > Rules V2" wording in older drafts. # --------------------------------------------------------------------------- - # Kibana alerting v2 — author rules + # {{alerting-v2}} — author rules # --------------------------------------------------------------------------- - id: alerting-v2-author-rules content_type: procedural - docs_file: explore-analyze/alerting/kibana-alerting-v2/author-rules/ + docs_file: explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 - https://github.com/elastic/kibana/pull/255734 - https://github.com/elastic/kibana/pull/257324 + - https://github.com/elastic/kibana/pull/260844 watch_paths: - x-pack/platform/plugins/shared/alerting/common/rules/ - x-pack/platform/plugins/shared/alerting/server/rules_client/ @@ -372,27 +611,41 @@ entries: doc_set: serverless: preview notes: > - How-to content for creating and configuring v2 rules. Covers: create via UI, - Discover flyout, YAML; rule types; rule templates; rules on alerts; set data sources; - production considerations; and the full rule-settings subtree. + Rule authoring concepts (ES|QL, modes, conditions). Create flows live on + create-rule-from-rule-builder.md, create-rule-from-discover.md, and create-rule-with-yaml.md. + Also covers: rule templates; rules on alerts; set data sources; + production considerations; rule-settings.md (schedule, thresholds, no-data, grouping, + maintenance). Action policies and workflow integration: notifications.md and workflows-alerting-v2.md. • PR #255734 — no-data handling UI now live in the rule form (kind=alert only); - no-data-handling.md needs to reflect the form controls and the `noData.behavior` field. + rule-settings.md no-data section needs to reflect the form controls and the `noData.behavior` field. • PR #257324 — preview chart added to rule form (Lens histogram showing matching - row counts over time for evaluation and recovery previews). create-rules-ui.md + row counts over time for evaluation and recovery previews). create-rule-from-rule-builder.md should describe this panel. + • PR #260844 — Discover: create ES|QL rule moved into the Alerts menu popover (with + a New badge) instead of a separate top-level Rules entry; update create-rule-from-rule-builder.md + steps that reference Discover navigation. See separate entries for action-policies pages, which track additional PRs. - id: alerting-v2-action-policies content_type: procedural - docs_file: explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md + docs_file: explore-analyze/alerting/kibana-alerting-v2/notifications.md docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 + - https://github.com/elastic/kibana/pull/253134 + - https://github.com/elastic/kibana/pull/254808 - https://github.com/elastic/kibana/pull/256527 + - https://github.com/elastic/kibana/pull/256759 - https://github.com/elastic/kibana/pull/256940 + - https://github.com/elastic/kibana/pull/257279 - https://github.com/elastic/kibana/pull/258010 + - https://github.com/elastic/kibana/pull/258237 - https://github.com/elastic/kibana/pull/258917 + - https://github.com/elastic/kibana/pull/259114 - https://github.com/elastic/kibana/pull/258862 + - https://github.com/elastic/kibana/pull/259390 + - https://github.com/elastic/kibana/pull/257377 + - https://github.com/elastic/kibana/pull/258094 watch_paths: - x-pack/platform/plugins/shared/alerting/server/notification_policy/ - x-pack/platform/plugins/shared/alerting/public/pages/notification_policies/ @@ -401,25 +654,36 @@ entries: notes: > Overview page for action policies. Several significant implementation changes affect the conceptual description of what policies are and how they work: - • PR #256940 — Policies are now global, not rule-scoped. The concept page must drop any - description of rules referencing specific policies by ID. Scoping is now done via - `rule_labels` on the policy itself. + • PR #253134 / #258237 — policy shape uses `destinations`, optional `matcher`, `groupBy`, + `throttle`; camelCase API/SO contracts. + • PR #254808 / #259390 — encrypted API keys on policies; optional manual key rotation route + and bulk `update_api_key`; invalidation via PRs #257377 and #258094. + • PR #256940 — Policies are global (not rule-linked by ID). PR #257279 removes `rule_labels` + from the SO; scoping is via KQL matcher with rule fields in context. • PR #256527 — describes what happens when no policy matches an episode (`unmatched`). - • PR #258917 — matcher is now a KQL field with autocomplete; the context schema - (`episode_status`, `rule.name`, `rule.labels`, `data.*`) is worth documenting here. - • PR #258862 — bulk enable/disable/snooze/delete now available in the policy list UI. - • PR #258010 — workflow selection is dynamic (search-based); update any description - of the workflow field in the policy form. + • PR #256759 — `enabled` / `snoozedUntil`; dispatcher skips disabled or snoozed policies. + • PR #257279 / #259114 — list page search, filters, sort, state badges, and table UX. + • PR #258917 — matcher uses KQL `QueryStringInput`; context includes `rule.name`, `rule.labels`, etc. + • PR #258862 — bulk enable, disable, snooze, delete (and related list actions). + • PR #258010 — workflow selection is dynamic (search-based). - id: alerting-v2-create-action-policies content_type: procedural - docs_file: explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md + docs_file: explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 + - https://github.com/elastic/kibana/pull/253134 + - https://github.com/elastic/kibana/pull/254808 + - https://github.com/elastic/kibana/pull/256759 - https://github.com/elastic/kibana/pull/256940 + - https://github.com/elastic/kibana/pull/257279 - https://github.com/elastic/kibana/pull/258010 + - https://github.com/elastic/kibana/pull/258237 + - https://github.com/elastic/kibana/pull/258917 + - https://github.com/elastic/kibana/pull/259114 - https://github.com/elastic/kibana/pull/258862 + - https://github.com/elastic/kibana/pull/259390 - https://github.com/elastic/kibana/pull/257377 - https://github.com/elastic/kibana/pull/258094 watch_paths: @@ -429,23 +693,53 @@ entries: serverless: preview notes: > CRUD how-to for action policies. - • PR #256940 — schema change: remove any reference to `notification_policies` on rules. - Add documentation for the new `rule_labels` field (scoping policies to specific rules). - • PR #258010 — workflow selector is now a dynamic search field, not a static dropdown. - • PR #258862 — document bulk actions (enable, disable, snooze, delete) from the list page. - • PR #257377 and #258094 — API keys are automatically managed; when a policy is updated or - deleted, the old key is marked for invalidation. May be worth a note in an API key - section or production guidance callout. + • PR #253134 / #258237 — document `destinations`, matcher, `groupBy`, throttle, and camelCase fields. + • PR #256940 / #257279 — policies are global; matcher KQL can reference rule metadata (no `rule_labels` field on SO after #257279). + • PR #256759 — enable, disable, snooze, unsnooze, and bulk state APIs. + • PR #258010 — workflow selector is a dynamic search field. + • PR #257279 / #259114 — list page search, filters, sort, row actions, and table refinements. + • PR #258862 — bulk enable, disable, snooze, delete from the list UI. + • PR #259390 — “Update API key” row and bulk action. + • PR #257377 / #258094 — key rotation and scheduled invalidation (`xpack.alerting_v2.invalidateApiKeysTask.*`). + + - id: alerting-v2-action-policy-reference + content_type: reference + docs_file: explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference.md + docs_pr: https://github.com/elastic/docs-content/pull/5528 + implementation_prs: + - https://github.com/elastic/kibana/pull/247464 + - https://github.com/elastic/kibana/pull/253134 + - https://github.com/elastic/kibana/pull/256759 + - https://github.com/elastic/kibana/pull/256940 + - https://github.com/elastic/kibana/pull/257279 + - https://github.com/elastic/kibana/pull/258237 + - https://github.com/elastic/kibana/pull/258917 + - https://github.com/elastic/kibana/pull/259114 + watch_paths: + - x-pack/platform/plugins/shared/alerting/server/notification_policy/ + - x-pack/platform/plugins/shared/alerting/public/pages/notification_policies/ + doc_set: + serverless: preview + notes: > + Consolidated API and UI mapping tables for matchers, grouping, throttling, dispatch outcomes, + and workflow destinations. Split from create-configure-action-policy.md. - id: alerting-v2-action-policies-eval content_type: conceptual - docs_file: explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md + docs_file: explore-analyze/alerting/kibana-alerting-v2/notifications.md docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 + - https://github.com/elastic/kibana/pull/253134 + - https://github.com/elastic/kibana/pull/256486 - https://github.com/elastic/kibana/pull/256527 + - https://github.com/elastic/kibana/pull/256536 + - https://github.com/elastic/kibana/pull/256759 - https://github.com/elastic/kibana/pull/256940 + - https://github.com/elastic/kibana/pull/257279 + - https://github.com/elastic/kibana/pull/258237 - https://github.com/elastic/kibana/pull/258917 + - https://github.com/elastic/kibana/pull/259182 watch_paths: - x-pack/platform/plugins/shared/alerting/server/dispatcher/ - x-pack/platform/plugins/shared/alerting/server/dispatcher/steps/store_actions_step.ts @@ -453,24 +747,25 @@ entries: doc_set: serverless: preview notes: > - Documents the 10-step dispatcher pipeline. Three PRs change the pipeline logic: - • PR #256940 — Step 4 now fetches ALL action policies via `findAllDecrypted()`, - not just those referenced by rules. Step 6 (evaluate matchers) now uses two-phase - matching: (1) check `rule_labels` scoping (empty = catch-all), then (2) evaluate - the KQL episode matcher. Update the step descriptions accordingly. - • PR #256527 — Step 10 outcomes table is missing `unmatched` (episodes with no matching - policy). Add: `unmatched` / user-facing explanation (stored reason may still be `no matching notification policy`). - • PR #258917 — matcher is a KQL expression evaluated in-process. The `MatcherContext` - schema now has named fields with autocomplete: `episode_status`, `rule.name`, - `rule.labels`, `data.*`. Update Step 6 to reflect the available matcher fields. + Documents the dispatcher pipeline and policy evaluation: + • PR #256486 — suppression query against alert actions avoids deep OR trees (WHERE IN pattern). + • PR #256536 — dispatch runs workflows using decrypted policy API keys (FetchPolicies + Dispatch steps). + • PR #259182 — space-aware fetch, matching, and workflow execution (`spaceId` from namespaces). + • PR #256759 — disabled or snoozed policies are skipped during matcher evaluation. + • PR #256940 — Step 4 fetches policies via `findAllDecrypted()` / global policy model. + • PR #257279 — removes `rule_labels` from policies; Step 6 evaluates KQL against episode + rule context; + array membership support in KQL evaluator. + • PR #256527 — `unmatched` outcome when no policy matches (stored reason may still use the string `no matching notification policy`). + • PR #258917 — KQL matcher UI and `MatcherContext` fields (`episode_status`, `rule.name`, `rule.labels`, `data.*`). + • PR #253134 / #258237 — policy shape (`destinations`, etc.) and camelCase fields flow through the pipeline. # --------------------------------------------------------------------------- - # Kibana alerting v2 — manage alerts + # {{alerting-v2}} — manage alerts # --------------------------------------------------------------------------- - id: alerting-v2-manage-alerts content_type: procedural - docs_file: explore-analyze/alerting/kibana-alerting-v2/manage-alerts/ + docs_file: explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 @@ -481,33 +776,48 @@ entries: serverless: preview notes: > How-to content for managing and triaging alerts. See per-file entries below - for view-alerts, explore-alerts-discover, investigate-respond/alert-actions, - and investigate-respond/alert-episode-details, which each carry additional PR dependencies. + for manage-alerts (episodes table), alert-states-and-fields-reference, explore-alerts-discover, + and investigate-respond (episode detail + alert actions consolidated). - id: alerting-v2-view-alerts content_type: procedural - docs_file: explore-analyze/alerting/kibana-alerting-v2/manage-alerts/view-alerts.md + docs_file: explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 + - https://github.com/elastic/kibana/pull/257638 - https://github.com/elastic/kibana/pull/258353 - https://github.com/elastic/kibana/pull/257347 - https://github.com/elastic/kibana/pull/258643 + - https://github.com/elastic/kibana/pull/260218 + - https://github.com/elastic/kibana/pull/260195 + - https://github.com/elastic/kibana/pull/260942 + - https://github.com/elastic/kibana/pull/261966 + - https://github.com/elastic/kibana/pull/262288 + - https://github.com/elastic/kibana/pull/262459 watch_paths: - x-pack/platform/plugins/shared/alerting/public/pages/alerts/ + - x-pack/platform/plugins/shared/alerting_v2/public/pages/ + - packages/kbn-alerting-v2-episodes-ui/ - x-pack/platform/plugins/shared/alerting/server/routes/alerts/bulk_get_alert_actions.ts doc_set: serverless: preview notes: > - Alert inbox UI: columns, quick filters, search, timeline chart, pagination. - • PR #257347 — adds the Duration column to the alert list (via episode view query update). - • PR #258353 — bulk-get alert actions populates per-episode status in alert list rows. - • PR #258643 — `untag` is removed from available alert actions; update the "Alert actions" - section to remove any reference to untagging. + Alert inbox / alert episodes table: triage, filters, sorting, row actions, Discover link. + • PR #257638 — initial Observability episodes page and `@kbn/alerting-v2-episodes-ui` package. + • PR #257347 — Duration column (episode view query). + • PR #258353 — bulk-get alert actions for per-row status (verify still used after #260195 refactors). + • PR #258643 — remove `untag` from docs; tags via `tag` action only. + • PR #260218 — rule/status filters, column sort, text search, 1000-row cap (no pagination). + • PR #260195 — snooze, ack, resolve, tag display; per-action routes. + • PR #260942 — episode detail page; list under alerting_v2 / Stack Management (plus Observability links). + • PR #261966 — **Edit tags** flyout on list and detail. + • PR #262288 — **Tags** filter (OR semantics, options cap 500). + • PR #262459 — **Discover** link with rule query and ±15m time window. - id: alerting-v2-explore-alerts-discover content_type: procedural - docs_file: explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md + docs_file: explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover.md docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 @@ -525,24 +835,29 @@ entries: - id: alerting-v2-investigate-respond content_type: procedural - docs_file: explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond.md + docs_file: explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 - https://github.com/elastic/kibana/pull/258353 - https://github.com/elastic/kibana/pull/258643 + - https://github.com/elastic/kibana/pull/260195 + - https://github.com/elastic/kibana/pull/260942 + - https://github.com/elastic/kibana/pull/261966 + - https://github.com/elastic/kibana/pull/262459 watch_paths: - x-pack/platform/plugins/shared/alerting/public/pages/alerts/ - x-pack/platform/plugins/shared/alerting/server/routes/alerts/ doc_set: serverless: preview notes: > - Section landing for the investigate and respond subtree. See child page entries - for the more specifically-mapped alert-actions and alert-episode-details pages. + Episode detail page and alert actions (`.alert-actions`, scope tables, action types). + Consolidated from former alert-episode-details and alert-actions pages. Tracks PRs #260195 + (table actions), #260942 (detail page), #261966 (edit tags), #262459 (Discover). - id: alerting-v2-alert-actions content_type: reference - docs_file: explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md + docs_file: explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference.md docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 @@ -551,6 +866,8 @@ entries: - https://github.com/elastic/kibana/pull/256527 - https://github.com/elastic/kibana/pull/254901 - https://github.com/elastic/kibana/pull/258651 + - https://github.com/elastic/kibana/pull/260195 + - https://github.com/elastic/kibana/pull/261966 watch_paths: - x-pack/platform/plugins/shared/alerting/server/routes/alerts/bulk_get_alert_actions.ts - x-pack/platform/plugins/shared/alerting/server/dispatcher/steps/store_actions_step.ts @@ -568,58 +885,84 @@ entries: (final name after second rename). Also update any ESQL view references. • PR #258353 — the bulk-get API (`_bulk_get`) is described implicitly here; verify accuracy of the API reference once the route stabilises. + • PR #260195 — per-action-type create routes used by the episodes table; UI labels (e.g. Resolve). + • PR #261966 — users can add tags from the UI (not only API). - id: alerting-v2-episode-details content_type: procedural - docs_file: explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md + docs_file: explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 - https://github.com/elastic/kibana/pull/258353 - https://github.com/elastic/kibana/pull/257347 + - https://github.com/elastic/kibana/pull/260195 + - https://github.com/elastic/kibana/pull/260942 + - https://github.com/elastic/kibana/pull/261966 watch_paths: - x-pack/platform/plugins/shared/alerting/public/pages/alerts/ + - x-pack/platform/plugins/shared/alerting_v2/public/pages/ + - packages/kbn-alerting-v2-episodes-ui/ - x-pack/platform/plugins/shared/alerting/server/routes/alerts/bulk_get_alert_actions.ts doc_set: serverless: preview notes: > - Alert episode detail flyout / page. - • PR #258353 — bulk-get alert actions enables the episode status display in this view. - • PR #257347 — episode duration surfaces in the episode detail panel from the updated view query. + Alert episode detail page (and any legacy flyout references). + • PR #260942 — full detail page: heatmap, related episodes, grouping, shared action bar. + • PR #260195 — acknowledge, snooze, resolve, etc. on the detail page (parity with list). + • PR #261966 — **Edit tags** flyout from the detail page. + • PR #258353 — bulk-get alert actions for status display. + • PR #257347 — duration in the episode view. # --------------------------------------------------------------------------- - # Kibana alerting v2 — manage rules + # {{alerting-v2}} — manage rules # --------------------------------------------------------------------------- - id: alerting-v2-manage-rules content_type: procedural - docs_file: explore-analyze/alerting/kibana-alerting-v2/manage-rules/ + docs_file: explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules.md docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 + - https://github.com/elastic/kibana/pull/256260 - https://github.com/elastic/kibana/pull/256692 - https://github.com/elastic/kibana/pull/258341 + - https://github.com/elastic/kibana/pull/260233 + - https://github.com/elastic/kibana/pull/260270 + - https://github.com/elastic/kibana/pull/261442 + - https://github.com/elastic/kibana/pull/260355 + - https://github.com/elastic/kibana/pull/260798 + - https://github.com/elastic/rna-program/issues/115 watch_paths: - x-pack/platform/plugins/shared/alerting/public/pages/rules/ - x-pack/platform/plugins/shared/alerting/server/rules_client/ + - x-pack/platform/plugins/shared/alerting_v2/public/pages/ doc_set: serverless: preview notes: > How-to content for the rule management UI: view, edit, clone, enable/disable, - delete, and snooze rules. Two post-foundation features need documentation: - • PR #256692 — rule details page: shows rule name, kind badge (Detect/Alert), - enabled/disabled state, tags, ES|QL base query, and alert conditions. - view-manage-rules.md should describe navigation to this page and what's visible. + delete, bulk operations, and the rule details experience. Navigation and labels + also depend on PRs #260355 / #260798 (V2 Alerting Preview entry points). + • PR #256260 — foundational rules list and create/edit flows (table, pagination, + delete). + • PR #256692 — rule details page: rule name, kind badge (Detect/Alert), + enabled/disabled state, tags, ES|QL base query, alert conditions, actions menu. + manage-rules.md should describe navigation to this page and what is visible. • PR #258341 — bulk enable, disable, and delete from the rules list with select-all. - Add a bulk operations section to view-manage-rules.md. + • PR #260233 — list filters (status, mode, tags), search, sorting, and tag facet API. + • PR #260270 — Conditions | Runbook tabs on the rule details page (runbook markdown). + • PR #261442 — bulk ops: 10k cap for filter-based bulk actions; select-all respects + active filters and search; UI disclosure when truncated. + • PRs #260355 / #260798 — align docs with Management URLs and solution nav for v2. + • rna-program#115 — program-level scope (verify against issue when accessible). # --------------------------------------------------------------------------- - # Kibana alerting v2 — reduce noise + # {{alerting-v2}} — reduce noise # --------------------------------------------------------------------------- - id: alerting-v2-reduce-noise content_type: conceptual - docs_file: explore-analyze/alerting/kibana-alerting-v2/reduce-noise/ + docs_file: explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 @@ -630,16 +973,13 @@ entries: doc_set: serverless: preview notes: > - Covers all noise-reduction mechanisms. Several pages reference index names that - must be updated to final values (see chain note at top of file): `.rule-events`, - `.alert-actions`. PR #255734 adds the no-data handling UI to the rule form - (kind=alert only) — no-data-handling.md in this directory should reflect the - form controls and `noData.behavior` field values. - See alerting-v2-deactivate-alerts for the deactivate page, which also tracks #256527. + Decision-table hub linking to rule settings, action policies, and manage-alerts. + Detail pages live under those sections. Index names: `.rule-events`, `.alert-actions` + (see chain note at top of file). - id: alerting-v2-deactivate-alerts content_type: procedural - docs_file: explore-analyze/alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md + docs_file: explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 @@ -650,18 +990,17 @@ entries: doc_set: serverless: preview notes: > - How to deactivate (and reactivate) alert episodes. PR #256527 changes dispatcher + Deactivate/reactivate behavior is documented under Alert actions. PR #256527 changes dispatcher behavior: episodes that are deactivated and also unmatched by any policy now receive - an `unmatched` action record in addition to the deactivation. Review if this page - describes what happens to deactivated episodes in the dispatcher pipeline. + an `unmatched` action record in addition to the deactivation. # --------------------------------------------------------------------------- - # Kibana alerting v2 — alert event field reference + # {{alerting-v2}} — alert event field reference # --------------------------------------------------------------------------- - id: alerting-v2-event-field-ref content_type: reference - docs_file: explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md + docs_file: explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference.md docs_pr: https://github.com/elastic/docs-content/pull/5528 implementation_prs: - https://github.com/elastic/kibana/pull/247464 @@ -698,17 +1037,27 @@ entries: docs_pr: ~ implementation_prs: - https://github.com/elastic/kibana/pull/257638 + - https://github.com/elastic/kibana/pull/258353 + - https://github.com/elastic/kibana/pull/257347 + - https://github.com/elastic/kibana/pull/260218 + - https://github.com/elastic/kibana/pull/260195 + - https://github.com/elastic/kibana/pull/260942 + - https://github.com/elastic/kibana/pull/261966 + - https://github.com/elastic/kibana/pull/262288 + - https://github.com/elastic/kibana/pull/262459 watch_paths: - packages/kbn-alerting-v2-episodes-ui/ - x-pack/solutions/observability/plugins/observability/public/pages/alerts_v2/ + - x-pack/platform/plugins/shared/alerting_v2/public/pages/ doc_set: serverless: preview notes: > - PR #257638 introduces an alerting episodes page in Observability at - `/app/observability/alerts_v2`. The page uses `@kbn/alerting-v2-episodes-ui` - for ES|QL-based data fetching, pagination, and episode status badges. - A doc page under solutions/observability/ is needed. Coordinate with the - Observability docs team to determine scope and placement. + Observability and Stack Management surfaces for **Alert episodes** (list + detail). + PR #257638 added the initial Observability route; PR #260942 moves primary list/detail into + `alerting_v2` under Stack Management while Observability may retain navigation links. + Later PRs: #260218 filters/sort/search, #260195 row actions, #261966 edit tags, #262288 tag filter, + #262459 Discover link, #258353/#257347 status and duration data. No dedicated observability doc + page yet — coordinate with Observability + ResponseOps docs on IA (`manage-alerts.md` may absorb some scope). - id: alerting-v2-rule-execution-history content_type: reference diff --git a/docset.yml b/docset.yml index 7fd5f1caf5..41f5dfaef3 100644 --- a/docset.yml +++ b/docset.yml @@ -297,3 +297,4 @@ subs: fedramp-mod: "FedRAMP Moderate" fedramp-high: "FedRAMP High" fedramp-il5: "FedRAMP IL5" + alerting-v2: "Kibana alerting v2" diff --git a/explore-analyze/alerting-overview.md b/explore-analyze/alerting-overview.md index 09a26399ec..b89d54a7e0 100644 --- a/explore-analyze/alerting-overview.md +++ b/explore-analyze/alerting-overview.md @@ -8,15 +8,17 @@ applies_to: products: - id: kibana - id: cloud-serverless + - id: elasticsearch + - id: cloud-hosted navigation_title: Alerting -description: Set up alerting in Elastic to monitor your data and get notified when conditions are met — from threshold-based rules to geofencing and anomaly detection. +description: "Elastic alerting overview: Kibana v1, v2 (ES|QL, action policies, alert history), and Watcher; where each runs and how to get started." --- # Alerting [alerting-overview] -Elastic alerting lets you monitor your data and take action when something needs attention — whether that's a metric crossing a threshold, an asset leaving a geographic boundary, or an anomaly in your time series data. You define the conditions, choose how you want to be notified, and Elastic handles the rest. +Elastic alerting helps you watch your data and respond when something needs attention, whether that is a metric crossing a limit, an asset leaving an area on a map, or an unusual pattern in your time series. You set the conditions and how people should be notified. Elastic runs the checks for you. -Elastic provides three alerting systems: [Kibana alerting v1](alerting/kibana-alerting-v1.md), [Kibana alerting v2](alerting/kibana-alerting-v2.md), and [Watcher](alerting/watcher.md). +Elastic offers three alerting systems, summarized below. Each has a **Get started** link to the full guide for that option. ## Kibana alerting v1 @@ -25,33 +27,44 @@ stack: ga serverless: ga ``` -Kibana alerting v1 provides a set of built-in rule types integrated with applications like APM, Metrics, Security, and Uptime. Rules evaluate conditions on a defined schedule and trigger actions through connectors — email, Slack, webhooks, PagerDuty, and more. Prepackaged rule types simplify setup for common use cases. +Kibana alerting v1 gives you ready-made rule types that work with applications such as APM, metrics, security, and uptime monitoring. You set conditions on a schedule you choose and send notifications through common channels (email, chat apps, webhooks, on-call tools, and more). Setup uses forms and clear steps, so you do not need to learn a query language first. It is a strong fit when you want broad coverage out of the box. -Refer to [Kibana alerting v1](alerting/kibana-alerting-v1.md) to get started. +[Get started with Kibana alerting v1 →](alerting/kibana-alerting-v1.md) -## Kibana alerting v2 +## {{alerting-v2}} ```{applies_to} -stack: preview 9.4 serverless: preview +stack: ga ``` -Kibana alerting v2 is a redesigned alerting framework built on ES|QL. You write the query that defines what to detect and what data each alert carries. V2 introduces action policies for centralized notification control, per-series snooze, alert lifecycle tracking with episodes, and the ability to write rules on alerts for correlation and escalation. +{{alerting-v2}} is built on ES|QL. You define what to watch for and what information should travel with each alert, then decide how basic or advanced you want that workflow to be. V2 adds **action policies** for centralized notification control, per-series snooze, alert lifecycle tracking with episodes, and **rules on alerts** for correlation and escalation. + +Here is what you get with v2: -Kibana alerting v2 runs alongside Kibana alerting v1. There is no forced migration. +* **Flexible paths.** Keep a guided experience when you want it, and adopt deeper options (including setups you can manage like code) without switching to a different alerting style. +* **Visibility over time.** Each time a rule finds a matching condition, the outcome is stored in a searchable history of what happened and when. That supports investigations, reviews, and spotting trends instead of only seeing what is open right now. +* **Connected analysis.** Use the same ES|QL skills in Discover and in rules, refine queries where you already explore data, and add follow-up rules when related conditions should be grouped together. +* **Control over notifications.** Reuse shared settings for who gets notified, and how often, across many rules. You set routing, grouping, and frequency in one place so teams hear what matters with less repeated setup and fewer unnecessary messages. +* **Consistent status from open to closed.** Track alerts from the first time they appear until the problem is gone, with shared stages, a way to mark items as handled, and pauses you can tune per group so everyone agrees on what counts as still active and what counts as finished. -Refer to [Kibana alerting v2](alerting/kibana-alerting-v2.md) to get started. +[Get started with {{alerting-v2}} →](alerting/kibana-alerting-v2.md) + +:::{note} +{{alerting-v2}} runs next to Kibana alerting v1 on supported deployments. You do not have to move everything at once. Teams can copy or rebuild rules when they are ready. Kibana alerting v1 will remain available. +::: ## Watcher ```{applies_to} +stack: ga serverless: unavailable ``` -Watcher provides alerting for custom use cases and complex alerting logic. It supports advanced scripting with Painless to define complex conditions and transformations. +Watcher is for unusual or highly tailored setups where you need scripts, chained steps, or close control over {{es}} APIs. It does not use the main {{kib}} rules UI used by {{kib}} alerting. It is available on the {{stack}} only, not in {{serverless-full}}. :::{tip} -For most use cases, Kibana alerting v1 or Kibana alerting v2 is recommended over Watcher. They offer richer integrations, prepackaged rule types, and a consistent management interface. Watcher is not available in {{serverless-full}}. +For most teams, Kibana alerting v1 or v2 is easier to adopt: they include more ready-made building blocks and a single place in {{kib}} to work with rules. ::: -Refer to [Watcher](alerting/watcher.md) to get started. +[Get started with Watcher →](alerting/watcher.md) diff --git a/explore-analyze/alerting/choose-an-alerting-system.md b/explore-analyze/alerting/choose-an-alerting-system.md index 993b572260..4a3e376e79 100644 --- a/explore-analyze/alerting/choose-an-alerting-system.md +++ b/explore-analyze/alerting/choose-an-alerting-system.md @@ -5,67 +5,61 @@ applies_to: products: - id: kibana - id: cloud-serverless -description: Compare Kibana alerting v1, Kibana alerting v2, and Watcher to decide which Elastic alerting system fits your monitoring needs. + - id: elasticsearch + - id: cloud-hosted +description: Short guide to select Kibana alerting v1, v2, or Watcher by use case, deployment, and how much control you need, with links to detailed docs. --- # Choose an alerting system [choose-an-alerting-system] -If you already know which alerting system you are using, go directly to [Kibana alerting v1](kibana-alerting-v1.md), [Kibana alerting v2](kibana-alerting-v2.md), or [Watcher](watcher.md). This page is for readers who are not sure which system fits their needs. +Elastic has three alerting systems. You only need one. Pick the one that fits how you want to define rules and route notifications. -## Choose by use case +## Select by use case -| I want to... | Recommended system | -|---|---| -| Monitor metrics, logs, or uptime using prepackaged rules with minimal setup | [Kibana alerting v1](kibana-alerting-v1.md) | -| Use solution-specific rules for Security, Observability, APM, or Maps | [Kibana alerting v1](kibana-alerting-v1.md) | -| Write my own detection logic in ES\|QL and control exactly what data each alert carries | [Kibana alerting v2](kibana-alerting-v2.md) | -| Query alert history in Discover or build dashboards from alert data | [Kibana alerting v2](kibana-alerting-v2.md) | -| Manage notification routing, grouping, and throttling separately from rule definitions | [Kibana alerting v2](kibana-alerting-v2.md) | -| Correlate across multiple rules and reduce noise with rules on alerts | [Kibana alerting v2](kibana-alerting-v2.md) | -| Suppress notifications per host or service without silencing an entire rule | [Kibana alerting v2](kibana-alerting-v2.md) | -| Define complex alerting logic with Painless scripting or chained inputs | [Watcher](watcher.md) | +| Goal | Suggested system | Availability | +|---|---|---| +| Monitor metrics, logs, or uptime with ready-made rules and no query language | [Kibana alerting v1](kibana-alerting-v1.md) | All deployments | +| Use rules built for Security, Observability, APM, or Maps | [Kibana alerting v1](kibana-alerting-v1.md) | All deployments | +| Write {{esql}} to define exactly what to detect and what data each alert carries | [{{alerting-v2}}](kibana-alerting-v2.md) | {{serverless-full}} | +| Query alert history in Discover or build dashboards from alert data | [{{alerting-v2}}](kibana-alerting-v2.md) | {{serverless-full}} | +| Manage notification routing, grouping, and throttling in one place, reusable across rules | [{{alerting-v2}}](kibana-alerting-v2.md) | {{serverless-full}} | +| Build highly custom logic with scripting and chained inputs | [Watcher](watcher.md) | Self-managed and {{ech}} only | -## Compare systems +## Compare at a glance -| | Kibana alerting v1 | Kibana alerting v2 | Watcher | +| | Kibana alerting v1 | {{alerting-v2}} | Watcher | |---|---|---|---| | **Best for** | Teams using built-in rule types with form-based setup | Teams that need full control over detection and notification routing | Custom alerting logic requiring scripting | -| **Rule definition** | Select a rule type and fill in parameters | Write an ES\|QL query | Write a JSON watch definition | -| **Alert data** | Updated in place; limited queryability | Immutable, append-only events queryable with ES\|QL in Discover | Watch history index | +| **Rule definition** | Select a rule type and fill in parameters | Write an {{esql}} query | Write a JSON watch definition | +| **Alert data** | Updated in place; limited queryability | Append-only events queryable with {{esql}} in Discover | Watch history index | | **Notifications** | Configured per action on each rule | Centralized action policies, reusable across rules | Action-level throttling and conditions | | **Noise reduction** | Snooze per rule, maintenance windows | Per-series snooze, per-episode acknowledgment, activation thresholds, matcher-based routing, rules on alerts | Action conditions and throttling | | **Availability** | All deployments | {{stack}} 9.4+ | Self-managed and {{ech}} only | ## Kibana alerting v1 -Kibana alerting v1 provides prepackaged rule types integrated with Elastic solutions. Rules are configured through forms — no query language is required. Actions are triggered through built-in connectors such as email, Slack, PagerDuty, and webhooks. +Kibana alerting v1 provides prepackaged rule types integrated with Elastic solutions. Rules are configured through forms — no query language required. Actions are triggered through built-in connectors such as email, Slack, PagerDuty, and webhooks. Choose Kibana alerting v1 if you want broad rule type coverage out of the box and are working within Observability, Security, APM, Uptime, or Maps. [Get started with Kibana alerting v1 →](kibana-alerting-v1.md) -## Kibana alerting v2 +## {{alerting-v2}} -Kibana alerting v2 is built on ES|QL. You write the query that defines what to detect and what data each alert carries. Action policies control routing, grouping, and throttling independently of rules, and alert events are stored as queryable data in standard {{es}} indices. +{{alerting-v2}} is built on {{esql}}. You write the query that defines what to detect and what data each alert carries. Action policies control routing, grouping, and throttling independently of rules, and alert events are stored as queryable data in standard {{es}} indices. -Choose Kibana alerting v2 if you need flexible detection logic, queryable alert history, centralized notification management, or cross-rule correlation. +Choose {{alerting-v2}} if you need flexible detection logic, queryable alert history, centralized notification management, or cross-rule correlation. -[Get started with Kibana alerting v2 →](kibana-alerting-v2.md) +[Get started with {{alerting-v2}} →](kibana-alerting-v2.md) ## Watcher -Watcher supports custom alerting logic with Painless scripting, chained inputs, and direct {{es}} API integration. It is the most flexible system for non-standard use cases but does not integrate with the {{kib}} alerting management UI. - -Watcher is not available in {{serverless-full}}. +Watcher supports custom alerting logic with Painless scripting, chained inputs, and direct {{es}} API integration. It is the most flexible system for non-standard use cases but does not integrate with the {{kib}} alerting management UI and is not available in {{serverless-full}}. [Get started with Watcher →](watcher.md) -## Using multiple systems together - -The alerting systems are independent and can run side by side: +## Using multiple systems -- **Kibana alerting v1 and Kibana alerting v2** share a single **Rules** navigation entry with separate tabs. Each system writes to its own indices. -- **Watcher** operates through its own API and management UI. -- **Kibana alerting v2 rules on alerts** can query alert data produced by any system, enabling cross-system correlation. +The systems are independent and can run side by side. Kibana alerting v1 and {{alerting-v2}} share a single **Rules** navigation entry with separate tabs. Watcher operates through its own API and management UI. -There is no forced migration. You can adopt a new system incrementally while your existing rules continue running. +There is no forced migration. You can adopt a new system incrementally while your existing rules continue running. {{alerting-v2}} rules can also query alert data produced by any system, which enables cross-system correlation if you run more than one. diff --git a/explore-analyze/alerting/kibana-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2.md index e4c7d29261..67ce8a6054 100644 --- a/explore-analyze/alerting/kibana-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2.md @@ -3,78 +3,92 @@ applies_to: serverless: preview products: - id: kibana -description: "Overview of Kibana alerting v2: an ES|QL-based alerting framework with immutable alert events, action policies, and alert lifecycle tracking." + - id: cloud-serverless +description: "How {{alerting-v2}} watches your data, turns conditions into signals and alerts, routes episodes through action policies and workflows, and where to go next in the docs." --- -# Kibana alerting v2 [alerting-overview-v2] +# {{alerting-v2}} [alerting-overview-v2] -Kibana alerting v2 is a redesigned alerting framework built on [ES|QL](elasticsearch://reference/query-languages/esql.md). Rules evaluate source data on a configurable schedule using ES|QL queries and produce immutable alert event documents. You control exactly what data each alert carries by writing the query that computes it. +{{alerting-v2}} watches your {{es}} data continuously, so your team doesn't have to. You define the conditions that matter, such as when to open an issue, who should know, and how often to notify them. The system handles the rest. -Kibana alerting v2 runs alongside [Kibana alerting v1](/explore-analyze/alerting/kibana-alerting-v1.md). There is no forced migration. You can adopt Kibana alerting v2 at your own pace and run both systems in parallel. +## The core idea [kibana-alerting-v2-overview] -## Core concepts +{{alerting-v2}} separates *detecting* a problem from *notifying* people about it. A rule watches your data and records what it finds. Separate action policies decide who hears about it and when. This lets you build and test detection logic before wiring up any notifications, and update notification routing without touching your rules. -Kibana alerting v2 introduces a layered model that separates detection from notification: +## The four building blocks -Signals -: Immutable documents produced each time a rule evaluates and its query returns results. Signals are the raw output of every rule, written to an append-only data stream. Use signals for exploration, dashboards, and retroactive analysis. +{{alerting-v2}} is built around four objects (rules, alerts, action policies, and workflows), each with a distinct role in the detection and notification pipeline. -Alerts -: Signals with lifecycle tracking. When a rule runs in alert mode, the system tracks state transitions for each alert series: `inactive` → `pending` → `active` → `recovering` → `inactive`. Alerts are the primary operational unit for triage and response. +### Rules +A rule says *what to watch* and *how often*. It holds an {{esql}} query, a schedule and lookback window, and in Alert mode, thresholds that control when an issue becomes active or recovers. Rules run in either Detect mode (records signals only, no episodes or notifications) or Alert mode (tracks episodes and enables policy matching). Refer to [Rules](kibana-alerting-v2/rules.md) to learn more. -Episodes -: A full lifecycle arc of an alert, from first breach to final recovery. Each episode groups the state transitions for a single alert series and is identified by an `episode_id`. +### Alerts +When a rule runs in Alert mode, it maintains an alert episode for each tracked series: a record that something is wrong, with lifecycle states (pending, active, recovering) and the history of what happened. These live in Discover and the Alerts UI. Refer to [Alerts](kibana-alerting-v2/alerts.md) to learn more. -Series -: A grouped time series of signals for a given rule and grouping key. Identified by a `group_hash` computed from the rule ID and grouping field values. Series are the unit for per-group snooze and recovery detection. +### Action policies +An action policy decides whether an episode should produce outreach and how often. It's a global object within the space (not attached to any one rule) that uses optional KQL matchers to pick up episodes from any rule. Multiple policies can match the same episode and each runs independently. Refer to [Notifications](kibana-alerting-v2/notifications.md) to learn more. -Action policies -: Standalone, reusable entities that control how and when alerts reach people and systems. Policies define matching conditions, grouping, throttling, and routing to workflow destinations. One policy can apply across multiple rules. +### Workflows +A workflow is what actually sends the message or runs the automation. Action policies point at workflows as destinations. If no workflow is attached and reachable, nothing is delivered. Refer to [Workflows for {{alerting-v2}}](kibana-alerting-v2/workflows-alerting-v2.md) to learn more. -Workflows -: User-defined automated sequences of tasks for delivering notifications and integrating with external systems. Action policies reference workflows as destinations. +## A quick example -## How Kibana alerting v2 differs from Kibana alerting v1 +An SRE team creates a rule that checks checkout service latency every five minutes. When p95 exceeds 2 seconds for more than one consecutive check, the rule opens an alert episode. An action policy with a `rule.labels: "checkout"` matcher picks it up, skips low-severity episodes, and sends a Slack message through an on-call workflow. -| Aspect | Kibana alerting v1 | Kibana alerting v2 | -|---|---|---| -| Query language | Rule type defines what data is evaluated | You write the ES\|QL query directly | -| Alert persistence | Mutable documents updated in place | Immutable, append-only event documents | -| Alert queryability | Limited; alerts live in system indices | Full ES\|QL access in Discover and dashboards | -| Notification control | Per-action frequency and throttle on each rule | Action policies: centralized matching, grouping, throttling, suppression | -| Noise reduction | Snooze per rule; limited grouping | Per-series snooze, acknowledgment per episode, activation thresholds, matcher-based routing, rules on alerts | -| Rule definition | Plugin-registered rule types with fixed schemas | ES\|QL queries with `KEEP` to control what data is stored | -| Recovery detection | Rule-type specific | Group hash comparison between consecutive evaluations | +The engineer gets one message, investigates, fixes a slow query, and latency drops. The episode recovers automatically. No dashboard watching required. -## How detection and alert modes work +## How the pieces fit together [how-pieces-fit-together] -Every rule operates in one of two modes: +$$$detection-and-notification-v2$$$ +$$$runtime-execution-order$$$ -Detect mode (`kind: signal`) -: The rule produces signal events for every query result. Signals are written to the alert events data stream and are available for exploration in Discover, but no lifecycle tracking or notifications occur. Use detect mode for broad monitoring with zero noise. +At runtime the chain runs left to right: -Alert mode (`kind: alert`) -: The rule produces alert events with full lifecycle management. Alerts transition through episode states, trigger action policies, and support triage actions like acknowledge and snooze. Use alert mode when you need actionable alerts. +``` +Rule → Alert → Action Policy → Workflow → Notification +``` -You can switch a rule between modes at any time. Switching from alert to detect stops lifecycle tracking and notifications but continues producing signal events. +1. A rule evaluates {{esql}} on a schedule and writes signal or alert events. +2. In Alert mode, alert episodes track the ongoing issue from first breach through recovery. +3. Action policies match eligible episodes and decide whether outreach should run. +4. Matched policies invoke configured workflows, which deliver messages or run automation steps. +5. Notifications are the outcome (email, chat, webhook, and so on) when all prior steps pass. -## What happens when a rule runs +$$$configuration-order$$$ -From your perspective, a rule does the following on each run: +## {{alerting-v2}} terms [key-concepts-glossary] -- It evaluates your ES|QL query over the lookback window you configured. -- It appends new rows to the `.rule-events` data stream: signal rows in detect mode, or signal and alert rows with episode fields in alert mode. -- In alert mode, it updates episode lifecycle (for example pending, active, recovering) according to your activation, recovery, and no-data settings. -- When an episode is ready for notifications, action policies decide whether and how it is routed to workflows. Policies apply after lifecycle and thresholds; a short delay between “episode ready” and “notification sent” is normal when many policies or episodes are in play. +These terms appear throughout the {{alerting-v2}} docs. If a term is unclear while reading, check its definition here before going further. -You can inspect raw history in Discover on `.rule-events` at any time, independent of whether notifications were sent. +**Action policy** +: A global saved object in a space that decides whether and how often outreach runs for matching episodes. Holds the matcher, grouping, throttle, and workflow destinations. To learn more, refer to [Notifications](kibana-alerting-v2/notifications.md). -## What you can do with Kibana alerting v2 +**Alert** +: A document written to `.rule-events` when a rule in Alert mode matches. Alert documents have `type: alert` and include `episode.*` fields that tie them to the ongoing episode for that series. -- Write rules using any ES|QL query pattern: thresholds, change detection, ratios, no-data, SLO burn rate, and more. -- Create rules from the UI, from Discover, or with YAML for infrastructure-as-code workflows. -- Preview rule results against existing data before saving. -- Use action policies to control routing, grouping, and throttling independently of rules. -- Investigate alerts in a dedicated inbox with filtering by status, severity, and custom fields. -- Explore alert history in Discover using ES|QL for trend analysis and operational reporting. -- Write rules on alerts: use the alert events index as a data source for correlation and escalation patterns. +**Breach** +: A single evaluation where the rule's {{esql}} query (and optional alert condition) returned a match. One breach writes one document to `.rule-events`. Multiple consecutive breaches might be required before an episode becomes active, depending on the rule's activation thresholds. + +**Episode** +: In Alert mode, a lifecycle-tracked record that spans one full breach-to-recovery arc for a rule series. An episode moves through states (pending, active, recovering, inactive) and is what action policies match against and operators triage in the Alerts UI. To learn more, refer to [Alerts](kibana-alerting-v2/alerts.md). + +**{{esql}}** +: The query language every rule uses. Data sources are declared in the query itself (for example `FROM`). To learn more, refer to the [{{esql}} reference](elasticsearch://reference/query-languages/esql.md). + +**Notification** +: A delivery produced when an episode passes through a matching action policy and its workflow destinations. To learn more, refer to [How action policies are evaluated](kibana-alerting-v2/notifications.md#how-action-policies-evaluated-v2). + +**Rule** +: An {{esql}} query plus a schedule and related settings. The entry point for detection. To learn more, refer to [Rules](kibana-alerting-v2/rules.md). + +**Severity** +: Carried by convention under `data.*` and available as a policy KQL field. To learn more, refer to [Author rules](kibana-alerting-v2/rules/author-rules.md#severity-levels). + +**Signal** +: A point-in-time record written to `.rule-events` when a rule in Detect mode matches. Signals have `type: signal` and no `episode.*` fields. They are queryable in Discover but do not open episodes or trigger notifications. + +**Threshold** +: Breach logic expressed in {{esql}}, combined with activation and recovery settings on the rule. To learn more, refer to [Conditions and thresholds](kibana-alerting-v2/rules/author-rules.md#conditions-and-thresholds). + +**Workflow** +: The automation object action policies invoke to deliver messages or run steps such as email, Slack, or webhooks. To learn more, refer to [Workflows for {{alerting-v2}}](kibana-alerting-v2/workflows-alerting-v2.md). diff --git a/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md b/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md deleted file mode 100644 index 6755b942c8..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -navigation_title: Fields for rule events and actions -applies_to: - serverless: preview -products: - - id: kibana -description: "Fields in the {{kib}} alerting v2 `.rule-events` data stream for signals and alerts, episode fields on lifecycle alerts, and action records in `.alert-actions`." ---- - -# {{kib}} alerting v2 rule event and action field reference [alert-event-field-reference-v2] - -This page is the field reference for {{kib}} alerting v2 data written to {{es}}. It covers names, types, required fields, and valid values. Use it when you author {{esql}} in Discover, build dashboards or reports, or integrate automation against alert and signal documents. - -:::{important} -The `.rule-events` and `.alert-actions` data streams are [system indices](/reference/glossary/index.md#glossary-system-index). {{kib}} manages their versioning, retention, and lifecycle. Do not change mappings or index settings for these streams yourself. -::: - -## Rule events index - -All rules write their signal and alert events to the rule events index, implemented as the `.rule-events` data stream. Each document has a `type` of `signal` or `alert`. - -- `signal`: Point-in-time facts you query or chain into other rules. For example, rows a follow-on rule reads from `.rule-events` to build a rule on alert data. These documents do not include `episode.*` fields. -- `alert`: Lifecycle-tracked episodes in the alert UI: inbox, episode details, and triage. For example, a breach that stays open as an episode until the condition clears. These documents include `episode.*` fields. - -Both kinds share the same [base fields](#signal-and-alert-document-fields). Only `alert` documents add [`episode.*`](#episode-fields-for-alerts-with-lifecycle-tracking) fields. - -### Signal and alert document fields - -The table lists top-level fields shared by `signal` and `alert` documents in `.rule-events`. [Episode fields for alerts with lifecycle tracking](#episode-fields-for-alerts-with-lifecycle-tracking) lists additional fields for `alert` rows only. - -| Field | Type | Required | Description | -|---|---|---|---| -| `@timestamp` | `date` | Yes | When this document was written to `.rule-events`. | -| `scheduled_timestamp` | `date` | No | Scheduled execution time for this rule run. | -| `rule.id` | `keyword` | Yes | Rule identifier. | -| `rule.version` | `long` | Yes | Rule version at the time this event was emitted. | -| `group_hash` | `keyword` | Yes | Series identity key for grouped evaluations. | -| `data` | `flattened` | Yes | Payload from the {{esql}} query output. Shape depends on your rule. | -| `status` | `keyword` | Yes | One of: `breached`, `recovered`, `no_data`. | -| `source` | `keyword` | Yes | Origin of this event. Product-specific identifier. | -| `type` | `keyword` | Yes | `signal` or `alert`. Application field on each rule event document written by {{kib}}. | - - -:::{admonition} Fields not stored as a dedicated column -There is no top-level or nested `duration` field on `.rule-events` documents. For triage or reporting, derive duration from [{{esql}} views](manage-alerts/explore-alerts-discover.md), the alert UI, or your own queries over timestamps and episode identifiers. -::: - -### Episode fields for alerts with lifecycle tracking - -The table below describes `episode.*` fields on documents in `.rule-events` where `type` is `alert`, when {{kib}} is managing that alert’s lifecycle in the alert inbox and related views. `signal` documents do not include an `episode` section. - -| Field | Type | Description | -|---|---|---| -| `episode.id` | `keyword` | Episode identifier for this series. | -| `episode.status` | `keyword` | One of: `inactive`, `pending`, `active`, `recovering`. | -| `episode.status_count` | `long` | Count of consecutive evaluations in the current `episode.status`. This field is only set when `episode.status` is `pending` or `recovering`. | - -## Alert actions index - -When a user or the system records an action on an alert episode, {{kib}} writes a document to the alert actions index, implemented as the `.alert-actions` data stream. Each document is one action. The `action.type` field records what happened, for example acknowledge, snooze, tag, fire, or unmatched. - -Use `.alert-actions` for triage history, metrics such as MTTA, and auditing. This stream does not store what your rule query returned on each run. That output exists only in `.rule-events`. - -### Alert action fields - -The table lists fields available in the alert action documents. - -| Field | Type | Description | -|---|---|---| -| `@timestamp` | `date` | When the action was recorded | -| `episode.id` | `keyword` | Target episode | -| `rule.id` | `keyword` | Rule that owns the episode | -| `action.type` | `keyword` | The action type, for example:
- `acknowledge`: User acknowledged the alert.
- `snooze`: Notifications snoozed for a period.
- `tag`: Tag applied to the alert.
- `fire`: Notification or escalation fired for the episode.
- `unmatched`: No action policy matched the episode, so no workflow ran for it under those policies.

For the full set of action types and UI behavior, refer to [Alert actions](manage-alerts/investigate-respond/alert-actions.md). | -| `episode.status_count` | `long` | Count of consecutive evaluations in the current `episode.status`. Only set when `episode.status` is `pending` or `recovering`.
For example, if the episode stays `pending` for three rule evaluations in a row, the value is `3`. | - -## Related documentation - -- [Explore {{kib}} alerting v2 alerts and signals in Discover](manage-alerts/explore-alerts-discover.md): How rule event documents map to rows in Discover, how Detect and Alert mode relate to `type`, and how multiple rules share the `.rule-events` stream. -- [Where query output appears in each document](manage-alerts/explore-alerts-discover.md#where-query-output-appears-in-each-document): Top-level fields versus the `data` field when you query in Discover. diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerting-v2-privileges.md b/explore-analyze/alerting/kibana-alerting-v2/alerting-v2-privileges.md new file mode 100644 index 0000000000..56cdd2657e --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/alerting-v2-privileges.md @@ -0,0 +1,51 @@ +--- +navigation_title: Privileges +applies_to: + serverless: preview +products: + - id: kibana + - id: cloud-serverless +description: "Privilege requirements for {{alerting-v2}}: what {{kib}} feature access and {{es}} index access each role needs to manage rules, policies, alerts, and query alert data." +--- + +# {{alerting-v2}} privileges [alerting-privileges-v2] + +$$$alerting-privileges-v2$$$ + +This page describes the access requirements for {{alerting-v2}}, including {{kib}} feature privileges, {{es}} index privileges, and how rules and policies inherit those privileges through API keys. + +:::{important} +Rules and action policies run in the background using the API key of the user who last saved them. That key inherits the saving user's privileges at save time. If those privileges are later reduced, rule or policy execution reflects the new limits. Ensure that only users with appropriate access save rules and policies. +::: + +## Manage rules [alerting-manage-rules-privileges] + +{{kib}} privileges +: `{{rules-ui}} V2`: `All` to create, edit, enable, disable, and delete rules. `Read` to view rules and their details. + +{{es}} index privileges +: `read` on every index the rule's {{esql}} query reads (for example `logs-*`, `metrics-*`). The rule's API key must have the same read access. + +## Manage action policies [action-policy-management] + +{{kib}} privileges +: `{{rules-ui}} V2`: `All` to create and edit action policies. `Read` to view policies. + +Workflow attachment +: To attach a workflow as a policy destination, you need permission to access that workflow in the space. This prevents users from routing notifications through high-privilege workflows they don't otherwise have access to. + +## Manage alerts [alerting-manage-alerts-privileges] + +{{kib}} privileges +: `{{rules-ui}} V2`: `Read` or higher to view alert episodes and their details. `All` to use triage actions (acknowledge, snooze, resolve, tag). + +{{es}} index privileges +: `read` on `.rule-events` to view alert event data. `write` on `.alert-actions` to persist triage actions such as acknowledge, snooze, and tag. + +## Query alert data in Discover [alerting-discover-privileges] + +{{kib}} privileges +: Standard Discover access. No additional {{alerting-v2}}-specific privilege is required. + +{{es}} index privileges +: `read` on `.rule-events` and `.alert-actions`. Anyone with this access can query alert history and triage records in Discover or build dashboards from them. diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts.md b/explore-analyze/alerting/kibana-alerting-v2/alerts.md new file mode 100644 index 0000000000..8a1cef08c1 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts.md @@ -0,0 +1,63 @@ +--- +navigation_title: Alerts +applies_to: + serverless: preview +products: + - id: kibana +description: "Alert episodes in {{alerting-v2}}: lifecycle states, series and episodes, signals versus alerts, and where to find them." +--- + +# Alerts + +When a rule runs in Alert mode, it maintains alert episodes, ongoing records of an issue from first breach through recovery. This is what you triage on the **Alerts** page. + +An episode isn't a single event. It's the full story of one issue on one series. It covers when the condition first triggered, what state it's in right now, and when it recovered. Each rule evaluation appends to that history. Nothing is overwritten. + +## Alert lifecycle [alert-lifecycle-v2] + +Every alert episode moves through these states: + +``` +inactive → pending → active → recovering → inactive +``` + +| State | What it means | +| --- | --- | +| inactive | No breach. The series is healthy and not being tracked. | +| pending | The condition is met, but the rule's activation threshold hasn't been reached yet. This prevents one noisy evaluation from opening an alert. | +| active | The breach is confirmed. The episode is open and actionable. Action policies can route notifications. | +| recovering | The condition has cleared, but the rule's recovery threshold hasn't been met yet. | + +Activation and recovery thresholds control how many consecutive evaluations must agree, or how long the condition must persist, before transitioning. Refer to [Configure a rule](rules/configure-a-rule.md#activation-recovery-thresholds-v2) for the settings. + +## Series and episodes + +When a rule groups by fields (for example `BY host.name`), each unique combination is its own series, identified by `group_hash`. Each series has its own independent lifecycle. + +An episode is one lifecycle arc for a series, identified by `episode_id`, from first breach to recovery. When the series breaches again after recovering, a new episode starts. + +This lets you track "the checkout service was broken from 02:14 to 03:21" and "the payment service was broken at the same time" as separate episodes, even when both come from the same rule. + +## Signals versus alerts + +Signals and alerts are two different record types that rules can produce, depending on the rule mode. + +| Type | What it is | When it's created | +| --- | --- | --- | +| Signal | A point-in-time record that the query matched (`type: signal`). Stored in `.rule-events`. | Rules in Detect mode | +| Alert | A lifecycle-tracked episode with `type: alert` and `episode.*` fields. Stored in `.rule-events`. | Rules in Alert mode | + +A rule in Detect mode only writes signals. It never opens episodes, so action policies have nothing to match against. + +## Where alerts live + +Alert events are stored in `.rule-events`. Triage actions (acknowledge, snooze, resolve) are stored in `.alert-actions`. Both are queryable in Discover. + +The **Alerts** page (**{{manage-app}}** > **Alerts and Insights** > **Rules V2** > **Alerts**) shows the current state of every episode in your space, filterable by rule, status, and tags. + +## Where to go next + +- [View, manage, and reference alerts](alerts/view-manage-and-reference-alerts.md): Open the alert episodes table, triage active episodes, and acknowledge, snooze, or resolve them. +- [Query alerts and signals in Discover](alerts/query-alerts-and-signals-in-discover.md): Use {{esql}} to query `.rule-events` and `.alert-actions` for ad hoc analysis and dashboards. +- [Alert states and fields reference](alerts/alert-states-and-fields-reference.md): Look up lifecycle states, field names, and episode document structure. +- [Notifications](notifications.md): Set up action policies to route alert episodes to the right people and channels. diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference.md new file mode 100644 index 0000000000..618837d976 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference.md @@ -0,0 +1,47 @@ +--- +navigation_title: Alert states and fields +applies_to: + serverless: preview +products: + - id: kibana +description: "Reference for {{alerting-v2}} episode status, `.rule-events` row status, and `.alert-actions` document fields." +--- + +# Alert states and fields reference [alert-states-reference-v2] + +$$$alert-states-reference-v2$$$ + +Use these tables when you read alert UI state, query `.rule-events` or `.alert-actions` in Discover, or align API payloads with what operators see. For triage controls (acknowledge, snooze, resolve, tags) and how they map to storage, refer to [Alert actions](view-manage-and-reference-alerts.md#alert-actions-v2). For rule evaluation fields on `.rule-events`, refer to [Rule event and field reference](../rules/rule-event-field-reference.md#rule-reference-v2). + +## Episode status + +The `episode.status` field appears on documents with `type: alert` in `.rule-events`. It represents the current lifecycle state of the alert episode. + +| Value | Description | +|---|---| +| inactive | Episode not in an active breach state in the lifecycle model. | +| pending | Condition met but activation thresholds not yet satisfied. | +| active | Episode is actively breaching per rule logic. | +| recovering | Condition clearing but recovery thresholds not yet satisfied. | + +## Rule event status + +The `status` field appears on all documents in `.rule-events`, for both `type: signal` and `type: alert`. It reflects the outcome of a single rule evaluation row, independent of the episode lifecycle. + +| Value | Description | +|---|---| +| breached | Condition met for this evaluation row. | +| recovered | Recovery path satisfied for this evaluation row. | +| no_data | No-data handling produced a no-data style outcome for this evaluation. | + +## Alert action document fields + +When a user or the system records an action on an alert episode, {{kib}} writes a document to `.alert-actions`. Use this stream for triage history, operational metrics such as mean time to acknowledge (MTTA), and auditing. It does not store what your rule query returned on each run — that output is in `.rule-events`. + +| Field | Type | Description | +|---|---|---| +| @timestamp | date | When the action was recorded. | +| episode.id | keyword | Target episode. | +| rule.id | keyword | Rule that owns the episode. | +| action.type | keyword | The action type, for example:
- `acknowledge`: User acknowledged the alert.
- `snooze`: Notifications snoozed for a period.
- `tag`: Tag applied to the alert.
- `fire`: Notification or escalation fired for the episode.
- `unmatched`: No action policy matched the episode, so no workflow ran for it under these policies.

For the full set of action types and UI behavior, refer to [Alert actions](view-manage-and-reference-alerts.md#alert-actions-v2). | +| episode.status_count | long | Count of consecutive evaluations in the current `episode.status`. Only set when `episode.status` is `pending` or `recovering`.
For example, if the episode stays `pending` for three rule evaluations in a row, the value is `3`. | diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover.md new file mode 100644 index 0000000000..f01ece6ebe --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover.md @@ -0,0 +1,125 @@ +--- +navigation_title: Query alerts in Discover +applies_to: + serverless: preview +products: + - id: kibana +description: "Use {{esql}} in Discover against `.rule-events` and `.alert-actions`: sample queries, trends, and MTTA-style analysis for {{alerting-v2}}." +--- + +# Query alerts and signals in Discover [explore-alerts-discover-v2] + +$$$explore-alerts-discover-v2$$$ + +{{alerting-v2}} stores rule output in `.rule-events` and user or system actions in `.alert-actions`. Both are queryable with {{esql}} in Discover. Open Discover, select {{esql}}, paste a query, then adjust the time range and placeholders (`YOUR_RULE_ID`, `YOUR_GROUP_HASH`) to match your environment. + +For field names, types, and episode fields, refer to [Alert states and fields reference](alert-states-and-fields-reference.md#alert-states-reference-v2) and [Rule event and field reference](../rules/rule-event-field-reference.md#rule-reference-v2). For triage in the product UI, refer to [View, manage, and reference alerts](view-manage-and-reference-alerts.md). + +## Rule events + +Each write to `.rule-events` is one document. The `type` field is either `signal` (Detect mode, no `episode.*` fields) or `alert` (Alert mode, with episode lifecycle fields). Fields your {{esql}} rule selected are stored under `data` — confirm field names and types there until you know the full shape of your rule output. + +### Example: Recent events + +```esql +// ═══════════════════════════════════════════════════════════════ +// LATEST ROWS - Sample across rules, raw timeline +// Why: Inspect recent runs without aggregating. Spot spikes or odd episode state +// ═══════════════════════════════════════════════════════════════ +FROM .rule-events +| WHERE @timestamp > NOW() - 1 day +| KEEP @timestamp, rule.id, status, type, episode.status +| SORT @timestamp DESC +| LIMIT 100 +``` + +### Example: Event counts by status + +```esql +// ═══════════════════════════════════════════════════════════════ +// STATUS MIX - How many events per status over the week +// Why: Health check. Check whether no_data dominates for data or query issues +// ═══════════════════════════════════════════════════════════════ +FROM .rule-events +| WHERE @timestamp > NOW() - 7 days +| STATS event_count = COUNT(*) BY status +| SORT event_count DESC +``` + +### Example: Hourly event volume + +```esql +// ═══════════════════════════════════════════════════════════════ +// THROUGHPUT - Event counts per clock hour +// Why: Compare quiet versus busy windows. Correlate with schedules or incidents +// ═══════════════════════════════════════════════════════════════ +FROM .rule-events +| WHERE @timestamp > NOW() - 24 hours +| STATS c = COUNT(*) BY hour = DATE_TRUNC(1 hour, @timestamp) +| SORT hour ASC +``` + +### Example: Events for a specific rule + +Replace `YOUR_RULE_ID` with the ID from the rule's details or API. + +```esql +// ═══════════════════════════════════════════════════════════════ +// SINGLE RULE - All events for one rule id, replace YOUR_RULE_ID +// Why: Validate the data field payload. Isolate volume for one definition +// ═══════════════════════════════════════════════════════════════ +FROM .rule-events +| WHERE rule.id == "YOUR_RULE_ID" + AND @timestamp > NOW() - 7 days +| KEEP @timestamp, group_hash, status, type, data +| SORT @timestamp DESC +``` + +### Example: Timeline for one alert series + +Replace `YOUR_GROUP_HASH` with the value from an event or the rule details. + +```esql +// ═══════════════════════════════════════════════════════════════ +// ONE SERIES - Timeline for a single group_hash, replace YOUR_GROUP_HASH +// Why: Replay how an episode progressed with the same series key as in the rule and alert UI +// ═══════════════════════════════════════════════════════════════ +FROM .rule-events +| WHERE group_hash == "YOUR_GROUP_HASH" + AND @timestamp > NOW() - 7 days +| KEEP @timestamp, status, episode.id, episode.status +| SORT @timestamp ASC +``` + +### Example: Daily breach trend + +```esql +// ═══════════════════════════════════════════════════════════════ +// BREACH TREND - Daily breach counts, condition met rows only +// Why: Day-over-day trend, noisy rules, validate a change after deploy +// ═══════════════════════════════════════════════════════════════ +FROM .rule-events +| WHERE status == "breached" AND @timestamp > NOW() - 7 days +| STATS breaches = COUNT(*) BY day = DATE_TRUNC(1 day, @timestamp) +| SORT day ASC +``` + +## Alert actions + +Action records in `.alert-actions` capture what people did to episodes: acknowledge, snooze, resolve, and tag. Use them for operational metrics such as mean time to acknowledge (MTTA). + +### Example: Acknowledgments for MTTA + +To calculate MTTA, pair acknowledgment timestamps with episode start or first `fire` timestamps from a second query. + +```esql +// ═══════════════════════════════════════════════════════════════ +// ACKNOWLEDGMENTS - Rows users acknowledged, MTTA anchor +// Why: Pair with fire or episode start in a follow-up query for your organization's MTTA definition +// ═══════════════════════════════════════════════════════════════ +FROM .alert-actions +| WHERE action.type == "acknowledge" + AND @timestamp > NOW() - 30 days +| KEEP @timestamp, episode.id, rule.id, action.type +| SORT @timestamp DESC +``` diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md new file mode 100644 index 0000000000..8151ed10cb --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md @@ -0,0 +1,83 @@ +--- +navigation_title: View and manage alerts +applies_to: + serverless: preview +products: + - id: kibana +description: "Open the {{alerting-v2}} alert episodes table, triage actions, and episode details. Field and state tables live on a separate reference page." +--- + +# View and manage alerts [manage-alerts-v2] + +$$$manage-alerts-v2$$$ + +The **Alert episodes** table is the main place to view {{alerting-v2}} episodes, filter and sort them, and start triage. Open it from **{{manage-app}}** > **Alerts and Insights** > **Rules V2** > **Alert episodes**. + +## Filter and search + +- **Rule:** Limit rows to one or more rules. +- **Status:** Limit by episode lifecycle state (active, recovered, pending, inactive). +- **Tags:** Limit to episodes whose last tag set matches any selected tag (OR logic). Tag choices come from tag actions in the selected time range. +- **Search:** Text search runs over alert event document fields. Combine with **Rule** or **Tags** filters when looking for a specific rule or label. + +Narrow the time range when filters return too many rows or when tag options need refreshing. + +## Episode actions + +From any row in the table you can: + +- **Acknowledge / Unacknowledge:** Applies to the individual episode. +- **Snooze / Unsnooze:** Applies to the group (`group_hash`), so all rows sharing that group are affected. +- **Resolve / Unresolve:** Applies to the group. The episode shows as inactive in the UI when resolved, even if the underlying lifecycle data has not yet caught up. +- **Edit tags:** Opens a flyout to add tags; persisted as `tag` actions in `.alert-actions`. + +The same actions are available from the episode detail page. + +## Open in Discover + +Select **Discover** on a row to investigate source data. Discover opens with the rule {{esql}} query and a short time window around the episode so you can inspect matching documents in context. + +For ad hoc analysis over `.rule-events` and `.alert-actions` with copy-paste {{esql}} examples, refer to [Query alerts and signals in Discover](query-alerts-and-signals-in-discover.md). + +## Episode detail page [alert-episode-details-v2] + +$$$alert-episode-details-v2$$$ +$$$investigate-respond-v2$$$ + +Open an episode's detail page by selecting its name or ID from the table row. The detail page shows: + +- **Lifecycle:** A state-over-time visualization (pending, active, recovering, inactive) driven by events in `.rule-events`. +- **Actions and metadata:** Tags and action-driven status (acknowledge, snooze, resolve) consistent with the episodes table. +- **Related episodes:** Other episodes on the same rule or series. +- **Grouping:** When the rule uses grouping, the detail view surfaces the field values that identify the series. + +## Alert actions [alert-actions-v2] + +$$$alert-actions-v2$$$ + +When you take an action, {{kib}} writes a document to the `.alert-actions` data stream. You can query these documents in Discover for auditing and metrics such as mean time to acknowledge (MTTA). + +### Episode scope vs. group scope + +| Action | Scope | +|---|---| +| Acknowledge / Unacknowledge | Episode | +| Snooze / Unsnooze | Group (`group_hash`) | +| Resolve / Unresolve | Group | +| Edit tags | Episode | + +### Action types in storage + +The `action_type` field identifies the operation in `.alert-actions` documents: + +| action_type | Meaning | +|---|---| +| ack / unack | Episode acknowledged or unacknowledged. | +| snooze / unsnooze | Notifications snoozed or cleared for the group. | +| deactivate / activate | Group resolved or reopened (UI labels: Resolve / Unresolve). | +| tag | Tags applied to an episode. | +| suppress | Suppression recorded for the episode or dispatch pipeline. | +| fire | Notification or workflow dispatch recorded. | +| unmatched | No action policy matched, so no workflow ran. | + +For a full field list and state definitions, refer to [Alert states and fields reference](alert-states-and-fields-reference.md#alert-states-reference-v2). diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules.md deleted file mode 100644 index cbc522e870..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -navigation_title: Author rules -applies_to: - serverless: preview -products: - - id: kibana -description: "Create Kibana alerting v2 rules using ES|QL queries from the UI, Discover, or YAML in detect or alert mode." ---- - -# Author Kibana alerting v2 rules [author-rules-v2] - -A Kibana alerting v2 rule defines what to look for in your data. It evaluates source data such as logs, metrics, traces, or alert events from other rules on a configurable schedule using an ES|QL query and produces alert event documents when conditions are met. - -## Rule modes - -Every rule operates in one of two modes: - -- **Detect mode** (`kind: signal`): produces signal events for exploration and analysis. No lifecycle tracking, no notifications. Use detect mode for broad monitoring without noise. -- **Alert mode** (`kind: alert`): produces alert events with full lifecycle management. Alerts transition through episode states (`inactive` → `pending` → `active` → `recovering` → `inactive`), trigger action policies, and support triage actions. Use alert mode when conditions require human response. - -You can switch between modes at any time from the rule list or rule details page. - -## Ways to create a rule - -You can create rules in three ways: - -- **[From the UI](author-rules/create-rules-ui.md)**: use the rule creation form with interactive controls and YAML mode toggle. Preview results before saving. -- **[From Discover](author-rules/create-rules-discover.md)**: convert an ES|QL query you've built in Discover directly into a rule. The query pre-populates the rule definition. -- **[With YAML](author-rules/create-rules-yaml.md)**: define rules as YAML documents for infrastructure-as-code workflows, version control, and bulk provisioning. - -## What a rule contains - -A rule definition includes: - -| Section | Purpose | -|---|---| -| **Metadata** | Name, description, tags, owner | -| **Evaluation** | ES\|QL query (base query + optional alert condition) | -| **Schedule** | Execution interval and lookback window | -| **Grouping** | Fields to split alert events by (for example, `host.name`, `service.name`) | -| **State transition** | Activation and recovery thresholds (alert mode only) | -| **Recovery policy** | How recovery is detected (alert mode only) | -| **No-data handling** | Behavior when the query returns no results | -| **Action policies** | Policies that control how alerts are routed (global; not stored on the rule) | -| **Workflows** | Direct workflow links for rule-triggered actions | - -## ES|QL query structure - -The ES|QL query is the core of every rule. It has two parts: - -**Base query** (required) -: The main ES|QL query that selects, aggregates, and transforms your data. The base query always runs, even when no alert condition is met. This enables no-data detection and recovery. - -**Alert condition** (optional) -: A `WHERE` clause that filters the base query results to only the rows that represent a breach. When the alert condition is set, the system can distinguish between "data exists but doesn't breach" and "no data at all." - -```esql --- Base query -FROM metrics-* -| STATS avg_cpu = AVG(system.cpu.total.pct) BY host.name - --- Alert condition (applied as a WHERE clause) -WHERE avg_cpu > 0.9 -``` - -The `KEEP` command controls which fields are stored in each alert event document. Only the fields you `KEEP` appear in the `data` field of the alert event. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md deleted file mode 100644 index aba75d9ce7..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-discover.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -navigation_title: Using Discover -applies_to: - serverless: preview -products: - - id: kibana -description: "Convert an ES|QL query from Discover into a Kibana alerting v2 rule with the query pre-populated." ---- - -# Create Kibana alerting v2 rules in Discover [create-rules-discover-v2] - -Create Kibana alerting v2 rules directly from Discover. When you build an ES|QL query in Discover that surfaces interesting patterns, you can convert it into a rule without rewriting the query. - -While you prototype in Discover, each row in the result table is one document in {{es}}. After you save a rule, each evaluation run writes documents to `.rule-events`. The mode you select for the rule (Detect or Alert) determines whether those events are stored as `signal` or `alert` documents and whether `episode.*` fields exist. For how that maps to rows in Discover and how the stream is structured, refer to [Explore {{kib}} alerting v2 alerts and signals in Discover](../manage-alerts/explore-alerts-discover.md) and [Rule event and action field reference](../alert-event-field-reference.md). - -## Create a rule from Discover - -1. Open Discover and switch to ES|QL mode. -2. Write and run an ES|QL query that returns the data you want to monitor. -3. Review the results to confirm the query captures the pattern you want to alert on. -4. Open the Rules menu on the Discover toolbar and choose Create v2 ES|QL rule (wording may vary slightly by release). Legacy rule types from solutions or plugins appear under Create v1 rules when your deployment exposes them. -5. The rule creation form opens with the ES|QL query pre-populated in the evaluation field. -6. Configure the remaining rule settings: - - Name and description. - - Mode (detect or alert). - - Schedule (execution interval and lookback window). - - Grouping fields if applicable. - - Alert delay, recovery, and no-data settings for alert mode. - - Action policies (configured globally under Action Policies). -7. Optionally preview the rule results. -8. Click Save. - -## What gets pre-populated - -When you create a rule from Discover: - -- The full ES|QL query from your current Discover session is placed into the rule's base query field. -- The index pattern is inferred from the `FROM` command in your query. -- The time range is converted into the rule's lookback window. - -You can modify any of these values in the rule form before saving. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md deleted file mode 100644 index 7255feb8c8..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-ui.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -navigation_title: Using the UI -applies_to: - serverless: preview -products: - - id: kibana -description: "Create Kibana alerting v2 rules using the interactive rule creation form with query editor, preview, and YAML toggle." ---- - -# Create Kibana alerting v2 rules in the UI [create-rules-ui-v2] - -Create Kibana alerting v2 rules using the interactive rule creation form. The form provides a guided experience for configuring all rule settings, with the option to toggle between interactive and YAML modes. - -## Open the rule creation form - -1. Navigate to Management > Alerts and Insights > Rules V2. -2. Click Create rule. - -## Configure the rule - -### Mode - -Choose between Detect (signals only) and Alert (lifecycle tracking and notifications). - -### ES|QL query - -Write the ES|QL query that defines what to detect. The query has two parts: - -- Base query (required): the main ES|QL query that selects, aggregates, and transforms data. -- Alert condition (optional): a `WHERE` clause that filters to breaching rows. - -Use the YAML mode toggle to switch between the interactive form and a YAML editor for the full rule definition. - -### Grouping - -Define one or more group key fields to split alert event generation. Each unique combination of field values produces its own alert series. - -### Schedule - -Configure the execution interval and the lookback window that determines how far back the ES|QL query evaluates. - -### Alert mode settings - -When the rule is in alert mode, additional settings are available: - -- Alert delay (activation threshold): require the condition to be met a specified number of consecutive times or for a minimum duration before an alert becomes active. -- Recovery conditions: define how recovery is detected. -- No-data handling: configure behavior when the query returns no results. -- Action policies: policies are global. Scoping uses rule labels and matchers on the policy side, not links from this form. Configure policies under Action Policies. For an overview, refer to [Action policies](rule-settings/action-policies.md). -- Tags: add free-form tags for filtering and organization. -- Investigation guide: attach a runbook or investigation guide to the rule. - -### Preview results - -Before saving, click Preview to evaluate the query against recent data. The preview shows: - -- How many rows the query returns. -- How many alert events would be generated. -- Sample alert event documents. -- A Lens-powered bar chart histogram of matching row counts over time, for both evaluation previews and recovery previews (when recovery logic applies). - -## Save the rule - -Click Save to create the rule. The rule starts executing on its configured schedule. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/production-considerations.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/production-considerations.md deleted file mode 100644 index 53fc8500a9..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/production-considerations.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -navigation_title: Production considerations -applies_to: - serverless: preview -products: - - id: kibana -description: "Guidance for running Kibana alerting v2 rules in production, including scheduling, query performance, and data retention." ---- - -% TODO: Content will be updated after performance testing is complete. - -# Kibana alerting v2 production considerations [production-considerations-v2] - -Guidance for running Kibana alerting v2 rules in production, including scaling, query performance, and resource management. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings.md deleted file mode 100644 index 4255f4e92b..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -navigation_title: Rule settings -applies_to: - serverless: preview -products: - - id: kibana -description: "Overview of Kibana alerting v2 rule settings: schedule, thresholds, no-data handling, grouping, action policies, and workflows." ---- - -# Kibana alerting v2 rule settings [rule-settings-v2] - -Rule settings control how a Kibana alerting v2 rule evaluates data, manages alert lifecycle, and routes notifications. This page provides an overview of all configurable settings. Refer to the linked pages for detailed guidance on each. - -## Schedule and lookback - -The [schedule and lookback](rule-settings/schedule-and-lookback.md) settings control how often the rule runs and how far back it looks when evaluating data. - -## Activation and recovery thresholds - -[Activation and recovery thresholds](rule-settings/activation-and-recovery-thresholds.md) prevent transient conditions from creating actionable alerts and prevent rapid toggling between active and recovered states. - -## No-data handling - -[No-data handling](rule-settings/no-data-handling.md) controls what happens when the rule query returns no results. - -## Grouping - -[Grouping](rule-settings/grouping.md) splits alert event generation by one or more fields. Each unique combination produces its own alert series with independent lifecycle tracking. - -## Action policies - -[Action policies](rule-settings/action-policies.md) are standalone entities that control how alerts reach people and systems. - -## Workflows - -[Workflows](rule-settings/workflows.md) are automated sequences of tasks. Rules can link to workflows directly for rule-triggered actions. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md deleted file mode 100644 index a399e439b8..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -navigation_title: Action policies -applies_to: - serverless: preview -products: - - id: kibana -description: "Action policies control how and when Kibana alerting v2 alerts reach people and systems, including matching, grouping, throttling, and routing." ---- - -# Kibana alerting v2 action policies [action-policies-v2] - -$$$action-policies-v2$$$ - -An action policy defines how and when alerts reach people and systems. In Kibana alerting v2, action policies are **global** saved objects: they are not attached to individual rules. Which rules a policy applies to is determined by **`rule_labels`** on the policy and by the episode matcher, not by references from the rule. - -## Compare Kibana alerting v1 and v2 action policies - -| | Kibana alerting v1 | Kibana alerting v2 | -|---|---|---| -| **Scope** | Per-rule connectors and actions on the rule | **Global** action policies. Rules do not reference specific policies | -| **Matching** | Rule execution drives connector runs | **`rule_labels`** scoping on the policy, then KQL episode matching | -| **Matcher context** | N/A (rule-centric) | Typed fields including `episode_status`, `rule.name`, `rule.labels`, and `data.*` | - -## How action policies apply to rules - -Action policies are **global**. Rules do not store or reference a list of action policies. - -- **Scoping** is expressed on the policy itself using **`rule_labels`**. Only episodes for rules whose labels satisfy the policy’s label selector are candidates for that policy. -- After label scoping, the policy’s **KQL episode matcher** runs against the typed matcher context (for example `episode_status`, `rule.name`, `rule.labels`, and fields under `data.*`). - -## Learn more - -- [Create and manage action policies](action-policies/create-manage-action-policies.md) -- [How action policies are evaluated](action-policies/how-action-policies-are-evaluated.md) diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md deleted file mode 100644 index ef4b576ea5..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -navigation_title: Create and manage action policies -applies_to: - serverless: preview -products: - - id: kibana -description: "Create, configure, and manage Kibana alerting v2 action policies, including matching conditions, grouping, throttling, destinations, and snooze." ---- - -# Create and manage Kibana alerting v2 action policies [create-manage-action-policies-v2] - -$$$create-manage-action-policies-v2$$$ - -Create action policies to control which alerts trigger notifications, how alerts are grouped, how frequently notifications are sent, and where they are routed. Policies are **global**: you create and edit them from the **Action Policies** area, not from the rule form. Rules do not “link” to policies. Scoping is defined on the policy with **`rule_labels`** and matchers. Refer to [Action policies](../action-policies.md). - -## Create an action policy - -1. Navigate to **Management > Alerts and Insights > Rules V2 > Action Policies**. -2. Click **Create policy**. -3. Configure the policy settings: matching, grouping, throttling, destinations, and optional snooze. -4. Click **Save**. - -## Policy list columns - -| Column | Description | -|---|---| -| **Name** | Policy display name | -| **Status** | Whether the policy is active | -| **Rule labels** | Label selector used to scope which rules this policy can apply to | -| **Last updated** | Last save time | - -There is **no “linked rule count”** in the global model. Policies are not attached to a fixed set of rules. Use **rule labels** and matcher behavior to understand effective coverage. For the evaluation flow, refer to [How action policies are evaluated](how-action-policies-are-evaluated.md). - -## Destinations - -Destinations route matching episodes to workflows and channels. Instead of choosing from a static list, the UI provides a **search field** that queries available workflows through the **`/api/workflows/search`** endpoint. Type to search and select the workflow to use for this policy. - -## Snooze and maintenance - -You can snooze a policy for a defined window so that it does not dispatch notifications during that period. - -::::{important} Production considerations -When you **update** or **delete** an action policy, API keys used for execution are **invalidated** by a background task named `invalidateApiKeysTask`. Allow for brief propagation delay before new keys are used for dispatch. For intervals and delays, refer to [Set up](../../../before-you-begin/set-up.md). -:::: - -## Bulk actions - -On the action policies list, select one or more policies to **enable**, **disable**, or **delete** in bulk. **Select all** selects every policy on the current page of results. Clear the selection before changing filters if you need a different set. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md deleted file mode 100644 index 477ded363e..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -navigation_title: How action policies are evaluated -applies_to: - serverless: preview -products: - - id: kibana -description: "How Kibana alerting v2 action policies match alert episodes, apply throttling and suppression, and produce dispatch outcomes." ---- - -# How Kibana alerting v2 action policies are evaluated [how-action-policies-evaluated-v2] - -$$$how-action-policies-evaluated-v2$$$ - -Action policies are separate from rules. After a rule runs and produces or updates alert episodes, the system decides which policies apply, whether notifications should go out, and which workflows receive them. You configure policies once. They can apply to many rules. - -## How policies are matched to episodes - -Policies are global in the space unless you narrow them: - -1. Rule labels: If a policy specifies rule labels, only rules whose labels satisfy that selector are considered. If you leave rule labels empty, the policy acts as a catch-all for every rule, subject to the KQL matcher below. -2. KQL matcher: For each candidate policy, the KQL condition is evaluated against the episode and rule context. For example, it can use rule name, rule labels, episode status, and fields from the alert payload, often under `data.*` in the matcher. Use the matcher editor suggestions to find which fields are available in your build. - -An episode can match zero, one, or many policies. If it matches none, notifications are not sent for that episode under those policies. An `unmatched` outcome is recorded for auditing, as defined in the [Possible outcomes](#possible-outcomes) section. - -## What happens after a policy matches - -For episodes that match a policy, the system applies suppression if configured, grouping for how messages are batched, and throttling for the minimum time between notifications for the same group. Then it sends notifications to the workflow destinations you configured on the policy. - -Order matters: Lifecycle thresholds and no-data behavior on the rule run before action policies. Policies only affect routing and delivery, not whether rows are written to `.rule-events`. - -## Possible outcomes - -| Outcome | What it means for you | -|---|---| -| dispatched | Notifications were sent according to the policy | -| throttled | Delivery was suppressed because throttling rules said to wait | -| suppressed | The episode was suppressed before a notification went out, for example by an active suppression | -| unmatched | No action policy matched this episode, so no workflow ran for it under these policies | -| error | Processing failed. Check {{kib}} logs and any health indicators your team uses | - -Notifications can arrive shortly after an episode becomes eligible. Heavy load or many policies can add noticeable delay. If something seems stuck, verify matchers, throttling, maintenance windows, and that the episode matches at least one policy. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md deleted file mode 100644 index 91b8870018..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -navigation_title: Activation and recovery thresholds -applies_to: - serverless: preview -products: - - id: kibana -description: "Control when Kibana alerting v2 alerts transition between lifecycle states using consecutive-breach and duration-based thresholds." ---- - -# Kibana alerting v2 activation and recovery thresholds [activation-recovery-thresholds-v2] - -Activation and recovery thresholds control when alerts transition between lifecycle states. They prevent transient spikes from creating actionable alerts and prevent rapid toggling between active and recovered. - -These settings are only available for alert-mode rules (`kind: alert`). - -## Alert lifecycle states - -An alert transitions through these states: - -``` -inactive → pending → active → recovering → inactive -``` - -## Activation thresholds - -Configure activation using count, timeframe, or both: - -| Field | Description | -|---|---| -| `pending_count` | Consecutive breaches required | -| `pending_timeframe` | Minimum duration the condition must persist | -| `pending_operator` | How to combine count and timeframe (`AND` or `OR`) | - -Each timeframe value must be between 5 seconds and 365 days (the same bounds as schedule and lookback durations). - -## Recovery thresholds - -| Field | Description | -|---|---| -| `recovering_count` | Consecutive recoveries required | -| `recovering_timeframe` | Minimum duration for recovery | -| `recovering_operator` | How to combine count and timeframe (`AND` or `OR`) | - -Timeframe fields use the same 5 seconds to 365 days bounds as activation timeframes. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/grouping.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/grouping.md deleted file mode 100644 index c7ac4f2272..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/grouping.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -navigation_title: Rule grouping -applies_to: - serverless: preview -products: - - id: kibana -description: "Split Kibana alerting v2 alert event generation by fields like host or service so each entity has independent lifecycle tracking." ---- - -# Kibana alerting v2 rule grouping [rule-grouping-v2] - -Grouping splits alert event generation by one or more fields so that each unique combination of field values produces its own alert series. Each series has independent lifecycle tracking, recovery detection, and per-series snooze. - -## Configure grouping - -In YAML: - -```yaml -grouping: - fields: [host.name] -``` - -The grouping fields must correspond to the `BY` clause in your ES|QL query's `STATS` command. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/no-data-handling.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/no-data-handling.md deleted file mode 100644 index b25f1a86ac..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/no-data-handling.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -navigation_title: No-data handling -applies_to: - serverless: preview -products: - - id: kibana -description: "Configure Kibana alerting v2 rule behavior when the query returns no results: record no-data, carry forward status, or treat as recovery." ---- - -# Kibana alerting v2 no-data handling [no-data-handling-v2] - -No-data handling controls what happens when a rule executes and the base query returns no results. - -## Behaviors - -| Behavior | Effect | -|---|---| -| `no_data` (default) | Record a no-data event | -| `last_status` | Carry forward the previous status | -| `recover` | Treat absence as recovery | diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md deleted file mode 100644 index be646d566d..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -navigation_title: Schedule and lookback -applies_to: - serverless: preview -products: - - id: kibana -description: "Configure how often a Kibana alerting v2 rule runs and how far back it looks when evaluating data." ---- - -# Kibana alerting v2 schedule and lookback [schedule-lookback-v2] - -The schedule and lookback settings control how often a rule runs and how far back it looks when evaluating data. - -## Execution interval - -The execution interval (`schedule.every`) determines how frequently the rule evaluates. - -{{kib}} enforces a minimum interval of 5 seconds and a maximum of 365 days for duration fields (including this one). The rule form and API reject values outside that range. - -## Lookback window - -The lookback window (`schedule.lookback`) determines the time range that the ES|QL query covers. - -The lookback must not exceed 365 days. If the lookback is shorter than the execution interval, the rule form shows a warning because you can miss data between runs. Set the lookback to at least the execution interval unless you have a deliberate reason not to. - -Choose a lookback window that is at least as long as the execution interval to avoid gaps in coverage. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md deleted file mode 100644 index ce14995058..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -navigation_title: Alerting workflows -applies_to: - serverless: preview -products: - - id: kibana -description: "Workflows are automated task sequences used as action policy destinations and direct rule links in Kibana alerting v2." ---- - -# Kibana alerting v2 workflows [workflows-v2] - -Workflows are user-defined automated sequences of tasks for actions, notifications, and external integrations. In Kibana alerting v2, workflows serve as the destinations for action policies and can also be linked directly to rules. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-templates.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-templates.md deleted file mode 100644 index b8316c1424..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-templates.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -applies_to: - serverless: preview -products: - - id: kibana -description: "Start with pre-configured Kibana alerting v2 rule templates for common monitoring patterns and install pre-built detection rules." ---- - -% TODO: Content will be updated when template UI is implemented. - -# Kibana alerting v2 rule templates [rule-templates-v2] - -Rule templates provide pre-configured rule definitions for common monitoring patterns. They include an ES|QL query, default schedule, and recommended settings that you can customize for your environment. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-types.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-types.md deleted file mode 100644 index 73688d1f20..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-types.md +++ /dev/null @@ -1,128 +0,0 @@ ---- -navigation_title: Rule types -applies_to: - serverless: preview -products: - - id: kibana -description: "ES|QL query patterns for Kibana alerting v2 rules: threshold, change detection, ratio, no-data, event rate, percentile, SLO burn rate, and more." ---- - -# Kibana alerting v2 rule types [rule-types-v2] - -Rule types are lightweight abstractions that map UI controls to parameterized ES|QL queries. Each rule type represents a common alerting pattern. When you select a rule type in the UI, it generates the corresponding ES|QL query with your parameters filled in. - -Advanced users can bypass rule types entirely and write raw ES|QL for full flexibility. - -## Threshold - -Alert when a metric crosses a static value. The most common pattern for resource monitoring. - -```esql -FROM metrics-* -| STATS avg_cpu = AVG(system.cpu.total.pct) BY host.name -| WHERE avg_cpu > 0.9 -| KEEP host.name, avg_cpu -``` - -## Change detection - -Alert when a value deviates from a previous period. - -```esql -FROM metrics-* -| STATS - current_cpu = AVG(system.cpu.total.pct) WHERE @timestamp >= NOW() - 15 MINUTES, - baseline_cpu = AVG(system.cpu.total.pct) WHERE @timestamp < NOW() - 15 MINUTES - BY host.name -| EVAL change_pct = ((current_cpu - baseline_cpu) / baseline_cpu) * 100 -| WHERE ABS(change_pct) > 10 -| KEEP host.name, current_cpu, baseline_cpu, change_pct -``` - -## Ratio - -Alert when a ratio crosses a threshold. Common for error rate monitoring. - -```esql -FROM logs-* -| STATS - errors = COUNT(*) WHERE http.response.status_code >= 500, - total = COUNT(*) - BY service.name -| EVAL error_rate = errors / total -| WHERE error_rate > 0.1 -| KEEP service.name, error_rate, errors, total -``` - -## No-data - -Alert when a previously reporting source stops sending data. - -```esql -FROM metrics-* -| STATS last_seen = MAX(@timestamp) BY host.name -| WHERE last_seen < NOW() - 15 MINUTES -| EVAL status = "no data" -| KEEP host.name, status -``` - -## Event rate - -Alert on the rate of events per time unit. - -```esql -FROM logs-* -| STATS event_count = COUNT(*) BY host.name -| WHERE event_count > 1000 -| KEEP host.name, event_count -``` - -## Percentile - -Alert when a percentile value exceeds a threshold. - -```esql -FROM traces-apm-* -| STATS p95_duration = PERCENTILE(transaction.duration.us, 95) BY service.name -| WHERE p95_duration > 5000000 -| EVAL p95_ms = p95_duration / 1000 -| KEEP service.name, p95_ms -``` - -## SLO burn rate - -Alert when an SLO error budget is burning too fast. - -```esql -FROM traces-apm-* -| STATS - short_errors = COUNT(*) WHERE @timestamp >= NOW() - 5 MINUTES AND http.response.status_code >= 500, - short_total = COUNT(*) WHERE @timestamp >= NOW() - 5 MINUTES, - long_errors = COUNT(*) WHERE @timestamp >= NOW() - 1 HOUR AND http.response.status_code >= 500, - long_total = COUNT(*) WHERE @timestamp >= NOW() - 1 HOUR - BY service.name -| EVAL - short_error_rate = short_errors / short_total, - long_error_rate = long_errors / long_total, - slo_target = 0.999, - short_burn = short_error_rate / (1 - slo_target), - long_burn = long_error_rate / (1 - slo_target) -| WHERE short_burn > 14.4 AND long_burn > 14.4 -| KEEP service.name, short_burn, long_burn -``` - -## Text search - -Alert on specific patterns in log messages. - -```esql -FROM logs-* -| WHERE message LIKE "*OutOfMemoryError*" -| STATS error_count = COUNT(*) BY host.name -| WHERE error_count > 0 -| KEEP host.name, error_count -``` - -## Raw ES|QL - -For any pattern not covered by a rule type, write raw ES|QL directly. The query can use any ES|QL command, including `ENRICH`, `DISSECT`, `GROK`, `MV_EXPAND`, and cross-cluster search. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rules-on-alerts.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/rules-on-alerts.md deleted file mode 100644 index a4ff0856a6..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/rules-on-alerts.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -navigation_title: Rules on alerts -applies_to: - serverless: preview -products: - - id: kibana -description: "Write Kibana alerting v2 rules that query alert events for correlation, escalation, and noise reduction across multiple rules." ---- - -# Kibana alerting v2 rules on alerts [rules-on-alerts-v2] - -Because Kibana alerting v2 alert events are stored as queryable data in standard {{es}} indices, you can write rules that use the alert events index as their data source. This enables correlation, escalation, and noise reduction patterns. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/set-rule-data-sources.md b/explore-analyze/alerting/kibana-alerting-v2/author-rules/set-rule-data-sources.md deleted file mode 100644 index a256752934..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/set-rule-data-sources.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -navigation_title: Set rule data sources -applies_to: - serverless: preview -products: - - id: kibana -description: "Configure Kibana alerting v2 rule data sources using ES|QL FROM commands, including index patterns, cross-cluster search, and alert indices." ---- - -# Set Kibana alerting v2 rule data sources [set-rule-data-sources-v2] - -Every Kibana alerting v2 rule evaluates data from one or more {{es}} indices. The data source is defined by the `FROM` command in the rule's ES|QL query. diff --git a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md deleted file mode 100644 index 89b5af9730..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -navigation_title: Before you begin -applies_to: - serverless: preview -products: - - id: kibana -description: "Prerequisites and setup steps to review before creating Kibana alerting v2 rules." ---- - -# Before you begin with Kibana alerting v2 [alerting-before-you-begin-v2] - -Before creating Kibana alerting v2 rules, review the following prerequisites and setup steps. - -## Prerequisites - -To use Kibana alerting v2, you need: - -- {{stack}} 9.4 or later. -- ES|QL knowledge. Kibana alerting v2 rules are defined using ES|QL queries. Familiarity with ES|QL syntax, aggregations, and the `STATS`, `WHERE`, `EVAL`, and `KEEP` commands is essential. Refer to the [ES|QL reference](elasticsearch://reference/query-languages/esql.md) for details. -- Data indexed in {{es}}. Your source data must be indexed and accessible from the cluster where you create rules, such as logs, metrics, traces, or alert events from other rules. -- Appropriate privileges. You need Kibana privileges to create and manage rules, action policies, and workflows. Refer to [Alerting privileges](before-you-begin/alerting-privileges.md) for details. - -## Key differences from Kibana alerting v1 - -If you are coming from Kibana alerting v1, note these differences: - -- You write the query. Instead of selecting a rule type and filling in parameters, you write an ES|QL query that defines exactly what to look for and what data to include in each alert event. -- Alerts are immutable. Each time a rule runs, it appends new event documents rather than updating existing ones. This gives you a full history of every run. -- Notifications are separate from rules. Instead of configuring actions on each rule, you create action policies that match alerts and route them to workflow destinations. One policy can serve many rules. -- Snooze is per series, not per rule. You can snooze notifications for a specific host or service without silencing the entire rule. -- Alert data is queryable. Alert events are stored in standard {{es}} indices and can be queried with ES|QL in Discover, used in dashboards, or fed to other rules. - -## Coexistence with Kibana alerting v1 - -Kibana alerting v2 runs alongside Kibana alerting v1. Both systems are fully operational: - -- You manage v2 rules under Management > Alerts and Insights > Rules V2. v1 rules stay in the existing Rules or equivalent experience for your deployment. Navigation labels can vary by version. -- Each system writes to its own indices. Kibana alerting v2 alert events go to `.rule-events`. Kibana alerting v1 alerts go to `.alerts-*`. -- There is no automatic migration. You can copy rules from Kibana alerting v1 to Kibana alerting v2 manually when you are ready. -- You can create rules on alerts that correlate across both systems by querying both alert indices. diff --git a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md deleted file mode 100644 index 10e68a31aa..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -navigation_title: Alerting privileges -applies_to: - serverless: preview -products: - - id: kibana -description: "Required privileges for creating and managing Kibana alerting v2 rules, action policies, and alert actions." ---- - -# Kibana alerting v2 privileges [alerting-privileges-v2] - -Kibana alerting v2 uses {{es}} index-level security to control access to alert data, combined with {{kib}} feature privileges for rule and policy management. - -## Required privileges - -### Rule management - -To create, edit, and manage Kibana alerting v2 rules, you need: - -- **{{kib}} feature privilege**: `Rules V2` with the appropriate access level (read, create, edit, or all). -- **{{es}} index privileges**: Read access to the source indices your rules query (for example, `logs-*`, `metrics-*`). - -Rule execution uses the API key of the user who created or last updated the rule. This means the rule runs with the privileges of that user. If the user's privileges change, rule execution reflects those changes. - -### Action policy management - -To create and manage action policies, you need: - -- **{{kib}} feature privilege**: `Rules V2` with create or edit access. -- **Workflow permissions**: To add a workflow as a destination on a policy, you need permissions for that workflow. This prevents privilege escalation through policy configuration. - -### Alert management - -To view and take actions on alerts (acknowledge, snooze, tag, assign), you need: - -- **{{kib}} feature privilege**: `Rules V2` with at least read access. -- **{{es}} index privileges**: Read access to `.rule-events` for viewing alerts. Write access to `.alert-actions` for taking alert actions. - -### Discover and dashboard access - -Because Kibana alerting v2 alert events are stored in standard {{es}} indices, any user with read access to `.rule-events` can query them in Discover and use them in dashboards. No additional {{kib}} privileges are required beyond the standard Discover feature access. - -## Space boundaries - -Rule and action policy management respects {{kib}} space boundaries. Rules created in one space are not visible in another. Alert events are indexed globally, but UI access is filtered by space. - -## API key management - -Rules and action policies use API keys for execution: - -- An API key is created when a rule or policy is saved. -- The API key inherits the privileges of the user who created it. -- You can update the API key from the rule or policy management page if the original user's privileges change. diff --git a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md b/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md deleted file mode 100644 index faa367167b..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -navigation_title: Alerting setup -applies_to: - serverless: preview -products: - - id: kibana -description: "Enable Kibana alerting v2, data streams created for alert events and actions, optional API key cleanup settings, and verification steps." ---- - -# Set up Kibana alerting v2 [alerting-set-up-v2] - -Kibana alerting v2 is available in {{stack}} 9.4 and later. This page explains how to enable it and configure initial settings. - -## Enable Kibana alerting v2 - -Kibana alerting v2 is available in 9.4 and later. When it is enabled for your deployment, use Management > Alerts and Insights > Rules V2 to open the v2 rules list and author rules. If Rules V2 does not appear in the navigation, ask your administrator whether alerting v2 is enabled in your environment. - -## Index configuration - -Kibana alerting v2 automatically creates and manages the following data streams: - -- `.rule-events` stores signal and alert event documents produced each time a rule runs. This is an append-only data stream. -- `.alert-actions` stores alert action records such as acknowledge, snooze, deactivate, fire, and suppress for suppression tracking and audit. - -No manual index configuration is required. The system creates these data streams with the appropriate mappings when the first rule executes. - -## {{kib}} advanced settings - -Optional `kibana.yml` settings control how often {{kib}} cleans up API keys for action policies after a policy is updated or deleted: - -| Setting | Default | Purpose | -|---|---|---| -| `xpack.alerting.invalidateApiKeysTask.interval` | `5m` | How often {{kib}} processes keys that are marked for invalidation | -| `xpack.alerting.invalidateApiKeysTask.removalDelay` | `1h` | How long to wait after invalidation before old key material can be removed | - -Change these only when your operations team or Elastic Support recommends it. Aggressive values can affect how reliably workflows run after policy changes. - -## Verify the installation - -To verify that Kibana alerting v2 is working: - -1. Navigate to Management > Alerts and Insights > Rules V2. -2. Confirm that the rules list page loads. -3. Click Create rule to confirm the rule form opens. -4. Optionally, create a test rule with a simple ES|QL query and verify that alert events appear in Discover by querying the `.rule-events` data stream. diff --git a/explore-analyze/alerting/kibana-alerting-v2/get-started.md b/explore-analyze/alerting/kibana-alerting-v2/get-started.md new file mode 100644 index 0000000000..2154e50b7c --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/get-started.md @@ -0,0 +1,61 @@ +--- +navigation_title: Get started +applies_to: + serverless: preview +products: + - id: kibana + - id: cloud-serverless +description: "Get {{alerting-v2}} running in your space: enable the UI, confirm data streams, then understand spaces, API keys, and privileges." +--- + +# Get started [alerting-get-started-v2] + +$$$alerting-get-started-v2$$$ + +This page walks you through enabling {{alerting-v2}} and understanding what you need before authoring rules and policies. + +**In this guide** + +- [Set up and verify](#alerting-set-up-v2): Enable the feature and confirm it's working +- [Spaces and API keys](#spaces-and-api-keys-for-alerting-v2): How objects and keys are scoped + +For privilege requirements ({{kib}} feature access and {{es}} index access), refer to [{{alerting-v2}} privileges](alerting-v2-privileges.md). + +## Set up and verify [alerting-set-up-v2] + +$$$alerting-set-up-v2$$$ + +### Enable {{alerting-v2}} + +{{alerting-v2}} is available in {{stack}} 9.4 and later. When it is enabled for your deployment, use **{{manage-app}}** > **Alerts and Insights** > **Rules V2** to open the v2 rules list and author rules. If **Rules V2** does not appear in the navigation, ask your administrator whether alerting v2 is enabled in your environment. + +### Where alert data is stored + +{{alerting-v2}} automatically creates and manages these data streams: + +- `.rule-events`: signal and alert event documents for each rule run (append-only). +- `.alert-actions`: records for acknowledge, snooze, deactivate, fire, suppress, and related audit or suppression tracking. + +You do not create these indices yourself. Mappings are applied when the first rule runs. + +## Spaces and API keys for alerting [spaces-and-api-keys-for-alerting-v2] + +### Spaces + +Rules and action policies are space-scoped: objects you create in one space are not visible in another. Alert events are stored globally, but the UI filters what you see by space. + +### API keys + +Saving a rule or policy creates an API key used for execution. It inherits the saving user's privileges. If privileges drift, update the key from the rule or policy management UI when your team's process calls for it. + +## Privileges and roles [alerting-privileges-v2] + +For {{kib}} feature access and {{es}} index privilege requirements, refer to [{{alerting-v2}} privileges](alerting-v2-privileges.md). + +## What's next + +When you are ready to go further, your next steps depend on what you want to set up first. These can be done in any order: + +- [Author rules](rules/author-rules.md): Write the {{esql}} query that defines what to detect, choose Detect or Alert mode, and set up grouping and thresholds in [Configure a rule](rules/configure-a-rule.md). +- [Set up workflows](workflows-alerting-v2.md): Configure the automation objects that deliver messages (email, Slack, webhook). You'll need at least one workflow before action policies can send anything. +- [Create action policies](notifications/create-configure-action-policy.md): Define who gets notified, how often, and under what conditions. Policies use KQL matchers to pick up the right episodes and route them to your workflows. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts.md deleted file mode 100644 index e8a3bcc607..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -navigation_title: Manage alerts -applies_to: - serverless: preview -products: - - id: kibana -description: "View, triage, and respond to alerts produced by Kibana alerting v2 rules using the alert inbox." ---- - -# Manage Kibana alerting v2 alerts [manage-alerts-v2] - -View, triage, and respond to alerts produced by Kibana alerting v2 rules. The alert inbox provides a centralized view of all active and recent alerts with filtering, investigation, and action capabilities. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md deleted file mode 100644 index e77cffe089..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md +++ /dev/null @@ -1,147 +0,0 @@ ---- -navigation_title: Explore alerts and signals in Discover -applies_to: - serverless: preview -products: - - id: kibana -description: "Query Kibana alerting v2 alert events in Discover with ES|QL for trend analysis, operational reporting, and on-demand investigation." ---- - -# Explore {{kib}} alerting v2 alerts and signals in Discover [explore-alerts-discover-v2] - -What this page is for: {{kib}} alerting v2 stores rule output in `.rule-events` and user or system actions in `.alert-actions`. Both are ordinary {{es}} data you query with {{esql}} in Discover. When you land here, use the examples to investigate what rules produced, including recent rows, status mix, and hourly volume, and drill into one rule or one alert series, track breach trends over days, and support operational metrics such as mean time to acknowledge, MTTA, from acknowledgment rows. - -How to use it: Open Discover, select {{esql}}, paste a query, then adjust time ranges and placeholders (`YOUR_RULE_ID`, `YOUR_GROUP_HASH`) to match your environment. Save views, export results, or reuse clauses in dashboards and reports. - -The examples below follow that workflow. They start with broad views of `.rule-events`, move to narrow filters for a single rule or single `group_hash`, add a daily breach trend, then switch to `.alert-actions` for acknowledgment history. - -## How rule events appear in Discover - -Each write to `.rule-events` is one document in {{es}}. In Discover, each document is one row. A row is either a signal event or an alert event, not both. The `type` field is `signal` or `alert`. Rules in Detect mode emit `type: signal` documents without `episode.*` fields. Rules in Alert mode emit `type: alert` documents that include episode lifecycle fields. Each write creates a single document with one `type`. The same data stream can hold both kinds of documents from different rules. - -For field names, types, and episode fields, refer to [Rule event and action field reference](../alert-event-field-reference.md). - -## Where query output appears in each document - -This section summarizes how top-level fields and the `data` field are laid out in `.rule-events` and how to work with that stream safely. - -The fields documented in the [Rule event and action field reference](../alert-event-field-reference.md) are what you can count on at the top level of each document. Columns and values from your {{esql}} query that are not part of that fixed shape are stored under `data`. In Discover and dashboards, look under `data` for your rule output until you confirm field names and types. Your rule definition decides what appears there. - -## Query alert events - -These queries target `.rule-events`: signal and alert documents written when rules run. Use them before the alert actions section when you care about what rules wrote to the index and about episode fields, not action audit rows. - -### Example: Recent alert and signal events - -This example shows a non-aggregated sample of the newest documents in `.rule-events`: one row per event from a rule run, with core fields so you can scan what happened in roughly the last day. The results are capped at 100 rows so the query stays responsive in Discover. - -```esql -// ═══════════════════════════════════════════════════════════════ -// LATEST ROWS - Sample across rules, raw timeline -// Why: Inspect recent runs without aggregating. Spot spikes or odd episode state -// ═══════════════════════════════════════════════════════════════ -FROM .rule-events -| WHERE @timestamp > NOW() - 1 day // Rolling last 24 hours -| KEEP @timestamp, rule.id, status, type, episode.status // When, rule id, status, signal or alert type, episode state -| SORT @timestamp DESC -| LIMIT 100 // Cap rows for a quick scan -``` - -### Example: Event counts by status - -This example aggregates all events from the last seven days and counts how many documents fall into each `status` value, such as `breached`, `recovered`, or `no_data`. Use it to check whether the stream is mostly healthy transitions or dominated by a single status. - -```esql -// ═══════════════════════════════════════════════════════════════ -// STATUS MIX - How many events per status over the week -// Why: Health check. Check whether no_data dominates for data or query issues -// ═══════════════════════════════════════════════════════════════ -FROM .rule-events -| WHERE @timestamp > NOW() - 7 days -| STATS event_count = COUNT(*) BY status // One bucket per status value -| SORT event_count DESC -``` - -### Example: Hourly event volume - -This example buckets events by clock hour over the last 24 hours using `DATE_TRUNC` and counts events per hour. It highlights when volume rises or falls, which helps correlate activity with rule schedules, deployments, or incidents. - -```esql -// ═══════════════════════════════════════════════════════════════ -// THROUGHPUT - Event counts per clock hour -// Why: Compare quiet versus busy windows. Correlate with schedules or incidents -// ═══════════════════════════════════════════════════════════════ -FROM .rule-events -| WHERE @timestamp > NOW() - 24 hours -| STATS c = COUNT(*) BY hour = DATE_TRUNC(1 hour, @timestamp) // Bucket by hour -| SORT hour ASC -``` - -### Example: Events for a specific rule - -This example filters `.rule-events` to a single rule by `rule.id`. Replace `YOUR_RULE_ID` with the id from the rule's details or API. It keeps `data`, which holds the fields your {{esql}} rule selected. That is useful for validating field names and shapes. The window is seven days. - -```esql -// ═══════════════════════════════════════════════════════════════ -// SINGLE RULE - All events for one rule id, replace YOUR_RULE_ID -// Why: Validate the data field payload. Isolate volume for one definition -// ═══════════════════════════════════════════════════════════════ -FROM .rule-events -| WHERE rule.id == "YOUR_RULE_ID" // Narrow to one rule - AND @timestamp > NOW() - 7 days -| KEEP @timestamp, group_hash, status, type, data // Series key and query output fields -| SORT @timestamp DESC -``` - -### Example: Group hash series for an episode - -This example follows one alert series identified by `group_hash` over seven days, sorted oldest to newest, so you can read the timeline for that series. Replace `YOUR_GROUP_HASH` with the value from an event or the rule details. Episode fields show how state changed across evaluations. - -```esql -// ═══════════════════════════════════════════════════════════════ -// ONE SERIES - Timeline for a single group_hash, replace YOUR_GROUP_HASH -// Why: Replay how an episode progressed with the same series key as in the rule and alert UI -// ═══════════════════════════════════════════════════════════════ -FROM .rule-events -| WHERE group_hash == "YOUR_GROUP_HASH" - AND @timestamp > NOW() - 7 days -| KEEP @timestamp, status, episode.id, episode.status // Chronological episode story -| SORT @timestamp ASC -``` - -### Example: Breached rows trend - -This example counts only rows where `status` is `breached` when the condition was met for that evaluation, then totals breaches per calendar day for the last week. It is suited to trend questions about getting louder or quieter over days, not to total signal volume. - -```esql -// ═══════════════════════════════════════════════════════════════ -// BREACH TREND - Daily breach counts, condition met rows only -// Why: Day-over-day trend, noisy rules, validate a change after deploy -// ═══════════════════════════════════════════════════════════════ -FROM .rule-events -| WHERE status == "breached" AND @timestamp > NOW() - 7 days -| STATS breaches = COUNT(*) BY day = DATE_TRUNC(1 day, @timestamp) -| SORT day ASC -``` - -## Query alert actions for example MTTA - -Earlier on this page, the `.rule-events` examples covered what the rule wrote. This section covers what people did to alerts. Operational metrics such as mean time to acknowledge, MTTA, build on action documents in `.alert-actions`, such as acknowledgments, often combined with episode or `fire` timestamps in a separate step. - -### Example: Acknowledgment events for MTTA-style analysis - -This example reads `.alert-actions` instead of `.rule-events` and returns rows where `action.type` is `acknowledge`, limited to 30 days of history. It is a typical starting point for MTTA. You still need timestamps for “start”, for example first `fire` or episode start, and your own definition of acknowledge time, which may require a second query or aggregation. - -```esql -// ═══════════════════════════════════════════════════════════════ -// ACKNOWLEDGMENTS - Rows users acknowledged, MTTA anchor -// Why: Pair with fire or episode start in a follow-up query for your organization's MTTA definition -// ═══════════════════════════════════════════════════════════════ -FROM .alert-actions -| WHERE action.type == "acknowledge" - AND @timestamp > NOW() - 30 days -| KEEP @timestamp, episode.id, rule.id, action.type -| SORT @timestamp DESC -``` - -Adjust filters and aggregations to match how your organization defines MTTA, for example time from first `fire` to first `acknowledge` for an episode. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond.md deleted file mode 100644 index be4a858820..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -navigation_title: Investigate and respond -applies_to: - serverless: preview -products: - - id: kibana -description: "Use the Kibana alerting v2 alert flyout and detail pages to investigate alert context, review the timeline, and take action." ---- - -# Investigate and respond to Kibana alerting v2 alerts [investigate-respond-v2] - -When an alert needs attention, use the alert flyout or detail page to investigate its context, review the timeline, and take action. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md deleted file mode 100644 index 3cc9e3a4f4..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -navigation_title: Alert actions -applies_to: - serverless: preview -products: - - id: kibana -description: "Actions you can take on Kibana alerting v2 alerts, including acknowledge, snooze, deactivate, assign, tag, resolve, and add to cases." ---- - -# Kibana alerting v2 alert actions [alert-actions-v2] - -Alert actions are operations you perform on Kibana alerting v2 alerts to manage their lifecycle, suppress notifications, and organize your triage workflow. - -## Where action records are stored - -When you take an action on an alert, {{kib}} records it in the `.alert-actions` data stream. You can query these documents in Discover (ES|QL) for auditing, reporting, and metrics such as mean time to acknowledge (MTTA). - -## Action types - -The `action.type` field identifies what happened. Common values include: - -| `action.type` | Description | -|---|---| -| `fire` | Notification or escalation fired for the episode | -| `acknowledge` | User acknowledged the alert | -| `snooze` | Notifications snoozed for a period | -| `deactivate` | Alert or episode deactivated | -| `suppress` | Suppression applied | -| `assign` | Assignment changed | -| `tag` | Tag applied to the alert (recorded action) | -| `resolve` | Episode or alert resolved | -| `unmatched` | No action policy matched the episode, so no workflow ran for it under those policies | - -The `untag` action type is not used. Tagging is recorded with the `tag` action type. - -## Available actions in the UI - -From the alert and episode views you can: - -- Acknowledge, snooze, deactivate, assign, resolve, and add to cases as described in the triage workflow. -- Tag alerts for organization. Tagging is persisted as a `tag` action in `.alert-actions`, consistent with bulk-get and query behavior for recorded actions. - -For field-level detail on action documents, refer to [Rule event and action field reference](../../alert-event-field-reference.md). diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md deleted file mode 100644 index 7a5322e665..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -navigation_title: Alert episode details -applies_to: - serverless: preview -products: - - id: kibana -description: "Understand Kibana alerting v2 alert episodes across the full lifecycle from first breach to recovery, including states, identity, and status tracking." ---- - -# Kibana alerting v2 alert episode details [alert-episode-details-v2] - -An episode is one full lifecycle arc of an alert, from the first breach to final recovery. Each episode groups the state transitions for a single alert series and is identified by a unique `episode_id`. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/view-alerts.md b/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/view-alerts.md deleted file mode 100644 index 6306255ce0..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-alerts/view-alerts.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -navigation_title: View alerts -applies_to: - serverless: preview -products: - - id: kibana -description: "Filter, sort, and search Kibana alerting v2 alerts in the alert inbox using quick filters, severity, tags, and custom fields." ---- - -# View Kibana alerting v2 alerts [view-alerts-v2] - -The alert inbox shows all Kibana alerting v2 alert episodes with filtering, sorting, and quick actions for efficient triage. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-rules.md b/explore-analyze/alerting/kibana-alerting-v2/manage-rules.md deleted file mode 100644 index 070d1326c1..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-rules.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -navigation_title: Manage rules -applies_to: - serverless: preview -products: - - id: kibana -description: "Navigate Kibana alerting v2 rule management: rules list and details, bulk actions, snooze, and disabling rules." ---- - -# Manage {{kib}} alerting v2 rules [manage-rules-v2] - -Use this section after rules exist in your space: find rules in the **Rules V2** list, open a rule to inspect configuration and execution history, run bulk operations, and change whether rules run or notify. **Managing rules** is separate from **authoring** definitions. Refer to [Author rules](author-rules.md) to create or edit the {{esql}} query, schedule, and mode. - -**Where to work in {{kib}}:** **Management** → **Alerts and Insights** → **Rules V2**. - -## In this section - -| Page | Use it to | -|---|---| -| [View and manage rules](manage-rules/view-manage-rules.md) | Use the rules list (columns, filters, search, bulk enable, disable, delete) and open **rule details** for a single rule. | -| [Snooze and disable rules](manage-rules/snooze-disable-rules.md) | Temporarily suppress notifications (including per-series snooze) or **disable** a rule so it stops executing. | - -## Related - -- [Author rules](author-rules.md): Create rules, set detect or alert mode, and edit query and schedule. -- [Manage alerts](manage-alerts.md): Triage and respond to alerts produced by rules. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-rules/snooze-disable-rules.md b/explore-analyze/alerting/kibana-alerting-v2/manage-rules/snooze-disable-rules.md deleted file mode 100644 index 97a05ac2e7..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-rules/snooze-disable-rules.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -navigation_title: Snooze and disable rules -applies_to: - serverless: preview -products: - - id: kibana -description: "Temporarily suppress notifications with per-series snooze or stop rule execution by disabling a Kibana alerting v2 rule." ---- - -# Snooze and disable Kibana alerting v2 rules [snooze-disable-rules-v2] - -You can temporarily suppress notifications or stop rule execution entirely. Kibana alerting v2 provides granular control at the rule and series level. diff --git a/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md b/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md deleted file mode 100644 index 3a5483a821..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -navigation_title: View and manage rules -applies_to: - serverless: preview -products: - - id: kibana -description: "View rule details, execution history, related rules, and alerts generated by a Kibana alerting v2 rule." ---- - -# View and manage Kibana alerting v2 rules [view-manage-rules-v2] - -The Rules V2 list and the rule details page give you a full view of Kibana alerting v2 rules: configuration, execution history, related rules, and alerts generated by a rule. - -## Rules list - -The rules list is the entry point under Management > Alerts and Insights > Rules V2. - -### Columns - -Typical columns include: - -- Name: Rule name. Click to open the rule details page. -- Type: Rule type, such as detect versus alert mode where applicable. -- Schedule: How often the rule runs. -- Last run: Last execution time and status. -- Tags: Labels for filtering and action policy scoping. -- Enabled: Whether the rule is active. - -Exact columns can vary by release. Use column controls if your build exposes them. - -### Filters and search - -Use the search field and filters, for example by tag, status, or space, to narrow the list. Search matches rule metadata such as name and description. - -### Open rule details - -Click a rule name to open the rule details page. The details page shows configuration, execution history, related rules, and alerts for that rule as documented on that page. - -## Bulk actions - -From the rules list, select one or more rules to run bulk operations: - -- Enable: Turn on selected rules. -- Disable: Turn off selected rules. They stop scheduling until re-enabled. -- Delete: Remove selected rules. Confirm when prompted. - -Select all selects every rule on the current page of results. If you need to act on more than one page, change page size or repeat the action, or refine filters so the desired rules appear together. - -The rule details page content for single-rule views is unchanged by these list behaviors. Open that page for execution history and per-rule actions. diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications.md b/explore-analyze/alerting/kibana-alerting-v2/notifications.md new file mode 100644 index 0000000000..f6a56c05c1 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications.md @@ -0,0 +1,77 @@ +--- +navigation_title: Notifications +applies_to: + serverless: preview +products: + - id: kibana +description: "How {{alerting-v2}} action policies route alert episodes to notifications: matchers, grouping, throttling, and workflow destinations." +--- + +# Notifications + +After a rule produces alert episodes, action policies decide what to do about them: who gets notified, how often, and through which channel. + +This page explains how action policies work. For creating and configuring them step by step, refer to [Create and configure an action policy](notifications/create-configure-action-policy.md). + +## What is an action policy [action-policies-v2] + +$$$action-policies-v2$$$ + +An action policy is a saved object in your space that controls notification routing. It is not attached to a rule. It's global within the space, so when an episode is produced, the system evaluates all enabled, unsnoozed policies in the space and decides which ones apply. + +Each policy has four controls: + +| Control | What it does | +| --- | --- | +| Matcher (optional KQL) | Filters which episodes this policy applies to. An empty matcher matches all episodes in the space. | +| Dispatch per (grouping) | Controls how episodes batch into notifications: one per episode, one per defined group, or one digest for all. | +| Frequency (throttling) | Controls how often the policy can notify for the same group. | +| Destinations | One or more workflows to invoke when all the above pass. | + +## How policies apply to rules + +Action policies don't reference rules directly. You scope a policy using KQL over episode and rule fields, for example `rule.labels: "checkout"` or `data.severity: "critical"`. A policy applies to every matching episode in the space, from any rule. + +Multiple policies can match the same episode, and each runs independently. There's no precedence or merging between them. If no policy matches an episode, no notification is sent. This is intentional. + +## How action policies are evaluated [how-action-policies-evaluated-v2] + +$$$how-action-policies-evaluated-v2$$$ + +When an episode is eligible for dispatch, the system processes each enabled, unsnoozed policy in order: + +1. Suppression: Is the episode acknowledged, snoozed, or deactivated? If so, skip dispatch. +2. Matcher: Does the episode match the policy's KQL? If not, skip this policy. +3. Grouping: How should matching episodes batch into notification groups? +4. Throttle: Has a notification already gone out for this group recently? If so, wait. +5. Destinations: Send to the policy's workflow destinations. + +The dispatcher runs on a short interval (around 10 seconds). Notifications don't arrive on the exact rule schedule; they follow the dispatcher's own cycle. + +### Possible outcomes [possible-outcomes] + +| Outcome | What it means | +| --- | --- | +| dispatched | A notification was sent. | +| throttled | Dispatch was suppressed due to throttle timing. | +| suppressed | The episode was suppressed before dispatch (acknowledged, snoozed, or deactivated). | +| unmatched | No policy matched this episode; no workflow ran. | +| error | Processing failed. Check {{kib}} logs. | + +You can query these outcomes in Discover through the `.alert-actions` data stream. + +## Why policies are separate from rules + +Rules don't own policies. A rule can't say "notify team X when I fire." Instead, team X creates an action policy that uses a KQL matcher to pick up the right episodes. + +This design means: +- One policy can cover episodes from many rules. +- You can update routing without touching any rule. +- Rules can be created without any notification policy, which is useful for testing. + +When you're ready to route notifications, go to [Create and configure an action policy](notifications/create-configure-action-policy.md). + +$$$matcher-v2$$$ +$$$reduce-noise-grouping-v2$$$ +$$$throttle-v2$$$ +$$$create-manage-action-policies-v2$$$ diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference.md new file mode 100644 index 0000000000..260d53775b --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference.md @@ -0,0 +1,86 @@ +--- +navigation_title: Action policy reference +applies_to: + serverless: preview +products: + - id: kibana +description: "API values, Dispatch per and Frequency UI mappings, dispatch outcomes, and workflow destination shape for {{alerting-v2}} action policies." +--- + +# Action policy reference [action-policy-reference-v2] + +$$$action-policy-reference-v2$$$ + +Condensed tables for matchers, grouping, throttling, and dispatch outcomes. For step-by-step policy creation and narrative guidance, refer to [Create and configure an action policy](create-configure-action-policy.md). + +## Matcher fields (typical KQL) [matcher-fields-typical-kql] + +| Field | Example use | +|---|---| +| episode_status | `"active"`, `"inactive"`, `"pending"`, `"recovering"` | +| data.* | Payload from the rule, for example `data.severity`, `data.env`, `data.host.name` | +| rule_id or rule.id | Rule identifier, for example `"rule-001"` | +| rule.name, rule.labels | Rule metadata for scoping | + +## Notification grouping (API) [notification-grouping-api] + +| Mode | When to use | +|---|---| +| per_episode (default) | Each episode is notified independently. | +| all | Batch **all** matching episodes into **one** notification for that policy evaluation. | +| per_field | Group by values of a `data.*` field so episodes sharing a key collapse into one notification per key. | + +## Dispatch per (UI) mapping + +| UI option | Maps to | +|---|---| +| **Episode** | per_episode | +| **Group** | per_field | +| **Digest** | all | + +## Throttle strategies (API) [throttle-strategies-api] + +| Strategy | Behavior | +|---|---| +| on_status_change | Notify when **episode status changes** (for example active → inactive). | +| per_status_interval | At most **once per interval** for each **episode status** value. | +| time_interval | At most **once per interval**, regardless of status changes. | +| every_time | Eligible to fire on **every dispatcher evaluation** for matching episodes (subject to other policy limits). | + +## Frequency (UI) when Episode (per_episode) [frequency-ui-when-episode-per_episode] + +| UI option | Typical API mapping | +|---|---| +| **On status change** | on_status_change | +| **On status change + repeat at interval** | per_status_interval (with **`interval`**) | +| **Every evaluation (no throttle)** | every_time | + +## Frequency (UI) when Group (per_field) + +| UI option | Typical API mapping | +|---|---| +| **At most once every…** | time_interval (with **`interval`**) | +| **Every evaluation (no throttle)** | every_time | + +## Frequency (UI) when Digest (all) + +| UI option | Typical API mapping | +|---|---| +| **Every evaluation (no throttle)** | every_time | + +## Dispatch outcomes + +| Outcome | Meaning | +|---|---| +| dispatched | Notifications were sent according to the policy. | +| throttled | Delivery was suppressed because throttling rules said to wait. | +| suppressed | The episode was suppressed before a notification went out, for example by an active suppression. | +| unmatched | No action policy matched this episode, so no workflow ran for it under these policies. | +| error | Processing failed. Check {{kib}} logs. | + +## Workflow destination object (example) + +| Property | Description | +|---|---| +| type | Destination type; `workflow` in the current UI. | +| id | Workflow identifier (exact property names follow the API and UI version). | diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md new file mode 100644 index 0000000000..b05055a2ee --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md @@ -0,0 +1,65 @@ +--- +navigation_title: Create an action policy +applies_to: + serverless: preview +products: + - id: kibana +description: "Create {{alerting-v2}} action policies, configure matchers, Dispatch per, Frequency, and workflow destinations." +--- + +# Create and configure an action policy [create-manage-action-policies-v2] + +$$$create-manage-action-policies-v2$$$ + +An action policy controls which alert episodes trigger notifications, how episodes are grouped, how often notifications are sent, and where they are routed. Policies are global within a space. You create and manage them from the **Action policies** page, not from the rule form. + +For API values, Dispatch per and Frequency mappings, throttle strategies, dispatch outcomes, and matcher field examples, refer to [Action policy reference](action-policy-reference.md#action-policy-reference-v2). + +## Create an action policy + +1. Open **{{manage-app}}** > **V2 Alerting Preview** > **Action policies**. +2. Click **Create policy**. +3. Fill in the policy fields described in [Policy fields](#policy-fields) below. +4. Click **Save**. The matcher expression is validated on save, so invalid KQL is rejected before dispatch runs. + +## Policy fields [policy-fields] + +### Matcher [matcher-v2] + +$$$matcher-v2$$$ + +An optional KQL expression that filters which episodes this policy applies to. An empty matcher matches every episode in the space. + +Use matchers to route different episodes to different policies — for example, one policy for `data.severity: "critical"` episodes routed to PagerDuty and another for warnings routed to Slack. Typical matcher fields and examples are listed in [Action policy reference](action-policy-reference.md#matcher-fields-typical-kql). + +### Grouping and frequency [reduce-noise-grouping-v2] + +$$$reduce-noise-grouping-v2$$$ + +**Dispatch per** controls how episodes batch into notifications. **Frequency** controls how often the policy can notify for each batch. + +| Dispatch per | What it does | Available Frequency options | +|---|---|---| +| **Episode** | One notification per episode. | On status change; On status change + repeat at interval; Every evaluation | +| **Group** | Bundle episodes that share a field value. Specify **Group by** (for example `data.service.name` or `data.host.name`). | At most once every…; Every evaluation | +| **Digest** | One notification for all matching episodes combined. | Every evaluation | + +Episode works for most rules. Use Group when a rule produces many series-level episodes and you want to batch by a shared field. Use Digest for periodic summaries on longer schedules. + +For Frequency to API strategy mappings, refer to [Action policy reference](action-policy-reference.md#frequency-ui-when-episode-per_episode). + +### Throttling [throttle-v2] + +$$$throttle-v2$$$ + +Throttling limits how often the policy can fire for a given group. The interval resets from the last time the policy fired, so successive notifications stay at least `interval` apart. Set a duration such as `1h` or `30m`. + +For throttle strategy API values, refer to [Action policy reference](action-policy-reference.md#throttle-strategies-api). + +### Destinations + +One or more workflows to invoke when the policy matches. Use the **workflow search** field in the policy editor to find and attach workflows. Only workflow-type destinations are supported in the current UI. + +### Snooze + +An optional time window during which the policy does not dispatch. Useful for planned maintenance or quiet periods without disabling the policy entirely. diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies.md new file mode 100644 index 0000000000..5647239251 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies.md @@ -0,0 +1,34 @@ +--- +navigation_title: Manage action policies +applies_to: + serverless: preview +products: + - id: kibana +description: "Enable, disable, snooze, maintenance windows, bulk actions, and API key rotation for {{alerting-v2}} action policies." +--- + +# Manage action policies + +After you create an action policy, you can control when it runs, pause it temporarily, and keep its credentials current. This page covers those management tasks. + +## Enable, snooze, and maintenance + +You can disable a policy so it is not evaluated for new episodes. You can snooze a policy for a defined window so that it does not dispatch notifications during that period. Policies that are not enabled or are snoozed are skipped when the dispatcher evaluates policies. + +### Maintenance windows [maintenance-windows-v2] + +$$$maintenance-windows-v2$$$ + +Maintenance windows are scheduled periods during which a policy does not dispatch notifications. They are configured on the action policy alongside snooze and other policy controls, not on the rule. Rule evaluation continues and alert episodes can still be recorded in `.rule-events`; only dispatch through that policy pauses. Use maintenance windows for planned deployments, infrastructure changes, or recurring quiet periods. + +## Update API keys + +You can rotate the API key used to run a policy's workflows without changing matchers or destinations. Use the **Update API key** action on one policy or for multiple selected policies. + +::::{important} Production considerations +When you update or delete an action policy, previous API keys used for execution are marked for invalidation and removed on a schedule managed by {{kib}}. Allow for a short delay before new keys are used for dispatch. +:::: + +## Bulk actions + +On the action policies list, select one or more policies to enable, disable, snooze, and do more in bulk. **Select all** selects every policy on the current page of results. Clear the selection before changing filters if you need a different set. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md deleted file mode 100644 index 8987d6520a..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md +++ /dev/null @@ -1,133 +0,0 @@ ---- -navigation_title: Reduce noise and false positives -applies_to: - serverless: preview -products: - - id: kibana -description: "Select the right Kibana alerting v2 feature to reduce noise: thresholds, no-data handling, action policies, throttling, snooze, rules on alerts, and more." ---- - -# Reduce {{kib}} alerting v2 noise and false positives [reduce-noise-v2] - -{{kib}} alerting v2 offers many ways to reduce noise, each applied at a different stage, from the {{esql}} query and lifecycle thresholds through action policies, throttling, and manual controls. Selecting the wrong lever wastes effort and can hide real problems. This page helps you match a situation to a mechanism and explains how mechanisms combine in order so you can use them deliberately. - -If multiple rows in the table apply, refer to [Using them together](#using-them-together). - -## Select the right approach - -| Your situation | Use this | What it does | -|---|---|---| -| The {{esql}} query matches too much normal traffic with too many breaching rows | [Author and tune the rule](author-rules.md) | Narrows the query, `WHERE` clause, schedule, or lookback so evaluations only surface what matters | -| Short spikes or flapping metrics open alerts before they should | [Activation thresholds](reduce-noise/activation-thresholds.md) | Requires consecutive breaches or a minimum duration before an episode becomes active | -| The alert recovers and reopens too often, flapping | [Recovery thresholds](reduce-noise/recovery-thresholds.md) | Requires sustained clear conditions before an episode leaves recovering | -| The query returns no rows and no_data or recovery behavior is misleading | [No-data handling](reduce-noise/no-data-handling.md) | Configures how empty results are interpreted so gaps do not look like false recoveries or false alerts | -| Notifications repeat for the same group on every evaluation | [Throttling](reduce-noise/throttle.md) | Enforces a minimum interval between notifications per notification group | -| Recipients get too many separate messages for related episodes | [Notification grouping](reduce-noise/grouping.md) | Batches related alerts into fewer notifications | -| Notifications should only go out for certain episodes by severity, labels, or payload fields | [Matchers](reduce-noise/matcher.md) | Applies action policy rule_labels scoping and KQL episode matching so only matching episodes route to workflows | -| Planned maintenance: evaluations should continue but on-call should not be paged | [Maintenance windows](reduce-noise/maintenance-windows.md) | Pauses notifications for a scheduled window | -| A temporary quiet period is needed for a series or episode without changing the rule | [Snooze or silence](reduce-noise/snooze-or-silence.md) | Snoozes or silences notifications. Acknowledge can also quiet an episode while work proceeds | -| Many low-level alerts should roll up into one higher-level signal | [Rules on alerts](reduce-noise/rules-on-alerts.md) | Runs follow-on rules on `.rule-events` or related data to correlate and notify once | -| One alert episode should stop notifying and leave the triage queue while the rule keeps running | [Deactivate alerts](reduce-noise/deactivate-alerts.md) | Deactivates that episode. The rule still evaluates and can detect new episodes for other series | - -## How each mechanism works - -Mechanisms are listed in rough order: from what happens when rules run and how episodes change, through action policy processing, to operator controls. - -### Author and tune the rule - -Acts on: the {{esql}} query and rule schedule, before interpretation as breach or no_data - -Problem: The detector fires on the wrong things. - -Refine the base query, alert `WHERE` clause, schedule, and lookback. This is the only option that improves the underlying signal. Other tools filter or route what the rule already emits. Refer to [Author rules](author-rules.md). - -### Activation and recovery thresholds - -Acts on: episode lifecycle transitions from pending to active and from recovering to inactive - -Problem: Conditions flicker, or recovery should hold steady before closing. - -[Activation thresholds](reduce-noise/activation-thresholds.md) delay promotion to active. [Recovery thresholds](reduce-noise/recovery-thresholds.md) delay return to inactive. Both reduce flip-flopping without hiding rows in the source data. - -### No-data handling - -Acts on: evaluations that return zero rows - -Problem: Data stopped arriving, or empty results should not imply recovery or a no_data storm. - -Configure how the rule treats empty results. Refer to [No-data handling](reduce-noise/no-data-handling.md) and [No-data handling (rule settings)](author-rules/rule-settings/no-data-handling.md). - -### Notification matchers and grouping - -Acts on: which episodes an action policy considers and how they are batched - -Problem: Only some episodes should page the team, or messages should batch by service or host. - -[Matchers](reduce-noise/matcher.md) scope policies using labels and KQL. [Grouping](reduce-noise/grouping.md) combines related episodes into fewer notifications. - -### Throttling - -Acts on: notification send rate for a group - -Problem: The same notification repeats on every run. - -[Throttling](reduce-noise/throttle.md) limits how often a policy may notify for the same group. Detection and episode state are unchanged. Only dispatch spacing changes. - -### Maintenance windows - -Acts on: notification dispatch during a window - -Problem: Maintenance is scheduled. Events should still be recorded without paging. - -[Maintenance windows](reduce-noise/maintenance-windows.md) pause notifications for planned work. Evaluations continue unless the rule is no longer enabled in the {{rules-ui}}. - -### Snooze, silence, and acknowledgment - -Acts on: notifications for a scope such as series, attributes, or episode - -Problem: Quiet a series for a time, or mark ownership of an episode. - -[Snooze or silence](reduce-noise/snooze-or-silence.md) covers temporary suppression and acknowledgment-driven quieting. - -### Rules on alerts - -Acts on: downstream correlation and routing - -Problem: One summary notification is enough when the pattern is severe, not one per underlying row. - -[Rules on alerts](reduce-noise/rules-on-alerts.md) uses alert event data as input to another rule so operations can escalate or summarize. - -### Deactivate alerts - -Acts on: a single alert episode for lifecycle processing and notifications - -Problem: One alert episode should drop out of triage while other series keep running. - -[Deactivate alerts](reduce-noise/deactivate-alerts.md) deactivates that episode. Lifecycle processing and notifications stop for it, while the rule continues to evaluate and can open new episodes for other `group_hash` values. - -## Key distinctions - -| | Tune rule / schedule | Activation / recovery thresholds | No-data handling | Matchers / grouping / throttle | {{maint-windows-cap}} / snooze / silence | Rules on alerts | Deactivate alerts | -|---|---|---|---|---|---|---|---| -| Rule still evaluates | Yes | Yes | Yes | Yes | Yes | Yes, source rules | Yes | -| Changes breach detection logic | Yes | No, delays state only | Yes, empty-result policy | No | No | N/A | No | -| Reduces notifications | If fewer breaches | Indirectly | Indirectly | Yes | Yes | Yes | Yes | -| Typical time scope | Until next edit | Consecutive runs / duration | Per evaluation | Policy config | Window or until cleared | N/A | Until episode handled | - -## Using them together [using-them-together] - -These options stack. A common pattern is: tune the query for precision, add activation thresholds to ignore spikes, use matchers and throttling so action policies only fire for the right episodes at a sustainable rate, and use {{maint-windows-cap}} or snooze during known change windows. - -Example: Noisy CPU rule - -| Situation | Action | Mechanism | -|---|---|---| -| The {{esql}} query flags any host over 70% | Tighten the query or add a stricter `WHERE` | Author and tune the rule | -| Legitimate bursts open alerts for 1-minute spikes | Require 3 consecutive breaches before active | Activation thresholds | -| The same host pages every run for an hour | Add throttle and grouping on the action policy | Throttle, grouping | -| Only production hosts should page on-call | Add rule_labels and KQL on the policy | Matchers | -| Database change window this evening | Open a {{maint-windows-cap}} or snooze the series | {{maint-windows-cap}}, snooze | - -::::{note} -Order of application matters. Thresholds and no-data behavior affect lifecycle state before action policies run. Matchers and throttling apply when action policies are evaluated for each episode. Snooze and {{maint-windows-cap}} affect whether notifications send, not whether `.rule-events` documents are written. Check Discover if raw history is needed. -:::: diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/activation-thresholds.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/activation-thresholds.md deleted file mode 100644 index a89805351a..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/activation-thresholds.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -navigation_title: Activation thresholds -applies_to: - serverless: preview -products: - - id: kibana -description: "Require consecutive breaches or a minimum duration before a Kibana alerting v2 alert episode becomes active, filtering out transient spikes." ---- - -# {{kib}} alerting v2 activation thresholds [activation-thresholds-v2] - -**Activation thresholds** require a condition to be met a certain number of consecutive times or for a minimum duration before an **alert episode** transitions from `pending` to `active`. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md deleted file mode 100644 index 4ca46c4525..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -navigation_title: Deactivate alerts -applies_to: - serverless: preview -products: - - id: kibana -description: "Stop lifecycle processing and notifications for a Kibana alerting v2 alert episode while the rule continues detecting new episodes." ---- - -# Deactivate {{kib}} alerting v2 alerts [deactivate-alerts-v2] - -**Deactivate** stops lifecycle processing and notifications for one **alert episode**. The rule continues to run and can open new **episodes** for other **series** (`group_hash`), but the **deactivated** episode is no longer tracked. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md deleted file mode 100644 index 13f9384f93..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -navigation_title: Notification grouping -applies_to: - serverless: preview -products: - - id: kibana -description: "Batch related Kibana alerting v2 alert episodes into fewer notifications using action policy grouping by host, service, or custom fields." ---- - -# {{kib}} alerting v2 notification grouping [reduce-noise-grouping-v2] - -**Notification grouping** on an action policy batches related **alert episodes** into fewer messages, reducing notification count without dropping evaluation results. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md deleted file mode 100644 index 8157e2c3d5..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -navigation_title: Maintenance windows -applies_to: - serverless: preview -products: - - id: kibana -description: "Schedule periods during which Kibana alerting v2 notifications are paused for planned deployments or recurring maintenance." ---- - -# {{kib}} alerting v2 maintenance windows [maintenance-windows-v2] - -**{{maint-windows-cap}}** are scheduled periods during which notifications are paused. Rule evaluation continues and **alert episodes** can still be recorded in **`.rule-events`**. Dispatch is what pauses. Use them for planned deployments, infrastructure changes, or recurring maintenance. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md deleted file mode 100644 index 3e61ce3cf0..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -navigation_title: Matchers -applies_to: - serverless: preview -products: - - id: kibana -description: "Route only matching Kibana alerting v2 alert episodes to notification destinations using KQL matcher conditions on action policies." ---- - -# {{kib}} alerting v2 notification matchers [matcher-v2] - -**Action policy matchers** are KQL expressions that determine which **alert episodes** a policy applies to. Only **episodes** that match the condition (after **rule_labels** scoping) are routed to the policy's workflow destinations. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/no-data-handling.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/no-data-handling.md deleted file mode 100644 index 6b4bad4830..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/no-data-handling.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -navigation_title: No-data handling -applies_to: - serverless: preview -products: - - id: kibana -description: "Prevent false recoveries and false alerts when data sources stop reporting by configuring Kibana alerting v2 no-data behavior." ---- - -# {{kib}} alerting v2 no-data handling [reduce-noise-no-data-v2] - -Proper **no-data** handling prevents false recoveries and misleading **no_data** events when data sources stop reporting. - -Refer to [No-data handling (rule settings)](../author-rules/rule-settings/no-data-handling.md) for configuration details and examples. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/recovery-thresholds.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/recovery-thresholds.md deleted file mode 100644 index 66858345b1..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/recovery-thresholds.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -navigation_title: Recovery thresholds -applies_to: - serverless: preview -products: - - id: kibana -description: "Require sustained recovery before a Kibana alerting v2 alert episode returns to inactive, preventing rapid toggling between active and recovered." ---- - -# {{kib}} alerting v2 recovery thresholds [recovery-thresholds-v2] - -**Recovery thresholds** require a condition to be absent for a certain number of consecutive evaluations or for a minimum duration before an **alert episode** transitions from `recovering` to `inactive`. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/rules-on-alerts.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/rules-on-alerts.md deleted file mode 100644 index 451ababea2..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/rules-on-alerts.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -navigation_title: Rules on alerts -applies_to: - serverless: preview -products: - - id: kibana -description: "Replace many individual Kibana alerting v2 notifications with a single meaningful one using rules that correlate across alert event data." ---- - -# {{kib}} alerting v2 rules on alerts [reduce-noise-rules-on-alerts-v2] - -Follow-on **rules on alert data** reduce noise by running another rule against **`.rule-events`** (or related indices) so many low-level **episodes** can roll up into one higher-level notification. - -Refer to [Author rules: rules on alert data](../author-rules/rules-on-alerts.md) for detailed configuration guidance. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/snooze-or-silence.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/snooze-or-silence.md deleted file mode 100644 index 5492cc6020..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/snooze-or-silence.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -navigation_title: Snooze or silence -applies_to: - serverless: preview -products: - - id: kibana -description: "Temporarily suppress Kibana alerting v2 notifications using per-series snooze, attribute-based silence, or per-episode acknowledgment." ---- - -# Snooze or silence {{kib}} alerting v2 alerts [snooze-or-silence-v2] - -**Snooze**, **silence**, and **acknowledge** are ways to temporarily suppress notifications for {{kib}} alerting v2 **alert episodes** or **series**. Each operates at a different scope. diff --git a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/throttle.md b/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/throttle.md deleted file mode 100644 index b057bd67ff..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/reduce-noise/throttle.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -navigation_title: Throttling -applies_to: - serverless: preview -products: - - id: kibana -description: "Limit Kibana alerting v2 notification frequency by setting a minimum interval between notifications for the same group." ---- - -# {{kib}} alerting v2 throttle [throttle-v2] - -**Throttling** sets a minimum interval between notifications for the same **notification group**. It reduces notification volume without affecting rule execution or **alert episode** lifecycle state. diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules.md b/explore-analyze/alerting/kibana-alerting-v2/rules.md new file mode 100644 index 0000000000..1bc5a54074 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/rules.md @@ -0,0 +1,39 @@ +--- +navigation_title: Rules +applies_to: + serverless: preview +products: + - id: kibana +description: "What {{alerting-v2}} rules are, how evaluation works, and how rules connect to alerts and notifications." +--- + +# Rules + +A rule is where {{alerting-v2}} starts. It points {{kib}} at the data you care about, describes what counts as a problem in {{esql}}, and says how often to check. Alerts, action policies, and notifications all flow from what a rule detects. + +## What rules do [detection-and-notification-v2] + +$$$detection-and-notification-v2$$$ + +On each run, a rule executes an {{esql}} query against your data. If the query finds a match. If the rule is in Detect mode, it writes a _signal_, a point-in-time record that the condition was met. In Alert mode, it also maintains an _alert episode_ for each matched series, tracking state from first breach through recovery. + +When creating a rule, choose Detect mode to record and query results without alerting anyone, or Alert mode when you want to track issues and route notifications. + +## What rules don't do + +Rules only define *what* to detect. They don't control notifications, who gets notified, or when. That's the job of action policies — global objects, scoped to your space, that match episodes from any rule. A rule has no say in which policies pick it up. + +This separation means you can build and test a rule without anyone getting paged, update notification routing without touching the rule, and have multiple action policies respond to the same rule independently. + +% ## How rule history works + +% Rules never overwrite old data. Each evaluation appends rows to `.rule-events`, giving you a complete, queryable history of every time the condition was met, when it cleared, and what the data looked like. + +% When a rule groups by fields (for example `BY host.name`), each unique combination is its own series, identified by `group_hash`. An episode spans one lifecycle arc on a series from first breach through recovery, identified by `episode_id`. + +% You can query this history in Discover, build dashboards from it, or write follow-on rules that read `.rule-events` as a data source. + +## Where to go next + +- [Author rules](rules/author-rules.md): Write the {{esql}} query, choose Detect or Alert mode, and structure your data sources and conditions. +- [View and manage rules](rules/view-manage-rules.md): Enable, disable, clone, delete, and bulk-manage rules from the rules list. diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md b/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md new file mode 100644 index 0000000000..ca82594452 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md @@ -0,0 +1,79 @@ +--- +navigation_title: Author rules +applies_to: + serverless: preview +products: + - id: kibana +description: "Write ES|QL queries for {{alerting-v2}} rules: modes, query structure, base query, alert condition, thresholds, and severity." +--- + +# Author {{alerting-v2}} rules [author-rules-v2] + +$$$author-rules-v2$$$ + +Every {{alerting-v2}} rule is an {{esql}} query. Instead of choosing from a catalog of fixed rule types, you write {{esql}} directly. Describe what to look for, what counts as a breach, and which fields to store on each event. + +This page covers the query concepts behind a rule definition. For settings beyond the query (such as schedules, grouping, and lifecycle thresholds), refer to [Configure a rule](configure-a-rule.md). Once you understand what goes into a rule, you can write one using the [rule builder](create-rule-from-rule-builder.md), [YAML editor](create-rule-with-yaml.md), or [a Discover session](create-rule-from-discover.md). + +## Choose a rule mode + +Before creating the rule, decide what you want it to do: + +| Mode | What it does | +| --- | --- | +| Detect (`kind: signal`) | Records query matches as signals. No episodes, no notifications. Good for testing a query or building a data history without alerting anyone. | +| Alert (`kind: alert`) | Records matches and maintains alert episodes with lifecycle states. Episodes appear on the **Alerts** page and can be matched by action policies for notifications. | + +You can switch a rule's mode after creation from the rule list or rule detail page. + +## The {{esql}} query [esql-query-structure] + +Every rule has two parts to its query: the base query and the alert conditions. + +### Base query (required) +The main {{esql}} expression. It runs on every evaluation, selects data from `FROM`, shapes results with `STATS`, `WHERE`, `EVAL`, and controls which fields are stored with `KEEP`. The base query always runs, even when no breach occurs, which is what enables no-data detection and recovery. + +### Alert conditions (optional) +A `WHERE` clause applied after the base query. Only rows that pass the alert condition are treated as breaches. Without an alert condition, every row returned by the base query is a breach. + +```esql +-- Base query: compute average CPU per host +FROM metrics-* +| STATS avg_cpu = AVG(system.cpu.total.pct) BY host.name + +-- Alert condition: only rows above the threshold count as breaches +WHERE avg_cpu > 0.9 +``` + +The `KEEP` command controls which fields appear on each stored alert event. Only the fields you `KEEP` are available for policy matchers, grouping keys, and triage in the Alerts UI. + +## Data sources + +Use `FROM` to point the rule at the indices or data streams to read. The query itself defines the scope; there is no separate data source step. + +```esql +FROM logs-checkout-service-* +| WHERE http.response.status_code >= 500 +| STATS error_count = COUNT(*) BY service.name +| KEEP service.name, error_count +``` + +The [{{esql}} reference](elasticsearch://reference/query-languages/esql.md) covers all available commands and processing functions. + +## Conditions and thresholds [conditions-and-thresholds] + +The alert condition in {{esql}} defines what counts as a breach in each evaluation. + +The activation and recovery thresholds on the rule are separate from the query. They control how many consecutive breaches must occur, or how long the condition must persist, before an episode becomes active or moves back to inactive. Those settings are in [Configure a rule](configure-a-rule.md#activation-recovery-thresholds-v2). + +For how alert states connect to episodes, refer to [Alert lifecycle](../alerts.md#alert-lifecycle-v2). + +## Severity levels [severity-levels] + +Severity is carried by convention as a field under `data.*`, for example `data.severity` or `data.priority`. Include it in your `KEEP` so it is available as a matcher field on action policies, for example `data.severity: "critical"` in a policy KQL matcher. + +There is no required severity field name or fixed value set. Use whatever convention your team aligns on, and reference those same field names in your action policies. + +## Rule templates [rule-templates-v2] + +[CONTENT NEEDED: List supported rule template types, what each template pre-fills in ES|QL or YAML, and how templates relate to user-authored queries once the product catalog is finalized.] diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule.md b/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule.md new file mode 100644 index 0000000000..be372e634a --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule.md @@ -0,0 +1,123 @@ +--- +navigation_title: Configure a rule +applies_to: + serverless: preview +products: + - id: kibana +description: "Configure {{alerting-v2}} rules: mode, ES|QL, grouping, schedule, lookback, activation and recovery, no-data handling, tags, and evaluation." +--- + +# Configure a rule [rule-settings-v2] + +$$$rule-settings-v2$$$ + +Use this page to configure how a {{alerting-v2}} rule evaluates data and manages its alert lifecycle. These settings live on the rule itself. + +For writing the {{esql}} query, refer to [Author rules](author-rules.md). For notification routing (matchers, grouping, throttling, maintenance windows), refer to [Notifications](../notifications.md) and [Manage action policies](../notifications/manage-action-policies.md). + +:::{note} +Action policies are not configured on the rule form. You create them separately in the **Action policies** area and use KQL matchers to scope them to the episodes you want to route. The rule form does not link to policies. +::: + +## Rule mode [rule-mode-v2] + +Choose a mode that matches how you want to use results: + +| Mode | Behavior | +| --- | --- | +| Detect | Signals only: the rule produces detections without alert lifecycle tracking or notifications. | +| Alert | Lifecycle tracking and notifications: alerts move through states (pending, active, recovering, and so on), and you can attach action policies so episodes dispatch through workflows. | + +Several settings on this page apply only when the rule is in Alert mode (`kind: alert`). + +## {{esql}} query [esql-query-rule-v2] + +The rule's {{esql}} query defines what to evaluate. It has a base query and an optional alert condition. Together they drive which rows become alert events and how no-data behavior applies. See [{{esql}} query structure](author-rules.md#esql-query-structure) for how those pieces interact with no-data behavior and `KEEP`. + +## Rule grouping [rule-grouping-v2] + +$$$rule-grouping-v2$$$ + +Rule grouping splits alert event generation by one or more group key fields so that each unique combination of field values produces its own alert series. Each series has independent lifecycle tracking, recovery detection, and per-series snooze. + +Group key fields must align with the `BY` clause in your {{esql}} query's `STATS` command. See [Author rules](author-rules.md) for query patterns. + +Note that rule grouping is separate from notification grouping on an action policy, which controls how episodes batch into messages. + +## Schedule and lookback [schedule-lookback-v2] + +$$$schedule-lookback-v2$$$ + +The schedule and lookback settings control how often a rule runs and how far back it looks when evaluating data. + +### Execution interval + +The execution interval (`schedule.every`) determines how frequently the rule evaluates. + +{{kib}} enforces a minimum interval of 5 seconds and a maximum of 365 days for duration fields (including this one). Values outside that range are rejected. + +### Lookback window + +The lookback window (`schedule.lookback`) determines the time range that the {{esql}} query covers. + +The lookback must not exceed 365 days. If the lookback is shorter than the execution interval, evaluations can miss data between runs. Use a lookback at least as long as the execution interval unless you have a deliberate reason not to. + +## Activation and recovery thresholds [activation-recovery-thresholds-v2] + +$$$activation-recovery-thresholds-v2$$$ + +Activation and recovery thresholds control when alerts transition between lifecycle states. They reduce noise from short spikes and from rapid flapping between active and recovered. + +These settings are only available for Alert-mode rules (`kind: alert`). + +### Activation thresholds + +Configure activation using count, timeframe, or both: + +| Field | Description | +| --- | --- | +| pending_count | Consecutive breaches required | +| pending_timeframe | Minimum duration the condition must persist | +| pending_operator | How to combine count and timeframe (`AND` or `OR`) | + +Each timeframe value must be between 5 seconds and 365 days. + +### Recovery thresholds + +| Field | Description | +| --- | --- | +| recovering_count | Consecutive recoveries required | +| recovering_timeframe | Minimum duration for recovery | +| recovering_operator | How to combine count and timeframe (`AND` or `OR`) | + +Timeframe fields use the same 5 seconds to 365 days bounds as activation timeframes. + +## No-data handling [no-data-handling-v2] + +No-data handling controls what happens when a rule executes and the base query returns no results. Proper configuration prevents false recoveries and misleading `no_data` events when data sources stop reporting. + +### Behaviors + +| Behavior | Effect | +| --- | --- | +| no_data (default) | Record a no-data event | +| last_status | Carry forward the previous status | +| recover | Treat absence as recovery | + +## Tags and investigation guide [tags-investigation-v2] + +Alert-mode rules support two optional metadata fields: + +- **Tags**: Free-form labels for filtering and organization. +- **Investigation guide**: A runbook stored with the rule so responders have context when an alert fires. + +## Evaluate rule output [evaluate-rule-output-v2] + +Before relying on a rule in production, evaluate it against recent data. A full evaluation surfaces: + +- How many rows the query returns. +- How many alert events would be generated. +- Sample alert event documents. +- A histogram of matching row counts over time (for evaluation and, when recovery logic applies, for recovery-oriented previews). + +In the rule builder, click **Preview** before saving to run this evaluation against your current query and settings. diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover.md b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover.md new file mode 100644 index 0000000000..0a654dd92d --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover.md @@ -0,0 +1,33 @@ +--- +navigation_title: Using Discover +applies_to: + serverless: preview +products: + - id: kibana +description: "Turn an {{esql}} query in Discover into a {{alerting-v2}} rule with pre-filled evaluation and lookback." +--- + +# Create rules using Discover [create-rules-discover-v2] + +$$$create-rules-discover-v2$$$ + +Create {{alerting-v2}} rules directly from Discover. When you build an {{esql}} query that surfaces interesting patterns, you can convert it into a rule without rewriting the query. For the full rule form including preview, alert mode settings, and YAML toggle, see [Create rules using the rule builder](create-rule-from-rule-builder.md). + +:::{admonition} What gets pre-populated +When you create a rule from Discover: + +- The full {{esql}} query from your current Discover session is placed into the rule's base query field. +- The index pattern is inferred from the `FROM` command in your query. +- The time range is converted into the rule's lookback window. + +You can modify any of these values in the rule form before saving. +::: + +## Create a rule from Discover + +1. Open Discover and switch to {{esql}} mode. +2. Write and run an {{esql}} query that returns the data you want to monitor. +3. Open the **Rules** menu on the Discover toolbar and choose **Create v2 ES|QL rule**. +4. The rule creation form opens with the {{esql}} query pre-populated in the evaluation field. +5. Configure the remaining rule settings. For details on each setting, see [Configure a rule](configure-a-rule.md). +6. Click **Save**. diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder.md b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder.md new file mode 100644 index 0000000000..c81eca8598 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder.md @@ -0,0 +1,20 @@ +--- +navigation_title: Using the rule builder +applies_to: + serverless: preview +products: + - id: kibana +description: "Create a {{alerting-v2}} rule with the interactive rule builder: open the form, configure settings, preview, and save." +--- + +# Create rules using the rule builder [create-rules-rule-builder-v2] + +$$$create-rules-ui-v2$$$ + +Create {{alerting-v2}} rules using the interactive rule creation form. The form provides a guided experience for all rule settings, with the option to toggle between interactive and YAML modes. + +1. Navigate to **{{manage-app}}** > **Alerts and Insights** > **Rules V2**. +2. Click **Create rule**. +3. Set up the rule. Refer to [](configure-a-rule.md) to learn about the available settings. +4. Click **Preview** to evaluate the query against recent data before saving. The preview shows how many rows the query returns, how many alert events would be generated, sample alert event documents, and a bar chart of matching row counts over time. +5. Click **Save**. The rule starts executing on its configured schedule. diff --git a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-yaml.md b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml.md similarity index 71% rename from explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-yaml.md rename to explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml.md index 6ec2d3d0b4..7606f6d0eb 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/author-rules/create-rules-yaml.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml.md @@ -1,15 +1,21 @@ --- -navigation_title: Using YAML +navigation_title: Using the YAML editor applies_to: serverless: preview products: - id: kibana -description: "Define Kibana alerting v2 rules in YAML for version control and infrastructure-as-code workflows, with full field reference." +description: "Define {{alerting-v2}} rules as YAML for version control, infrastructure-as-code, and bulk provisioning." --- -# Create Kibana alerting v2 rules with YAML [create-rules-yaml-v2] +# Create rules using the YAML editor [create-rules-yaml-v2] -Define Kibana alerting v2 rules as YAML documents for version control, infrastructure-as-code workflows, and bulk provisioning. +$$$create-rules-yaml-v2$$$ + +Define {{alerting-v2}} rules as YAML documents for version control, infrastructure-as-code workflows, and bulk provisioning. + +:::{note} +For the interactive form, refer to [Create rules using the rule builder](create-rule-from-rule-builder.md). +::: ## YAML rule structure @@ -86,8 +92,4 @@ evaluation: | WHERE http.response.status_code >= 500 | STATS error_count = COUNT(*) BY service.name | KEEP service.name, error_count -``` - -## Toggle between GUI and YAML - -In the rule creation UI, you can toggle between the interactive form and YAML mode at any time. Changes made in one mode are reflected in the other. +``` \ No newline at end of file diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference.md b/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference.md new file mode 100644 index 0000000000..4188d9af24 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference.md @@ -0,0 +1,104 @@ +--- +navigation_title: Rule and event fields +applies_to: + serverless: preview +products: + - id: kibana +description: "Reference for {{alerting-v2}} rule configuration fields and documents written to `.rule-events`." +--- + +# Rule event and field reference [rule-reference-v2] + +$$$rule-reference-v2$$$ + +This page lists technical fields for rule configuration and rule event documents written to `.rule-events`. For alert actions in `.alert-actions`, see [Alert states and fields reference](../alerts/alert-states-and-fields-reference.md#alert-states-reference-v2). For action policy dispatch outcomes, see [Action policy reference](../notifications/action-policy-reference.md#action-policy-reference-v2). + +:::{important} +The `.rule-events` and `.alert-actions` data streams are [system indices](/reference/glossary/index.md#glossary-system-index). {{kib}} manages their versioning, retention, and lifecycle. Do not change mappings or index settings for these streams yourself. +::: + +## Schedule and lookback + +These fields control when a rule runs and how far back its {{esql}} query looks on each evaluation. + +| Field | Description | +|---|---| +| schedule.every | Execution interval; minimum 5 seconds, maximum 365 days. | +| schedule.lookback | Time range the {{esql}} query covers; must not exceed 365 days; should be at least `schedule.every` to avoid gaps. | + +## Activation thresholds + +These fields are only available in Alert mode. They control how many consecutive breaches, or how long a condition must persist, before an episode transitions from `pending` to `active`. + +| Field | Description | +|---|---| +| pending_count | Consecutive breaches required. | +| pending_timeframe | Minimum duration the condition must persist. | +| pending_operator | How to combine count and timeframe (`AND` or `OR`). | + +## Recovery thresholds + +These fields are only available in Alert mode. They control how many consecutive recoveries, or how long the condition must be clear, before an episode transitions from `recovering` to `inactive`. + +| Field | Description | +|---|---| +| recovering_count | Consecutive recoveries required. | +| recovering_timeframe | Minimum duration for recovery. | +| recovering_operator | How to combine count and timeframe (`AND` or `OR`). | + +## No-data handling + +These settings determine what the rule records when the {{esql}} query returns no rows on an evaluation. + +| Behavior | Effect | +|---|---| +| no_data (default) | Record a no-data event. | +| last_status | Carry forward the previous status. | +| recover | Treat absence as recovery. | + +## Rule grouping + +Grouping is configured in YAML. The fields listed here control how the rule partitions results into independent series, each with its own lifecycle. + +| Key | Description | +|---|---| +| grouping.fields | Array of field names; must align with `STATS ... BY` in the {{esql}} query. | + +## Rule event documents + +Each time a rule evaluates, {{kib}} writes one document per matched series to `.rule-events`. The `type` field determines the document kind: + +- **signal:** A point-in-time record that the query matched. Useful for querying history or chaining into follow-on rules. Signal documents do not include `episode.*` fields. +- **alert:** A lifecycle-tracked episode visible in the alert inbox, episode details, and triage views. Alert documents include `episode.*` fields and represent a breach that stays open until the condition clears. + +Both kinds share the base fields below. Only `alert` documents add the [Episode fields](#episode-fields) listed further down. + +### Signal and alert fields + +These fields appear on all `.rule-events` documents, regardless of whether the rule is in Detect or Alert mode. + +| Field | Type | Required | Description | +|---|---|---|---| +| @timestamp | date | Yes | When this document was written to `.rule-events`. | +| scheduled_timestamp | date | No | Scheduled execution time for this rule run. | +| rule.id | keyword | Yes | Rule identifier. | +| rule.version | long | Yes | Rule version at the time this event was emitted. | +| group_hash | keyword | Yes | Series identity key for grouped evaluations. | +| data | flattened | Yes | Payload from the {{esql}} query output. Shape depends on your rule. | +| status | keyword | Yes | One of: `breached`, `recovered`, `no_data`. | +| source | keyword | Yes | Origin of this event. Product-specific identifier. | +| type | keyword | Yes | `signal` or `alert`. Application field on each rule event document written by {{kib}}. | + +:::{admonition} Fields not stored as a dedicated column +There is no top-level or nested `duration` field on `.rule-events` documents. For triage or reporting, derive duration from [Query alerts and signals in Discover](../alerts/query-alerts-and-signals-in-discover.md#explore-alerts-discover-v2), the alert UI, or your own queries over timestamps and episode identifiers. +::: + +### Episode fields + +These fields only appear on documents with `type: alert`, written by rules running in Alert mode. They carry the lifecycle state for the episode associated with the matched series. + +| Field | Type | Description | +|---|---|---| +| episode.id | keyword | Episode identifier for this series. | +| episode.status | keyword | One of: `inactive`, `pending`, `active`, `recovering`. | +| episode.status_count | long | Count of consecutive evaluations in the current `episode.status`. Only set when `episode.status` is `pending` or `recovering`. | diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules.md b/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules.md new file mode 100644 index 0000000000..81c5bd2e6c --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules.md @@ -0,0 +1,34 @@ +--- +navigation_title: View and manage rules +applies_to: + serverless: preview +products: + - id: kibana +description: "Use the {{alerting-v2}} rules list and rule details page: filters, search, bulk actions, and what you find in rule conditions." +--- + +# View and manage {{alerting-v2}} rules [manage-rules-v2] + +$$$manage-rules-v2$$$ + +$$$open-the-list$$$ + +Open the rules list from **{{manage-app}}** > **Alerts and Insights** > **Rules V2**. From here you can search, filter, sort, and act on rules individually or in bulk. + +## Rule details page + +Select a rule name to open its details page. The details page shows: + +- **Conditions**: The full {{esql}} base query, alert condition, schedule, lookback, grouping, and recovery settings. +- **Runbook**: If the rule has an investigation guide, it appears here alongside Conditions. + +Use **Edit** to modify the rule, or the actions menu to enable, disable, clone, or delete it. + +## Disable versus snooze + +Use **Disable** when you want the rule to stop running entirely until you re-enable it. This is different from snoozing, which suppresses notifications or quiets a series or policy without stopping rule evaluation. + +- To snooze alert episodes or series, refer to [View, manage, and reference alerts](../alerts/view-manage-and-reference-alerts.md#alert-actions-v2). +- To snooze or stop an action policy, refer to [Manage action policies](../notifications/manage-action-policies.md). + +If you are unsure which to use, refer to [Validation checklist and noise controls](../troubleshooting-alerting-v2.md#reduce-noise-v2). diff --git a/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md new file mode 100644 index 0000000000..a1980e4f08 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md @@ -0,0 +1,283 @@ +--- +navigation_title: Troubleshooting +applies_to: + serverless: preview +products: + - id: kibana +description: "Troubleshoot {{alerting-v2}} rules, notifications, action policies, workflows, and alert lifecycle, including a validation checklist for noise controls." +--- + +# Troubleshooting [troubleshooting-alerting-v2] + +This page collects symptom-based troubleshooting and a validation checklist for reducing noise. Use the section headings below to jump to a topic. + +## Rules not generating alerts [rules-not-generating-alerts] + +### Symptom + +A rule runs on schedule but you see no new documents in `.rule-events`, no episodes in the alert inbox, or counts stay at zero when you expect breaches. + +### Likely Causes + +- The rule is **disabled** or not saved successfully. +- The {{esql}} query or **alert condition** does not match current data (wrong index pattern, time field, filters, or thresholds in the query). +- The **lookback** window is too short relative to the rule schedule, so evaluations miss data between runs. +- The rule is in **Detect** mode and you are looking only at **alert** rows in Discover. +- Index privileges or API key privileges for the rule author cannot read the source indices. +- {{alerting-v2}} is not enabled in the deployment or the Rules V2 UI entry is hidden by configuration. + +### Diagnostic Steps + +1. Open **{{manage-app}}** > **Rules V2** and confirm the rule shows **Enabled**. +2. Open the rule **details** and read the **Rule conditions** section for the base query, alert condition, schedule, and lookback. +3. Run **Preview** from the rule editor (if available) or paste the {{esql}} into Discover and confirm rows return for the same time range. +4. In Discover on `.rule-events`, filter by `rule.id` for your rule and widen the time range. +5. Verify the rule mode: Detect emits `type: signal` without `episode.*`; Alert emits `type: alert` with episodes. +6. Confirm your user (or the rule’s execution API key owner) has read access to the indices in the `FROM` clause. + +### Resolution + +- **Enable** the rule if it was disabled. +- Tighten or broaden the {{esql}}, fix `FROM`, or adjust the **alert condition** so it reflects the signal you want. Cross-reference [Author rules](rules/author-rules.md). +- Set **lookback** to at least the **schedule** interval unless you intentionally accept gaps; see [Configure a rule](rules/configure-a-rule.md#schedule-lookback-v2). +- Switch to **Alert** mode when you need episodes and policy matching; see [Rules](rules.md#detection-and-notification-v2). +- Restore **index privileges** or **rotate the rule API key** after privilege changes; see [Get started](get-started.md#alerting-privileges-v2). +- Ask an administrator to confirm {{alerting-v2}} is enabled and navigation labels for your version; see [Set up and verify](get-started.md#alerting-set-up-v2). + +### Still not working? + +If documents never appear in `.rule-events` after the above checks, capture rule id, schedule, and a sample Discover query, then continue with [Unexpected alert behavior](#unexpected-alert-behavior) or open a support case with {{kib}} logs from evaluation time windows. + +## Notifications not sending [notifications-not-sending] + +### Symptom + +Alert episodes appear active in the UI or in `.rule-events`, but no email, chat, or other channel message arrives; `.alert-actions` may show `unmatched`, `throttled`, or `suppressed` instead of `fire`. + +### Likely Causes + +**Action policy path** + +- No global **action policy** matches the episode (overly strict **KQL matcher**, wrong `rule.name` / `rule.labels` / `data.*` fields). +- The matching policy is **disabled** or **snoozed**. +- **Throttling** or **Dispatch per** grouping prevents a new send for this evaluation cycle. +- **{{maint-windows-cap}}** or episode-level **snooze** / **suppress** blocks dispatch while evaluation continues. + +**Workflow path** + +- The policy has **no workflow destinations**, or destinations reference workflows that were **deleted** or renamed. +- The workflow exists but is **misconfigured** in core workflow tooling (channels, credentials, or steps), so delivery fails after handoff. +- **Workflow permissions** prevent the policy from resolving the destination in this space. + +**Other** + +- Heavy load or many policies delays dispatch; the dispatcher runs on an interval (on the order of tens of seconds). + +### Diagnostic Steps + +**If you suspect action policy misconfiguration** + +1. Open **Action policies** in the same **{{kib}} space** as the rule. +2. For each policy that should apply, confirm **Status** is enabled and not snoozed. +3. Open the policy **matcher** and validate KQL against a sample episode payload (`data.*`, `rule.*`, episode status fields). An empty matcher matches all episodes subject to other controls. +4. Read [How action policies work](notifications.md#how-action-policies-evaluated-v2) and map your episode to suppression, matcher, grouping, and throttle steps. +5. Query `.alert-actions` for `action.type` of `unmatched`, `throttled`, or `suppressed` for the episode id; see [Alert states and fields reference](alerts/alert-states-and-fields-reference.md#alert-states-reference-v2). + +**If you suspect workflow attachment or workflow health** + +1. Open the policy and confirm **at least one** `workflow` destination is selected. +2. Open **[LINK: Core Workflows Documentation]** for each workflow id and verify the workflow is published, credentials are valid, and channel steps succeed in test runs. +3. Confirm your account can read the workflow objects referenced by the policy (privilege escalation guard); see [Action policy management](alerting-v2-privileges.md). +4. After policy edits, allow a short delay for **API key invalidation** cycles described in [Manage action policies](notifications/manage-action-policies.md). + +### Resolution + +- Broaden or fix the **matcher**; align field names with the matcher editor suggestions. +- **Enable** the policy or clear **snooze** when you intend dispatch to resume. +- Adjust **Frequency** and **Dispatch per** so reminders can send when you expect; see [Create and configure an action policy](notifications/create-configure-action-policy.md#throttle-v2). +- Respect **maintenance windows** and episode **snooze** semantics; adjust windows or triage state if dispatch should resume. +- Add or repair **workflow destinations** on the policy, then re-test from [Workflows for {{alerting-v2}}](workflows-alerting-v2.md). +- Fix workflow configuration using **[LINK: Core Workflows Troubleshooting]**. +- If privileges block destination resolution, grant workflow access or recreate the policy with a permitted workflow. + +### Still not working? + +If `.alert-actions` shows `error`, use [Possible outcomes](notifications.md#possible-outcomes) for dispatcher outcome values and check {{kib}} server logs around evaluation timestamps. If outcomes are `unmatched` after matcher fixes, continue with [Action policy not triggering](#action-policy-not-triggering). + +## Action policy not triggering [action-policy-not-triggering] + +### Symptom + +Episodes exist but policies appear to ignore them: repeated `unmatched` outcomes, or no `fire` / `throttled` rows for that episode in `.alert-actions`. + +### Likely Causes + +- **KQL matcher** is too narrow or uses field names that do not exist on the matcher context. +- Policy is **disabled** or **snoozed**. +- Episode or series is under **suppression** (acknowledge / snooze / deactivate flows) before policy evaluation. +- **Space mismatch**: The rule and policy are not in the same {{kib}} space. +- **Empty matcher** was intended, but a non-empty invalid expression was saved. Validation should catch this on save, but stale clients can still show errors at runtime. + +### Diagnostic Steps + +1. Confirm the rule and policy are listed under the **same space**. +2. Inspect the policy **matcher** text and compare to fields visible on a recent `.rule-events` document for the episode (`data.*`, `rule.*`, status fields). +3. Confirm the policy is **enabled** and not **snoozed**. +4. Review triage actions on the episode for **snooze** or **suppress** patterns; see [View, manage, and reference alerts](alerts/view-manage-and-reference-alerts.md#alert-actions-v2). +5. Query `.alert-actions` for the episode id and read `action.type` values chronologically. + +### Resolution + +- Edit the matcher to valid KQL that reflects your routing intent, or temporarily use an empty catch-all matcher to validate the rest of the pipeline (then tighten). +- **Enable** the policy or end **snooze**. +- Clear or adjust triage states only when consistent with your operational policy. +- Move or recreate objects so the rule and policy share one space. + +### Still not working? + +If matchers are empty and policies still never run, return to [Notifications not sending](#notifications-not-sending) and verify **workflow destinations**. For rule-side issues, refer to [Rules not generating alerts](#rules-not-generating-alerts). + +## Workflow not executing [workflow-not-executing] + +### Symptom + +Action policy evaluation appears to succeed (for example `fire` or downstream logs) but no workflow-driven message arrives, or workflow runs fail in core workflow tooling. + +### Likely Causes + +- Workflow was **deleted** or **disabled** outside alerting while still referenced on a policy. +- **Channel configuration** inside the workflow is invalid (expired tokens, wrong recipients). +- **Runtime permissions** for the workflow or connector user block execution. +- You are looking only at alerting pages while the failure is logged in **workflow execution history** elsewhere. + +### Diagnostic Steps + +1. Open the action policy and note each **workflow** destination id. +2. Open **[LINK: Core Workflows Documentation]** and locate each workflow; confirm it exists in the same deployment and space expectations. +3. Run any **test** or **dry run** features your workflow product provides for the same channels used in production. +4. Check {{kib}} and workflow service logs around dispatcher timestamps for errors after policy handoff. + +### Resolution + +- Update the policy to reference a valid workflow, or restore the missing workflow definition. +- Fix credentials, recipients, and channel parameters in the core workflow editor. +- Align service accounts and API keys with least-privilege requirements from your administrators. + +### Still not working? + +Use **[LINK: Core Workflows Troubleshooting]** as the primary resolution path. Workflow configuration and retries are owned outside this alerting docset. If policies show `error` instead, refer to [Possible outcomes](notifications.md#possible-outcomes) and {{kib}} logs. + +## Alert not closing after resolution [alert-not-closing-after-resolution] + +### Symptom + +The underlying metric or log pattern looks healthy, but the episode remains **active** or oscillates between **recovering** and **active**. + +### Likely Causes + +- **Recovery thresholds** require more consecutive clear evaluations than have occurred yet. +- **No-data** handling treats gaps as **no_data** or **last_status** instead of recovery, so lifecycle does not move to inactive when you expect. +- **Grouping** or `group_hash` means you are viewing a different series than the one that recovered. +- **Resolve** / **deactivate** triage actions changed UI presentation while `.rule-events` history still shows transitional rows. + +### Diagnostic Steps + +1. Open the rule **configuration** and read **activation and recovery** settings; see [Configure a rule](rules/configure-a-rule.md#activation-recovery-thresholds-v2). +2. Read **no-data** behavior for the rule; see [Configure a rule](rules/configure-a-rule.md#no-data-handling-v2). +3. In Discover, query `.rule-events` for the episode’s `group_hash` and sort ascending by `@timestamp` to replay status transitions. +4. Compare **UI status** with raw `episode.status` fields for the latest rows. + +### Resolution + +- Tighten or loosen **recovery** counts and timeframes to match how stable the signal must be before closing. +- Change **no-data** behavior if gaps should count as recovery or should hold last status explicitly. +- Align triage expectations: manual **Resolve** affects presentation and suppression; it is not a substitute for recovery thresholds unless that matches your process. + +### Still not working? + +If flapping is caused by noisy queries, return to [Unexpected alert behavior](#unexpected-alert-behavior) and the decision table on [Validation checklist](#reduce-noise-v2). + +## Unexpected alert behavior [unexpected-alert-behavior] + +### Symptom + +Episodes open or close at surprising times, notifications repeat, multiple policies fire for one episode, or Discover rows disagree with the inbox. + +### Likely Causes + +- **Query** matches normal traffic or flapping metrics without enough **activation** dampening. +- **Multiple policies** match independently by design; there is **no precedence** between policies. +- **Dispatcher** timing differs from the rule schedule, so notification timing does not line up one-to-one with each rule run. +- **Manual triage** (snooze, resolve) interacts with lifecycle and dispatch in ways operators did not expect. + +### Diagnostic Steps + +1. Use the decision framing from [Validation checklist](#reduce-noise-v2) to decide whether to tune the rule, thresholds, matchers, throttles, or triage actions. +2. Re-read [How action policies work](notifications.md#how-action-policies-evaluated-v2) for independent policy evaluation and `unmatched` behavior. +3. Compare **rule evaluation timestamps** in `.rule-events` with **dispatcher-driven** outcomes in `.alert-actions`. + +### Resolution + +Follow the **Resolution** column in the checklist table for your situation (for example tighten {{esql}}, adjust activation thresholds, add throttles, refine matchers, or use maintenance windows). + +### Still not working? + +Escalate with exported Discover queries for `.rule-events` and `.alert-actions`, policy ids, and workflow ids. For workflow-specific failures, use **[LINK: Core Workflows Troubleshooting]**. + +## Validation checklist [reduce-noise-v2] + +{{alerting-v2}} offers many ways to reduce noise. Controls live in three places: + +- **[Configure a rule](rules/configure-a-rule.md)**: Thresholds, no-data handling, rule-level grouping, and related evaluation settings. +- **[Manage action policies](notifications/manage-action-policies.md)**: Enablement, snooze, **{{maint-windows-cap}}**, and bulk policy actions that affect dispatch. +- **[Notifications (Action Policies)](notifications.md)**: Action policies: matchers, Dispatch per, Frequency, destinations, and dispatcher behavior. +- **[View, manage, and reference alerts](alerts/view-manage-and-reference-alerts.md)**: Snooze, acknowledge, deactivate, tags, and anything persisted in **`.alert-actions`**. + +This section is a decision table so you can match a situation to the right mechanism. Deep content lives on the pages above. + +If multiple rows in the table apply, refer to [Using them together](#using-them-together). + +### Select the right approach + +| Your situation | Use this | What it does | +|---|---|---| +| The {{esql}} query matches too much normal traffic with too many breaching rows | [Author rules](rules/author-rules.md) | Narrows the query, `WHERE` clause, schedule, or lookback so evaluations only surface what matters | +| Short spikes or flapping metrics open alerts before they should | [Activation and recovery thresholds](rules/configure-a-rule.md#activation-recovery-thresholds-v2) | Requires consecutive breaches or a minimum duration before an episode becomes active | +| The alert recovers and reopens too often, flapping | [Activation and recovery thresholds](rules/configure-a-rule.md#activation-recovery-thresholds-v2) | Requires sustained clear conditions before an episode leaves recovering | +| The query returns no rows and no_data or recovery behavior is misleading | [No-data handling](rules/configure-a-rule.md#no-data-handling-v2) | Configures how empty results are interpreted so gaps do not look like false recoveries or false alerts | +| Notifications repeat for the same group on every evaluation | [Throttling on action policies](notifications/create-configure-action-policy.md#throttle-v2) | Enforces a minimum interval between notifications per notification group | +| Recipients get too many separate messages for related episodes | [Notification grouping on action policies](notifications/create-configure-action-policy.md#reduce-noise-grouping-v2) | Batches related alerts into fewer notifications | +| Notifications should only go out for certain episodes by severity, labels, or payload fields | [Matchers](notifications/create-configure-action-policy.md#matcher-v2) | Uses KQL on the action policy over episode and rule context (for example `rule.labels` and payload fields) so only matching episodes route to workflows | +| Planned maintenance: evaluations should continue but on-call should not be paged | [{{maint-windows-cap}}](notifications/manage-action-policies.md#maintenance-windows-v2) | Pauses policy dispatch for a scheduled window; rule evaluation continues | +| A temporary quiet period is needed for a series or episode without changing the rule | [View, manage, and reference alerts](alerts/view-manage-and-reference-alerts.md#alert-actions-v2) (snooze, silence, acknowledge) | Snoozes or silences notifications. Acknowledge can also quiet an episode while work proceeds | +| Many low-level alerts should roll up into one higher-level signal | [Author rules](rules/author-rules.md) ({{esql}} over `.rule-events`) | Runs follow-on rules on `.rule-events` or related data to correlate and notify once | +| One alert episode should stop notifying and leave the triage queue while the rule keeps running | [View, manage, and reference alerts](alerts/view-manage-and-reference-alerts.md#alert-actions-v2) (deactivate / resolve) | Deactivates that episode. The rule still evaluates and can detect new episodes for other series | + +Use the links in the table for procedures and reference detail on each control. + +### Key distinctions + +| | Tune rule / schedule | Activation / recovery thresholds | No-data handling | Matchers / grouping / throttle | {{maint-windows-cap}} / snooze / silence | Rules on alerts | Deactivate / resolve | +|---|---|---|---|---|---|---|---| +| Rule still evaluates | Yes | Yes | Yes | Yes | Yes | Yes, source rules | Yes | +| Changes breach detection logic | Yes | No, delays state only | Yes, empty-result policy | No | No | N/A | No | +| Reduces notifications | If fewer breaches | Indirectly | Indirectly | Yes | Yes | Yes | Yes | +| Typical time scope | Until next edit | Consecutive runs / duration | Per evaluation | Policy config | Window or until cleared | N/A | Until episode handled | + +### Using them together [using-them-together] + +These options stack. A common pattern is: tune the query for precision, add activation thresholds to ignore spikes, use matchers and throttling so action policies only fire for the right episodes at a sustainable rate, and use {{maint-windows-cap}} or snooze during known change windows. + +Example: Noisy CPU rule + +| Situation | Action | Mechanism | +|---|---|---| +| The {{esql}} query flags any host over 70% | Tighten the query or add a stricter `WHERE` | Write and tune the rule | +| Legitimate bursts open alerts for 1-minute spikes | Require 3 consecutive breaches before active | Activation thresholds | +| The same host pages every run for an hour | Add throttle and grouping on the action policy | Throttle, grouping | +| Only production hosts should page on-call | Add KQL on the policy matcher (for example on host or `rule.labels`) | Matchers | +| Database change window this evening | Open a {{maint-windows-cap}} or snooze the series | {{maint-windows-cap}}, snooze | + +::::{note} +Order of application matters. Thresholds and no-data behavior affect lifecycle state before action policies run. Matchers and throttling apply when action policies are evaluated for each episode. Snooze and {{maint-windows-cap}} affect whether notifications send, not whether `.rule-events` documents are written. Check Discover if raw history is needed. +:::: diff --git a/explore-analyze/alerting/kibana-alerting-v2/workflows-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/workflows-alerting-v2.md new file mode 100644 index 0000000000..db14c0f805 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/workflows-alerting-v2.md @@ -0,0 +1,44 @@ +--- +navigation_title: Workflows +applies_to: + serverless: preview +products: + - id: kibana +description: "How workflows connect to {{alerting-v2}} action policies and rule automation, and where to configure them." +--- + +# Workflows for {{alerting-v2}} [workflows-v2] + +$$$workflows-v2$$$ + +In {{alerting-v2}}, [Workflows](../../workflows.md) are how notifications get delivered. Action policies invoke workflows to send messages, trigger automation, or run other steps when an alert episode matches. + +Before creating an action policy, make sure the workflows you want to use already exist in your space. Policies store references to workflow IDs, so a destination workflow must exist before you can select it. For workflow authoring and permissions, refer to [Workflows](../../workflows.md). + +You can also attach workflows directly to a rule for automation that runs regardless of policy matching. + +## Runtime execution order [runtime-execution-order] + +After a rule produces or updates alert episodes, processing follows this sequence: + +``` +Rule → Alert → Action Policy → Workflow → Notification +``` + +1. The rule runs its {{esql}} evaluation and writes to `.rule-events`. +2. In Alert mode, alert documents and episodes represent the ongoing issue. +3. Action policies in the same space are evaluated against episodes (matcher, suppression, grouping, throttling). +4. For each dispatch, the policy invokes its configured workflows. +5. Notifications are the outcome: Email, chat, webhook, and so on. + +The policy evaluates matchers and throttling before any workflow step runs, even though you created the workflow before the policy. That's why configuration order (workflow first, then policy, then rule) is the reverse of runtime order. + +## Set up workflows and policies + +1. Configure a workflow in [Workflows](../../workflows.md). + + :::{note} + Only manual triggers are supported. + ::: + +2. Create an action policy under [Notifications](notifications.md) that references the workflow as a destination. Refer to [Create and configure an action policy](notifications/create-configure-action-policy.md). diff --git a/explore-analyze/toc.yml b/explore-analyze/toc.yml index 874d448623..aa260f596b 100644 --- a/explore-analyze/toc.yml +++ b/explore-analyze/toc.yml @@ -388,56 +388,29 @@ toc: - file: alerting/kibana-alerting-v1/maintenance-windows-v1.md - file: alerting/kibana-alerting-v2.md children: - - file: alerting/kibana-alerting-v2/before-you-begin.md - children: - - file: alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md - - file: alerting/kibana-alerting-v2/before-you-begin/set-up.md - - file: alerting/kibana-alerting-v2/author-rules.md - children: - - file: alerting/kibana-alerting-v2/author-rules/rule-types.md - - file: alerting/kibana-alerting-v2/author-rules/rule-templates.md - - file: alerting/kibana-alerting-v2/author-rules/create-rules-ui.md - - file: alerting/kibana-alerting-v2/author-rules/create-rules-discover.md - - file: alerting/kibana-alerting-v2/author-rules/create-rules-yaml.md - - file: alerting/kibana-alerting-v2/author-rules/rule-settings.md - children: - - file: alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md - - file: alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md - - file: alerting/kibana-alerting-v2/author-rules/rule-settings/no-data-handling.md - - file: alerting/kibana-alerting-v2/author-rules/rule-settings/grouping.md - - file: alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md - children: - - file: alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md - - file: alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md - - file: alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md - - file: alerting/kibana-alerting-v2/author-rules/set-rule-data-sources.md - - file: alerting/kibana-alerting-v2/author-rules/rules-on-alerts.md - - file: alerting/kibana-alerting-v2/author-rules/production-considerations.md - - file: alerting/kibana-alerting-v2/manage-rules.md - children: - - file: alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md - - file: alerting/kibana-alerting-v2/manage-rules/snooze-disable-rules.md - - file: alerting/kibana-alerting-v2/manage-alerts.md - children: - - file: alerting/kibana-alerting-v2/manage-alerts/view-alerts.md - - file: alerting/kibana-alerting-v2/manage-alerts/investigate-respond.md - children: - - file: alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md - - file: alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md - - file: alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md - - file: alerting/kibana-alerting-v2/reduce-noise.md - children: - - file: alerting/kibana-alerting-v2/reduce-noise/activation-thresholds.md - - file: alerting/kibana-alerting-v2/reduce-noise/recovery-thresholds.md - - file: alerting/kibana-alerting-v2/reduce-noise/no-data-handling.md - - file: alerting/kibana-alerting-v2/reduce-noise/throttle.md - - file: alerting/kibana-alerting-v2/reduce-noise/grouping.md - - file: alerting/kibana-alerting-v2/reduce-noise/matcher.md - - file: alerting/kibana-alerting-v2/reduce-noise/snooze-or-silence.md - - file: alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md - - file: alerting/kibana-alerting-v2/reduce-noise/rules-on-alerts.md - - file: alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md - - file: alerting/kibana-alerting-v2/alert-event-field-reference.md + - file: alerting/kibana-alerting-v2/get-started.md + - file: alerting/kibana-alerting-v2/alerting-v2-privileges.md + - file: alerting/kibana-alerting-v2/rules.md + children: + - file: alerting/kibana-alerting-v2/rules/author-rules.md + - file: alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder.md + - file: alerting/kibana-alerting-v2/rules/create-rule-from-discover.md + - file: alerting/kibana-alerting-v2/rules/create-rule-with-yaml.md + - file: alerting/kibana-alerting-v2/rules/configure-a-rule.md + - file: alerting/kibana-alerting-v2/rules/view-manage-rules.md + - file: alerting/kibana-alerting-v2/rules/rule-event-field-reference.md + - file: alerting/kibana-alerting-v2/alerts.md + children: + - file: alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md + - file: alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference.md + - file: alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover.md + - file: alerting/kibana-alerting-v2/workflows-alerting-v2.md + - file: alerting/kibana-alerting-v2/notifications.md + children: + - file: alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md + - file: alerting/kibana-alerting-v2/notifications/action-policy-reference.md + - file: alerting/kibana-alerting-v2/notifications/manage-action-policies.md + - file: alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md - file: alerting/watcher.md children: - file: alerting/watcher/watcher-getting-started.md diff --git a/redirects.yml b/redirects.yml index 923795b957..5e97129452 100644 --- a/redirects.yml +++ b/redirects.yml @@ -802,7 +802,20 @@ redirects: 'explore-analyze/alerting/alerts/maintenance-windows.md': 'explore-analyze/alerting/kibana-alerting-v1/maintenance-windows-v1.md' # Mistaken path under alerting/ (author rules live under kibana-alerting-v2/) - 'explore-analyze/alerting/author-rules.md': 'explore-analyze/alerting/kibana-alerting-v2/author-rules.md' + 'explore-analyze/alerting/author-rules.md': 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md' + + # {{alerting-v2}}: authoring rules renamed to author-rules + 'explore-analyze/alerting/kibana-alerting-v2/rules/authoring-rules.md': 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md' + + # {{alerting-v2}}: concepts page renamed (was how-v2-alerting-works.md) + 'explore-analyze/alerting/kibana-alerting-v2/how-v2-alerting-works.md': + to: 'explore-analyze/alerting/kibana-alerting-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/before-you-begin/how-v2-alerting-works.md': + to: 'explore-analyze/alerting/kibana-alerting-v2.md' + + # {{alerting-v2}}: authoring rules moved under rules/ + 'explore-analyze/alerting/kibana-alerting-v2/authoring-rules.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md' # Watcher redirects 'explore-analyze/alerts-cases/watcher/watcher-getting-started.md': 'explore-analyze/alerting/watcher/watcher-getting-started.md' @@ -880,16 +893,368 @@ redirects: anchors: 'otel-integrations-hybrid-policies': 'agent-policies-multiple-integrations' -# Kibana alerting v2: notification policies renamed to action policies + # Kibana alerting v2: view-manage-rules merged into manage-rules.md + 'explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules.md' + anchors: + 'view-manage-rules-v2': 'manage-rules-v2' + + # Kibana alerting v2: child pages merged into parent hubs + 'explore-analyze/alerting/kibana-alerting-v2/manage-rules/snooze-disable-rules.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules.md' + anchors: + 'snooze-disable-rules-v2': 'manage-rules-v2' + 'explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/get-started.md' + anchors: + 'alerting-set-up-v2': 'alerting-set-up-v2' + 'explore-analyze/alerting/kibana-alerting-v2/get-started/before-you-begin.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/get-started.md' + anchors: + 'alerting-set-up-v2': 'alerting-set-up-v2' + 'alerting-before-you-begin-v2': 'alerting-get-started-v2' + 'alerting-privileges-v2': 'alerting-privileges-v2' + 'explore-analyze/alerting/kibana-alerting-v2/get-started/quickstart.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/get-started.md' + anchors: + 'alerting-set-up-v2': 'alerting-set-up-v2' + + 'explore-analyze/alerting/kibana-alerting-v2/quickstart.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/get-started.md' + anchors: + 'alerting-set-up-v2': 'alerting-set-up-v2' + + 'explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/get-started.md' + anchors: + 'alerting-before-you-begin-v2': 'alerting-get-started-v2' + 'alerting-privileges-v2': 'alerting-privileges-v2' + 'alerting-set-up-v2': 'alerting-set-up-v2' + + 'explore-analyze/alerting/kibana-alerting-v2/before-you-begin/core-v2-alerting-concepts.md': + to: 'explore-analyze/alerting/kibana-alerting-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/get-started.md' + 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts/view-alerts.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md' + anchors: + 'view-alerts-v2': 'manage-alerts-v2' + + # Kibana alerting v2: rule settings consolidated; notification policies renamed to action policies + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-types.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md' + anchors: + 'rule-types-v2': 'author-rules-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications.md' anchors: 'notification-policies-v2': 'action-policies-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md' anchors: 'create-manage-notification-policies-v2': 'create-manage-action-policies-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications.md' anchors: 'how-notification-policies-evaluated-v2': 'how-action-policies-evaluated-v2' + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications.md' + anchors: + 'action-policies-v2': 'action-policies-v2' + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md' + anchors: + 'create-manage-action-policies-v2': 'create-manage-action-policies-v2' + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications.md' + anchors: + 'how-action-policies-evaluated-v2': 'how-action-policies-evaluated-v2' + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/matcher.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md' + anchors: + 'matcher-v2': 'matcher-v2' + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/grouping.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md' + anchors: + 'reduce-noise-grouping-v2': 'reduce-noise-grouping-v2' + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/throttle.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md' + anchors: + 'throttle-v2': 'throttle-v2' + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule.md' + anchors: + 'schedule-lookback-v2': 'schedule-lookback-v2' + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule.md' + anchors: + 'activation-recovery-thresholds-v2': 'activation-recovery-thresholds-v2' + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/no-data-handling.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule.md' + anchors: + 'no-data-handling-v2': 'no-data-handling-v2' + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/grouping.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule.md' + anchors: + 'rule-grouping-v2': 'rule-grouping-v2' + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/maintenance-windows.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies.md' + anchors: + 'maintenance-windows-v2': 'maintenance-windows-v2' + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/workflows-alerting-v2.md' + anchors: + 'workflows-v2': 'workflows-v2' + + # Kibana alerting v2: reduce-noise pages merged into rule settings, action policies, manage-alerts + 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md' + anchors: + 'matcher-v2': 'matcher-v2' + 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md' + anchors: + 'reduce-noise-grouping-v2': 'reduce-noise-grouping-v2' + 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/throttle.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md' + anchors: + 'throttle-v2': 'throttle-v2' + 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/activation-thresholds.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule.md' + anchors: + 'activation-thresholds-v2': 'activation-recovery-thresholds-v2' + 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/recovery-thresholds.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule.md' + anchors: + 'recovery-thresholds-v2': 'activation-recovery-thresholds-v2' + 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/no-data-handling.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule.md' + anchors: + 'reduce-noise-no-data-v2': 'no-data-handling-v2' + 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies.md' + anchors: + 'maintenance-windows-v2': 'maintenance-windows-v2' + 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/snooze-or-silence.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md' + anchors: + 'snooze-or-silence-v2': 'alert-actions-v2' + 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts/snooze-or-silence.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md' + anchors: + 'snooze-or-silence-v2': 'alert-actions-v2' + 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md' + anchors: + 'deactivate-alerts-v2': 'alert-actions-v2' + 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts/deactivate-alerts.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md' + anchors: + 'deactivate-alerts-v2': 'alert-actions-v2' + 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md' + anchors: + 'alert-actions-v2': 'alert-actions-v2' + 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md' + anchors: + 'alert-episode-details-v2': 'alert-episode-details-v2' + 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/rules-on-alerts.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md' + anchors: + 'reduce-noise-rules-on-alerts-v2': 'author-rules-v2' + + # Kibana alerting v2: author-rules pages folded into author-rules.md / rule-settings.md + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/set-rule-data-sources.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md' + anchors: + 'set-rule-data-sources-v2': 'author-rules-v2' + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rules-on-alerts.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md' + anchors: + 'rules-on-alerts-v2': 'author-rules-v2' + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/production-considerations.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md' + anchors: + 'production-considerations-v2': 'author-rules-v2' + 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-templates.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md' + anchors: + 'rule-templates-v2': 'rule-templates-v2' + + # Kibana alerting v2: IA restructure (paths removed April 2026) + 'explore-analyze/alerting/kibana-alerting-v2/core-v2-alerting-concepts.md': + to: 'explore-analyze/alerting/kibana-alerting-v2.md' + anchors: + 'kibana-alerting-v2-overview': 'kibana-alerting-v2-overview' + 'detection-and-notification-v2': 'detection-and-notification-v2' + + # Kibana alerting v2: overview page merged into kibana-alerting-v2.md hub + 'explore-analyze/alerting/kibana-alerting-v2/overview.md': + to: 'explore-analyze/alerting/kibana-alerting-v2.md' + anchors: + 'kibana-alerting-v2-overview': 'kibana-alerting-v2-overview' + 'detection-and-notification-v2': 'detection-and-notification-v2' + 'key-concepts-glossary': 'key-concepts-glossary' + 'how-pieces-fit-together': 'how-pieces-fit-together' + 'runtime-execution-order': 'runtime-execution-order' + 'configuration-order': 'configuration-order' + + # Kibana alerting v2: overview folder merged into kibana-alerting-v2.md + 'explore-analyze/alerting/kibana-alerting-v2/overview/how-system-works.md': + to: 'explore-analyze/alerting/kibana-alerting-v2.md' + anchors: + 'kibana-alerting-v2-overview': 'kibana-alerting-v2-overview' + 'detection-and-notification-v2': 'detection-and-notification-v2' + 'explore-analyze/alerting/kibana-alerting-v2/overview/key-concepts-glossary.md': + to: 'explore-analyze/alerting/kibana-alerting-v2.md' + anchors: + 'key-concepts-glossary': 'key-concepts-glossary' + 'explore-analyze/alerting/kibana-alerting-v2/overview/how-pieces-fit-together.md': + to: 'explore-analyze/alerting/kibana-alerting-v2.md' + anchors: + 'how-pieces-fit-together': 'how-pieces-fit-together' + 'runtime-execution-order': 'runtime-execution-order' + 'configuration-order': 'configuration-order' + 'explore-analyze/alerting/kibana-alerting-v2/get-starting.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/get-started.md' + anchors: + 'alerting-set-up-v2': 'alerting-set-up-v2' + 'explore-analyze/alerting/kibana-alerting-v2/alerting-privileges.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/get-started.md' + anchors: + 'alerting-privileges-v2': 'alerting-privileges-v2' + 'explore-analyze/alerting/kibana-alerting-v2/author-rules.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md' + anchors: + 'author-rules-v2': 'author-rules-v2' + 'esql-query-structure': 'esql-query-structure' + 'explore-analyze/alerting/kibana-alerting-v2/manage-rules.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules.md' + anchors: + 'manage-rules-v2': 'manage-rules-v2' + 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md' + anchors: + 'manage-alerts-v2': 'manage-alerts-v2' + 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md' + anchors: + 'investigate-respond-v2': 'investigate-respond-v2' + 'alert-actions-v2': 'alert-actions-v2' + 'alert-episode-details-v2': 'alert-episode-details-v2' + 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover.md' + anchors: + 'explore-alerts-discover-v2': 'explore-alerts-discover-v2' + 'explore-analyze/alerting/kibana-alerting-v2/send-notifications.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications.md' + anchors: + 'send-notifications-v2': 'how-action-policies-evaluated-v2' + 'action-policies-v2': 'action-policies-v2' + 'how-action-policies-evaluated-v2': 'how-action-policies-evaluated-v2' + 'matcher-v2': 'matcher-v2' + 'reduce-noise-grouping-v2': 'reduce-noise-grouping-v2' + 'throttle-v2': 'throttle-v2' + 'create-manage-action-policies-v2': 'create-manage-action-policies-v2' + 'explore-analyze/alerting/kibana-alerting-v2/notifications/how-action-policies-work.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications.md' + 'explore-analyze/alerting/kibana-alerting-v2/notifications/about-action-policies.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications.md' + 'explore-analyze/alerting/kibana-alerting-v2/notifications/configure-action-policy.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md' + 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-action-policy.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md' + 'explore-analyze/alerting/kibana-alerting-v2/rules/about-rules.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules.md' + 'explore-analyze/alerting/kibana-alerting-v2/rules/how-rules-work.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules.md' + 'explore-analyze/alerting/kibana-alerting-v2/rules/write-a-rule.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md' + anchors: + 'author-rules-v2': 'author-rules-v2' + 'esql-query-structure': 'esql-query-structure' + 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rules-ui.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder.md' + anchors: + 'create-rules-ui-v2': 'create-rules-ui-v2' + 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-ui.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder.md' + anchors: + 'create-rules-ui-v2': 'create-rules-ui-v2' + 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rules-discover.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover.md' + anchors: + 'create-rules-discover-v2': 'create-rules-discover-v2' + 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rules-yaml.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml.md' + anchors: + 'create-rules-yaml-v2': 'create-rules-yaml-v2' + 'explore-analyze/alerting/kibana-alerting-v2/rules/rule-reference.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference.md' + anchors: + 'rule-reference-v2': 'rule-reference-v2' + 'explore-analyze/alerting/kibana-alerting-v2/alerts/about-alerts.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts.md' + 'explore-analyze/alerting/kibana-alerting-v2/alerts/alert-lifecycle.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts.md' + anchors: + 'alert-lifecycle-v2': 'alert-lifecycle-v2' + 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-alerts.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md' + anchors: + 'manage-alerts-v2': 'manage-alerts-v2' + 'explore-analyze/alerting/kibana-alerting-v2/alerts/investigate-respond.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md' + anchors: + 'investigate-respond-v2': 'investigate-respond-v2' + 'alert-actions-v2': 'alert-actions-v2' + 'alert-episode-details-v2': 'alert-episode-details-v2' + 'explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-reference.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference.md' + anchors: + 'alert-states-reference-v2': 'alert-states-reference-v2' + 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md' + anchors: + 'reduce-noise-v2': 'reduce-noise-v2' + 'using-them-together': 'using-them-together' + + # Kibana alerting v2: troubleshooting folder merged into troubleshooting-alerting-v2.md + 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/rules-not-generating-alerts.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md' + anchors: + 'rules-not-generating-alerts': 'rules-not-generating-alerts' + 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/notifications-not-sending.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md' + anchors: + 'notifications-not-sending': 'notifications-not-sending' + 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/action-policy-not-triggering.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md' + anchors: + 'action-policy-not-triggering': 'action-policy-not-triggering' + 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/workflow-not-executing.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md' + anchors: + 'workflow-not-executing': 'workflow-not-executing' + 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/alert-not-closing-after-resolution.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md' + anchors: + 'alert-not-closing-after-resolution': 'alert-not-closing-after-resolution' + 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/unexpected-alert-behavior.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md' + anchors: + 'unexpected-alert-behavior': 'unexpected-alert-behavior' + 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/validation-checklist.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md' + anchors: + 'reduce-noise-v2': 'reduce-noise-v2' + 'using-them-together': 'using-them-together' + 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/error-messages-reference.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications.md' + anchors: + 'error-messages-reference': 'possible-outcomes' + 'explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference.md' + anchors: + 'alert-event-field-reference-v2': 'rule-reference-v2' diff --git a/release-notes/elastic-cloud-serverless/index.md b/release-notes/elastic-cloud-serverless/index.md index 8cf0d4959a..ac9177f7f7 100644 --- a/release-notes/elastic-cloud-serverless/index.md +++ b/release-notes/elastic-cloud-serverless/index.md @@ -210,7 +210,7 @@ Review the changes, fixes, and more to {{serverless-full}}. * Fixes `STATS` generated columns with an inline `WHERE` clause in {{esql}} [#260196]({{kib-pull}}260196) * Fixes **Hosts** filter options to match the selected schema [#259825]({{kib-pull}}259825) * Adds support for cross-cluster replication (CCR) to the Streams plugin, allowing replicated data streams to be viewed and partially managed in Kibana [#259175]({{kib-pull}}259175) -* Converts notification policy and alert action endpoints from internal to public (experimental) [#260510]({{kib-pull}}260510) +* Converts action policy and alert action endpoints from internal to public (experimental) [#260510]({{kib-pull}}260510) * Adds visual and accessibility enhancements to the flyout UI [#259428]({{kib-pull}}259428) * Applies post-enrichment filtering for Hosts exclusion filters [#260426]({{kib-pull}}260426) * Fixes the index threshold rule's `filterKuery` producing incorrect queries for keyword wildcard fields [#260283]({{kib-pull}}260283) From 18c71be3cf30d29bbc75c8fddf1b43890c873d30 Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Mon, 20 Apr 2026 21:34:17 -0400 Subject: [PATCH 17/40] fix redirects --- redirects.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/redirects.yml b/redirects.yml index 5e97129452..09be4262d7 100644 --- a/redirects.yml +++ b/redirects.yml @@ -1258,3 +1258,20 @@ redirects: to: 'explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference.md' anchors: 'alert-event-field-reference-v2': 'rule-reference-v2' + + # Agent Builder: skills concept renamed to custom agents and tools + 'explore-analyze/ai-features/agent-builder/agent-builder-dashboards-and-visualizations.md': 'explore-analyze/ai-features/agent-builder/chat.md' + 'explore-analyze/ai-features/agent-builder/builtin-skills-reference.md': 'explore-analyze/ai-features/agent-builder/builtin-agents-reference.md' + 'explore-analyze/ai-features/agent-builder/custom-skills.md': 'explore-analyze/ai-features/agent-builder/custom-agents.md' + 'explore-analyze/ai-features/agent-builder/skill-creation-guidelines.md': 'explore-analyze/ai-features/agent-builder/custom-agents.md' + 'explore-analyze/ai-features/agent-builder/skills.md': 'explore-analyze/ai-features/agent-builder/tools.md' + + # Elastic Workflows: IA restructure (paths removed) + 'explore-analyze/workflows/authoring-techniques.md': 'explore-analyze/workflows/author-workflows.md' + 'explore-analyze/workflows/get-started/build-your-first-workflow.md': 'explore-analyze/workflows/get-started.md' + 'explore-analyze/workflows/reference.md': 'explore-analyze/workflows/core-components.md' + 'explore-analyze/workflows/use-cases/ai-augmented-workflows.md': 'explore-analyze/workflows/use-cases.md' + 'explore-analyze/workflows/use-cases/observability.md': 'explore-analyze/workflows/use-cases.md' + 'explore-analyze/workflows/use-cases/security.md': 'explore-analyze/workflows/use-cases.md' + 'explore-analyze/workflows/use-cases/security/automate-security-operations.md': 'explore-analyze/workflows/use-cases.md' + 'explore-analyze/workflows/use-cases/security/manage-detection-rules.md': 'explore-analyze/workflows/use-cases.md' From fad64826e7b0d5ba81f91a3f6cdcb553b35696a4 Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Mon, 20 Apr 2026 21:49:16 -0400 Subject: [PATCH 18/40] fixe redirects --- .../rules/create-rule-from-rule-builder.md | 1 + redirects.yml | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder.md b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder.md index c81eca8598..dac62bc76c 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder.md @@ -9,6 +9,7 @@ description: "Create a {{alerting-v2}} rule with the interactive rule builder: o # Create rules using the rule builder [create-rules-rule-builder-v2] +$$$create-rules-rule-builder-v2$$$ $$$create-rules-ui-v2$$$ Create {{alerting-v2}} rules using the interactive rule creation form. The form provides a guided experience for all rule settings, with the option to toggle between interactive and YAML modes. diff --git a/redirects.yml b/redirects.yml index 09be4262d7..80e1284645 100644 --- a/redirects.yml +++ b/redirects.yml @@ -1266,10 +1266,16 @@ redirects: 'explore-analyze/ai-features/agent-builder/skill-creation-guidelines.md': 'explore-analyze/ai-features/agent-builder/custom-agents.md' 'explore-analyze/ai-features/agent-builder/skills.md': 'explore-analyze/ai-features/agent-builder/tools.md' - # Elastic Workflows: IA restructure (paths removed) + # Elastic Workflows: IA restructure (paths removed or moved) 'explore-analyze/workflows/authoring-techniques.md': 'explore-analyze/workflows/author-workflows.md' + 'explore-analyze/workflows/authoring-techniques/manage-workflows.md': 'explore-analyze/workflows/manage-workflows.md' + 'explore-analyze/workflows/authoring-techniques/monitor-workflows.md': 'explore-analyze/workflows/monitor-troubleshoot.md' + 'explore-analyze/workflows/authoring-techniques/pass-data-handle-errors.md': 'explore-analyze/workflows/data.md' + 'explore-analyze/workflows/authoring-techniques/use-yaml-editor.md': 'explore-analyze/workflows/author-workflows.md' 'explore-analyze/workflows/get-started/build-your-first-workflow.md': 'explore-analyze/workflows/get-started.md' + 'explore-analyze/workflows/get-started/setup.md': 'explore-analyze/workflows/setup.md' 'explore-analyze/workflows/reference.md': 'explore-analyze/workflows/core-components.md' + 'explore-analyze/workflows/templating.md': 'explore-analyze/workflows/data/templating.md' 'explore-analyze/workflows/use-cases/ai-augmented-workflows.md': 'explore-analyze/workflows/use-cases.md' 'explore-analyze/workflows/use-cases/observability.md': 'explore-analyze/workflows/use-cases.md' 'explore-analyze/workflows/use-cases/security.md': 'explore-analyze/workflows/use-cases.md' From 74977b315d0c3ed56a62c7388f4ce5ef4b6e8b43 Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Mon, 20 Apr 2026 23:32:47 -0400 Subject: [PATCH 19/40] More redirect fixes --- redirects.yml | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/redirects.yml b/redirects.yml index 73a2e902a1..cc349509f9 100644 --- a/redirects.yml +++ b/redirects.yml @@ -1266,16 +1266,8 @@ redirects: 'explore-analyze/ai-features/agent-builder/skill-creation-guidelines.md': 'explore-analyze/ai-features/agent-builder/custom-agents.md' 'explore-analyze/ai-features/agent-builder/skills.md': 'explore-analyze/ai-features/agent-builder/tools.md' - # Elastic Workflows: IA restructure (paths removed or moved) - 'explore-analyze/workflows/authoring-techniques.md': 'explore-analyze/workflows/author-workflows.md' - 'explore-analyze/workflows/authoring-techniques/manage-workflows.md': 'explore-analyze/workflows/manage-workflows.md' - 'explore-analyze/workflows/authoring-techniques/monitor-workflows.md': 'explore-analyze/workflows/monitor-troubleshoot.md' - 'explore-analyze/workflows/authoring-techniques/pass-data-handle-errors.md': 'explore-analyze/workflows/data.md' - 'explore-analyze/workflows/authoring-techniques/use-yaml-editor.md': 'explore-analyze/workflows/author-workflows.md' + # Elastic Workflows: pages removed (use-cases subfolder deleted) 'explore-analyze/workflows/get-started/build-your-first-workflow.md': 'explore-analyze/workflows/get-started.md' - 'explore-analyze/workflows/get-started/setup.md': 'explore-analyze/workflows/setup.md' - 'explore-analyze/workflows/reference.md': 'explore-analyze/workflows/core-components.md' - 'explore-analyze/workflows/templating.md': 'explore-analyze/workflows/data/templating.md' 'explore-analyze/workflows/use-cases/ai-augmented-workflows.md': 'explore-analyze/workflows/use-cases.md' 'explore-analyze/workflows/use-cases/observability.md': 'explore-analyze/workflows/use-cases.md' 'explore-analyze/workflows/use-cases/security.md': 'explore-analyze/workflows/use-cases.md' From f967e8f49532fdef5e00f6ccec912c2ca59637d7 Mon Sep 17 00:00:00 2001 From: Nastasha Solomon <79124755+nastasha-solomon@users.noreply.github.com> Date: Tue, 21 Apr 2026 16:45:52 -0400 Subject: [PATCH 20/40] Adds conceptual content and renames files for alerting v2 (#6042) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Adds conceptual content and renames files for alerting v2 ## Generative AI disclosure 1. Did you use a generative AI (GenAI) tool to assist in creating this contribution? - [x] Yes - [ ] No Cursor + Claude --- docset.yml | 3 +- .../alerting-common-issues-v1.md | 4 +- .../alerting-getting-started-v1.md | 2 +- .../kibana-alerting-v1/alerting-setup-v1.md | 2 +- .../alerting/kibana-alerting-v2.md | 65 ++++--- .../alerting/kibana-alerting-v2/alerts-v2.md | 114 ++++++++++++ .../alerting/kibana-alerting-v2/alerts.md | 63 ------- ...> alert-states-and-fields-reference-v2.md} | 0 ...uery-alerts-and-signals-in-discover-v2.md} | 15 ++ ...=> view-manage-and-reference-alerts-v2.md} | 6 +- .../{get-started.md => get-started-v2.md} | 2 +- .../{notifications.md => notifications-v2.md} | 0 ...rence.md => action-policy-reference-v2.md} | 0 ...d => create-configure-action-policy-v2.md} | 2 +- ...licies.md => manage-action-policies-v2.md} | 0 .../{rules.md => rules-v2.md} | 4 +- .../{author-rules.md => author-rules-v2.md} | 0 ...igure-a-rule.md => configure-a-rule-v2.md} | 0 ...ver.md => create-rule-from-discover-v2.md} | 0 ...md => create-rule-from-rule-builder-v2.md} | 2 +- ...th-yaml.md => create-rule-with-yaml-v2.md} | 2 + ...ce.md => rule-event-field-reference-v2.md} | 8 +- ...anage-rules.md => view-manage-rules-v2.md} | 2 +- .../rules/yaml-rule-schema-reference-v2.md | 95 ++++++++++ .../troubleshooting-alerting-v2.md | 4 +- explore-analyze/toc.yml | 40 +++-- redirects.yml | 164 ++++++++++-------- 27 files changed, 406 insertions(+), 193 deletions(-) create mode 100644 explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/alerts.md rename explore-analyze/alerting/kibana-alerting-v2/alerts/{alert-states-and-fields-reference.md => alert-states-and-fields-reference-v2.md} (100%) rename explore-analyze/alerting/kibana-alerting-v2/alerts/{query-alerts-and-signals-in-discover.md => query-alerts-and-signals-in-discover-v2.md} (87%) rename explore-analyze/alerting/kibana-alerting-v2/alerts/{view-manage-and-reference-alerts.md => view-manage-and-reference-alerts-v2.md} (90%) rename explore-analyze/alerting/kibana-alerting-v2/{get-started.md => get-started-v2.md} (91%) rename explore-analyze/alerting/kibana-alerting-v2/{notifications.md => notifications-v2.md} (100%) rename explore-analyze/alerting/kibana-alerting-v2/notifications/{action-policy-reference.md => action-policy-reference-v2.md} (100%) rename explore-analyze/alerting/kibana-alerting-v2/notifications/{create-configure-action-policy.md => create-configure-action-policy-v2.md} (97%) rename explore-analyze/alerting/kibana-alerting-v2/notifications/{manage-action-policies.md => manage-action-policies-v2.md} (100%) rename explore-analyze/alerting/kibana-alerting-v2/{rules.md => rules-v2.md} (88%) rename explore-analyze/alerting/kibana-alerting-v2/rules/{author-rules.md => author-rules-v2.md} (100%) rename explore-analyze/alerting/kibana-alerting-v2/rules/{configure-a-rule.md => configure-a-rule-v2.md} (100%) rename explore-analyze/alerting/kibana-alerting-v2/rules/{create-rule-from-discover.md => create-rule-from-discover-v2.md} (100%) rename explore-analyze/alerting/kibana-alerting-v2/rules/{create-rule-from-rule-builder.md => create-rule-from-rule-builder-v2.md} (93%) rename explore-analyze/alerting/kibana-alerting-v2/rules/{create-rule-with-yaml.md => create-rule-with-yaml-v2.md} (94%) rename explore-analyze/alerting/kibana-alerting-v2/rules/{rule-event-field-reference.md => rule-event-field-reference-v2.md} (82%) rename explore-analyze/alerting/kibana-alerting-v2/rules/{view-manage-rules.md => view-manage-rules-v2.md} (89%) create mode 100644 explore-analyze/alerting/kibana-alerting-v2/rules/yaml-rule-schema-reference-v2.md diff --git a/docset.yml b/docset.yml index 41f5dfaef3..acc1aa9e4e 100644 --- a/docset.yml +++ b/docset.yml @@ -109,7 +109,6 @@ subs: dev-tools-app: "Dev Tools" stack-manage-app: "Stack Management" stack-monitor-app: "Stack Monitoring" - rules-ui: "Rules" connectors-ui: "Connectors" connectors-feature: "Actions and Connectors" stack-rules-feature: "Stack Rules" @@ -298,3 +297,5 @@ subs: fedramp-high: "FedRAMP High" fedramp-il5: "FedRAMP IL5" alerting-v2: "Kibana alerting v2" + rules-ui-v2: "Rules" + alerts-ui: "Alert episodes" diff --git a/explore-analyze/alerting/kibana-alerting-v1/alerting-common-issues-v1.md b/explore-analyze/alerting/kibana-alerting-v1/alerting-common-issues-v1.md index 90cc033313..f6993457e8 100644 --- a/explore-analyze/alerting/kibana-alerting-v1/alerting-common-issues-v1.md +++ b/explore-analyze/alerting/kibana-alerting-v1/alerting-common-issues-v1.md @@ -248,7 +248,7 @@ 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](kibana://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](kibana://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. | +| If other scenarios don’t apply. | Generate a new API key for the rule. For example, in **{{stack-manage-app}} > {{rules-ui-v2}}**, select **Update API key** from the action menu. | ## Rules stop running after upgrade [known-issue-upgrade-rule] @@ -262,4 +262,4 @@ Alerting rules that were created or edited in 8.2 stop running after you upgrade **Solution**: -Upgrade to 8.3.2 or later releases to avoid the problem. To fix failing rules, go to **{{stack-manage-app}} > {{rules-ui}}** and multi-select the rules. Choose **Manage rules > Update API Keys** to generate new API keys. For more details about API key authorization, refer to [API keys](alerting-setup-v1.md#alerting-authorization). +Upgrade to 8.3.2 or later releases to avoid the problem. To fix failing rules, go to **{{stack-manage-app}} > {{rules-ui-v2}}** and multi-select the rules. Choose **Manage rules > Update API Keys** to generate new API keys. For more details about API key authorization, refer to [API keys](alerting-setup-v1.md#alerting-authorization). diff --git a/explore-analyze/alerting/kibana-alerting-v1/alerting-getting-started-v1.md b/explore-analyze/alerting/kibana-alerting-v1/alerting-getting-started-v1.md index e2cb9fb727..70248b29d7 100644 --- a/explore-analyze/alerting/kibana-alerting-v1/alerting-getting-started-v1.md +++ b/explore-analyze/alerting/kibana-alerting-v1/alerting-getting-started-v1.md @@ -19,7 +19,7 @@ products: 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**](detection-rules://index.md), [**Maps**](geo-alerting-v1.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](rule-types-v1.md#stack-rules) for you to use. :::{image} /explore-analyze/images/kibana-alerting-overview.png -:alt: {{rules-ui}} UI +:alt: Rules UI ::: ::::{important} diff --git a/explore-analyze/alerting/kibana-alerting-v1/alerting-setup-v1.md b/explore-analyze/alerting/kibana-alerting-v1/alerting-setup-v1.md index 284d4c9c00..ef2c4d399b 100644 --- a/explore-analyze/alerting/kibana-alerting-v1/alerting-setup-v1.md +++ b/explore-analyze/alerting/kibana-alerting-v1/alerting-setup-v1.md @@ -99,7 +99,7 @@ When you create a rule in {{kib}}, an API key is created that captures a snapsho When you disable a rule, it retains the associated API key which is reused when the rule is enabled. If the API key is missing when you enable the rule, a new key is generated that has your current security privileges. When you import a rule, you must enable it before you can use it and a new API key is generated at that time. -You can generate a new API key at any time in **{{stack-manage-app}} > {{rules-ui}}** or in the rule details page by selecting **Update API key** in the actions menu. +You can generate a new API key at any time in **{{stack-manage-app}} > {{rules-ui-v2}}** or in the rule details page by selecting **Update API key** in the actions menu. If you manage your rules by using {{kib}} APIs, they support support both key- and token-based authentication as described in [Authentication](https://www.elastic.co/docs/api/doc/kibana/authentication). To use key-based authentication, create API keys and use them in the header of your API calls as described in [API Keys](../../../deploy-manage/api-keys/elasticsearch-api-keys.md). To use token-based authentication, provide a username and password; an API key that matches the current privileges of the user is created automatically. In both cases, the API key is subsequently associated with the rule and used when it runs. diff --git a/explore-analyze/alerting/kibana-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2.md index 67ce8a6054..e782ab0eb6 100644 --- a/explore-analyze/alerting/kibana-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2.md @@ -17,19 +17,24 @@ description: "How {{alerting-v2}} watches your data, turns conditions into signa ## The four building blocks -{{alerting-v2}} is built around four objects (rules, alerts, action policies, and workflows), each with a distinct role in the detection and notification pipeline. +{{alerting-v2}} is built around four objects, rules, alerts, action policies, and workflows, each with a distinct role. ### Rules -A rule says *what to watch* and *how often*. It holds an {{esql}} query, a schedule and lookback window, and in Alert mode, thresholds that control when an issue becomes active or recovers. Rules run in either Detect mode (records signals only, no episodes or notifications) or Alert mode (tracks episodes and enables policy matching). Refer to [Rules](kibana-alerting-v2/rules.md) to learn more. +A rule defines what to watch for in your data and how often to check. Every rule runs in one of two modes: + +- **Detect mode** - The rule records what it finds, but doesn't track whether the problem is ongoing or send any notifications. Use this for observation and investigation. +- **Alert mode** - The rule tracks problems over time and can trigger notifications when something needs attention. + +Refer to [Rules](kibana-alerting-v2/rules-v2.md) to learn more. ### Alerts -When a rule runs in Alert mode, it maintains an alert episode for each tracked series: a record that something is wrong, with lifecycle states (pending, active, recovering) and the history of what happened. These live in Discover and the Alerts UI. Refer to [Alerts](kibana-alerting-v2/alerts.md) to learn more. +When a rule runs in Alert mode, it creates an alert for each problem it detects. An alert isn't a single snapshot. It's an ongoing record that follows the problem through its full lifecycle, from when it first appeared to when it resolved. You triage and manage alerts in the Alerts UI. Refer to [Alerts](kibana-alerting-v2/alerts-v2.md) to learn more. ### Action policies -An action policy decides whether an episode should produce outreach and how often. It's a global object within the space (not attached to any one rule) that uses optional KQL matchers to pick up episodes from any rule. Multiple policies can match the same episode and each runs independently. Refer to [Notifications](kibana-alerting-v2/notifications.md) to learn more. +An action policy controls whether an alert should trigger a notification, and how often. You can set conditions to filter which alerts it applies to, for example, only critical severity alerts from a specific service. A single action policy can apply to alerts from any rule in your space. Refer to [Notifications](kibana-alerting-v2/notifications-v2.md) to learn more. ### Workflows -A workflow is what actually sends the message or runs the automation. Action policies point at workflows as destinations. If no workflow is attached and reachable, nothing is delivered. Refer to [Workflows for {{alerting-v2}}](kibana-alerting-v2/workflows-alerting-v2.md) to learn more. +A workflow is what actually sends the message or runs the automation, for example, posting to Slack or sending an email. Action policies hand off to workflows for delivery. Without a workflow attached, no notification is sent. Refer to [Workflows for {{alerting-v2}}](kibana-alerting-v2/workflows-alerting-v2.md) to learn more. ## A quick example @@ -42,18 +47,35 @@ The engineer gets one message, investigates, fixes a slow query, and latency dro $$$detection-and-notification-v2$$$ $$$runtime-execution-order$$$ -At runtime the chain runs left to right: +What happens after a rule finds something depends entirely on the rule's mode. + +### Alert mode + +Use Alert mode when you want to track issues and be notified. The rule opens an episode when the condition is met and keeps it open until the condition clears. ``` -Rule → Alert → Action Policy → Workflow → Notification +Rule runs → finds something → writes an alert event + → episode opens (pending → active) → you get notified + → condition clears (recovering → inactive) → you get notified again + → action policy → workflow → notification ``` -1. A rule evaluates {{esql}} on a schedule and writes signal or alert events. -2. In Alert mode, alert episodes track the ongoing issue from first breach through recovery. +1. The rule evaluates {{esql}} on a schedule and writes an alert event to `.rule-events`. +2. The alert event joins an episode, which is tracked until the condition resolves. 3. Action policies match eligible episodes and decide whether outreach should run. 4. Matched policies invoke configured workflows, which deliver messages or run automation steps. 5. Notifications are the outcome (email, chat, webhook, and so on) when all prior steps pass. +### Detect mode + +Use Detect mode when you want to record matches for querying and analysis without alerting anyone. The rule writes a signal and stops. An episode is not opened, and notifications are not sent. + +``` +Rule runs → finds something → writes a signal event + → queryable in Discover + → no episode, no action policy, no notification +``` + $$$configuration-order$$$ ## {{alerting-v2}} terms [key-concepts-glossary] @@ -61,34 +83,37 @@ $$$configuration-order$$$ These terms appear throughout the {{alerting-v2}} docs. If a term is unclear while reading, check its definition here before going further. **Action policy** -: A global saved object in a space that decides whether and how often outreach runs for matching episodes. Holds the matcher, grouping, throttle, and workflow destinations. To learn more, refer to [Notifications](kibana-alerting-v2/notifications.md). +: A set of rules that controls who gets notified, when, and how often. You configure a matcher to filter which alerts it applies to, how alerts should be grouped, and which workflow should send the message. One action policy can apply to alerts from multiple rules. To learn more, refer to [Notifications](kibana-alerting-v2/notifications-v2.md). **Alert** -: A document written to `.rule-events` when a rule in Alert mode matches. Alert documents have `type: alert` and include `episode.*` fields that tie them to the ongoing episode for that series. +: A rule event produced when a rule runs in Alert mode. Unlike a signal, an alert is tied to an ongoing episode and is part of the full story of that problem from when it started to when it resolved. **Breach** -: A single evaluation where the rule's {{esql}} query (and optional alert condition) returned a match. One breach writes one document to `.rule-events`. Multiple consecutive breaches might be required before an episode becomes active, depending on the rule's activation thresholds. +: A single moment when a rule's query finds a match. One breach doesn't necessarily trigger a notification. You can configure a rule to require several consecutive breaches before it confirms the problem is real. **Episode** -: In Alert mode, a lifecycle-tracked record that spans one full breach-to-recovery arc for a rule series. An episode moves through states (pending, active, recovering, inactive) and is what action policies match against and operators triage in the Alerts UI. To learn more, refer to [Alerts](kibana-alerting-v2/alerts.md). +: The complete record of one problem, from when it was first detected to when it recovered. An episode moves through states (pending, active, recovering, inactive) as the situation changes. This is what you see and act on in the Alerts UI. To learn more, refer to [Alerts](kibana-alerting-v2/alerts-v2.md). **{{esql}}** -: The query language every rule uses. Data sources are declared in the query itself (for example `FROM`). To learn more, refer to the [{{esql}} reference](elasticsearch://reference/query-languages/esql.md). +: The query language every rule uses to search your data. To learn more, refer to the [{{esql}} reference](elasticsearch://reference/query-languages/esql.md). **Notification** -: A delivery produced when an episode passes through a matching action policy and its workflow destinations. To learn more, refer to [How action policies are evaluated](kibana-alerting-v2/notifications.md#how-action-policies-evaluated-v2). +: The message or action delivered when an alert matches an action policy and a workflow sends it. Examples include a Slack message, an email, or a webhook call. To learn more, refer to [How action policies are evaluated](kibana-alerting-v2/notifications-v2.md#how-action-policies-evaluated-v2). **Rule** -: An {{esql}} query plus a schedule and related settings. The entry point for detection. To learn more, refer to [Rules](kibana-alerting-v2/rules.md). +: The definition of what to watch for in your data, how often to check, and what counts as a problem. Rules run on a schedule. In Detect mode they produce signals. In Alert mode they track ongoing episodes. To learn more, refer to [Rules](kibana-alerting-v2/rules-v2.md). + +**Rule event** +: A record written to `.rule-events` every time a rule runs and its query finds a match. Every rule produces rule events. Whether the record is a signal or an alert depends on the mode the rule is running in. **Severity** -: Carried by convention under `data.*` and available as a policy KQL field. To learn more, refer to [Author rules](kibana-alerting-v2/rules/author-rules.md#severity-levels). +: A label you can attach to alerts to indicate how serious they are. Severity is available as a filter in action policies, so you can route critical alerts differently from low-priority ones. To learn more, refer to [Author rules](kibana-alerting-v2/rules/author-rules-v2.md#severity-levels). **Signal** -: A point-in-time record written to `.rule-events` when a rule in Detect mode matches. Signals have `type: signal` and no `episode.*` fields. They are queryable in Discover but do not open episodes or trigger notifications. +: A rule event produced when a rule runs in Detect mode. Signals are stored and queryable, but they don't open episodes or trigger notifications. **Threshold** -: Breach logic expressed in {{esql}}, combined with activation and recovery settings on the rule. To learn more, refer to [Conditions and thresholds](kibana-alerting-v2/rules/author-rules.md#conditions-and-thresholds). +: The condition a rule uses to decide when something is worth alerting on. This includes both the query that detects the problem and settings that control how many times the condition must be met before an alert opens or closes. To learn more, refer to [Conditions and thresholds](kibana-alerting-v2/rules/author-rules-v2.md#conditions-and-thresholds). **Workflow** -: The automation object action policies invoke to deliver messages or run steps such as email, Slack, or webhooks. To learn more, refer to [Workflows for {{alerting-v2}}](kibana-alerting-v2/workflows-alerting-v2.md). +: The automation that sends a message or runs an action when an action policy decides a notification should go out. Examples include posting to Slack, sending an email, or calling a webhook. To learn more, refer to [Workflows for {{alerting-v2}}](kibana-alerting-v2/workflows-alerting-v2.md). diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md new file mode 100644 index 0000000000..f05f22d93f --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md @@ -0,0 +1,114 @@ +--- +navigation_title: Alerts +applies_to: + serverless: preview +products: + - id: kibana +description: "Alert episodes in {{alerting-v2}}: lifecycle states, series and episodes, signals versus alerts, and where to find them." +--- + +# Alerts + +When a rule runs in Alert mode, it maintains _alert episodes_, which are ongoing records of an issue from first breach through recovery. This is what you triage on the **Alerts** page. + +An episode isn't a single event. It's the full story of one issue on one series. It covers when the condition first triggered, what state it's in right now, and when it recovered. Each rule evaluation appends to that history. Nothing is overwritten. + +## Alert lifecycle [alert-lifecycle-v2] + +Every alert episode moves through these states: + +``` +inactive → pending → active → recovering → inactive +``` + +| State | What it means | +| --- | --- | +| Inactive | Problem fully resolved. You get a recovery notification. | +| Pending | Errors detected, but the system is waiting to confirm it's a real problem before fully alerting. | +| Active | Problem confirmed and ongoing. This is when you get notified. | +| Recovering | Errors have stopped, but the system is waiting to confirm it's truly resolved. | + +Activation and recovery thresholds control how many consecutive evaluations must agree, or how long the condition must persist, before transitioning. Refer to [Configure a rule](rules/configure-a-rule.md#activation-recovery-thresholds-v2) to learn more about these settings. + +### Alert episode example + +Suppose a service starts throwing errors at 10:00am and stops at 10:45am. Your rule runs in Alert mode every 5 seconds. Here's how one episode covers the entire incident, from detection to resolution: + +1. **10:00am** - The rule detects errors. A new episode is created. With no activation threshold configured, it moves immediately from `pending` to `active`. +2. **10:00am–10:45am** - The rule continues detecting errors on every run. The **same episode** stays `active`. No new episodes are created. +3. **10:45am** - Errors stop. The episode moves to `recovering`. Without a recovery threshold, it transitions immediately to `inactive`. + +One problem is tracked in one episode, even though the rule ran hundreds of times while the condition was ongoing. + +## Series + +A series is the ongoing relationship between a rule and one specific thing it monitors. + +Your rule monitors services. Each service it tracks has its own series, one for `checkout-service`, one for `payment-service`, and so on. A series exists for as long as that rule keeps monitoring that service. + +Think of it like a patient's medical file. The file exists as long as the patient is in the system. Individual health incidents come and go, but the file persists. + +### How series and episodes relate + +An episode lives inside a series. A series can contain many episodes over its lifetime, one for each time that service had a problem. + +``` +Series: checkout-service +│ +├── Episode 1: errors on April 10 (active → inactive) +├── Episode 2: errors on April 15 (active → inactive) +└── Episode 3: errors on April 18 (active right now) +``` + +The series is the container. Episodes are the individual problems that happened within it. When the series breaches again after recovering, a new episode starts. + +This means you can track "the checkout service was broken from 02:14 to 03:21" and "the payment service was broken at the same time" as separate episodes, even when both come from the same rule. + +:::{tip} +Snooze operates at the series level, not the episode level. If you snooze `checkout-service`, you're saying "stop notifying me about anything from this service for the next X hours", regardless of how many new episodes start during that time. You're silencing a specific ongoing situation, not just one alert. +::: + +### A practical way to think about it + +| Concept | Analogy | +| --- | --- | +| Rule | A security camera watching the building | +| Series | The camera's feed for one specific door | +| Episode | A specific incident caught on that feed | +| Rule events | The individual video frames | + +The camera runs continuously (rule), always watching door 3 (series). One night someone breaks in. That's an episode. The frames captured during the break-in are the rule events. + +## Signals versus alerts + +Every time a rule finds a match, it writes a document to `.rule-events`. Whether that document is a signal or an alert depends on the rule's mode — and that choice determines whether the system just records what happened or actively tracks it through to resolution. + +A **signal** is a one-time observation. The system writes it and moves on — no lifecycle, no notifications, no follow-up. A **alert** participates in an episode. The system links it to every other document from the same problem, tracks the lifecycle states, and routes notifications through action policies. + +| Type | What it is | When it's created | +| --- | --- | --- | +| Signal | A point-in-time record that the query matched (`type: signal`). Stored in `.rule-events`. | Rules in Detect mode | +| Alert | A lifecycle-tracked episode with `type: alert` and `episode.*` fields. Stored in `.rule-events`. | Rules in Alert mode | + +A rule in Detect mode only writes signals. It never opens episodes, so action policies have nothing to match against. + +## Where alerts live + +Alert events are stored in `.rule-events`. Triage actions (acknowledge, snooze, resolve) are stored in `.alert-actions`. Both are queryable in Discover. + +The **Alerts** page (**{{manage-app}} > V2 Alerting Preview > Alerts**) shows the current state of every episode in your space, filterable by rule, status, and tags. + +### Data stream storage and retention + +Both `.rule-events` and `.alert-actions` are data streams, append-only, time-series stores optimized for writes. On every rule evaluation, {{kib}} writes a **new document** to `.rule-events` rather than updating the previous one. Each document is a point-in-time snapshot. The `episode.status` field records the lifecycle state the episode was in at that exact evaluation. Nothing is overwritten. + +Because every evaluation produces its own document, you can reconstruct the full history of an episode by querying all documents that share the same `episode.id`. Refer to [Query alerts and signals in Discover](alerts/query-alerts-and-signals-in-discover.md#explore-alerts-discover-v2) for example queries. + +Retention is managed automatically through ILM. Older backing indices move through storage tiers and are deleted when the retention window expires. You do not need to manually remove documents. {{kib}} manages versioning, retention, and lifecycle for both streams. Do not change their mappings or index settings. + +## Where to go next + +- [View, manage, and reference alerts](alerts/view-manage-and-reference-alerts.md): Open the alert episodes table, triage active episodes, and acknowledge, snooze, or resolve them. +- [Query alerts and signals in Discover](alerts/query-alerts-and-signals-in-discover.md): Use {{esql}} to query `.rule-events` and `.alert-actions` for ad hoc analysis and dashboards. +- [Alert states and fields reference](alerts/alert-states-and-fields-reference.md): Look up lifecycle states, field names, and episode document structure. +- [Notifications](notifications.md): Set up action policies to route alert episodes to the right people and channels. diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts.md b/explore-analyze/alerting/kibana-alerting-v2/alerts.md deleted file mode 100644 index 8a1cef08c1..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -navigation_title: Alerts -applies_to: - serverless: preview -products: - - id: kibana -description: "Alert episodes in {{alerting-v2}}: lifecycle states, series and episodes, signals versus alerts, and where to find them." ---- - -# Alerts - -When a rule runs in Alert mode, it maintains alert episodes, ongoing records of an issue from first breach through recovery. This is what you triage on the **Alerts** page. - -An episode isn't a single event. It's the full story of one issue on one series. It covers when the condition first triggered, what state it's in right now, and when it recovered. Each rule evaluation appends to that history. Nothing is overwritten. - -## Alert lifecycle [alert-lifecycle-v2] - -Every alert episode moves through these states: - -``` -inactive → pending → active → recovering → inactive -``` - -| State | What it means | -| --- | --- | -| inactive | No breach. The series is healthy and not being tracked. | -| pending | The condition is met, but the rule's activation threshold hasn't been reached yet. This prevents one noisy evaluation from opening an alert. | -| active | The breach is confirmed. The episode is open and actionable. Action policies can route notifications. | -| recovering | The condition has cleared, but the rule's recovery threshold hasn't been met yet. | - -Activation and recovery thresholds control how many consecutive evaluations must agree, or how long the condition must persist, before transitioning. Refer to [Configure a rule](rules/configure-a-rule.md#activation-recovery-thresholds-v2) for the settings. - -## Series and episodes - -When a rule groups by fields (for example `BY host.name`), each unique combination is its own series, identified by `group_hash`. Each series has its own independent lifecycle. - -An episode is one lifecycle arc for a series, identified by `episode_id`, from first breach to recovery. When the series breaches again after recovering, a new episode starts. - -This lets you track "the checkout service was broken from 02:14 to 03:21" and "the payment service was broken at the same time" as separate episodes, even when both come from the same rule. - -## Signals versus alerts - -Signals and alerts are two different record types that rules can produce, depending on the rule mode. - -| Type | What it is | When it's created | -| --- | --- | --- | -| Signal | A point-in-time record that the query matched (`type: signal`). Stored in `.rule-events`. | Rules in Detect mode | -| Alert | A lifecycle-tracked episode with `type: alert` and `episode.*` fields. Stored in `.rule-events`. | Rules in Alert mode | - -A rule in Detect mode only writes signals. It never opens episodes, so action policies have nothing to match against. - -## Where alerts live - -Alert events are stored in `.rule-events`. Triage actions (acknowledge, snooze, resolve) are stored in `.alert-actions`. Both are queryable in Discover. - -The **Alerts** page (**{{manage-app}}** > **Alerts and Insights** > **Rules V2** > **Alerts**) shows the current state of every episode in your space, filterable by rule, status, and tags. - -## Where to go next - -- [View, manage, and reference alerts](alerts/view-manage-and-reference-alerts.md): Open the alert episodes table, triage active episodes, and acknowledge, snooze, or resolve them. -- [Query alerts and signals in Discover](alerts/query-alerts-and-signals-in-discover.md): Use {{esql}} to query `.rule-events` and `.alert-actions` for ad hoc analysis and dashboards. -- [Alert states and fields reference](alerts/alert-states-and-fields-reference.md): Look up lifecycle states, field names, and episode document structure. -- [Notifications](notifications.md): Set up action policies to route alert episodes to the right people and channels. diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md similarity index 100% rename from explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference.md rename to explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md similarity index 87% rename from explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover.md rename to explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md index f01ece6ebe..1fdda520a3 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md @@ -91,6 +91,21 @@ FROM .rule-events | SORT @timestamp ASC ``` +### Example: Lifecycle timeline for one episode + +Replace `YOUR_EPISODE_ID` with the `episode.id` value from an alert event or the alert details UI. This query returns one row per rule evaluation, ordered chronologically, so you can trace exactly how the episode moved through its lifecycle from start to finish. + +```esql +// ═══════════════════════════════════════════════════════════════ +// ONE EPISODE - Full lifecycle timeline by episode.id, replace YOUR_EPISODE_ID +// Why: Replay how an episode progressed through pending → active → recovering → inactive +// ═══════════════════════════════════════════════════════════════ +FROM .rule-events +| WHERE episode.id == "YOUR_EPISODE_ID" +| KEEP @timestamp, episode.status, episode.status_count, status +| SORT @timestamp ASC +``` + ### Example: Daily breach trend ```esql diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md similarity index 90% rename from explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md rename to explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md index 8151ed10cb..1ee8b4d284 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md @@ -11,7 +11,7 @@ description: "Open the {{alerting-v2}} alert episodes table, triage actions, and $$$manage-alerts-v2$$$ -The **Alert episodes** table is the main place to view {{alerting-v2}} episodes, filter and sort them, and start triage. Open it from **{{manage-app}}** > **Alerts and Insights** > **Rules V2** > **Alert episodes**. +The **Alerts** page is the main place to view {{alerting-v2}} episodes, filter and sort them, and start triage. Open it from **{{manage-app}} > V2 Alerting Preview** > **Alerts**. ## Filter and search @@ -37,7 +37,7 @@ The same actions are available from the episode detail page. Select **Discover** on a row to investigate source data. Discover opens with the rule {{esql}} query and a short time window around the episode so you can inspect matching documents in context. -For ad hoc analysis over `.rule-events` and `.alert-actions` with copy-paste {{esql}} examples, refer to [Query alerts and signals in Discover](query-alerts-and-signals-in-discover.md). +For ad hoc analysis over `.rule-events` and `.alert-actions` with copy-paste {{esql}} examples, refer to [Query alerts and signals in Discover](query-alerts-and-signals-in-discover-v2.md). ## Episode detail page [alert-episode-details-v2] @@ -80,4 +80,4 @@ The `action_type` field identifies the operation in `.alert-actions` documents: | fire | Notification or workflow dispatch recorded. | | unmatched | No action policy matched, so no workflow ran. | -For a full field list and state definitions, refer to [Alert states and fields reference](alert-states-and-fields-reference.md#alert-states-reference-v2). +For a full field list and state definitions, refer to [Alert states and fields reference](alert-states-and-fields-reference-v2.md#alert-states-reference-v2). diff --git a/explore-analyze/alerting/kibana-alerting-v2/get-started.md b/explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md similarity index 91% rename from explore-analyze/alerting/kibana-alerting-v2/get-started.md rename to explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md index 2154e50b7c..065d7ab724 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/get-started.md +++ b/explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md @@ -27,7 +27,7 @@ $$$alerting-set-up-v2$$$ ### Enable {{alerting-v2}} -{{alerting-v2}} is available in {{stack}} 9.4 and later. When it is enabled for your deployment, use **{{manage-app}}** > **Alerts and Insights** > **Rules V2** to open the v2 rules list and author rules. If **Rules V2** does not appear in the navigation, ask your administrator whether alerting v2 is enabled in your environment. +{{alerting-v2}} is available in {{stack}} 9.4 and later. When it is enabled for your deployment, use **{{manage-app}} > V2 Alerting Preview** to open the v2 rules list and author rules. If **V2 Alerting Preview** does not appear in the navigation, ask your administrator whether alerting v2 is enabled in your environment. ### Where alert data is stored diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications.md b/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md similarity index 100% rename from explore-analyze/alerting/kibana-alerting-v2/notifications.md rename to explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md similarity index 100% rename from explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference.md rename to explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md similarity index 97% rename from explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md rename to explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md index b05055a2ee..4ea8479ac7 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md @@ -17,7 +17,7 @@ For API values, Dispatch per and Frequency mappings, throttle strategies, dispat ## Create an action policy -1. Open **{{manage-app}}** > **V2 Alerting Preview** > **Action policies**. +1. Open **{{manage-app}} > V2 Alerting Preview > Action Policies**. 2. Click **Create policy**. 3. Fill in the policy fields described in [Policy fields](#policy-fields) below. 4. Click **Save**. The matcher expression is validated on save, so invalid KQL is rejected before dispatch runs. diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies-v2.md similarity index 100% rename from explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies.md rename to explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies-v2.md diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules.md b/explore-analyze/alerting/kibana-alerting-v2/rules-v2.md similarity index 88% rename from explore-analyze/alerting/kibana-alerting-v2/rules.md rename to explore-analyze/alerting/kibana-alerting-v2/rules-v2.md index 1bc5a54074..fa36973b1e 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules-v2.md @@ -35,5 +35,5 @@ This separation means you can build and test a rule without anyone getting paged ## Where to go next -- [Author rules](rules/author-rules.md): Write the {{esql}} query, choose Detect or Alert mode, and structure your data sources and conditions. -- [View and manage rules](rules/view-manage-rules.md): Enable, disable, clone, delete, and bulk-manage rules from the rules list. +- [Author rules](rules/author-rules-v2.md): Write the {{esql}} query, choose Detect or Alert mode, and structure your data sources and conditions. +- [View and manage rules](rules/view-manage-rules-v2.md): Enable, disable, clone, delete, and bulk-manage rules from the rules list. diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md b/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md similarity index 100% rename from explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md rename to explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule.md b/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md similarity index 100% rename from explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule.md rename to explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover.md b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md similarity index 100% rename from explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover.md rename to explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder.md b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md similarity index 93% rename from explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder.md rename to explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md index dac62bc76c..60166b5a38 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md @@ -14,7 +14,7 @@ $$$create-rules-ui-v2$$$ Create {{alerting-v2}} rules using the interactive rule creation form. The form provides a guided experience for all rule settings, with the option to toggle between interactive and YAML modes. -1. Navigate to **{{manage-app}}** > **Alerts and Insights** > **Rules V2**. +1. Navigate to **{{manage-app}} > V2 Alerting Preview > Rules**. 2. Click **Create rule**. 3. Set up the rule. Refer to [](configure-a-rule.md) to learn about the available settings. 4. Click **Preview** to evaluate the query against recent data before saving. The preview shows how many rows the query returns, how many alert events would be generated, sample alert event documents, and a bar chart of matching row counts over time. diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml.md b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md similarity index 94% rename from explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml.md rename to explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md index 7606f6d0eb..dbff900a4a 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md @@ -17,6 +17,8 @@ Define {{alerting-v2}} rules as YAML documents for version control, infrastructu For the interactive form, refer to [Create rules using the rule builder](create-rule-from-rule-builder.md). ::: +For a complete list of every valid YAML field, refer to [YAML rule schema reference](yaml-rule-schema-reference.md). + ## YAML rule structure A complete alert-mode rule in YAML: diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference.md b/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md similarity index 82% rename from explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference.md rename to explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md index 4188d9af24..23e9654a5e 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md @@ -11,10 +11,10 @@ description: "Reference for {{alerting-v2}} rule configuration fields and docume $$$rule-reference-v2$$$ -This page lists technical fields for rule configuration and rule event documents written to `.rule-events`. For alert actions in `.alert-actions`, see [Alert states and fields reference](../alerts/alert-states-and-fields-reference.md#alert-states-reference-v2). For action policy dispatch outcomes, see [Action policy reference](../notifications/action-policy-reference.md#action-policy-reference-v2). +This page lists technical fields for rule configuration and rule event documents written to `.rule-events`. For alert actions in `.alert-actions`, refer to [Alert states and fields reference](../alerts/alert-states-and-fields-reference.md#alert-states-reference-v2). For action policy dispatch outcomes, see [Action policy reference](../notifications/action-policy-reference.md#action-policy-reference-v2). :::{important} -The `.rule-events` and `.alert-actions` data streams are [system indices](/reference/glossary/index.md#glossary-system-index). {{kib}} manages their versioning, retention, and lifecycle. Do not change mappings or index settings for these streams yourself. +The `.rule-events` and `.alert-actions` data streams are [system indices](/reference/glossary/index.md#glossary-system-index). {{kib}} manages their versioning, retention, and lifecycle through ILM. Older backing indices are deleted automatically when the retention window expires. Do not change mappings or index settings for these streams yourself. ::: ## Schedule and lookback @@ -73,6 +73,10 @@ Each time a rule evaluates, {{kib}} writes one document per matched series to `. Both kinds share the base fields below. Only `alert` documents add the [Episode fields](#episode-fields) listed further down. +:::{note} +`.rule-events` is a data stream, so it is append-only. A new document is written on every rule evaluation — existing documents are never updated. Each document is a snapshot of that moment: the `episode.status` field records the lifecycle stage the episode was in at that evaluation. To see the full history of an episode, query all documents that share the same `episode.id`. See [Query alerts and signals in Discover](../alerts/query-alerts-and-signals-in-discover.md#explore-alerts-discover-v2) for example queries. +::: + ### Signal and alert fields These fields appear on all `.rule-events` documents, regardless of whether the rule is in Detect or Alert mode. diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules.md b/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md similarity index 89% rename from explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules.md rename to explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md index 81c5bd2e6c..dfbe8ab49a 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md @@ -13,7 +13,7 @@ $$$manage-rules-v2$$$ $$$open-the-list$$$ -Open the rules list from **{{manage-app}}** > **Alerts and Insights** > **Rules V2**. From here you can search, filter, sort, and act on rules individually or in bulk. +Open the rules list from **{{manage-app}} > V2 Alerting Preview > Rules**. From here you can search, filter, sort, and act on rules individually or in bulk. ## Rule details page diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/yaml-rule-schema-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/yaml-rule-schema-reference-v2.md new file mode 100644 index 0000000000..76133899b2 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/yaml-rule-schema-reference-v2.md @@ -0,0 +1,95 @@ +--- +navigation_title: YAML rule schema reference +applies_to: + serverless: preview +products: + - id: kibana +description: "Complete field reference for {{alerting-v2}} YAML rule definitions: required fields, metadata, schedule, grouping, state transitions, no-data handling, and duration format." +--- + +# YAML rule schema reference [yaml-rule-schema-reference-v2] + +$$$yaml-rule-schema-reference-v2$$$ + +This page lists every valid field for a {{alerting-v2}} YAML rule definition. For examples and authoring guidance, refer to [Create rules using the YAML editor](create-rule-with-yaml.md). + +## Required fields + +| Field | Type | Accepted values | Description | +|---|---|---|---| +| `kind` | string | `alert` or `signal` | Whether the rule tracks ongoing episodes (`alert`) or records point-in-time observations (`signal`). | +| `metadata.name` | string | Max 256 characters | The name of the rule. | +| `schedule.every` | duration | For example, `5s`, `1m`, `5m` | How often the rule runs. Minimum interval applies. | +| `evaluation.query.base` | string | Valid {{esql}} query, max 10,000 characters | The query that checks your data on each run. | + +## Metadata fields + +| Field | Type | Accepted values | Description | +|---|---|---|---| +| `metadata.description` | string | Max 1,024 characters | Optional description of what the rule monitors. | +| `metadata.owner` | string | Max 256 characters | Team or person responsible for the rule. | +| `metadata.tags` | array of strings | Max 100 tags | Labels for filtering and organisation. | + +## Schedule fields + +| Field | Type | Accepted values | Description | +|---|---|---|---| +| `schedule.lookback` | duration | For example, `5m`, `24h` | How far back in time the query searches on each run. | + +## Recovery policy fields + +| Field | Type | Accepted values | Description | +|---|---|---|---| +| `recovery_policy.type` | string | `no_breach` or `query` | How recovery is detected. `no_breach` recovers when the query returns no results. `query` uses a separate recovery query. | +| `recovery_policy.query.base` | string | Valid {{esql}} query | Required when `recovery_policy.type` is `query`. The query that checks whether the condition has cleared. | + +## State transition fields + +Only valid when `kind: alert`. Controls how many consecutive detections are required before an episode becomes active or recovers. + +| Field | Type | Accepted values | Description | +|---|---|---|---| +| `state_transition.pending_operator` | string | `AND` or `OR` | Whether both the count and timeframe must be met (`AND`) or either one (`OR`) before becoming active. | +| `state_transition.pending_count` | integer | 0 or more | Number of consecutive breaches required before the episode becomes active. | +| `state_transition.pending_timeframe` | duration | For example, `5m` | Time window within which the breach count must be met. | +| `state_transition.recovering_operator` | string | `AND` or `OR` | Whether both the count and timeframe must be met (`AND`) or either one (`OR`) before recovering. | +| `state_transition.recovering_count` | integer | 0 or more | Number of consecutive clear evaluations required before the episode recovers. | +| `state_transition.recovering_timeframe` | duration | For example, `5m` | Time window within which the recovery count must be met. | + +## Grouping fields + +| Field | Type | Accepted values | Description | +|---|---|---|---| +| `grouping.fields` | array of strings | Max 16 fields, each max 256 characters | Fields to group results by. Each unique combination becomes its own series. | + +## No-data fields + +| Field | Type | Accepted values | Description | +|---|---|---|---| +| `no_data.behavior` | string | `no_data`, `last_status`, or `recover` | What happens when the query returns no results. `no_data` records a no-data event. `last_status` keeps the current status. `recover` closes any active episode. | +| `no_data.timeframe` | duration | For example, `5m` | How long the query must return no results before the no-data behavior applies. | + +## Artifact fields + +| Field | Type | Accepted values | Description | +|---|---|---|---| +| `artifacts[].type` | string | For example, `runbook` | The type of artifact being attached. | +| `artifacts[].value` | string | Markdown content | The content of the artifact. Runbooks are rendered as markdown in the rule detail view. | + +## Other fields + +| Field | Type | Accepted values | Description | +|---|---|---|---| +| `time_field` | string | Any valid field name, max 128 characters | The timestamp field used for the lookback window filter. Defaults to `@timestamp`. | +| `notification_policies[].ref` | string | Format: `policies/` | Links a notification policy to the rule. | + +## Duration format + +All duration fields accept the following units: + +| Unit | Example | Meaning | +|---|---|---| +| `s` | `30s` | Seconds | +| `m` | `5m` | Minutes | +| `h` | `1h` | Hours | +| `d` | `7d` | Days | diff --git a/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md index a1980e4f08..b9418d1bbc 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md @@ -24,11 +24,11 @@ A rule runs on schedule but you see no new documents in `.rule-events`, no episo - The **lookback** window is too short relative to the rule schedule, so evaluations miss data between runs. - The rule is in **Detect** mode and you are looking only at **alert** rows in Discover. - Index privileges or API key privileges for the rule author cannot read the source indices. -- {{alerting-v2}} is not enabled in the deployment or the Rules V2 UI entry is hidden by configuration. +- {{alerting-v2}} is not enabled in the deployment or the {{rules-ui-v2}} UI entry is hidden by configuration. ### Diagnostic Steps -1. Open **{{manage-app}}** > **Rules V2** and confirm the rule shows **Enabled**. +1. Open **{{manage-app}} > V2 Alerting Preview** and confirm the rule shows **Enabled**. 2. Open the rule **details** and read the **Rule conditions** section for the base query, alert condition, schedule, and lookback. 3. Run **Preview** from the rule editor (if available) or paste the {{esql}} into Discover and confirm rows return for the same time range. 4. In Discover on `.rule-events`, filter by `rule.id` for your rule and widen the time range. diff --git a/explore-analyze/toc.yml b/explore-analyze/toc.yml index 22e089a936..e3dbe3da72 100644 --- a/explore-analyze/toc.yml +++ b/explore-analyze/toc.yml @@ -394,28 +394,30 @@ toc: - file: alerting/kibana-alerting-v1/maintenance-windows-v1.md - file: alerting/kibana-alerting-v2.md children: - - file: alerting/kibana-alerting-v2/get-started.md + - file: alerting/kibana-alerting-v2/get-started-v2.md - file: alerting/kibana-alerting-v2/alerting-v2-privileges.md - - file: alerting/kibana-alerting-v2/rules.md - children: - - file: alerting/kibana-alerting-v2/rules/author-rules.md - - file: alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder.md - - file: alerting/kibana-alerting-v2/rules/create-rule-from-discover.md - - file: alerting/kibana-alerting-v2/rules/create-rule-with-yaml.md - - file: alerting/kibana-alerting-v2/rules/configure-a-rule.md - - file: alerting/kibana-alerting-v2/rules/view-manage-rules.md - - file: alerting/kibana-alerting-v2/rules/rule-event-field-reference.md - - file: alerting/kibana-alerting-v2/alerts.md - children: - - file: alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md - - file: alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference.md - - file: alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover.md + - file: alerting/kibana-alerting-v2/rules-v2.md + children: + - file: alerting/kibana-alerting-v2/rules/author-rules-v2.md + - file: alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md + - file: alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md + - file: alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md + children: + - file: alerting/kibana-alerting-v2/rules/yaml-rule-schema-reference-v2.md + - file: alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md + - file: alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md + - file: alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md + - file: alerting/kibana-alerting-v2/alerts-v2.md + children: + - file: alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md + - file: alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md + - file: alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md - file: alerting/kibana-alerting-v2/workflows-alerting-v2.md - - file: alerting/kibana-alerting-v2/notifications.md + - file: alerting/kibana-alerting-v2/notifications-v2.md children: - - file: alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md - - file: alerting/kibana-alerting-v2/notifications/action-policy-reference.md - - file: alerting/kibana-alerting-v2/notifications/manage-action-policies.md + - file: alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md + - file: alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md + - file: alerting/kibana-alerting-v2/notifications/manage-action-policies-v2.md - file: alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md - file: alerting/watcher.md children: diff --git a/redirects.yml b/redirects.yml index cc349509f9..5701c8e893 100644 --- a/redirects.yml +++ b/redirects.yml @@ -802,10 +802,10 @@ redirects: 'explore-analyze/alerting/alerts/maintenance-windows.md': 'explore-analyze/alerting/kibana-alerting-v1/maintenance-windows-v1.md' # Mistaken path under alerting/ (author rules live under kibana-alerting-v2/) - 'explore-analyze/alerting/author-rules.md': 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md' + 'explore-analyze/alerting/author-rules.md': 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md' # {{alerting-v2}}: authoring rules renamed to author-rules - 'explore-analyze/alerting/kibana-alerting-v2/rules/authoring-rules.md': 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md' + 'explore-analyze/alerting/kibana-alerting-v2/rules/authoring-rules.md': 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md' # {{alerting-v2}}: concepts page renamed (was how-v2-alerting-works.md) 'explore-analyze/alerting/kibana-alerting-v2/how-v2-alerting-works.md': @@ -815,7 +815,7 @@ redirects: # {{alerting-v2}}: authoring rules moved under rules/ 'explore-analyze/alerting/kibana-alerting-v2/authoring-rules.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md' # Watcher redirects 'explore-analyze/alerts-cases/watcher/watcher-getting-started.md': 'explore-analyze/alerting/watcher/watcher-getting-started.md' @@ -894,38 +894,38 @@ redirects: 'otel-integrations-hybrid-policies': 'agent-policies-multiple-integrations' # Kibana alerting v2: view-manage-rules merged into manage-rules.md - 'explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules.md' + 'explore-analyze/alerting/kibana-alerting-v2/manage-rules/view-manage-rules-v2.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md' anchors: 'view-manage-rules-v2': 'manage-rules-v2' # Kibana alerting v2: child pages merged into parent hubs 'explore-analyze/alerting/kibana-alerting-v2/manage-rules/snooze-disable-rules.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md' anchors: 'snooze-disable-rules-v2': 'manage-rules-v2' 'explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/get-started.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md' anchors: 'alerting-set-up-v2': 'alerting-set-up-v2' 'explore-analyze/alerting/kibana-alerting-v2/get-started/before-you-begin.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/get-started.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md' anchors: 'alerting-set-up-v2': 'alerting-set-up-v2' 'alerting-before-you-begin-v2': 'alerting-get-started-v2' 'alerting-privileges-v2': 'alerting-privileges-v2' 'explore-analyze/alerting/kibana-alerting-v2/get-started/quickstart.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/get-started.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md' anchors: 'alerting-set-up-v2': 'alerting-set-up-v2' 'explore-analyze/alerting/kibana-alerting-v2/quickstart.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/get-started.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md' anchors: 'alerting-set-up-v2': 'alerting-set-up-v2' 'explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/get-started.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md' anchors: 'alerting-before-you-begin-v2': 'alerting-get-started-v2' 'alerting-privileges-v2': 'alerting-privileges-v2' @@ -934,71 +934,71 @@ redirects: 'explore-analyze/alerting/kibana-alerting-v2/before-you-begin/core-v2-alerting-concepts.md': to: 'explore-analyze/alerting/kibana-alerting-v2.md' 'explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/get-started.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md' 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts/view-alerts.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' anchors: 'view-alerts-v2': 'manage-alerts-v2' # Kibana alerting v2: rule settings consolidated; notification policies renamed to action policies 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-types.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md' anchors: 'rule-types-v2': 'author-rules-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/notifications.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md' anchors: 'notification-policies-v2': 'action-policies-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/create-manage-notification-policies.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md' anchors: 'create-manage-notification-policies-v2': 'create-manage-action-policies-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/notification-policies/how-notification-policies-are-evaluated.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/notifications.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md' anchors: 'how-notification-policies-evaluated-v2': 'how-action-policies-evaluated-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/notifications.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md' anchors: 'action-policies-v2': 'action-policies-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/create-manage-action-policies.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md' anchors: 'create-manage-action-policies-v2': 'create-manage-action-policies-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/how-action-policies-are-evaluated.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/notifications.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md' anchors: 'how-action-policies-evaluated-v2': 'how-action-policies-evaluated-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/matcher.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md' anchors: 'matcher-v2': 'matcher-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/grouping.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md' anchors: 'reduce-noise-grouping-v2': 'reduce-noise-grouping-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/action-policies/throttle.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md' anchors: 'throttle-v2': 'throttle-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/schedule-and-lookback.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md' anchors: 'schedule-lookback-v2': 'schedule-lookback-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/activation-and-recovery-thresholds.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md' anchors: 'activation-recovery-thresholds-v2': 'activation-recovery-thresholds-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/no-data-handling.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md' anchors: 'no-data-handling-v2': 'no-data-handling-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/grouping.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md' anchors: 'rule-grouping-v2': 'rule-grouping-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/maintenance-windows.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies-v2.md' anchors: 'maintenance-windows-v2': 'maintenance-windows-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-settings/workflows.md': @@ -1008,77 +1008,77 @@ redirects: # Kibana alerting v2: reduce-noise pages merged into rule settings, action policies, manage-alerts 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/matcher.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md' anchors: 'matcher-v2': 'matcher-v2' 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/grouping.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md' anchors: 'reduce-noise-grouping-v2': 'reduce-noise-grouping-v2' 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/throttle.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md' anchors: 'throttle-v2': 'throttle-v2' 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/activation-thresholds.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md' anchors: 'activation-thresholds-v2': 'activation-recovery-thresholds-v2' 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/recovery-thresholds.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md' anchors: 'recovery-thresholds-v2': 'activation-recovery-thresholds-v2' 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/no-data-handling.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md' anchors: 'reduce-noise-no-data-v2': 'no-data-handling-v2' 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/maintenance-windows.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies-v2.md' anchors: 'maintenance-windows-v2': 'maintenance-windows-v2' 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/snooze-or-silence.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' anchors: 'snooze-or-silence-v2': 'alert-actions-v2' 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts/snooze-or-silence.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' anchors: 'snooze-or-silence-v2': 'alert-actions-v2' 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' anchors: 'deactivate-alerts-v2': 'alert-actions-v2' 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts/deactivate-alerts.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' anchors: 'deactivate-alerts-v2': 'alert-actions-v2' 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' anchors: 'alert-actions-v2': 'alert-actions-v2' 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' anchors: 'alert-episode-details-v2': 'alert-episode-details-v2' 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/rules-on-alerts.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md' anchors: 'reduce-noise-rules-on-alerts-v2': 'author-rules-v2' # Kibana alerting v2: author-rules pages folded into author-rules.md / rule-settings.md 'explore-analyze/alerting/kibana-alerting-v2/author-rules/set-rule-data-sources.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md' anchors: 'set-rule-data-sources-v2': 'author-rules-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rules-on-alerts.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md' anchors: 'rules-on-alerts-v2': 'author-rules-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules/production-considerations.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md' anchors: 'production-considerations-v2': 'author-rules-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-templates.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md' anchors: 'rule-templates-v2': 'rule-templates-v2' @@ -1117,38 +1117,38 @@ redirects: 'runtime-execution-order': 'runtime-execution-order' 'configuration-order': 'configuration-order' 'explore-analyze/alerting/kibana-alerting-v2/get-starting.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/get-started.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md' anchors: 'alerting-set-up-v2': 'alerting-set-up-v2' 'explore-analyze/alerting/kibana-alerting-v2/alerting-privileges.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/get-started.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md' anchors: 'alerting-privileges-v2': 'alerting-privileges-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md' anchors: 'author-rules-v2': 'author-rules-v2' 'esql-query-structure': 'esql-query-structure' 'explore-analyze/alerting/kibana-alerting-v2/manage-rules.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md' anchors: 'manage-rules-v2': 'manage-rules-v2' 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' anchors: 'manage-alerts-v2': 'manage-alerts-v2' 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' anchors: 'investigate-respond-v2': 'investigate-respond-v2' 'alert-actions-v2': 'alert-actions-v2' 'alert-episode-details-v2': 'alert-episode-details-v2' 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts/explore-alerts-discover.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md' anchors: 'explore-alerts-discover-v2': 'explore-alerts-discover-v2' 'explore-analyze/alerting/kibana-alerting-v2/send-notifications.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/notifications.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md' anchors: 'send-notifications-v2': 'how-action-policies-evaluated-v2' 'action-policies-v2': 'action-policies-v2' @@ -1158,60 +1158,60 @@ redirects: 'throttle-v2': 'throttle-v2' 'create-manage-action-policies-v2': 'create-manage-action-policies-v2' 'explore-analyze/alerting/kibana-alerting-v2/notifications/how-action-policies-work.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/notifications.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md' 'explore-analyze/alerting/kibana-alerting-v2/notifications/about-action-policies.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/notifications.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md' 'explore-analyze/alerting/kibana-alerting-v2/notifications/configure-action-policy.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md' 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-action-policy.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md' 'explore-analyze/alerting/kibana-alerting-v2/rules/about-rules.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules-v2.md' 'explore-analyze/alerting/kibana-alerting-v2/rules/how-rules-work.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules-v2.md' 'explore-analyze/alerting/kibana-alerting-v2/rules/write-a-rule.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md' anchors: 'author-rules-v2': 'author-rules-v2' 'esql-query-structure': 'esql-query-structure' 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rules-ui.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md' anchors: 'create-rules-ui-v2': 'create-rules-ui-v2' 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-ui.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md' anchors: 'create-rules-ui-v2': 'create-rules-ui-v2' 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rules-discover.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md' anchors: 'create-rules-discover-v2': 'create-rules-discover-v2' 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rules-yaml.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md' anchors: 'create-rules-yaml-v2': 'create-rules-yaml-v2' 'explore-analyze/alerting/kibana-alerting-v2/rules/rule-reference.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md' anchors: 'rule-reference-v2': 'rule-reference-v2' 'explore-analyze/alerting/kibana-alerting-v2/alerts/about-alerts.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md' 'explore-analyze/alerting/kibana-alerting-v2/alerts/alert-lifecycle.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md' anchors: 'alert-lifecycle-v2': 'alert-lifecycle-v2' 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-alerts.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' anchors: 'manage-alerts-v2': 'manage-alerts-v2' 'explore-analyze/alerting/kibana-alerting-v2/alerts/investigate-respond.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' anchors: 'investigate-respond-v2': 'investigate-respond-v2' 'alert-actions-v2': 'alert-actions-v2' 'alert-episode-details-v2': 'alert-episode-details-v2' 'explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-reference.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md' anchors: 'alert-states-reference-v2': 'alert-states-reference-v2' 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md': @@ -1251,11 +1251,11 @@ redirects: 'reduce-noise-v2': 'reduce-noise-v2' 'using-them-together': 'using-them-together' 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/error-messages-reference.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/notifications.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md' anchors: 'error-messages-reference': 'possible-outcomes' 'explore-analyze/alerting/kibana-alerting-v2/alert-event-field-reference.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md' anchors: 'alert-event-field-reference-v2': 'rule-reference-v2' @@ -1284,3 +1284,21 @@ redirects: 'explore-analyze/workflows/author-workflows.md': 'explore-analyze/workflows/authoring-techniques/use-yaml-editor.md' 'explore-analyze/workflows/monitor-troubleshoot.md': 'explore-analyze/workflows/authoring-techniques/monitor-workflows.md' 'explore-analyze/workflows/manage-workflows.md': 'explore-analyze/workflows/authoring-techniques/manage-workflows.md' + # alerting-v2 file renames: appended -v2 suffix to all page filenames + 'explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/rules-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/rules-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md' From 5b464b66e21e41790df5e5b809be73db3ba89ef1 Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Tue, 21 Apr 2026 17:29:26 -0400 Subject: [PATCH 21/40] Update file name refs --- docset.yml | 1 + .../alerting/kibana-alerting-v2/alerts-v2.md | 12 ++-- .../alert-states-and-fields-reference-v2.md | 4 +- .../kibana-alerting-v2/get-started-v2.md | 4 +- .../kibana-alerting-v2/notifications-v2.md | 4 +- .../action-policy-reference-v2.md | 2 +- .../rules/author-rules-v2.md | 2 +- .../rules/create-rule-from-discover-v2.md | 4 +- .../rules/create-rule-from-rule-builder-v2.md | 2 +- .../rules/rule-event-field-reference-v2.md | 6 +- .../rules/yaml-rule-schema-reference-v2.md | 2 +- .../troubleshooting-alerting-v2.md | 58 +++++++++---------- .../workflows-alerting-v2.md | 2 +- 13 files changed, 52 insertions(+), 51 deletions(-) diff --git a/docset.yml b/docset.yml index acc1aa9e4e..022a2e2bae 100644 --- a/docset.yml +++ b/docset.yml @@ -297,5 +297,6 @@ subs: fedramp-high: "FedRAMP High" fedramp-il5: "FedRAMP IL5" alerting-v2: "Kibana alerting v2" + rules-ui: "Rules" rules-ui-v2: "Rules" alerts-ui: "Alert episodes" diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md index f05f22d93f..43b17c4a13 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md @@ -28,7 +28,7 @@ inactive → pending → active → recovering → inactive | Active | Problem confirmed and ongoing. This is when you get notified. | | Recovering | Errors have stopped, but the system is waiting to confirm it's truly resolved. | -Activation and recovery thresholds control how many consecutive evaluations must agree, or how long the condition must persist, before transitioning. Refer to [Configure a rule](rules/configure-a-rule.md#activation-recovery-thresholds-v2) to learn more about these settings. +Activation and recovery thresholds control how many consecutive evaluations must agree, or how long the condition must persist, before transitioning. Refer to [Configure a rule](rules/configure-a-rule-v2.md#activation-recovery-thresholds-v2) to learn more about these settings. ### Alert episode example @@ -102,13 +102,13 @@ The **Alerts** page (**{{manage-app}} > V2 Alerting Preview > Alerts**) shows th Both `.rule-events` and `.alert-actions` are data streams, append-only, time-series stores optimized for writes. On every rule evaluation, {{kib}} writes a **new document** to `.rule-events` rather than updating the previous one. Each document is a point-in-time snapshot. The `episode.status` field records the lifecycle state the episode was in at that exact evaluation. Nothing is overwritten. -Because every evaluation produces its own document, you can reconstruct the full history of an episode by querying all documents that share the same `episode.id`. Refer to [Query alerts and signals in Discover](alerts/query-alerts-and-signals-in-discover.md#explore-alerts-discover-v2) for example queries. +Because every evaluation produces its own document, you can reconstruct the full history of an episode by querying all documents that share the same `episode.id`. Refer to [Query alerts and signals in Discover](alerts/query-alerts-and-signals-in-discover-v2.md#explore-alerts-discover-v2) for example queries. Retention is managed automatically through ILM. Older backing indices move through storage tiers and are deleted when the retention window expires. You do not need to manually remove documents. {{kib}} manages versioning, retention, and lifecycle for both streams. Do not change their mappings or index settings. ## Where to go next -- [View, manage, and reference alerts](alerts/view-manage-and-reference-alerts.md): Open the alert episodes table, triage active episodes, and acknowledge, snooze, or resolve them. -- [Query alerts and signals in Discover](alerts/query-alerts-and-signals-in-discover.md): Use {{esql}} to query `.rule-events` and `.alert-actions` for ad hoc analysis and dashboards. -- [Alert states and fields reference](alerts/alert-states-and-fields-reference.md): Look up lifecycle states, field names, and episode document structure. -- [Notifications](notifications.md): Set up action policies to route alert episodes to the right people and channels. +- [View, manage, and reference alerts](alerts/view-manage-and-reference-alerts-v2.md): Open the alert episodes table, triage active episodes, and acknowledge, snooze, or resolve them. +- [Query alerts and signals in Discover](alerts/query-alerts-and-signals-in-discover-v2.md): Use {{esql}} to query `.rule-events` and `.alert-actions` for ad hoc analysis and dashboards. +- [Alert states and fields reference](alerts/alert-states-and-fields-reference-v2.md): Look up lifecycle states, field names, and episode document structure. +- [Notifications](notifications-v2.md): Set up action policies to route alert episodes to the right people and channels. diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md index 618837d976..985387dd86 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md @@ -11,7 +11,7 @@ description: "Reference for {{alerting-v2}} episode status, `.rule-events` row s $$$alert-states-reference-v2$$$ -Use these tables when you read alert UI state, query `.rule-events` or `.alert-actions` in Discover, or align API payloads with what operators see. For triage controls (acknowledge, snooze, resolve, tags) and how they map to storage, refer to [Alert actions](view-manage-and-reference-alerts.md#alert-actions-v2). For rule evaluation fields on `.rule-events`, refer to [Rule event and field reference](../rules/rule-event-field-reference.md#rule-reference-v2). +Use these tables when you read alert UI state, query `.rule-events` or `.alert-actions` in Discover, or align API payloads with what operators see. For triage controls (acknowledge, snooze, resolve, tags) and how they map to storage, refer to [Alert actions](view-manage-and-reference-alerts-v2.md#alert-actions-v2). For rule evaluation fields on `.rule-events`, refer to [Rule event and field reference](../rules/rule-event-field-reference-v2.md#rule-reference-v2). ## Episode status @@ -43,5 +43,5 @@ When a user or the system records an action on an alert episode, {{kib}} writes | @timestamp | date | When the action was recorded. | | episode.id | keyword | Target episode. | | rule.id | keyword | Rule that owns the episode. | -| action.type | keyword | The action type, for example:
- `acknowledge`: User acknowledged the alert.
- `snooze`: Notifications snoozed for a period.
- `tag`: Tag applied to the alert.
- `fire`: Notification or escalation fired for the episode.
- `unmatched`: No action policy matched the episode, so no workflow ran for it under these policies.

For the full set of action types and UI behavior, refer to [Alert actions](view-manage-and-reference-alerts.md#alert-actions-v2). | +| action.type | keyword | The action type, for example:
- `acknowledge`: User acknowledged the alert.
- `snooze`: Notifications snoozed for a period.
- `tag`: Tag applied to the alert.
- `fire`: Notification or escalation fired for the episode.
- `unmatched`: No action policy matched the episode, so no workflow ran for it under these policies.

For the full set of action types and UI behavior, refer to [Alert actions](view-manage-and-reference-alerts-v2.md#alert-actions-v2). | | episode.status_count | long | Count of consecutive evaluations in the current `episode.status`. Only set when `episode.status` is `pending` or `recovering`.
For example, if the episode stays `pending` for three rule evaluations in a row, the value is `3`. | diff --git a/explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md b/explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md index 065d7ab724..5198d5279f 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md @@ -56,6 +56,6 @@ For {{kib}} feature access and {{es}} index privilege requirements, refer to [{{ When you are ready to go further, your next steps depend on what you want to set up first. These can be done in any order: -- [Author rules](rules/author-rules.md): Write the {{esql}} query that defines what to detect, choose Detect or Alert mode, and set up grouping and thresholds in [Configure a rule](rules/configure-a-rule.md). +- [Author rules](rules/author-rules-v2.md): Write the {{esql}} query that defines what to detect, choose Detect or Alert mode, and set up grouping and thresholds in [Configure a rule](rules/configure-a-rule-v2.md). - [Set up workflows](workflows-alerting-v2.md): Configure the automation objects that deliver messages (email, Slack, webhook). You'll need at least one workflow before action policies can send anything. -- [Create action policies](notifications/create-configure-action-policy.md): Define who gets notified, how often, and under what conditions. Policies use KQL matchers to pick up the right episodes and route them to your workflows. +- [Create action policies](notifications/create-configure-action-policy-v2.md): Define who gets notified, how often, and under what conditions. Policies use KQL matchers to pick up the right episodes and route them to your workflows. diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md index f6a56c05c1..309b451139 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md @@ -11,7 +11,7 @@ description: "How {{alerting-v2}} action policies route alert episodes to notifi After a rule produces alert episodes, action policies decide what to do about them: who gets notified, how often, and through which channel. -This page explains how action policies work. For creating and configuring them step by step, refer to [Create and configure an action policy](notifications/create-configure-action-policy.md). +This page explains how action policies work. For creating and configuring them step by step, refer to [Create and configure an action policy](notifications/create-configure-action-policy-v2.md). ## What is an action policy [action-policies-v2] @@ -69,7 +69,7 @@ This design means: - You can update routing without touching any rule. - Rules can be created without any notification policy, which is useful for testing. -When you're ready to route notifications, go to [Create and configure an action policy](notifications/create-configure-action-policy.md). +When you're ready to route notifications, go to [Create and configure an action policy](notifications/create-configure-action-policy-v2.md). $$$matcher-v2$$$ $$$reduce-noise-grouping-v2$$$ diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md index 260d53775b..f7bc7dd973 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md @@ -11,7 +11,7 @@ description: "API values, Dispatch per and Frequency UI mappings, dispatch outco $$$action-policy-reference-v2$$$ -Condensed tables for matchers, grouping, throttling, and dispatch outcomes. For step-by-step policy creation and narrative guidance, refer to [Create and configure an action policy](create-configure-action-policy.md). +Condensed tables for matchers, grouping, throttling, and dispatch outcomes. For step-by-step policy creation and narrative guidance, refer to [Create and configure an action policy](create-configure-action-policy-v2.md). ## Matcher fields (typical KQL) [matcher-fields-typical-kql] diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md index ca82594452..476a8cfa4c 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md @@ -13,7 +13,7 @@ $$$author-rules-v2$$$ Every {{alerting-v2}} rule is an {{esql}} query. Instead of choosing from a catalog of fixed rule types, you write {{esql}} directly. Describe what to look for, what counts as a breach, and which fields to store on each event. -This page covers the query concepts behind a rule definition. For settings beyond the query (such as schedules, grouping, and lifecycle thresholds), refer to [Configure a rule](configure-a-rule.md). Once you understand what goes into a rule, you can write one using the [rule builder](create-rule-from-rule-builder.md), [YAML editor](create-rule-with-yaml.md), or [a Discover session](create-rule-from-discover.md). +This page covers the query concepts behind a rule definition. For settings beyond the query (such as schedules, grouping, and lifecycle thresholds), refer to [Configure a rule](configure-a-rule-v2.md). Once you understand what goes into a rule, you can write one using the [rule builder](create-rule-from-rule-builder-v2.md), [YAML editor](create-rule-with-yaml-v2.md), or [a Discover session](create-rule-from-discover-v2.md). ## Choose a rule mode diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md index 0a654dd92d..3d6e6a762f 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md @@ -11,7 +11,7 @@ description: "Turn an {{esql}} query in Discover into a {{alerting-v2}} rule wit $$$create-rules-discover-v2$$$ -Create {{alerting-v2}} rules directly from Discover. When you build an {{esql}} query that surfaces interesting patterns, you can convert it into a rule without rewriting the query. For the full rule form including preview, alert mode settings, and YAML toggle, see [Create rules using the rule builder](create-rule-from-rule-builder.md). +Create {{alerting-v2}} rules directly from Discover. When you build an {{esql}} query that surfaces interesting patterns, you can convert it into a rule without rewriting the query. For the full rule form including preview, alert mode settings, and YAML toggle, see [Create rules using the rule builder](create-rule-from-rule-builder-v2.md). :::{admonition} What gets pre-populated When you create a rule from Discover: @@ -29,5 +29,5 @@ You can modify any of these values in the rule form before saving. 2. Write and run an {{esql}} query that returns the data you want to monitor. 3. Open the **Rules** menu on the Discover toolbar and choose **Create v2 ES|QL rule**. 4. The rule creation form opens with the {{esql}} query pre-populated in the evaluation field. -5. Configure the remaining rule settings. For details on each setting, see [Configure a rule](configure-a-rule.md). +5. Configure the remaining rule settings. For details on each setting, see [Configure a rule](configure-a-rule-v2.md). 6. Click **Save**. diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md index 60166b5a38..52986e5d8f 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md @@ -16,6 +16,6 @@ Create {{alerting-v2}} rules using the interactive rule creation form. The form 1. Navigate to **{{manage-app}} > V2 Alerting Preview > Rules**. 2. Click **Create rule**. -3. Set up the rule. Refer to [](configure-a-rule.md) to learn about the available settings. +3. Set up the rule. Refer to [](configure-a-rule-v2.md) to learn about the available settings. 4. Click **Preview** to evaluate the query against recent data before saving. The preview shows how many rows the query returns, how many alert events would be generated, sample alert event documents, and a bar chart of matching row counts over time. 5. Click **Save**. The rule starts executing on its configured schedule. diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md index 23e9654a5e..7bacd125c4 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md @@ -11,7 +11,7 @@ description: "Reference for {{alerting-v2}} rule configuration fields and docume $$$rule-reference-v2$$$ -This page lists technical fields for rule configuration and rule event documents written to `.rule-events`. For alert actions in `.alert-actions`, refer to [Alert states and fields reference](../alerts/alert-states-and-fields-reference.md#alert-states-reference-v2). For action policy dispatch outcomes, see [Action policy reference](../notifications/action-policy-reference.md#action-policy-reference-v2). +This page lists technical fields for rule configuration and rule event documents written to `.rule-events`. For alert actions in `.alert-actions`, refer to [Alert states and fields reference](../alerts/alert-states-and-fields-reference-v2.md#alert-states-reference-v2). For action policy dispatch outcomes, see [Action policy reference](../notifications/action-policy-reference-v2.md#action-policy-reference-v2). :::{important} The `.rule-events` and `.alert-actions` data streams are [system indices](/reference/glossary/index.md#glossary-system-index). {{kib}} manages their versioning, retention, and lifecycle through ILM. Older backing indices are deleted automatically when the retention window expires. Do not change mappings or index settings for these streams yourself. @@ -74,7 +74,7 @@ Each time a rule evaluates, {{kib}} writes one document per matched series to `. Both kinds share the base fields below. Only `alert` documents add the [Episode fields](#episode-fields) listed further down. :::{note} -`.rule-events` is a data stream, so it is append-only. A new document is written on every rule evaluation — existing documents are never updated. Each document is a snapshot of that moment: the `episode.status` field records the lifecycle stage the episode was in at that evaluation. To see the full history of an episode, query all documents that share the same `episode.id`. See [Query alerts and signals in Discover](../alerts/query-alerts-and-signals-in-discover.md#explore-alerts-discover-v2) for example queries. +`.rule-events` is a data stream, so it is append-only. A new document is written on every rule evaluation — existing documents are never updated. Each document is a snapshot of that moment: the `episode.status` field records the lifecycle stage the episode was in at that evaluation. To see the full history of an episode, query all documents that share the same `episode.id`. See [Query alerts and signals in Discover](../alerts/query-alerts-and-signals-in-discover-v2.md#explore-alerts-discover-v2) for example queries. ::: ### Signal and alert fields @@ -94,7 +94,7 @@ These fields appear on all `.rule-events` documents, regardless of whether the r | type | keyword | Yes | `signal` or `alert`. Application field on each rule event document written by {{kib}}. | :::{admonition} Fields not stored as a dedicated column -There is no top-level or nested `duration` field on `.rule-events` documents. For triage or reporting, derive duration from [Query alerts and signals in Discover](../alerts/query-alerts-and-signals-in-discover.md#explore-alerts-discover-v2), the alert UI, or your own queries over timestamps and episode identifiers. +There is no top-level or nested `duration` field on `.rule-events` documents. For triage or reporting, derive duration from [Query alerts and signals in Discover](../alerts/query-alerts-and-signals-in-discover-v2.md#explore-alerts-discover-v2), the alert UI, or your own queries over timestamps and episode identifiers. ::: ### Episode fields diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/yaml-rule-schema-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/yaml-rule-schema-reference-v2.md index 76133899b2..8e041276b1 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/yaml-rule-schema-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/yaml-rule-schema-reference-v2.md @@ -11,7 +11,7 @@ description: "Complete field reference for {{alerting-v2}} YAML rule definitions $$$yaml-rule-schema-reference-v2$$$ -This page lists every valid field for a {{alerting-v2}} YAML rule definition. For examples and authoring guidance, refer to [Create rules using the YAML editor](create-rule-with-yaml.md). +This page lists every valid field for a {{alerting-v2}} YAML rule definition. For examples and authoring guidance, refer to [Create rules using the YAML editor](create-rule-with-yaml-v2.md). ## Required fields diff --git a/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md index b9418d1bbc..e7c531a660 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md @@ -38,11 +38,11 @@ A rule runs on schedule but you see no new documents in `.rule-events`, no episo ### Resolution - **Enable** the rule if it was disabled. -- Tighten or broaden the {{esql}}, fix `FROM`, or adjust the **alert condition** so it reflects the signal you want. Cross-reference [Author rules](rules/author-rules.md). -- Set **lookback** to at least the **schedule** interval unless you intentionally accept gaps; see [Configure a rule](rules/configure-a-rule.md#schedule-lookback-v2). -- Switch to **Alert** mode when you need episodes and policy matching; see [Rules](rules.md#detection-and-notification-v2). -- Restore **index privileges** or **rotate the rule API key** after privilege changes; see [Get started](get-started.md#alerting-privileges-v2). -- Ask an administrator to confirm {{alerting-v2}} is enabled and navigation labels for your version; see [Set up and verify](get-started.md#alerting-set-up-v2). +- Tighten or broaden the {{esql}}, fix `FROM`, or adjust the **alert condition** so it reflects the signal you want. Cross-reference [Author rules](rules/author-rules-v2.md). +- Set **lookback** to at least the **schedule** interval unless you intentionally accept gaps; see [Configure a rule](rules/configure-a-rule-v2.md#schedule-lookback-v2). +- Switch to **Alert** mode when you need episodes and policy matching; see [Rules](rules-v2.md#detection-and-notification-v2). +- Restore **index privileges** or **rotate the rule API key** after privilege changes; see [Get started](get-started-v2.md#alerting-privileges-v2). +- Ask an administrator to confirm {{alerting-v2}} is enabled and navigation labels for your version; see [Set up and verify](get-started-v2.md#alerting-set-up-v2). ### Still not working? @@ -80,21 +80,21 @@ Alert episodes appear active in the UI or in `.rule-events`, but no email, chat, 1. Open **Action policies** in the same **{{kib}} space** as the rule. 2. For each policy that should apply, confirm **Status** is enabled and not snoozed. 3. Open the policy **matcher** and validate KQL against a sample episode payload (`data.*`, `rule.*`, episode status fields). An empty matcher matches all episodes subject to other controls. -4. Read [How action policies work](notifications.md#how-action-policies-evaluated-v2) and map your episode to suppression, matcher, grouping, and throttle steps. -5. Query `.alert-actions` for `action.type` of `unmatched`, `throttled`, or `suppressed` for the episode id; see [Alert states and fields reference](alerts/alert-states-and-fields-reference.md#alert-states-reference-v2). +4. Read [How action policies work](notifications-v2.md#how-action-policies-evaluated-v2) and map your episode to suppression, matcher, grouping, and throttle steps. +5. Query `.alert-actions` for `action.type` of `unmatched`, `throttled`, or `suppressed` for the episode id; see [Alert states and fields reference](alerts/alert-states-and-fields-reference-v2.md#alert-states-reference-v2). **If you suspect workflow attachment or workflow health** 1. Open the policy and confirm **at least one** `workflow` destination is selected. 2. Open **[LINK: Core Workflows Documentation]** for each workflow id and verify the workflow is published, credentials are valid, and channel steps succeed in test runs. 3. Confirm your account can read the workflow objects referenced by the policy (privilege escalation guard); see [Action policy management](alerting-v2-privileges.md). -4. After policy edits, allow a short delay for **API key invalidation** cycles described in [Manage action policies](notifications/manage-action-policies.md). +4. After policy edits, allow a short delay for **API key invalidation** cycles described in [Manage action policies](notifications/manage-action-policies-v2.md). ### Resolution - Broaden or fix the **matcher**; align field names with the matcher editor suggestions. - **Enable** the policy or clear **snooze** when you intend dispatch to resume. -- Adjust **Frequency** and **Dispatch per** so reminders can send when you expect; see [Create and configure an action policy](notifications/create-configure-action-policy.md#throttle-v2). +- Adjust **Frequency** and **Dispatch per** so reminders can send when you expect; see [Create and configure an action policy](notifications/create-configure-action-policy-v2.md#throttle-v2). - Respect **maintenance windows** and episode **snooze** semantics; adjust windows or triage state if dispatch should resume. - Add or repair **workflow destinations** on the policy, then re-test from [Workflows for {{alerting-v2}}](workflows-alerting-v2.md). - Fix workflow configuration using **[LINK: Core Workflows Troubleshooting]**. @@ -102,7 +102,7 @@ Alert episodes appear active in the UI or in `.rule-events`, but no email, chat, ### Still not working? -If `.alert-actions` shows `error`, use [Possible outcomes](notifications.md#possible-outcomes) for dispatcher outcome values and check {{kib}} server logs around evaluation timestamps. If outcomes are `unmatched` after matcher fixes, continue with [Action policy not triggering](#action-policy-not-triggering). +If `.alert-actions` shows `error`, use [Possible outcomes](notifications-v2.md#possible-outcomes) for dispatcher outcome values and check {{kib}} server logs around evaluation timestamps. If outcomes are `unmatched` after matcher fixes, continue with [Action policy not triggering](#action-policy-not-triggering). ## Action policy not triggering [action-policy-not-triggering] @@ -123,7 +123,7 @@ Episodes exist but policies appear to ignore them: repeated `unmatched` outcomes 1. Confirm the rule and policy are listed under the **same space**. 2. Inspect the policy **matcher** text and compare to fields visible on a recent `.rule-events` document for the episode (`data.*`, `rule.*`, status fields). 3. Confirm the policy is **enabled** and not **snoozed**. -4. Review triage actions on the episode for **snooze** or **suppress** patterns; see [View, manage, and reference alerts](alerts/view-manage-and-reference-alerts.md#alert-actions-v2). +4. Review triage actions on the episode for **snooze** or **suppress** patterns; see [View, manage, and reference alerts](alerts/view-manage-and-reference-alerts-v2.md#alert-actions-v2). 5. Query `.alert-actions` for the episode id and read `action.type` values chronologically. ### Resolution @@ -182,8 +182,8 @@ The underlying metric or log pattern looks healthy, but the episode remains **ac ### Diagnostic Steps -1. Open the rule **configuration** and read **activation and recovery** settings; see [Configure a rule](rules/configure-a-rule.md#activation-recovery-thresholds-v2). -2. Read **no-data** behavior for the rule; see [Configure a rule](rules/configure-a-rule.md#no-data-handling-v2). +1. Open the rule **configuration** and read **activation and recovery** settings; see [Configure a rule](rules/configure-a-rule-v2.md#activation-recovery-thresholds-v2). +2. Read **no-data** behavior for the rule; see [Configure a rule](rules/configure-a-rule-v2.md#no-data-handling-v2). 3. In Discover, query `.rule-events` for the episode’s `group_hash` and sort ascending by `@timestamp` to replay status transitions. 4. Compare **UI status** with raw `episode.status` fields for the latest rows. @@ -213,7 +213,7 @@ Episodes open or close at surprising times, notifications repeat, multiple polic ### Diagnostic Steps 1. Use the decision framing from [Validation checklist](#reduce-noise-v2) to decide whether to tune the rule, thresholds, matchers, throttles, or triage actions. -2. Re-read [How action policies work](notifications.md#how-action-policies-evaluated-v2) for independent policy evaluation and `unmatched` behavior. +2. Re-read [How action policies work](notifications-v2.md#how-action-policies-evaluated-v2) for independent policy evaluation and `unmatched` behavior. 3. Compare **rule evaluation timestamps** in `.rule-events` with **dispatcher-driven** outcomes in `.alert-actions`. ### Resolution @@ -228,10 +228,10 @@ Escalate with exported Discover queries for `.rule-events` and `.alert-actions`, {{alerting-v2}} offers many ways to reduce noise. Controls live in three places: -- **[Configure a rule](rules/configure-a-rule.md)**: Thresholds, no-data handling, rule-level grouping, and related evaluation settings. -- **[Manage action policies](notifications/manage-action-policies.md)**: Enablement, snooze, **{{maint-windows-cap}}**, and bulk policy actions that affect dispatch. -- **[Notifications (Action Policies)](notifications.md)**: Action policies: matchers, Dispatch per, Frequency, destinations, and dispatcher behavior. -- **[View, manage, and reference alerts](alerts/view-manage-and-reference-alerts.md)**: Snooze, acknowledge, deactivate, tags, and anything persisted in **`.alert-actions`**. +- **[Configure a rule](rules/configure-a-rule-v2.md)**: Thresholds, no-data handling, rule-level grouping, and related evaluation settings. +- **[Manage action policies](notifications/manage-action-policies-v2.md)**: Enablement, snooze, **{{maint-windows-cap}}**, and bulk policy actions that affect dispatch. +- **[Notifications (Action Policies)](notifications-v2.md)**: Action policies: matchers, Dispatch per, Frequency, destinations, and dispatcher behavior. +- **[View, manage, and reference alerts](alerts/view-manage-and-reference-alerts-v2.md)**: Snooze, acknowledge, deactivate, tags, and anything persisted in **`.alert-actions`**. This section is a decision table so you can match a situation to the right mechanism. Deep content lives on the pages above. @@ -241,17 +241,17 @@ If multiple rows in the table apply, refer to [Using them together](#using-them- | Your situation | Use this | What it does | |---|---|---| -| The {{esql}} query matches too much normal traffic with too many breaching rows | [Author rules](rules/author-rules.md) | Narrows the query, `WHERE` clause, schedule, or lookback so evaluations only surface what matters | -| Short spikes or flapping metrics open alerts before they should | [Activation and recovery thresholds](rules/configure-a-rule.md#activation-recovery-thresholds-v2) | Requires consecutive breaches or a minimum duration before an episode becomes active | -| The alert recovers and reopens too often, flapping | [Activation and recovery thresholds](rules/configure-a-rule.md#activation-recovery-thresholds-v2) | Requires sustained clear conditions before an episode leaves recovering | -| The query returns no rows and no_data or recovery behavior is misleading | [No-data handling](rules/configure-a-rule.md#no-data-handling-v2) | Configures how empty results are interpreted so gaps do not look like false recoveries or false alerts | -| Notifications repeat for the same group on every evaluation | [Throttling on action policies](notifications/create-configure-action-policy.md#throttle-v2) | Enforces a minimum interval between notifications per notification group | -| Recipients get too many separate messages for related episodes | [Notification grouping on action policies](notifications/create-configure-action-policy.md#reduce-noise-grouping-v2) | Batches related alerts into fewer notifications | -| Notifications should only go out for certain episodes by severity, labels, or payload fields | [Matchers](notifications/create-configure-action-policy.md#matcher-v2) | Uses KQL on the action policy over episode and rule context (for example `rule.labels` and payload fields) so only matching episodes route to workflows | -| Planned maintenance: evaluations should continue but on-call should not be paged | [{{maint-windows-cap}}](notifications/manage-action-policies.md#maintenance-windows-v2) | Pauses policy dispatch for a scheduled window; rule evaluation continues | -| A temporary quiet period is needed for a series or episode without changing the rule | [View, manage, and reference alerts](alerts/view-manage-and-reference-alerts.md#alert-actions-v2) (snooze, silence, acknowledge) | Snoozes or silences notifications. Acknowledge can also quiet an episode while work proceeds | -| Many low-level alerts should roll up into one higher-level signal | [Author rules](rules/author-rules.md) ({{esql}} over `.rule-events`) | Runs follow-on rules on `.rule-events` or related data to correlate and notify once | -| One alert episode should stop notifying and leave the triage queue while the rule keeps running | [View, manage, and reference alerts](alerts/view-manage-and-reference-alerts.md#alert-actions-v2) (deactivate / resolve) | Deactivates that episode. The rule still evaluates and can detect new episodes for other series | +| The {{esql}} query matches too much normal traffic with too many breaching rows | [Author rules](rules/author-rules-v2.md) | Narrows the query, `WHERE` clause, schedule, or lookback so evaluations only surface what matters | +| Short spikes or flapping metrics open alerts before they should | [Activation and recovery thresholds](rules/configure-a-rule-v2.md#activation-recovery-thresholds-v2) | Requires consecutive breaches or a minimum duration before an episode becomes active | +| The alert recovers and reopens too often, flapping | [Activation and recovery thresholds](rules/configure-a-rule-v2.md#activation-recovery-thresholds-v2) | Requires sustained clear conditions before an episode leaves recovering | +| The query returns no rows and no_data or recovery behavior is misleading | [No-data handling](rules/configure-a-rule-v2.md#no-data-handling-v2) | Configures how empty results are interpreted so gaps do not look like false recoveries or false alerts | +| Notifications repeat for the same group on every evaluation | [Throttling on action policies](notifications/create-configure-action-policy-v2.md#throttle-v2) | Enforces a minimum interval between notifications per notification group | +| Recipients get too many separate messages for related episodes | [Notification grouping on action policies](notifications/create-configure-action-policy-v2.md#reduce-noise-grouping-v2) | Batches related alerts into fewer notifications | +| Notifications should only go out for certain episodes by severity, labels, or payload fields | [Matchers](notifications/create-configure-action-policy-v2.md#matcher-v2) | Uses KQL on the action policy over episode and rule context (for example `rule.labels` and payload fields) so only matching episodes route to workflows | +| Planned maintenance: evaluations should continue but on-call should not be paged | [{{maint-windows-cap}}](notifications/manage-action-policies-v2.md#maintenance-windows-v2) | Pauses policy dispatch for a scheduled window; rule evaluation continues | +| A temporary quiet period is needed for a series or episode without changing the rule | [View, manage, and reference alerts](alerts/view-manage-and-reference-alerts-v2.md#alert-actions-v2) (snooze, silence, acknowledge) | Snoozes or silences notifications. Acknowledge can also quiet an episode while work proceeds | +| Many low-level alerts should roll up into one higher-level signal | [Author rules](rules/author-rules-v2.md) ({{esql}} over `.rule-events`) | Runs follow-on rules on `.rule-events` or related data to correlate and notify once | +| One alert episode should stop notifying and leave the triage queue while the rule keeps running | [View, manage, and reference alerts](alerts/view-manage-and-reference-alerts-v2.md#alert-actions-v2) (deactivate / resolve) | Deactivates that episode. The rule still evaluates and can detect new episodes for other series | Use the links in the table for procedures and reference detail on each control. diff --git a/explore-analyze/alerting/kibana-alerting-v2/workflows-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/workflows-alerting-v2.md index db14c0f805..f3175ff674 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/workflows-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/workflows-alerting-v2.md @@ -41,4 +41,4 @@ The policy evaluates matchers and throttling before any workflow step runs, even Only manual triggers are supported. ::: -2. Create an action policy under [Notifications](notifications.md) that references the workflow as a destination. Refer to [Create and configure an action policy](notifications/create-configure-action-policy.md). +2. Create an action policy under [Notifications](notifications-v2.md) that references the workflow as a destination. Refer to [Create and configure an action policy](notifications/create-configure-action-policy-v2.md). From 438ae274de9a9f2eb4dd220441530330710b78d3 Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Tue, 21 Apr 2026 17:41:04 -0400 Subject: [PATCH 22/40] even more file name ref updates --- .../alerts/query-alerts-and-signals-in-discover-v2.md | 2 +- .../notifications/create-configure-action-policy-v2.md | 8 ++++---- .../alerting/kibana-alerting-v2/rules/author-rules-v2.md | 4 ++-- .../kibana-alerting-v2/rules/configure-a-rule-v2.md | 6 +++--- .../kibana-alerting-v2/rules/create-rule-with-yaml-v2.md | 4 ++-- .../kibana-alerting-v2/rules/view-manage-rules-v2.md | 4 ++-- .../kibana-alerting-v2/troubleshooting-alerting-v2.md | 2 +- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md index 1fdda520a3..a6840b13ca 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md @@ -13,7 +13,7 @@ $$$explore-alerts-discover-v2$$$ {{alerting-v2}} stores rule output in `.rule-events` and user or system actions in `.alert-actions`. Both are queryable with {{esql}} in Discover. Open Discover, select {{esql}}, paste a query, then adjust the time range and placeholders (`YOUR_RULE_ID`, `YOUR_GROUP_HASH`) to match your environment. -For field names, types, and episode fields, refer to [Alert states and fields reference](alert-states-and-fields-reference.md#alert-states-reference-v2) and [Rule event and field reference](../rules/rule-event-field-reference.md#rule-reference-v2). For triage in the product UI, refer to [View, manage, and reference alerts](view-manage-and-reference-alerts.md). +For field names, types, and episode fields, refer to [Alert states and fields reference](alert-states-and-fields-reference-v2.md#alert-states-reference-v2) and [Rule event and field reference](../rules/rule-event-field-reference-v2.md#rule-reference-v2). For triage in the product UI, refer to [View, manage, and reference alerts](view-manage-and-reference-alerts-v2.md). ## Rule events diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md index 4ea8479ac7..76dc79f65b 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md @@ -13,7 +13,7 @@ $$$create-manage-action-policies-v2$$$ An action policy controls which alert episodes trigger notifications, how episodes are grouped, how often notifications are sent, and where they are routed. Policies are global within a space. You create and manage them from the **Action policies** page, not from the rule form. -For API values, Dispatch per and Frequency mappings, throttle strategies, dispatch outcomes, and matcher field examples, refer to [Action policy reference](action-policy-reference.md#action-policy-reference-v2). +For API values, Dispatch per and Frequency mappings, throttle strategies, dispatch outcomes, and matcher field examples, refer to [Action policy reference](action-policy-reference-v2.md#action-policy-reference-v2). ## Create an action policy @@ -30,7 +30,7 @@ $$$matcher-v2$$$ An optional KQL expression that filters which episodes this policy applies to. An empty matcher matches every episode in the space. -Use matchers to route different episodes to different policies — for example, one policy for `data.severity: "critical"` episodes routed to PagerDuty and another for warnings routed to Slack. Typical matcher fields and examples are listed in [Action policy reference](action-policy-reference.md#matcher-fields-typical-kql). +Use matchers to route different episodes to different policies — for example, one policy for `data.severity: "critical"` episodes routed to PagerDuty and another for warnings routed to Slack. Typical matcher fields and examples are listed in [Action policy reference](action-policy-reference-v2.md#matcher-fields-typical-kql). ### Grouping and frequency [reduce-noise-grouping-v2] @@ -46,7 +46,7 @@ $$$reduce-noise-grouping-v2$$$ Episode works for most rules. Use Group when a rule produces many series-level episodes and you want to batch by a shared field. Use Digest for periodic summaries on longer schedules. -For Frequency to API strategy mappings, refer to [Action policy reference](action-policy-reference.md#frequency-ui-when-episode-per_episode). +For Frequency to API strategy mappings, refer to [Action policy reference](action-policy-reference-v2.md#frequency-ui-when-episode-per_episode). ### Throttling [throttle-v2] @@ -54,7 +54,7 @@ $$$throttle-v2$$$ Throttling limits how often the policy can fire for a given group. The interval resets from the last time the policy fired, so successive notifications stay at least `interval` apart. Set a duration such as `1h` or `30m`. -For throttle strategy API values, refer to [Action policy reference](action-policy-reference.md#throttle-strategies-api). +For throttle strategy API values, refer to [Action policy reference](action-policy-reference-v2.md#throttle-strategies-api). ### Destinations diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md index 476a8cfa4c..a746cea9cb 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md @@ -64,9 +64,9 @@ The [{{esql}} reference](elasticsearch://reference/query-languages/esql.md) cove The alert condition in {{esql}} defines what counts as a breach in each evaluation. -The activation and recovery thresholds on the rule are separate from the query. They control how many consecutive breaches must occur, or how long the condition must persist, before an episode becomes active or moves back to inactive. Those settings are in [Configure a rule](configure-a-rule.md#activation-recovery-thresholds-v2). +The activation and recovery thresholds on the rule are separate from the query. They control how many consecutive breaches must occur, or how long the condition must persist, before an episode becomes active or moves back to inactive. Those settings are in [Configure a rule](configure-a-rule-v2.md#activation-recovery-thresholds-v2). -For how alert states connect to episodes, refer to [Alert lifecycle](../alerts.md#alert-lifecycle-v2). +For how alert states connect to episodes, refer to [Alert lifecycle](../alerts-v2.md#alert-lifecycle-v2). ## Severity levels [severity-levels] diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md index be372e634a..5fc692abe6 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md @@ -13,7 +13,7 @@ $$$rule-settings-v2$$$ Use this page to configure how a {{alerting-v2}} rule evaluates data and manages its alert lifecycle. These settings live on the rule itself. -For writing the {{esql}} query, refer to [Author rules](author-rules.md). For notification routing (matchers, grouping, throttling, maintenance windows), refer to [Notifications](../notifications.md) and [Manage action policies](../notifications/manage-action-policies.md). +For writing the {{esql}} query, refer to [Author rules](author-rules-v2.md). For notification routing (matchers, grouping, throttling, maintenance windows), refer to [Notifications](../notifications-v2.md) and [Manage action policies](../notifications/manage-action-policies-v2.md). :::{note} Action policies are not configured on the rule form. You create them separately in the **Action policies** area and use KQL matchers to scope them to the episodes you want to route. The rule form does not link to policies. @@ -32,7 +32,7 @@ Several settings on this page apply only when the rule is in Alert mode (`kind: ## {{esql}} query [esql-query-rule-v2] -The rule's {{esql}} query defines what to evaluate. It has a base query and an optional alert condition. Together they drive which rows become alert events and how no-data behavior applies. See [{{esql}} query structure](author-rules.md#esql-query-structure) for how those pieces interact with no-data behavior and `KEEP`. +The rule's {{esql}} query defines what to evaluate. It has a base query and an optional alert condition. Together they drive which rows become alert events and how no-data behavior applies. See [{{esql}} query structure](author-rules-v2.md#esql-query-structure) for how those pieces interact with no-data behavior and `KEEP`. ## Rule grouping [rule-grouping-v2] @@ -40,7 +40,7 @@ $$$rule-grouping-v2$$$ Rule grouping splits alert event generation by one or more group key fields so that each unique combination of field values produces its own alert series. Each series has independent lifecycle tracking, recovery detection, and per-series snooze. -Group key fields must align with the `BY` clause in your {{esql}} query's `STATS` command. See [Author rules](author-rules.md) for query patterns. +Group key fields must align with the `BY` clause in your {{esql}} query's `STATS` command. See [Author rules](author-rules-v2.md) for query patterns. Note that rule grouping is separate from notification grouping on an action policy, which controls how episodes batch into messages. diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md index dbff900a4a..0623022cd4 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md @@ -14,10 +14,10 @@ $$$create-rules-yaml-v2$$$ Define {{alerting-v2}} rules as YAML documents for version control, infrastructure-as-code workflows, and bulk provisioning. :::{note} -For the interactive form, refer to [Create rules using the rule builder](create-rule-from-rule-builder.md). +For the interactive form, refer to [Create rules using the rule builder](create-rule-from-rule-builder-v2.md). ::: -For a complete list of every valid YAML field, refer to [YAML rule schema reference](yaml-rule-schema-reference.md). +For a complete list of every valid YAML field, refer to [YAML rule schema reference](yaml-rule-schema-reference-v2.md). ## YAML rule structure diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md index dfbe8ab49a..554d54f969 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md @@ -28,7 +28,7 @@ Use **Edit** to modify the rule, or the actions menu to enable, disable, clone, Use **Disable** when you want the rule to stop running entirely until you re-enable it. This is different from snoozing, which suppresses notifications or quiets a series or policy without stopping rule evaluation. -- To snooze alert episodes or series, refer to [View, manage, and reference alerts](../alerts/view-manage-and-reference-alerts.md#alert-actions-v2). -- To snooze or stop an action policy, refer to [Manage action policies](../notifications/manage-action-policies.md). +- To snooze alert episodes or series, refer to [View, manage, and reference alerts](../alerts/view-manage-and-reference-alerts-v2.md#alert-actions-v2). +- To snooze or stop an action policy, refer to [Manage action policies](../notifications/manage-action-policies-v2.md). If you are unsure which to use, refer to [Validation checklist and noise controls](../troubleshooting-alerting-v2.md#reduce-noise-v2). diff --git a/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md index e7c531a660..52ed063ea1 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md @@ -165,7 +165,7 @@ Action policy evaluation appears to succeed (for example `fire` or downstream lo ### Still not working? -Use **[LINK: Core Workflows Troubleshooting]** as the primary resolution path. Workflow configuration and retries are owned outside this alerting docset. If policies show `error` instead, refer to [Possible outcomes](notifications.md#possible-outcomes) and {{kib}} logs. +Use **[LINK: Core Workflows Troubleshooting]** as the primary resolution path. Workflow configuration and retries are owned outside this alerting docset. If policies show `error` instead, refer to [Possible outcomes](notifications-v2.md#possible-outcomes) and {{kib}} logs. ## Alert not closing after resolution [alert-not-closing-after-resolution] From 6692934c4d5da457b459096ea7d79c6bf53651b3 Mon Sep 17 00:00:00 2001 From: Nastasha Solomon <79124755+nastasha-solomon@users.noreply.github.com> Date: Tue, 21 Apr 2026 19:00:24 -0400 Subject: [PATCH 23/40] Adds quickstart guide and improves setup and orientation pages (#6045) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Adds quickstart guide and improves setup and orientation pages ## Generative AI disclosure 1. Did you use a generative AI (GenAI) tool to assist in creating this contribution? - [x] Yes - [ ] No Cursor + Claude --- explore-analyze/alerting-overview.md | 12 +- .../alerting/kibana-alerting-v2/alerts-v2.md | 10 +- .../kibana-alerting-v2/get-started-v2.md | 61 ------- .../quick-start-alerting-v2.md | 153 ++++++++++++++++++ .../alerting/kibana-alerting-v2/rules-v2.md | 6 +- .../kibana-alerting-v2/setup-alerting-v2.md | 65 ++++++++ .../troubleshooting-alerting-v2.md | 4 +- .../watcher/watcher-getting-started.md | 2 +- explore-analyze/toc.yml | 3 +- redirects.yml | 25 +-- 10 files changed, 247 insertions(+), 94 deletions(-) delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md create mode 100644 explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md diff --git a/explore-analyze/alerting-overview.md b/explore-analyze/alerting-overview.md index b89d54a7e0..d868ab5141 100644 --- a/explore-analyze/alerting-overview.md +++ b/explore-analyze/alerting-overview.md @@ -35,18 +35,10 @@ Kibana alerting v1 gives you ready-made rule types that work with applications s ```{applies_to} serverless: preview -stack: ga +stack: unavailable ``` -{{alerting-v2}} is built on ES|QL. You define what to watch for and what information should travel with each alert, then decide how basic or advanced you want that workflow to be. V2 adds **action policies** for centralized notification control, per-series snooze, alert lifecycle tracking with episodes, and **rules on alerts** for correlation and escalation. - -Here is what you get with v2: - -* **Flexible paths.** Keep a guided experience when you want it, and adopt deeper options (including setups you can manage like code) without switching to a different alerting style. -* **Visibility over time.** Each time a rule finds a matching condition, the outcome is stored in a searchable history of what happened and when. That supports investigations, reviews, and spotting trends instead of only seeing what is open right now. -* **Connected analysis.** Use the same ES|QL skills in Discover and in rules, refine queries where you already explore data, and add follow-up rules when related conditions should be grouped together. -* **Control over notifications.** Reuse shared settings for who gets notified, and how often, across many rules. You set routing, grouping, and frequency in one place so teams hear what matters with less repeated setup and fewer unnecessary messages. -* **Consistent status from open to closed.** Track alerts from the first time they appear until the problem is gone, with shared stages, a way to mark items as handled, and pauses you can tune per group so everyone agrees on what counts as still active and what counts as finished. +{{alerting-v2}} is built on {{esql}}. You write the query that defines what to watch for, choose how alerts are tracked and grouped, and control notifications through action policies (shared objects that handle routing, frequency, and grouping across many rules at once). It adds alert lifecycle tracking with episodes, per-series snooze, and rules on alerts for correlation and escalation. {{alerting-v2}} a strong fit when you want full control over what data travels with each alert and how your team is notified. [Get started with {{alerting-v2}} →](alerting/kibana-alerting-v2.md) diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md index 43b17c4a13..f39779f166 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md @@ -106,9 +106,9 @@ Because every evaluation produces its own document, you can reconstruct the full Retention is managed automatically through ILM. Older backing indices move through storage tiers and are deleted when the retention window expires. You do not need to manually remove documents. {{kib}} manages versioning, retention, and lifecycle for both streams. Do not change their mappings or index settings. -## Where to go next +## What's next -- [View, manage, and reference alerts](alerts/view-manage-and-reference-alerts-v2.md): Open the alert episodes table, triage active episodes, and acknowledge, snooze, or resolve them. -- [Query alerts and signals in Discover](alerts/query-alerts-and-signals-in-discover-v2.md): Use {{esql}} to query `.rule-events` and `.alert-actions` for ad hoc analysis and dashboards. -- [Alert states and fields reference](alerts/alert-states-and-fields-reference-v2.md): Look up lifecycle states, field names, and episode document structure. -- [Notifications](notifications-v2.md): Set up action policies to route alert episodes to the right people and channels. +- **[View, manage, and reference alerts](alerts/view-manage-and-reference-alerts-v2.md):** Open the alert episodes table, triage active episodes, and acknowledge, snooze, or resolve them. +- **[Query alerts and signals in Discover](alerts/query-alerts-and-signals-in-discover-v2.md):** Use {{esql}} to query `.rule-events` and `.alert-actions` for ad hoc analysis and dashboards. +- **[Alert states and fields reference](alerts/alert-states-and-fields-reference-v2.md):** Look up lifecycle states, field names, and episode document structure. +- **[Notifications](notifications-v2.md):** Set up action policies to route alert episodes to the right people and channels. diff --git a/explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md b/explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md deleted file mode 100644 index 5198d5279f..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -navigation_title: Get started -applies_to: - serverless: preview -products: - - id: kibana - - id: cloud-serverless -description: "Get {{alerting-v2}} running in your space: enable the UI, confirm data streams, then understand spaces, API keys, and privileges." ---- - -# Get started [alerting-get-started-v2] - -$$$alerting-get-started-v2$$$ - -This page walks you through enabling {{alerting-v2}} and understanding what you need before authoring rules and policies. - -**In this guide** - -- [Set up and verify](#alerting-set-up-v2): Enable the feature and confirm it's working -- [Spaces and API keys](#spaces-and-api-keys-for-alerting-v2): How objects and keys are scoped - -For privilege requirements ({{kib}} feature access and {{es}} index access), refer to [{{alerting-v2}} privileges](alerting-v2-privileges.md). - -## Set up and verify [alerting-set-up-v2] - -$$$alerting-set-up-v2$$$ - -### Enable {{alerting-v2}} - -{{alerting-v2}} is available in {{stack}} 9.4 and later. When it is enabled for your deployment, use **{{manage-app}} > V2 Alerting Preview** to open the v2 rules list and author rules. If **V2 Alerting Preview** does not appear in the navigation, ask your administrator whether alerting v2 is enabled in your environment. - -### Where alert data is stored - -{{alerting-v2}} automatically creates and manages these data streams: - -- `.rule-events`: signal and alert event documents for each rule run (append-only). -- `.alert-actions`: records for acknowledge, snooze, deactivate, fire, suppress, and related audit or suppression tracking. - -You do not create these indices yourself. Mappings are applied when the first rule runs. - -## Spaces and API keys for alerting [spaces-and-api-keys-for-alerting-v2] - -### Spaces - -Rules and action policies are space-scoped: objects you create in one space are not visible in another. Alert events are stored globally, but the UI filters what you see by space. - -### API keys - -Saving a rule or policy creates an API key used for execution. It inherits the saving user's privileges. If privileges drift, update the key from the rule or policy management UI when your team's process calls for it. - -## Privileges and roles [alerting-privileges-v2] - -For {{kib}} feature access and {{es}} index privilege requirements, refer to [{{alerting-v2}} privileges](alerting-v2-privileges.md). - -## What's next - -When you are ready to go further, your next steps depend on what you want to set up first. These can be done in any order: - -- [Author rules](rules/author-rules-v2.md): Write the {{esql}} query that defines what to detect, choose Detect or Alert mode, and set up grouping and thresholds in [Configure a rule](rules/configure-a-rule-v2.md). -- [Set up workflows](workflows-alerting-v2.md): Configure the automation objects that deliver messages (email, Slack, webhook). You'll need at least one workflow before action policies can send anything. -- [Create action policies](notifications/create-configure-action-policy-v2.md): Define who gets notified, how often, and under what conditions. Policies use KQL matchers to pick up the right episodes and route them to your workflows. diff --git a/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md new file mode 100644 index 0000000000..3b9207c562 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md @@ -0,0 +1,153 @@ +--- +navigation_title: Quick start +applies_to: + serverless: preview +products: + - id: kibana + - id: cloud-serverless +description: "Create your first {{alerting-v2}} rule: enable the feature, write an {{esql}} query in the YAML editor, and confirm the rule is running by querying the rule events data stream." +--- + +# Quick start: Your first rule [alerting-quick-start-v2] + +$$$alerting-quick-start-v2$$$ + +This tutorial walks you through the core {{alerting-v2}} model in action. You'll load sample error logs, create a rule that groups results by service, watch episodes open as the rule finds breaches, and then trigger recovery by deleting the data. By the end, you'll have learned about rules, grouping, episodes, and the alert lifecycle play out from start to finish. + +## Step 1: Create a sample data stream + +Run this in Dev Tools to create a data stream called `logs-tutorial` and populate it with sample error logs. This is the data your rule will query. + +```json +POST logs-tutorial/_bulk +{ "index": {} } +{ "@timestamp": "2026-04-21T21:50:00.000Z", "log_level": "ERROR", "service_name": "checkout", "message": "Connection timeout" } +{ "index": {} } +{ "@timestamp": "2026-04-21T21:51:00.000Z", "log_level": "ERROR", "service_name": "checkout", "message": "Database query failed" } +{ "index": {} } +{ "@timestamp": "2026-04-21T21:52:00.000Z", "log_level": "ERROR", "service_name": "checkout", "message": "Null pointer exception" } +{ "index": {} } +{ "@timestamp": "2026-04-21T21:50:00.000Z", "log_level": "ERROR", "service_name": "payments", "message": "Payment gateway unreachable" } +{ "index": {} } +{ "@timestamp": "2026-04-21T21:51:00.000Z", "log_level": "ERROR", "service_name": "payments", "message": "Transaction rollback failed" } +{ "index": {} } +{ "@timestamp": "2026-04-21T21:50:00.000Z", "log_level": "INFO", "service_name": "checkout", "message": "Request received" } +{ "index": {} } +{ "@timestamp": "2026-04-21T21:51:00.000Z", "log_level": "INFO", "service_name": "payments", "message": "Health check passed" } +``` + +:::{note} +`logs-tutorial` is automatically created as a data stream because the `logs-*` naming pattern matches Elasticsearch's default index template. You don't need to create it manually beforehand. +::: + +Confirm the data was indexed. You should see `errors: false` and `result: "created"` for each document in the response. + + +## Step 2: Verify the data is queryable + +Run this in Dev Tools to confirm the rule will find it: + +```esql +FROM logs-tutorial +| WHERE log_level == "ERROR" +| STATS error_count = COUNT() BY service_name +| WHERE error_count >= 2 +``` + +You should see two rows: one for `checkout` (3 errors) and one for `payments` (2 errors). If you see this, the rule will trigger for both services. + +## Step 3: Create the rule + +Go to **Management > V2 Alerting Preview** and create a new rule using the YAML editor with the following configuration: + +```yaml +kind: alert +metadata: + name: tutorial-error-rate + tags: + - tutorial +time_field: '@timestamp' +schedule: + every: 5s + lookback: 24h +evaluation: + query: + base: |- + FROM logs-tutorial + | WHERE log_level == "ERROR" + | STATS error_count = COUNT() BY service_name + | WHERE error_count >= 2 +grouping: + fields: + - service_name +``` + +Save the rule. It will be enabled automatically. + + +## Step 4: Confirm the rule is running + +Wait 5 seconds, then run the following in Discover using the ES|QL mode. Replace `` with the `tutorial-error-rate` rule ID. + +```esql +FROM $`.rule-events` +| WHERE rule.id == "" +| SORT @timestamp DESC +| LIMIT 10 +``` + +:::{tip} +After saving the rule, open it in **Management > V2 Alerting Preview**. The rule ID is the string at the browser URL. +::: + +Check the following in the query results: + +| Field | What you should see | +|---|---| +| `@timestamp` | Recent timestamps updating every 5 seconds | +| `status` | `breached` confirms the query is finding matches | +| `episode.status` | `active` confirms episodes have opened for both services | +| `data.service_name` | `checkout` and `payments` confirms grouping is working | + + +## Step 5: Confirm two episodes are open + +In Discover, run: + +```esql +FROM $`.rule-events` +| WHERE rule.id == "" +| STATS latest = MAX(@timestamp) BY episode.id, episode.status, data.service_name +| SORT latest DESC +``` + +You should see two rows: one episode for `checkout` and one for `payments`, both with `episode.status: active`. + + +## Step 6: Trigger recovery + +Delete the test data to clear the breach condition. Run the following in Dev Tools: + +```json +POST logs-tutorial/_delete_by_query +{ + "query": { "match_all": {} } +} +``` + +Wait up to 5 seconds, then re-run the query from Step 5 in Discover. Both episodes should now show `episode.status: inactive`. + +## What you learned + +By completing this tutorial, you saw the core alerting v2 model in action end to end: + +- **Rules query your data on a schedule.** Your rule ran every 5 seconds, checking for services with 2 or more errors in the last 24 hours. +- **Grouping creates independent series.** Because the rule grouped by `service_name`, `checkout` and `payments` were tracked separately. Each got its own episode. +- **Episodes follow a lifecycle.** When the error logs existed, both episodes moved to `active`. When you deleted the logs, both recovered and moved to `inactive` automatically, no manual intervention required. +- **Rule events are the underlying record.** Every evaluation wrote documents to `.rule-events`, giving you a full queryable history of what the rule found and when. + +## What's next + +- **Add notifications:** Create a workflow and action policy to route alerts when an episode opens or recovers. Refer to [Notifications](kibana-alerting-v2/notifications.md). +- **Use your own data:** Swap `logs-tutorial` for a real data source and update the breach condition to match your use case. Refer to [Author rules](rules/author-rules-v2.md) to learn more. +- **Explore rule history in Discover:** Query `.rule-events` to track trends, compare episode durations, and identify which services breach most frequently. Refer to [Query alerts and signals in Discover](alerts/query-alerts-and-signals-in-discover-v2.md) to learn more. \ No newline at end of file diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules-v2.md index fa36973b1e..ba4415e17b 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules-v2.md @@ -33,7 +33,7 @@ This separation means you can build and test a rule without anyone getting paged % You can query this history in Discover, build dashboards from it, or write follow-on rules that read `.rule-events` as a data source. -## Where to go next +## What's next -- [Author rules](rules/author-rules-v2.md): Write the {{esql}} query, choose Detect or Alert mode, and structure your data sources and conditions. -- [View and manage rules](rules/view-manage-rules-v2.md): Enable, disable, clone, delete, and bulk-manage rules from the rules list. +- **[Author rules](rules/author-rules-v2.md):** Write the {{esql}} query, choose Detect or Alert mode, and structure your data sources and conditions. +- **[View and manage rules](rules/view-manage-rules-v2.md):** Enable, disable, clone, delete, and bulk-manage rules from the rules list. diff --git a/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md new file mode 100644 index 0000000000..81b7bcff18 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md @@ -0,0 +1,65 @@ +--- +navigation_title: Set up +applies_to: + serverless: preview +products: + - id: kibana + - id: cloud-serverless +description: "Get {{alerting-v2}} running in your space: enable the UI, confirm data streams, then understand spaces, API keys, and privileges." +--- + +# Set up {{alerting-v2}} [alerting-setup-v2] + +$$$alerting-setup-v2$$$ + +This page covers what you need to do before authoring rules. You must first enabling {{alerting-v2}} and Workflows, understand where rule events (signals and alerts) are stored, and understand how spaces and API keys scope the objects you create. + +If you want to jump straight to creating a rule, go to [Quick start](quick-start-alerting-v2.md). For privilege requirements, refer to [{{alerting-v2}} privileges](alerting-v2-privileges.md). + +## Enable {{alerting-v2}} and Workflows [alerting-set-up-v2] + +$$$alerting-set-up-v2$$$ + +- {{alerting-v2}} is available in {{serverless-short}} only. Enable it in **{{manage-app}} > Advanced Settings** by setting `alertingv2` to `true`. Once enabled, go to **{{manage-app}} > V2 Alerting Preview** to open the **Rules** page. + +% Update these docs about enabling the advanced setting for v2 alerting. ^ + +- To use workflows to deliver notifications, also enable the Workflows UI in **{{manage-app}} > Advanced Settings** by setting `workflows:ui:enabled` to `true`. + +## Where rule events are stored + +{{alerting-v2}} automatically creates and manages two data streams when the first rule runs. You don't need to create them manually. + +| Data stream | What it stores | +|---|---| +| `.rule-events` | A record for every rule evaluation. One document per result row, per run. Never updated in place. | +| `.alert-actions` | Records for acknowledge, snooze, deactivate, fire, suppress, and other audit and suppression tracking. | + +Both data streams are hidden system data streams. To query them in Discover, prefix the name with `$`: + +```esql +FROM $`.rule-events` +| WHERE rule.id == "" +| SORT @timestamp DESC +| LIMIT 10 +``` + +After your first rule runs, use the query above in Discover to confirm documents are appearing. If nothing appears after a few seconds, check that the rule is enabled and that your ES|QL query returns results when run independently. + +## Spaces [spaces-for-alerting-v2] + +Rules and action policies are space-scoped. Objects you create in one space are not visible in another. Alert events are stored globally, but the UI filters what you see by space. + +## API keys [alerting-privileges-v2] + +$$$alerting-privileges-v2$$$ + +Saving a rule or action policy automatically creates an API key that is used to run it. The key inherits the privileges of the user who saved the object. If those privileges change over time, update the key from the rule or policy management UI. + +## What's next + +When you're ready to go further, these can be done in any order: + +- **[Author rules](rules/author-rules-v2.md):** Write the {{esql}} query that defines what to detect, choose Detect or Alert mode, and configure grouping and thresholds in [Configure a rule](rules/configure-a-rule-v2.md). +- **[Set up workflows](workflows-alerting-v2.md):** Configure the automation objects that deliver messages — email, Slack, webhook, and so on. You need at least one workflow before action policies can send anything. +- **[Create action policies](notifications/create-configure-action-policy-v2.md):** Define who gets notified, how often, and under what conditions. Policies use KQL matchers to pick up the right episodes and route them to your workflows. \ No newline at end of file diff --git a/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md index 52ed063ea1..d17ed09898 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md @@ -41,8 +41,8 @@ A rule runs on schedule but you see no new documents in `.rule-events`, no episo - Tighten or broaden the {{esql}}, fix `FROM`, or adjust the **alert condition** so it reflects the signal you want. Cross-reference [Author rules](rules/author-rules-v2.md). - Set **lookback** to at least the **schedule** interval unless you intentionally accept gaps; see [Configure a rule](rules/configure-a-rule-v2.md#schedule-lookback-v2). - Switch to **Alert** mode when you need episodes and policy matching; see [Rules](rules-v2.md#detection-and-notification-v2). -- Restore **index privileges** or **rotate the rule API key** after privilege changes; see [Get started](get-started-v2.md#alerting-privileges-v2). -- Ask an administrator to confirm {{alerting-v2}} is enabled and navigation labels for your version; see [Set up and verify](get-started-v2.md#alerting-set-up-v2). +- Restore **index privileges** or **rotate the rule API key** after privilege changes; see [Set up alerting](setup-alerting-v2.md#alerting-privileges-v2). +- Ask an administrator to confirm {{alerting-v2}} is enabled and navigation labels for your version; see [Set up and verify](setup-alerting-v2.md#alerting-set-up-v2). ### Still not working? diff --git a/explore-analyze/alerting/watcher/watcher-getting-started.md b/explore-analyze/alerting/watcher/watcher-getting-started.md index 6357e3e8d8..68d53901f5 100644 --- a/explore-analyze/alerting/watcher/watcher-getting-started.md +++ b/explore-analyze/alerting/watcher/watcher-getting-started.md @@ -167,7 +167,7 @@ To enable users to create and manipulate watches, assign them the `watcher_admin To allow users to view watches and the watch history, assign them the `watcher_user` security role. Watcher users cannot create or manipulate watches; they are only allowed to execute read-only watch operations. -## Where to go next [next-steps] +## What's next [next-steps] * See [*How {{watcher}} works*](how-watcher-works.md) for more information about the anatomy of a watch and the watch lifecycle. * See [*Example watches*](example-watches.md) for more examples of setting up a watch. diff --git a/explore-analyze/toc.yml b/explore-analyze/toc.yml index e3dbe3da72..3fbe9ff9a9 100644 --- a/explore-analyze/toc.yml +++ b/explore-analyze/toc.yml @@ -394,7 +394,8 @@ toc: - file: alerting/kibana-alerting-v1/maintenance-windows-v1.md - file: alerting/kibana-alerting-v2.md children: - - file: alerting/kibana-alerting-v2/get-started-v2.md + - file: alerting/kibana-alerting-v2/quick-start-alerting-v2.md + - file: alerting/kibana-alerting-v2/setup-alerting-v2.md - file: alerting/kibana-alerting-v2/alerting-v2-privileges.md - file: alerting/kibana-alerting-v2/rules-v2.md children: diff --git a/redirects.yml b/redirects.yml index 5701c8e893..a4b0b091c6 100644 --- a/redirects.yml +++ b/redirects.yml @@ -905,36 +905,36 @@ redirects: anchors: 'snooze-disable-rules-v2': 'manage-rules-v2' 'explore-analyze/alerting/kibana-alerting-v2/before-you-begin/set-up.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md' anchors: 'alerting-set-up-v2': 'alerting-set-up-v2' 'explore-analyze/alerting/kibana-alerting-v2/get-started/before-you-begin.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md' anchors: 'alerting-set-up-v2': 'alerting-set-up-v2' - 'alerting-before-you-begin-v2': 'alerting-get-started-v2' + 'alerting-before-you-begin-v2': 'alerting-setup-v2' 'alerting-privileges-v2': 'alerting-privileges-v2' 'explore-analyze/alerting/kibana-alerting-v2/get-started/quickstart.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md' anchors: 'alerting-set-up-v2': 'alerting-set-up-v2' 'explore-analyze/alerting/kibana-alerting-v2/quickstart.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md' anchors: 'alerting-set-up-v2': 'alerting-set-up-v2' 'explore-analyze/alerting/kibana-alerting-v2/before-you-begin.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md' anchors: - 'alerting-before-you-begin-v2': 'alerting-get-started-v2' + 'alerting-before-you-begin-v2': 'alerting-setup-v2' 'alerting-privileges-v2': 'alerting-privileges-v2' 'alerting-set-up-v2': 'alerting-set-up-v2' 'explore-analyze/alerting/kibana-alerting-v2/before-you-begin/core-v2-alerting-concepts.md': to: 'explore-analyze/alerting/kibana-alerting-v2.md' 'explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md' 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts/view-alerts.md': to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' anchors: @@ -1117,11 +1117,11 @@ redirects: 'runtime-execution-order': 'runtime-execution-order' 'configuration-order': 'configuration-order' 'explore-analyze/alerting/kibana-alerting-v2/get-starting.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md' anchors: 'alerting-set-up-v2': 'alerting-set-up-v2' 'explore-analyze/alerting/kibana-alerting-v2/alerting-privileges.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md' anchors: 'alerting-privileges-v2': 'alerting-privileges-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules.md': @@ -1286,7 +1286,10 @@ redirects: 'explore-analyze/workflows/manage-workflows.md': 'explore-analyze/workflows/authoring-techniques/manage-workflows.md' # alerting-v2 file renames: appended -v2 suffix to all page filenames 'explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md' - 'explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md': + to: 'explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md' + anchors: + 'alerting-get-started-v2': 'alerting-setup-v2' 'explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md' 'explore-analyze/alerting/kibana-alerting-v2/rules-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/rules-v2.md' 'explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md' From 83ca2e766914aae16ba857e69b10c4f4cb0a3fdb Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Tue, 21 Apr 2026 19:03:01 -0400 Subject: [PATCH 24/40] updated notification ref --- .../alerting/kibana-alerting-v2/quick-start-alerting-v2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md index 3b9207c562..5fe3253a63 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md @@ -148,6 +148,6 @@ By completing this tutorial, you saw the core alerting v2 model in action end to ## What's next -- **Add notifications:** Create a workflow and action policy to route alerts when an episode opens or recovers. Refer to [Notifications](kibana-alerting-v2/notifications.md). +- **Add notifications:** Create a workflow and action policy to route alerts when an episode opens or recovers. Refer to [Notifications](notifications-v2.md). - **Use your own data:** Swap `logs-tutorial` for a real data source and update the breach condition to match your use case. Refer to [Author rules](rules/author-rules-v2.md) to learn more. - **Explore rule history in Discover:** Query `.rule-events` to track trends, compare episode durations, and identify which services breach most frequently. Refer to [Query alerts and signals in Discover](alerts/query-alerts-and-signals-in-discover-v2.md) to learn more. \ No newline at end of file From b68de17540805f5b1954dc30ac58cb1254204fb5 Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Tue, 21 Apr 2026 19:41:47 -0400 Subject: [PATCH 25/40] fix applies to tags --- .../alerting/choose-an-alerting-system.md | 28 ------------------- .../alerting/kibana-alerting-v2.md | 1 + .../alerting-v2-privileges.md | 1 + .../alerting/kibana-alerting-v2/alerts-v2.md | 3 +- .../alert-states-and-fields-reference-v2.md | 1 + ...query-alerts-and-signals-in-discover-v2.md | 1 + .../view-manage-and-reference-alerts-v2.md | 1 + .../kibana-alerting-v2/notifications-v2.md | 3 +- .../action-policy-reference-v2.md | 1 + .../create-configure-action-policy-v2.md | 1 + .../manage-action-policies-v2.md | 1 + .../quick-start-alerting-v2.md | 1 + .../alerting/kibana-alerting-v2/rules-v2.md | 3 +- .../rules/author-rules-v2.md | 1 + .../rules/configure-a-rule-v2.md | 3 +- .../rules/create-rule-from-discover-v2.md | 1 + .../rules/create-rule-from-rule-builder-v2.md | 1 + .../rules/create-rule-with-yaml-v2.md | 1 + .../rules/rule-event-field-reference-v2.md | 1 + .../rules/view-manage-rules-v2.md | 1 + .../rules/yaml-rule-schema-reference-v2.md | 1 + .../kibana-alerting-v2/setup-alerting-v2.md | 1 + .../troubleshooting-alerting-v2.md | 1 + .../workflows-alerting-v2.md | 3 +- 24 files changed, 28 insertions(+), 33 deletions(-) diff --git a/explore-analyze/alerting/choose-an-alerting-system.md b/explore-analyze/alerting/choose-an-alerting-system.md index 4a3e376e79..400cd433e9 100644 --- a/explore-analyze/alerting/choose-an-alerting-system.md +++ b/explore-analyze/alerting/choose-an-alerting-system.md @@ -35,31 +35,3 @@ Elastic has three alerting systems. You only need one. Pick the one that fits ho | **Notifications** | Configured per action on each rule | Centralized action policies, reusable across rules | Action-level throttling and conditions | | **Noise reduction** | Snooze per rule, maintenance windows | Per-series snooze, per-episode acknowledgment, activation thresholds, matcher-based routing, rules on alerts | Action conditions and throttling | | **Availability** | All deployments | {{stack}} 9.4+ | Self-managed and {{ech}} only | - -## Kibana alerting v1 - -Kibana alerting v1 provides prepackaged rule types integrated with Elastic solutions. Rules are configured through forms — no query language required. Actions are triggered through built-in connectors such as email, Slack, PagerDuty, and webhooks. - -Choose Kibana alerting v1 if you want broad rule type coverage out of the box and are working within Observability, Security, APM, Uptime, or Maps. - -[Get started with Kibana alerting v1 →](kibana-alerting-v1.md) - -## {{alerting-v2}} - -{{alerting-v2}} is built on {{esql}}. You write the query that defines what to detect and what data each alert carries. Action policies control routing, grouping, and throttling independently of rules, and alert events are stored as queryable data in standard {{es}} indices. - -Choose {{alerting-v2}} if you need flexible detection logic, queryable alert history, centralized notification management, or cross-rule correlation. - -[Get started with {{alerting-v2}} →](kibana-alerting-v2.md) - -## Watcher - -Watcher supports custom alerting logic with Painless scripting, chained inputs, and direct {{es}} API integration. It is the most flexible system for non-standard use cases but does not integrate with the {{kib}} alerting management UI and is not available in {{serverless-full}}. - -[Get started with Watcher →](watcher.md) - -## Using multiple systems - -The systems are independent and can run side by side. Kibana alerting v1 and {{alerting-v2}} share a single **Rules** navigation entry with separate tabs. Watcher operates through its own API and management UI. - -There is no forced migration. You can adopt a new system incrementally while your existing rules continue running. {{alerting-v2}} rules can also query alert data produced by any system, which enables cross-system correlation if you run more than one. diff --git a/explore-analyze/alerting/kibana-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2.md index e782ab0eb6..b1be49a2fe 100644 --- a/explore-analyze/alerting/kibana-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2.md @@ -1,5 +1,6 @@ --- applies_to: + stack: unavailable serverless: preview products: - id: kibana diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerting-v2-privileges.md b/explore-analyze/alerting/kibana-alerting-v2/alerting-v2-privileges.md index 56cdd2657e..015431711e 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerting-v2-privileges.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerting-v2-privileges.md @@ -1,6 +1,7 @@ --- navigation_title: Privileges applies_to: + stack: unavailable serverless: preview products: - id: kibana diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md index f39779f166..4a7a6c9949 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md @@ -1,13 +1,14 @@ --- navigation_title: Alerts applies_to: + stack: unavailable serverless: preview products: - id: kibana description: "Alert episodes in {{alerting-v2}}: lifecycle states, series and episodes, signals versus alerts, and where to find them." --- -# Alerts +# {{alerting-v2}} alerts When a rule runs in Alert mode, it maintains _alert episodes_, which are ongoing records of an issue from first breach through recovery. This is what you triage on the **Alerts** page. diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md index 985387dd86..540985d53d 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md @@ -1,6 +1,7 @@ --- navigation_title: Alert states and fields applies_to: + stack: unavailable serverless: preview products: - id: kibana diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md index a6840b13ca..57103e555c 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md @@ -1,6 +1,7 @@ --- navigation_title: Query alerts in Discover applies_to: + stack: unavailable serverless: preview products: - id: kibana diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md index 1ee8b4d284..f491691106 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md @@ -1,6 +1,7 @@ --- navigation_title: View and manage alerts applies_to: + stack: unavailable serverless: preview products: - id: kibana diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md index 309b451139..46875bdb9c 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md @@ -1,13 +1,14 @@ --- navigation_title: Notifications applies_to: + stack: unavailable serverless: preview products: - id: kibana description: "How {{alerting-v2}} action policies route alert episodes to notifications: matchers, grouping, throttling, and workflow destinations." --- -# Notifications +# {{alerting-v2}} notifications After a rule produces alert episodes, action policies decide what to do about them: who gets notified, how often, and through which channel. diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md index f7bc7dd973..21132b37bd 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md @@ -1,6 +1,7 @@ --- navigation_title: Action policy reference applies_to: + stack: unavailable serverless: preview products: - id: kibana diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md index 76dc79f65b..1364afc05e 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md @@ -1,6 +1,7 @@ --- navigation_title: Create an action policy applies_to: + stack: unavailable serverless: preview products: - id: kibana diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies-v2.md index 5647239251..3e52241604 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies-v2.md @@ -1,6 +1,7 @@ --- navigation_title: Manage action policies applies_to: + stack: unavailable serverless: preview products: - id: kibana diff --git a/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md index 5fe3253a63..d5ec4a08da 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md @@ -1,6 +1,7 @@ --- navigation_title: Quick start applies_to: + stack: unavailable serverless: preview products: - id: kibana diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules-v2.md index ba4415e17b..a09163f4d0 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules-v2.md @@ -1,13 +1,14 @@ --- navigation_title: Rules applies_to: + stack: unavailable serverless: preview products: - id: kibana description: "What {{alerting-v2}} rules are, how evaluation works, and how rules connect to alerts and notifications." --- -# Rules +# {{alerting-v2}} rules A rule is where {{alerting-v2}} starts. It points {{kib}} at the data you care about, describes what counts as a problem in {{esql}}, and says how often to check. Alerts, action policies, and notifications all flow from what a rule detects. diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md index a746cea9cb..3dce889ce0 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md @@ -1,6 +1,7 @@ --- navigation_title: Author rules applies_to: + stack: unavailable serverless: preview products: - id: kibana diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md index 5fc692abe6..84019a5a5d 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md @@ -1,13 +1,14 @@ --- navigation_title: Configure a rule applies_to: + stack: unavailable serverless: preview products: - id: kibana description: "Configure {{alerting-v2}} rules: mode, ES|QL, grouping, schedule, lookback, activation and recovery, no-data handling, tags, and evaluation." --- -# Configure a rule [rule-settings-v2] +# Configure a {{alerting-v2}} rule [rule-settings-v2] $$$rule-settings-v2$$$ diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md index 3d6e6a762f..643c35d5c8 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md @@ -1,6 +1,7 @@ --- navigation_title: Using Discover applies_to: + stack: unavailable serverless: preview products: - id: kibana diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md index 52986e5d8f..8ee86b08b4 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md @@ -1,6 +1,7 @@ --- navigation_title: Using the rule builder applies_to: + stack: unavailable serverless: preview products: - id: kibana diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md index 0623022cd4..044c9695bd 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md @@ -1,6 +1,7 @@ --- navigation_title: Using the YAML editor applies_to: + stack: unavailable serverless: preview products: - id: kibana diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md index 7bacd125c4..dcb6eb1a98 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md @@ -1,6 +1,7 @@ --- navigation_title: Rule and event fields applies_to: + stack: unavailable serverless: preview products: - id: kibana diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md index 554d54f969..6c0293333d 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md @@ -1,6 +1,7 @@ --- navigation_title: View and manage rules applies_to: + stack: unavailable serverless: preview products: - id: kibana diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/yaml-rule-schema-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/yaml-rule-schema-reference-v2.md index 8e041276b1..e8224a8a3f 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/yaml-rule-schema-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/yaml-rule-schema-reference-v2.md @@ -1,6 +1,7 @@ --- navigation_title: YAML rule schema reference applies_to: + stack: unavailable serverless: preview products: - id: kibana diff --git a/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md index 81b7bcff18..97fdcbff5d 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md @@ -1,6 +1,7 @@ --- navigation_title: Set up applies_to: + stack: unavailable serverless: preview products: - id: kibana diff --git a/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md index d17ed09898..6d072c309b 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md @@ -1,6 +1,7 @@ --- navigation_title: Troubleshooting applies_to: + stack: unavailable serverless: preview products: - id: kibana diff --git a/explore-analyze/alerting/kibana-alerting-v2/workflows-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/workflows-alerting-v2.md index f3175ff674..19e0613a19 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/workflows-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/workflows-alerting-v2.md @@ -1,7 +1,8 @@ --- navigation_title: Workflows applies_to: - serverless: preview + stack: ga 9.4, preview 9.3 + serverless: ga products: - id: kibana description: "How workflows connect to {{alerting-v2}} action policies and rule automation, and where to configure them." From 7f888bcb8fffc8b2b7177fcf5c5aad932724e65b Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Tue, 21 Apr 2026 23:38:54 -0400 Subject: [PATCH 26/40] fix typos --- .../alerting/choose-an-alerting-system.md | 4 +- .../alerting/kibana-alerting-v2.md | 2 +- .../alerting/kibana-alerting-v2/alerts-v2.md | 10 +- .../alert-states-and-fields-reference-v2.md | 4 +- ...query-alerts-and-signals-in-discover-v2.md | 4 +- .../alerts/view-and-manage-alerts-v2.md | 84 +++++++++++++ .../view-manage-and-reference-alerts-v2.md | 4 +- .../kibana-alerting-v2/notifications-v2.md | 30 ++--- .../action-policy-reference-v2.md | 110 +++++++++--------- .../create-configure-action-policy-v2.md | 31 ++--- .../quick-start-alerting-v2.md | 2 +- .../alerting/kibana-alerting-v2/rules-v2.md | 4 +- .../rules/configure-a-rule-v2.md | 2 +- .../rules/create-rule-from-discover-v2.md | 8 +- .../rules/create-rule-with-yaml-v2.md | 8 +- .../rules/view-manage-rules-v2.md | 4 +- .../rules/yaml-rule-schema-reference-v2.md | 2 +- .../kibana-alerting-v2/setup-alerting-v2.md | 2 +- .../troubleshooting-alerting-v2.md | 8 +- .../workflows-alerting-v2.md | 16 +-- redirects.yml | 1 + 21 files changed, 208 insertions(+), 132 deletions(-) create mode 100644 explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md diff --git a/explore-analyze/alerting/choose-an-alerting-system.md b/explore-analyze/alerting/choose-an-alerting-system.md index 400cd433e9..d5ceb98b0e 100644 --- a/explore-analyze/alerting/choose-an-alerting-system.md +++ b/explore-analyze/alerting/choose-an-alerting-system.md @@ -31,7 +31,7 @@ Elastic has three alerting systems. You only need one. Pick the one that fits ho |---|---|---|---| | **Best for** | Teams using built-in rule types with form-based setup | Teams that need full control over detection and notification routing | Custom alerting logic requiring scripting | | **Rule definition** | Select a rule type and fill in parameters | Write an {{esql}} query | Write a JSON watch definition | -| **Alert data** | Updated in place; limited queryability | Append-only events queryable with {{esql}} in Discover | Watch history index | +| **Alert data** | Updated in place; limited query support | Append-only events queryable with {{esql}} in Discover | Watch history index | | **Notifications** | Configured per action on each rule | Centralized action policies, reusable across rules | Action-level throttling and conditions | | **Noise reduction** | Snooze per rule, maintenance windows | Per-series snooze, per-episode acknowledgment, activation thresholds, matcher-based routing, rules on alerts | Action conditions and throttling | -| **Availability** | All deployments | {{stack}} 9.4+ | Self-managed and {{ech}} only | +| **Availability** | All deployments | {{serverless-full}} | Self-managed and {{ech}} only | diff --git a/explore-analyze/alerting/kibana-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2.md index b1be49a2fe..c050e5fd95 100644 --- a/explore-analyze/alerting/kibana-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2.md @@ -29,7 +29,7 @@ A rule defines what to watch for in your data and how often to check. Every rule Refer to [Rules](kibana-alerting-v2/rules-v2.md) to learn more. ### Alerts -When a rule runs in Alert mode, it creates an alert for each problem it detects. An alert isn't a single snapshot. It's an ongoing record that follows the problem through its full lifecycle, from when it first appeared to when it resolved. You triage and manage alerts in the Alerts UI. Refer to [Alerts](kibana-alerting-v2/alerts-v2.md) to learn more. +When a rule runs in Alert mode, it creates an alert for each problem it detects. An alert isn't a single snapshot. It's an ongoing record that follows the problem through its full lifecycle, from when it first appeared to when it resolved. You triage and manage alerts on the **Alerts** page. Refer to [Alerts](kibana-alerting-v2/alerts-v2.md) to learn more. ### Action policies An action policy controls whether an alert should trigger a notification, and how often. You can set conditions to filter which alerts it applies to, for example, only critical severity alerts from a specific service. A single action policy can apply to alerts from any rule in your space. Refer to [Notifications](kibana-alerting-v2/notifications-v2.md) to learn more. diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md index 4a7a6c9949..133aea8be3 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md @@ -66,7 +66,7 @@ The series is the container. Episodes are the individual problems that happened This means you can track "the checkout service was broken from 02:14 to 03:21" and "the payment service was broken at the same time" as separate episodes, even when both come from the same rule. :::{tip} -Snooze operates at the series level, not the episode level. If you snooze `checkout-service`, you're saying "stop notifying me about anything from this service for the next X hours", regardless of how many new episodes start during that time. You're silencing a specific ongoing situation, not just one alert. +Snooze operates at the series level, not the episode level. If you snooze `checkout-service`, you're saying "stop notifying me about anything from this service for the next X hours", regardless of how many new episodes start during that time. You're silencing a specific ongoing situation, not only one alert. ::: ### A practical way to think about it @@ -82,9 +82,9 @@ The camera runs continuously (rule), always watching door 3 (series). One night ## Signals versus alerts -Every time a rule finds a match, it writes a document to `.rule-events`. Whether that document is a signal or an alert depends on the rule's mode — and that choice determines whether the system just records what happened or actively tracks it through to resolution. +Every time a rule finds a match, it writes a document to `.rule-events`. Whether that document is a signal or an alert depends on the rule's mode, and that choice determines whether the system only records what happened or actively tracks it through to resolution. -A **signal** is a one-time observation. The system writes it and moves on — no lifecycle, no notifications, no follow-up. A **alert** participates in an episode. The system links it to every other document from the same problem, tracks the lifecycle states, and routes notifications through action policies. +A **signal** is a one-time observation. The system writes it and moves on, no lifecycle, no notifications, no follow-up. An **alert** participates in an episode. The system links it to every other document from the same problem, tracks the lifecycle states, and routes notifications through action policies. | Type | What it is | When it's created | | --- | --- | --- | @@ -107,9 +107,9 @@ Because every evaluation produces its own document, you can reconstruct the full Retention is managed automatically through ILM. Older backing indices move through storage tiers and are deleted when the retention window expires. You do not need to manually remove documents. {{kib}} manages versioning, retention, and lifecycle for both streams. Do not change their mappings or index settings. -## What's next +## Related pages -- **[View, manage, and reference alerts](alerts/view-manage-and-reference-alerts-v2.md):** Open the alert episodes table, triage active episodes, and acknowledge, snooze, or resolve them. +- **[View, manage, and reference alerts](alerts/view-and-manage-alerts-v2.md):** Open the alert episodes table, triage active episodes, and acknowledge, snooze, or resolve them. - **[Query alerts and signals in Discover](alerts/query-alerts-and-signals-in-discover-v2.md):** Use {{esql}} to query `.rule-events` and `.alert-actions` for ad hoc analysis and dashboards. - **[Alert states and fields reference](alerts/alert-states-and-fields-reference-v2.md):** Look up lifecycle states, field names, and episode document structure. - **[Notifications](notifications-v2.md):** Set up action policies to route alert episodes to the right people and channels. diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md index 540985d53d..4fed70f530 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md @@ -12,7 +12,7 @@ description: "Reference for {{alerting-v2}} episode status, `.rule-events` row s $$$alert-states-reference-v2$$$ -Use these tables when you read alert UI state, query `.rule-events` or `.alert-actions` in Discover, or align API payloads with what operators see. For triage controls (acknowledge, snooze, resolve, tags) and how they map to storage, refer to [Alert actions](view-manage-and-reference-alerts-v2.md#alert-actions-v2). For rule evaluation fields on `.rule-events`, refer to [Rule event and field reference](../rules/rule-event-field-reference-v2.md#rule-reference-v2). +Use these tables when you read alert UI state, query `.rule-events` or `.alert-actions` in Discover, or align API payloads with what operators see. For triage controls (acknowledge, snooze, resolve, tags) and how they map to storage, refer to [Alert actions](view-and-manage-alerts-v2.md#alert-actions-v2). For rule evaluation fields on `.rule-events`, refer to [Rule event and field reference](../rules/rule-event-field-reference-v2.md#rule-reference-v2). ## Episode status @@ -44,5 +44,5 @@ When a user or the system records an action on an alert episode, {{kib}} writes | @timestamp | date | When the action was recorded. | | episode.id | keyword | Target episode. | | rule.id | keyword | Rule that owns the episode. | -| action.type | keyword | The action type, for example:
- `acknowledge`: User acknowledged the alert.
- `snooze`: Notifications snoozed for a period.
- `tag`: Tag applied to the alert.
- `fire`: Notification or escalation fired for the episode.
- `unmatched`: No action policy matched the episode, so no workflow ran for it under these policies.

For the full set of action types and UI behavior, refer to [Alert actions](view-manage-and-reference-alerts-v2.md#alert-actions-v2). | +| action.type | keyword | The action type, for example:
- `acknowledge`: User acknowledged the alert.
- `snooze`: Notifications snoozed for a period.
- `tag`: Tag applied to the alert.
- `fire`: Notification or escalation fired for the episode.
- `unmatched`: No action policy matched the episode, so no workflow ran for it under these policies.

For the full set of action types and UI behavior, refer to [Alert actions](view-and-manage-alerts-v2.md#alert-actions-v2). | | episode.status_count | long | Count of consecutive evaluations in the current `episode.status`. Only set when `episode.status` is `pending` or `recovering`.
For example, if the episode stays `pending` for three rule evaluations in a row, the value is `3`. | diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md index 57103e555c..6162067770 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md @@ -14,11 +14,11 @@ $$$explore-alerts-discover-v2$$$ {{alerting-v2}} stores rule output in `.rule-events` and user or system actions in `.alert-actions`. Both are queryable with {{esql}} in Discover. Open Discover, select {{esql}}, paste a query, then adjust the time range and placeholders (`YOUR_RULE_ID`, `YOUR_GROUP_HASH`) to match your environment. -For field names, types, and episode fields, refer to [Alert states and fields reference](alert-states-and-fields-reference-v2.md#alert-states-reference-v2) and [Rule event and field reference](../rules/rule-event-field-reference-v2.md#rule-reference-v2). For triage in the product UI, refer to [View, manage, and reference alerts](view-manage-and-reference-alerts-v2.md). +For field names, types, and episode fields, refer to [Alert states and fields reference](alert-states-and-fields-reference-v2.md#alert-states-reference-v2) and [Rule event and field reference](../rules/rule-event-field-reference-v2.md#rule-reference-v2). For triage in the product UI, refer to [View, manage, and reference alerts](view-and-manage-alerts-v2.md). ## Rule events -Each write to `.rule-events` is one document. The `type` field is either `signal` (Detect mode, no `episode.*` fields) or `alert` (Alert mode, with episode lifecycle fields). Fields your {{esql}} rule selected are stored under `data` — confirm field names and types there until you know the full shape of your rule output. +Each write to `.rule-events` is one document. The `type` field is either `signal` (Detect mode, no `episode.*` fields) or `alert` (Alert mode, with episode lifecycle fields). Fields your {{esql}} rule selected are stored under `data`. Confirm field names and types there until you know the full shape of your rule output. ### Example: Recent events diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md new file mode 100644 index 0000000000..9205d77771 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md @@ -0,0 +1,84 @@ +--- +navigation_title: View and manage alerts +applies_to: + stack: unavailable + serverless: preview +products: + - id: kibana +description: "Open the {{alerting-v2}} alert episodes table, triage actions, and episode details. Field and state tables live on a separate reference page." +--- + +# View and manage alerts [manage-alerts-v2] + +$$$manage-alerts-v2$$$ + +The **Alerts** page is the main place to view {{alerting-v2}} episodes, filter and sort them, and start triage. Open it from **{{manage-app}} > V2 Alerting Preview** > **Alerts**. + +## Filter and search + +- **Rule:** Limit rows to one or more rules. +- **Status:** Limit by episode lifecycle state (active, recovered, pending, inactive). +- **Tags:** Limit to episodes whose last tag set matches any selected tag (OR logic). Tag choices come from tag actions in the selected time range. +- **Search:** Text search runs over alert event document fields. Combine with **Rule** or **Tags** filters when looking for a specific rule or label. + +Narrow the time range when filters return too many rows or when tag options need refreshing. + +## Episode actions + +From any row in the table you can: + +- **Acknowledge / Unacknowledge:** Applies to the individual episode. +- **Snooze / Unsnooze:** Applies to the group (`group_hash`), so all rows sharing that group are affected. +- **Resolve / Unresolve:** Applies to the group. The episode shows as inactive in the UI when resolved, even if the underlying lifecycle data has not yet caught up. +- **Edit tags:** Opens a flyout to add tags; persisted as `tag` actions in `.alert-actions`. + +The same actions are available from the episode detail page. + +## Open in Discover + +Select **Discover** on a row to investigate source data. Discover opens with the rule {{esql}} query and a short time window around the episode so you can inspect matching documents in context. + +For ad hoc analysis over `.rule-events` and `.alert-actions` with copy-paste {{esql}} examples, refer to [Query alerts and signals in Discover](query-alerts-and-signals-in-discover-v2.md). + +## Episode detail page [alert-episode-details-v2] + +$$$alert-episode-details-v2$$$ +$$$investigate-respond-v2$$$ + +Open an episode's detail page by selecting its name or ID from the table row. The detail page shows: + +- **Lifecycle:** A state-over-time visualization (pending, active, recovering, inactive) driven by events in `.rule-events`. +- **Actions and metadata:** Tags and action-driven status (acknowledge, snooze, resolve) consistent with the episodes table. +- **Related episodes:** Other episodes on the same rule or series. +- **Grouping:** When the rule uses grouping, the detail view surfaces the field values that identify the series. + +## Alert actions [alert-actions-v2] + +$$$alert-actions-v2$$$ + +When you take an action, {{kib}} writes a document to the `.alert-actions` data stream. You can query these documents in Discover for auditing and metrics such as mean time to acknowledge (MTTA). + +### Episode scope versus group scope + +| Action | Scope | +|---|---| +| Acknowledge / Unacknowledge | Episode | +| Snooze / Unsnooze | Group (`group_hash`) | +| Resolve / Unresolve | Group | +| Edit tags | Episode | + +### Action types in storage + +The `action_type` field identifies the operation in `.alert-actions` documents: + +| action_type | Meaning | +|---|---| +| ack / unack | Episode acknowledged or unacknowledged. | +| snooze / unsnooze | Notifications snoozed or cleared for the group. | +| deactivate / activate | Group resolved or reopened (UI labels: Resolve / Unresolve). | +| tag | Tags applied to an episode. | +| suppress | Suppression recorded for the episode or dispatch pipeline. | +| fire | Notification or workflow dispatch recorded. | +| unmatched | No action policy matched, so no workflow ran. | + +For a full field list and state definitions, refer to [Alert states and fields reference](alert-states-and-fields-reference-v2.md#alert-states-reference-v2). diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md index f491691106..052bc1f0a7 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md @@ -5,7 +5,7 @@ applies_to: serverless: preview products: - id: kibana -description: "Open the {{alerting-v2}} alert episodes table, triage actions, and episode details. Field and state tables live on a separate reference page." +description: "Open the {{alerting-v2}} alert episodes table, triage actions, and episode details." --- # View and manage alerts [manage-alerts-v2] @@ -58,7 +58,7 @@ $$$alert-actions-v2$$$ When you take an action, {{kib}} writes a document to the `.alert-actions` data stream. You can query these documents in Discover for auditing and metrics such as mean time to acknowledge (MTTA). -### Episode scope vs. group scope +### Episode scope versus group scope | Action | Scope | |---|---| diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md index 46875bdb9c..084680018a 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md @@ -14,11 +14,11 @@ After a rule produces alert episodes, action policies decide what to do about th This page explains how action policies work. For creating and configuring them step by step, refer to [Create and configure an action policy](notifications/create-configure-action-policy-v2.md). -## What is an action policy [action-policies-v2] +## What's an action policy [action-policies-v2] $$$action-policies-v2$$$ -An action policy is a saved object in your space that controls notification routing. It is not attached to a rule. It's global within the space, so when an episode is produced, the system evaluates all enabled, unsnoozed policies in the space and decides which ones apply. +An action policy is a saved object in your space that controls notification routing. It's not attached to a rule. It's global within the space, so when an episode is produced, the system evaluates all enabled, unsnoozed policies in the space and decides which ones apply. Each policy has four controls: @@ -27,7 +27,7 @@ Each policy has four controls: | Matcher (optional KQL) | Filters which episodes this policy applies to. An empty matcher matches all episodes in the space. | | Dispatch per (grouping) | Controls how episodes batch into notifications: one per episode, one per defined group, or one digest for all. | | Frequency (throttling) | Controls how often the policy can notify for the same group. | -| Destinations | One or more workflows to invoke when all the above pass. | +| Destinations | One or more workflows to invoke when all conditions are met. | ## How policies apply to rules @@ -41,29 +41,31 @@ $$$how-action-policies-evaluated-v2$$$ When an episode is eligible for dispatch, the system processes each enabled, unsnoozed policy in order: -1. Suppression: Is the episode acknowledged, snoozed, or deactivated? If so, skip dispatch. -2. Matcher: Does the episode match the policy's KQL? If not, skip this policy. -3. Grouping: How should matching episodes batch into notification groups? -4. Throttle: Has a notification already gone out for this group recently? If so, wait. -5. Destinations: Send to the policy's workflow destinations. +1. **Suppression:** Is the episode acknowledged, snoozed, or deactivated? If so, skip dispatch. +2. **Matcher:** Does the episode match the policy's KQL? If not, skip this policy. +3. **Grouping:** How should matching episodes batch into notification groups? +4. **Throttle:** Has a notification already gone out for this group recently? If so, wait. +5. **Destinations:** Send to the policy's workflow destinations. The dispatcher runs on a short interval (around 10 seconds). Notifications don't arrive on the exact rule schedule; they follow the dispatcher's own cycle. ### Possible outcomes [possible-outcomes] +Each notification attempt results in one of the following outcomes. + | Outcome | What it means | | --- | --- | -| dispatched | A notification was sent. | -| throttled | Dispatch was suppressed due to throttle timing. | -| suppressed | The episode was suppressed before dispatch (acknowledged, snoozed, or deactivated). | -| unmatched | No policy matched this episode; no workflow ran. | -| error | Processing failed. Check {{kib}} logs. | +| `dispatched` | A notification was sent. | +| `throttled` | Dispatch was suppressed due to throttle timing. | +| `suppressed` | The episode was suppressed before dispatch (acknowledged, snoozed, or deactivated). | +| `unmatched` | No policy matched this episode; no workflow ran. | +| `error` | Processing failed. Check {{kib}} logs. | You can query these outcomes in Discover through the `.alert-actions` data stream. ## Why policies are separate from rules -Rules don't own policies. A rule can't say "notify team X when I fire." Instead, team X creates an action policy that uses a KQL matcher to pick up the right episodes. +Rules don't own policies. A rule can't say "notify team X when it fires." Instead, team X creates an action policy that uses a KQL matcher to pick up matching episodes. This design means: - One policy can cover episodes from many rules. diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md index 21132b37bd..ce3a462e02 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md @@ -5,83 +5,83 @@ applies_to: serverless: preview products: - id: kibana -description: "API values, Dispatch per and Frequency UI mappings, dispatch outcomes, and workflow destination shape for {{alerting-v2}} action policies." +description: "Grouping modes, throttle strategies, dispatch outcomes, and matcher field reference for {{alerting-v2}} action policies." --- # Action policy reference [action-policy-reference-v2] $$$action-policy-reference-v2$$$ -Condensed tables for matchers, grouping, throttling, and dispatch outcomes. For step-by-step policy creation and narrative guidance, refer to [Create and configure an action policy](create-configure-action-policy-v2.md). +Quick-reference tables for building and debugging action policies. Use the following tables to look up valid matcher fields, map grouping modes to frequency options, or check what a dispatch outcome means. For step-by-step guidance, refer to [Create and configure an action policy](create-configure-action-policy-v2.md). -## Matcher fields (typical KQL) [matcher-fields-typical-kql] +## Matcher fields [matcher-fields] -| Field | Example use | -|---|---| -| episode_status | `"active"`, `"inactive"`, `"pending"`, `"recovering"` | -| data.* | Payload from the rule, for example `data.severity`, `data.env`, `data.host.name` | -| rule_id or rule.id | Rule identifier, for example `"rule-001"` | -| rule.name, rule.labels | Rule metadata for scoping | +Use these fields in the **Matcher** expression to filter which episodes a policy applies to. Combine them with standard KQL operators, for example `data.severity: "critical" AND episode_status: "active"`. -## Notification grouping (API) [notification-grouping-api] +| Field | Description | Example | +|---|---|---| +| `episode_status` | Current lifecycle status of the episode. Accepted values: `active`, `inactive`, `pending`, `recovering`. | `episode_status: "active"` | +| `data.*` | Dynamic payload fields sent by the rule. Available fields depend on the rule type and configuration. | `data.severity: "critical"` or `data.host.name: "web-01"` | +| `rule.id` | Unique identifier for the rule that generated the episode. | `rule.id: "rule-001"` | +| `rule.name` | Display name of the rule. | `rule.name: "High CPU"` | +| `rule.labels` | Key-value labels attached to the rule. Use dot notation to target a specific label key. | `rule.labels.env: "production"` | -| Mode | When to use | -|---|---| -| per_episode (default) | Each episode is notified independently. | -| all | Batch **all** matching episodes into **one** notification for that policy evaluation. | -| per_field | Group by values of a `data.*` field so episodes sharing a key collapse into one notification per key. | +## Dispatch per options [notification-grouping] -## Dispatch per (UI) mapping +Controls how the policy batches matching episodes before sending a notification. -| UI option | Maps to | -|---|---| -| **Episode** | per_episode | -| **Group** | per_field | -| **Digest** | all | +| Option | Description | When to use | +|---|---|---| +| Episode | Each episode triggers its own notification independently. Default selection. | You need per-issue visibility and want to handle each problem separately. | +| Group | The policy bundles episodes that share the same value for a specified `data.*` field into one notification per unique value. | A rule produces many related episodes (for example, one per service or host) and you want to reduce noise by grouping them. | +| Digest | The policy combines all matching episodes into a single notification, regardless of what they have in common. | You want a single periodic summary of everything that matched, rather than individual alerts. | -## Throttle strategies (API) [throttle-strategies-api] +## Throttle strategies [throttle-strategies] -| Strategy | Behavior | -|---|---| -| on_status_change | Notify when **episode status changes** (for example active → inactive). | -| per_status_interval | At most **once per interval** for each **episode status** value. | -| time_interval | At most **once per interval**, regardless of status changes. | -| every_time | Eligible to fire on **every dispatcher evaluation** for matching episodes (subject to other policy limits). | +Throttle strategies control how often the policy fires for a given episode or group. The available strategies depend on the **Dispatch per** setting. Not all strategies are valid for all modes. -## Frequency (UI) when Episode (per_episode) [frequency-ui-when-episode-per_episode] +| Option | Description | When to use | +|---|---|---| +| On status change | Notifies when the episode status changes (for example, active → recovering). One notification per transition. | You only need to know when something breaks and when it's resolved. No reminders needed. | +| On status change + repeat at interval | Notifies on status change, then resends at a regular interval while the episode remains in the same status. | You want status change alerts plus periodic reminders that a problem is still unresolved. | +| At most once every… | Caps notifications to at most one per specified interval per episode or group, regardless of how often the rule runs. | You want to limit alert volume for noisy rules without missing new or ongoing issues. | +| Every evaluation | Notifies on every rule evaluation. Can be noisy. Use sparingly and only with infrequent rule schedules. | You need a full audit trail of every evaluation, or the rule runs infrequently enough that noise isn't a concern. | -| UI option | Typical API mapping | -|---|---| -| **On status change** | on_status_change | -| **On status change + repeat at interval** | per_status_interval (with **`interval`**) | -| **Every evaluation (no throttle)** | every_time | +### Frequency options for Episode [frequency-when-episode-per_episode] -## Frequency (UI) when Group (per_field) +Available frequency options when you set **Dispatch per** to **Episode**. -| UI option | Typical API mapping | -|---|---| -| **At most once every…** | time_interval (with **`interval`**) | -| **Every evaluation (no throttle)** | every_time | +| Option | Description | Example | +|---|---|---| +| On status change | Notifies once when the episode opens and once when it recovers. No reminders while it remains active. | A host goes down at 9:00am → one notification. Recovers at 11:00am → one notification. No notifications between them. | +| On status change + repeat at interval | Same as On status change, but also sends a reminder at a set interval while the episode is still active. | A host goes down at 9:00am → notification. With a 1h repeat: reminder at 10:00am, 11:00am. Recovers at 11:30am → notification. | +| Every evaluation | Fires on every rule evaluation, regardless of status. Can be noisy on frequent rule schedules. Avoid in production. | A rule running every 5 minutes with one active episode produces up to 288 notifications per day. | -## Frequency (UI) when Digest (all) +### Frequency options for Group -| UI option | Typical API mapping | -|---|---| -| **Every evaluation (no throttle)** | every_time | +Available frequency options when you set **Dispatch per** to **Group**. -## Dispatch outcomes +| Option | Description | Example | +|---|---|---| +| At most once every… | Caps how often each group can notify, regardless of how many episodes match or how often the rule runs. | 10 episodes share `data.host.name: "web-01"`. With a 1h cap, you get at most one notification per hour for that group. | +| Every evaluation | Fires on every rule evaluation for each unique group value. Still noisy on frequent rule schedules. | A rule running every 10 minutes with 5 unique host values produces up to 6 notifications per host per hour. | -| Outcome | Meaning | -|---|---| -| dispatched | Notifications were sent according to the policy. | -| throttled | Delivery was suppressed because throttling rules said to wait. | -| suppressed | The episode was suppressed before a notification went out, for example by an active suppression. | -| unmatched | No action policy matched this episode, so no workflow ran for it under these policies. | -| error | Processing failed. Check {{kib}} logs. | +### Frequency options for Digest + +Available frequency options when you set **Dispatch per** to **Digest**. + +| Option | Description | Example | +|---|---|---| +| Every evaluation | The only option for Digest. Fires on every rule run, bundling all matching episodes into one message. Pair with a longer rule schedule to avoid frequent summary messages. | A rule running every 30 minutes with 20 matching episodes produces one summary notification every 30 minutes containing all 20. | + +## Dispatch outcomes -## Workflow destination object (example) +The system records each notification attempt with one of the following outcomes. To investigate delivery issues, query the `.alert-actions` data stream in Discover and filter by the `outcome` field. -| Property | Description | +| Outcome | What happened | |---|---| -| type | Destination type; `workflow` in the current UI. | -| id | Workflow identifier (exact property names follow the API and UI version). | +| `dispatched` | The system sent the notification successfully. | +| `throttled` | The system skipped delivery because the throttle interval hadn't elapsed. This is expected behavior, not an error. | +| `suppressed` | Dispatch was blocked before the notification went out—the rule was acknowledged, snoozed, or deactivated. | +| `unmatched` | No action policy matched this episode, so no workflow ran. | +| `error` | An error occurred during processing. Check {{kib}} logs to identify the cause. | \ No newline at end of file diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md index 1364afc05e..127158b078 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md @@ -12,16 +12,16 @@ description: "Create {{alerting-v2}} action policies, configure matchers, Dispat $$$create-manage-action-policies-v2$$$ -An action policy controls which alert episodes trigger notifications, how episodes are grouped, how often notifications are sent, and where they are routed. Policies are global within a space. You create and manage them from the **Action policies** page, not from the rule form. +An action policy controls which alert episodes trigger notifications, how the policy groups episodes, how often it sends notifications, and where it routes them. Policies are global within a space. You create and manage them from the **Action policies** page, not from the rule form. -For API values, Dispatch per and Frequency mappings, throttle strategies, dispatch outcomes, and matcher field examples, refer to [Action policy reference](action-policy-reference-v2.md#action-policy-reference-v2). +For matcher fields, grouping modes, throttle strategies, frequency options, and dispatch outcomes, refer to [Action policy reference](action-policy-reference-v2.md). ## Create an action policy 1. Open **{{manage-app}} > V2 Alerting Preview > Action Policies**. -2. Click **Create policy**. -3. Fill in the policy fields described in [Policy fields](#policy-fields) below. -4. Click **Save**. The matcher expression is validated on save, so invalid KQL is rejected before dispatch runs. +2. Select **Create policy**. +3. Fill in the policy fields described in [Policy fields](#policy-fields). +4. Select **Save**. Kibana validates the matcher expression on save and rejects any KQL that isn't valid. ## Policy fields [policy-fields] @@ -31,7 +31,7 @@ $$$matcher-v2$$$ An optional KQL expression that filters which episodes this policy applies to. An empty matcher matches every episode in the space. -Use matchers to route different episodes to different policies — for example, one policy for `data.severity: "critical"` episodes routed to PagerDuty and another for warnings routed to Slack. Typical matcher fields and examples are listed in [Action policy reference](action-policy-reference-v2.md#matcher-fields-typical-kql). +Use matchers to route different episodes to different policies, for example, one policy for `data.severity: "critical"` episodes routed to PagerDuty and another for warnings routed to Slack. For available fields and examples, refer to [Matcher fields](action-policy-reference-v2.md#matcher-fields). ### Grouping and frequency [reduce-noise-grouping-v2] @@ -39,28 +39,29 @@ $$$reduce-noise-grouping-v2$$$ **Dispatch per** controls how episodes batch into notifications. **Frequency** controls how often the policy can notify for each batch. +:::{table} +:widths: 4-4-4 + | Dispatch per | What it does | Available Frequency options | |---|---|---| -| **Episode** | One notification per episode. | On status change; On status change + repeat at interval; Every evaluation | -| **Group** | Bundle episodes that share a field value. Specify **Group by** (for example `data.service.name` or `data.host.name`). | At most once every…; Every evaluation | +| **Episode** | One notification per episode. | - On status change
- On status change + repeat at interval
- Every evaluation | +| **Group** | Bundle episodes that share a field value. Specify **Group by** (for example `data.service.name` or `data.host.name`). | - At most once every…
- Every evaluation | | **Digest** | One notification for all matching episodes combined. | Every evaluation | -Episode works for most rules. Use Group when a rule produces many series-level episodes and you want to batch by a shared field. Use Digest for periodic summaries on longer schedules. +::: -For Frequency to API strategy mappings, refer to [Action policy reference](action-policy-reference-v2.md#frequency-ui-when-episode-per_episode). +For detailed descriptions, frequency options, and examples for each mode, refer to [Dispatch per options](action-policy-reference-v2.md#notification-grouping). ### Throttling [throttle-v2] $$$throttle-v2$$$ -Throttling limits how often the policy can fire for a given group. The interval resets from the last time the policy fired, so successive notifications stay at least `interval` apart. Set a duration such as `1h` or `30m`. - -For throttle strategy API values, refer to [Action policy reference](action-policy-reference-v2.md#throttle-strategies-api). +Throttling limits how often the policy can fire for a given group. The interval resets from the last time the policy fired, so successive notifications stay at least `interval` apart. Set a duration such as `1h` or `30m`. For available throttle strategies, refer to [Throttle strategies](action-policy-reference-v2.md#throttle-strategies). ### Destinations -One or more workflows to invoke when the policy matches. Use the **workflow search** field in the policy editor to find and attach workflows. Only workflow-type destinations are supported in the current UI. +One or more workflows to invoke when the policy matches. Use the search field to find and attach workflows. ### Snooze -An optional time window during which the policy does not dispatch. Useful for planned maintenance or quiet periods without disabling the policy entirely. +An optional time window during which the policy doesn't dispatch. Useful for planned maintenance or quiet periods without disabling the policy entirely. diff --git a/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md index d5ec4a08da..1b656de146 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md @@ -147,7 +147,7 @@ By completing this tutorial, you saw the core alerting v2 model in action end to - **Episodes follow a lifecycle.** When the error logs existed, both episodes moved to `active`. When you deleted the logs, both recovered and moved to `inactive` automatically, no manual intervention required. - **Rule events are the underlying record.** Every evaluation wrote documents to `.rule-events`, giving you a full queryable history of what the rule found and when. -## What's next +## Next steps - **Add notifications:** Create a workflow and action policy to route alerts when an episode opens or recovers. Refer to [Notifications](notifications-v2.md). - **Use your own data:** Swap `logs-tutorial` for a real data source and update the breach condition to match your use case. Refer to [Author rules](rules/author-rules-v2.md) to learn more. diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules-v2.md index a09163f4d0..12f4f65438 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules-v2.md @@ -16,7 +16,7 @@ A rule is where {{alerting-v2}} starts. It points {{kib}} at the data you care a $$$detection-and-notification-v2$$$ -On each run, a rule executes an {{esql}} query against your data. If the query finds a match. If the rule is in Detect mode, it writes a _signal_, a point-in-time record that the condition was met. In Alert mode, it also maintains an _alert episode_ for each matched series, tracking state from first breach through recovery. +On each run, a rule executes an {{esql}} query against your data. If the query finds a match and the rule is in Detect mode, it writes a _signal_, a point-in-time record that the condition was met. In Alert mode, it also maintains an _alert episode_ for each matched series, tracking state from first breach through recovery. When creating a rule, choose Detect mode to record and query results without alerting anyone, or Alert mode when you want to track issues and route notifications. @@ -34,7 +34,7 @@ This separation means you can build and test a rule without anyone getting paged % You can query this history in Discover, build dashboards from it, or write follow-on rules that read `.rule-events` as a data source. -## What's next +## Next steps - **[Author rules](rules/author-rules-v2.md):** Write the {{esql}} query, choose Detect or Alert mode, and structure your data sources and conditions. - **[View and manage rules](rules/view-manage-rules-v2.md):** Enable, disable, clone, delete, and bulk-manage rules from the rules list. diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md index 84019a5a5d..4e871019d2 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md @@ -17,7 +17,7 @@ Use this page to configure how a {{alerting-v2}} rule evaluates data and manages For writing the {{esql}} query, refer to [Author rules](author-rules-v2.md). For notification routing (matchers, grouping, throttling, maintenance windows), refer to [Notifications](../notifications-v2.md) and [Manage action policies](../notifications/manage-action-policies-v2.md). :::{note} -Action policies are not configured on the rule form. You create them separately in the **Action policies** area and use KQL matchers to scope them to the episodes you want to route. The rule form does not link to policies. +Action policies are not configured on the rule form. You create them separately in the **Action policies** area and use KQL matchers to scope them to the episodes you want to route. The rule builder form does not link to policies. ::: ## Rule mode [rule-mode-v2] diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md index 643c35d5c8..acfab66655 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md @@ -12,17 +12,15 @@ description: "Turn an {{esql}} query in Discover into a {{alerting-v2}} rule wit $$$create-rules-discover-v2$$$ -Create {{alerting-v2}} rules directly from Discover. When you build an {{esql}} query that surfaces interesting patterns, you can convert it into a rule without rewriting the query. For the full rule form including preview, alert mode settings, and YAML toggle, see [Create rules using the rule builder](create-rule-from-rule-builder-v2.md). +Create {{alerting-v2}} rules directly from Discover. When you build an {{esql}} query that surfaces interesting patterns, you can convert it into a rule without rewriting the query. For the full rule form including preview, alert mode settings, and YAML toggle, refer to [Create rules using the rule builder](create-rule-from-rule-builder-v2.md). -:::{admonition} What gets pre-populated -When you create a rule from Discover: +When you create a rule from Discover, the following is populated: - The full {{esql}} query from your current Discover session is placed into the rule's base query field. - The index pattern is inferred from the `FROM` command in your query. - The time range is converted into the rule's lookback window. -You can modify any of these values in the rule form before saving. -::: +You can modify any of these values before saving. ## Create a rule from Discover diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md index 044c9695bd..bdd17344ea 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md @@ -12,13 +12,7 @@ description: "Define {{alerting-v2}} rules as YAML for version control, infrastr $$$create-rules-yaml-v2$$$ -Define {{alerting-v2}} rules as YAML documents for version control, infrastructure-as-code workflows, and bulk provisioning. - -:::{note} -For the interactive form, refer to [Create rules using the rule builder](create-rule-from-rule-builder-v2.md). -::: - -For a complete list of every valid YAML field, refer to [YAML rule schema reference](yaml-rule-schema-reference-v2.md). +Define {{alerting-v2}} rules as YAML documents for version control, infrastructure-as-code workflows, and bulk provisioning. For a list of valid YAML fields, refer to [YAML rule schema reference](yaml-rule-schema-reference-v2.md). ## YAML rule structure diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md index 6c0293333d..57de44a0b8 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md @@ -29,7 +29,7 @@ Use **Edit** to modify the rule, or the actions menu to enable, disable, clone, Use **Disable** when you want the rule to stop running entirely until you re-enable it. This is different from snoozing, which suppresses notifications or quiets a series or policy without stopping rule evaluation. -- To snooze alert episodes or series, refer to [View, manage, and reference alerts](../alerts/view-manage-and-reference-alerts-v2.md#alert-actions-v2). +- To snooze alert episodes or series, refer to [View, manage, and reference alerts](../alerts/view-and-manage-alerts-v2.md#alert-actions-v2). - To snooze or stop an action policy, refer to [Manage action policies](../notifications/manage-action-policies-v2.md). -If you are unsure which to use, refer to [Validation checklist and noise controls](../troubleshooting-alerting-v2.md#reduce-noise-v2). +% If you are unsure which to use, refer to [Validation checklist and noise controls](../troubleshooting-alerting-v2.md#reduce-noise-v2). diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/yaml-rule-schema-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/yaml-rule-schema-reference-v2.md index e8224a8a3f..b1b3066ba3 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/yaml-rule-schema-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/yaml-rule-schema-reference-v2.md @@ -29,7 +29,7 @@ This page lists every valid field for a {{alerting-v2}} YAML rule definition. Fo |---|---|---|---| | `metadata.description` | string | Max 1,024 characters | Optional description of what the rule monitors. | | `metadata.owner` | string | Max 256 characters | Team or person responsible for the rule. | -| `metadata.tags` | array of strings | Max 100 tags | Labels for filtering and organisation. | +| `metadata.tags` | array of strings | Max 100 tags | Labels for filtering and organization. | ## Schedule fields diff --git a/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md index 97fdcbff5d..8206730860 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md @@ -57,7 +57,7 @@ $$$alerting-privileges-v2$$$ Saving a rule or action policy automatically creates an API key that is used to run it. The key inherits the privileges of the user who saved the object. If those privileges change over time, update the key from the rule or policy management UI. -## What's next +## Next steps When you're ready to go further, these can be done in any order: diff --git a/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md index 6d072c309b..71f5c641bd 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md @@ -124,7 +124,7 @@ Episodes exist but policies appear to ignore them: repeated `unmatched` outcomes 1. Confirm the rule and policy are listed under the **same space**. 2. Inspect the policy **matcher** text and compare to fields visible on a recent `.rule-events` document for the episode (`data.*`, `rule.*`, status fields). 3. Confirm the policy is **enabled** and not **snoozed**. -4. Review triage actions on the episode for **snooze** or **suppress** patterns; see [View, manage, and reference alerts](alerts/view-manage-and-reference-alerts-v2.md#alert-actions-v2). +4. Review triage actions on the episode for **snooze** or **suppress** patterns; see [View, manage, and reference alerts](alerts/view-and-manage-alerts-v2.md#alert-actions-v2). 5. Query `.alert-actions` for the episode id and read `action.type` values chronologically. ### Resolution @@ -232,7 +232,7 @@ Escalate with exported Discover queries for `.rule-events` and `.alert-actions`, - **[Configure a rule](rules/configure-a-rule-v2.md)**: Thresholds, no-data handling, rule-level grouping, and related evaluation settings. - **[Manage action policies](notifications/manage-action-policies-v2.md)**: Enablement, snooze, **{{maint-windows-cap}}**, and bulk policy actions that affect dispatch. - **[Notifications (Action Policies)](notifications-v2.md)**: Action policies: matchers, Dispatch per, Frequency, destinations, and dispatcher behavior. -- **[View, manage, and reference alerts](alerts/view-manage-and-reference-alerts-v2.md)**: Snooze, acknowledge, deactivate, tags, and anything persisted in **`.alert-actions`**. +- **[View, manage, and reference alerts](alerts/view-and-manage-alerts-v2.md)**: Snooze, acknowledge, deactivate, tags, and anything persisted in **`.alert-actions`**. This section is a decision table so you can match a situation to the right mechanism. Deep content lives on the pages above. @@ -250,9 +250,9 @@ If multiple rows in the table apply, refer to [Using them together](#using-them- | Recipients get too many separate messages for related episodes | [Notification grouping on action policies](notifications/create-configure-action-policy-v2.md#reduce-noise-grouping-v2) | Batches related alerts into fewer notifications | | Notifications should only go out for certain episodes by severity, labels, or payload fields | [Matchers](notifications/create-configure-action-policy-v2.md#matcher-v2) | Uses KQL on the action policy over episode and rule context (for example `rule.labels` and payload fields) so only matching episodes route to workflows | | Planned maintenance: evaluations should continue but on-call should not be paged | [{{maint-windows-cap}}](notifications/manage-action-policies-v2.md#maintenance-windows-v2) | Pauses policy dispatch for a scheduled window; rule evaluation continues | -| A temporary quiet period is needed for a series or episode without changing the rule | [View, manage, and reference alerts](alerts/view-manage-and-reference-alerts-v2.md#alert-actions-v2) (snooze, silence, acknowledge) | Snoozes or silences notifications. Acknowledge can also quiet an episode while work proceeds | +| A temporary quiet period is needed for a series or episode without changing the rule | [View, manage, and reference alerts](alerts/view-and-manage-alerts-v2.md#alert-actions-v2) (snooze, silence, acknowledge) | Snoozes or silences notifications. Acknowledge can also quiet an episode while work proceeds | | Many low-level alerts should roll up into one higher-level signal | [Author rules](rules/author-rules-v2.md) ({{esql}} over `.rule-events`) | Runs follow-on rules on `.rule-events` or related data to correlate and notify once | -| One alert episode should stop notifying and leave the triage queue while the rule keeps running | [View, manage, and reference alerts](alerts/view-manage-and-reference-alerts-v2.md#alert-actions-v2) (deactivate / resolve) | Deactivates that episode. The rule still evaluates and can detect new episodes for other series | +| One alert episode should stop notifying and leave the triage queue while the rule keeps running | [View, manage, and reference alerts](alerts/view-and-manage-alerts-v2.md#alert-actions-v2) (deactivate / resolve) | Deactivates that episode. The rule still evaluates and can detect new episodes for other series | Use the links in the table for procedures and reference detail on each control. diff --git a/explore-analyze/alerting/kibana-alerting-v2/workflows-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/workflows-alerting-v2.md index 19e0613a19..420103c0bd 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/workflows-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/workflows-alerting-v2.md @@ -14,9 +14,14 @@ $$$workflows-v2$$$ In {{alerting-v2}}, [Workflows](../../workflows.md) are how notifications get delivered. Action policies invoke workflows to send messages, trigger automation, or run other steps when an alert episode matches. + Before creating an action policy, make sure the workflows you want to use already exist in your space. Policies store references to workflow IDs, so a destination workflow must exist before you can select it. For workflow authoring and permissions, refer to [Workflows](../../workflows.md). -You can also attach workflows directly to a rule for automation that runs regardless of policy matching. +::::{note} +Only manual triggers are supported for workflows used with action policies. +:::: + +You can also attach workflows directly to a rule for automation that runs regardless of policy matching. To set up an action policy that references a workflow as a destination, refer to [Create and configure an action policy](notifications/create-configure-action-policy-v2.md). ## Runtime execution order [runtime-execution-order] @@ -34,12 +39,3 @@ Rule → Alert → Action Policy → Workflow → Notification The policy evaluates matchers and throttling before any workflow step runs, even though you created the workflow before the policy. That's why configuration order (workflow first, then policy, then rule) is the reverse of runtime order. -## Set up workflows and policies - -1. Configure a workflow in [Workflows](../../workflows.md). - - :::{note} - Only manual triggers are supported. - ::: - -2. Create an action policy under [Notifications](notifications-v2.md) that references the workflow as a destination. Refer to [Create and configure an action policy](notifications/create-configure-action-policy-v2.md). diff --git a/redirects.yml b/redirects.yml index a4b0b091c6..1ae52c4804 100644 --- a/redirects.yml +++ b/redirects.yml @@ -1,4 +1,5 @@ redirects: + 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md' # related to https://github.com/elastic/docs-content/pull/4251 'explore-analyze/visualize/supported-chart-types.md': 'explore-analyze/visualize/lens.md' 'solutions/elasticsearch-solution-project/full-text/search-with-synonyms.md': 'solutions/search/full-text/search-with-synonyms.md' From 5bc08ad92ef41553f0fa1f8d5c8c9ab0b3f0fcc0 Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Tue, 21 Apr 2026 23:41:56 -0400 Subject: [PATCH 27/40] fixed refs to renamed page --- redirects.yml | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/redirects.yml b/redirects.yml index 1ae52c4804..a48abf7984 100644 --- a/redirects.yml +++ b/redirects.yml @@ -1,5 +1,4 @@ redirects: - 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md' # related to https://github.com/elastic/docs-content/pull/4251 'explore-analyze/visualize/supported-chart-types.md': 'explore-analyze/visualize/lens.md' 'solutions/elasticsearch-solution-project/full-text/search-with-synonyms.md': 'solutions/search/full-text/search-with-synonyms.md' @@ -937,7 +936,7 @@ redirects: 'explore-analyze/alerting/kibana-alerting-v2/before-you-begin/alerting-privileges.md': to: 'explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md' 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts/view-alerts.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md' anchors: 'view-alerts-v2': 'manage-alerts-v2' @@ -1037,27 +1036,27 @@ redirects: anchors: 'maintenance-windows-v2': 'maintenance-windows-v2' 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/snooze-or-silence.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md' anchors: 'snooze-or-silence-v2': 'alert-actions-v2' 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts/snooze-or-silence.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md' anchors: 'snooze-or-silence-v2': 'alert-actions-v2' 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/deactivate-alerts.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md' anchors: 'deactivate-alerts-v2': 'alert-actions-v2' 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts/deactivate-alerts.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md' anchors: 'deactivate-alerts-v2': 'alert-actions-v2' 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-actions.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md' anchors: 'alert-actions-v2': 'alert-actions-v2' 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond/alert-episode-details.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md' anchors: 'alert-episode-details-v2': 'alert-episode-details-v2' 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise/rules-on-alerts.md': @@ -1135,11 +1134,11 @@ redirects: anchors: 'manage-rules-v2': 'manage-rules-v2' 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md' anchors: 'manage-alerts-v2': 'manage-alerts-v2' 'explore-analyze/alerting/kibana-alerting-v2/manage-alerts/investigate-respond.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md' anchors: 'investigate-respond-v2': 'investigate-respond-v2' 'alert-actions-v2': 'alert-actions-v2' @@ -1202,11 +1201,11 @@ redirects: anchors: 'alert-lifecycle-v2': 'alert-lifecycle-v2' 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-alerts.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md' anchors: 'manage-alerts-v2': 'manage-alerts-v2' 'explore-analyze/alerting/kibana-alerting-v2/alerts/investigate-respond.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' + to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md' anchors: 'investigate-respond-v2': 'investigate-respond-v2' 'alert-actions-v2': 'alert-actions-v2' @@ -1295,7 +1294,7 @@ redirects: 'explore-analyze/alerting/kibana-alerting-v2/rules-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/rules-v2.md' 'explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md' 'explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md' - 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md' 'explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md' 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md' 'explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies-v2.md' From 8ffd88fc2a1c0da4ff7b9b357014f64c0d45aa68 Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Tue, 21 Apr 2026 23:45:14 -0400 Subject: [PATCH 28/40] updates toc --- explore-analyze/toc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/explore-analyze/toc.yml b/explore-analyze/toc.yml index 3fbe9ff9a9..b262a72ba0 100644 --- a/explore-analyze/toc.yml +++ b/explore-analyze/toc.yml @@ -410,7 +410,7 @@ toc: - file: alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md - file: alerting/kibana-alerting-v2/alerts-v2.md children: - - file: alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md + - file: alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md - file: alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md - file: alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md - file: alerting/kibana-alerting-v2/workflows-alerting-v2.md From a56835adea1c6a98bec3e36441d8c7fd1119dcef Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Tue, 21 Apr 2026 23:48:50 -0400 Subject: [PATCH 29/40] remove old file --- .../view-manage-and-reference-alerts-v2.md | 84 ------------------- 1 file changed, 84 deletions(-) delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md deleted file mode 100644 index 052bc1f0a7..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -navigation_title: View and manage alerts -applies_to: - stack: unavailable - serverless: preview -products: - - id: kibana -description: "Open the {{alerting-v2}} alert episodes table, triage actions, and episode details." ---- - -# View and manage alerts [manage-alerts-v2] - -$$$manage-alerts-v2$$$ - -The **Alerts** page is the main place to view {{alerting-v2}} episodes, filter and sort them, and start triage. Open it from **{{manage-app}} > V2 Alerting Preview** > **Alerts**. - -## Filter and search - -- **Rule:** Limit rows to one or more rules. -- **Status:** Limit by episode lifecycle state (active, recovered, pending, inactive). -- **Tags:** Limit to episodes whose last tag set matches any selected tag (OR logic). Tag choices come from tag actions in the selected time range. -- **Search:** Text search runs over alert event document fields. Combine with **Rule** or **Tags** filters when looking for a specific rule or label. - -Narrow the time range when filters return too many rows or when tag options need refreshing. - -## Episode actions - -From any row in the table you can: - -- **Acknowledge / Unacknowledge:** Applies to the individual episode. -- **Snooze / Unsnooze:** Applies to the group (`group_hash`), so all rows sharing that group are affected. -- **Resolve / Unresolve:** Applies to the group. The episode shows as inactive in the UI when resolved, even if the underlying lifecycle data has not yet caught up. -- **Edit tags:** Opens a flyout to add tags; persisted as `tag` actions in `.alert-actions`. - -The same actions are available from the episode detail page. - -## Open in Discover - -Select **Discover** on a row to investigate source data. Discover opens with the rule {{esql}} query and a short time window around the episode so you can inspect matching documents in context. - -For ad hoc analysis over `.rule-events` and `.alert-actions` with copy-paste {{esql}} examples, refer to [Query alerts and signals in Discover](query-alerts-and-signals-in-discover-v2.md). - -## Episode detail page [alert-episode-details-v2] - -$$$alert-episode-details-v2$$$ -$$$investigate-respond-v2$$$ - -Open an episode's detail page by selecting its name or ID from the table row. The detail page shows: - -- **Lifecycle:** A state-over-time visualization (pending, active, recovering, inactive) driven by events in `.rule-events`. -- **Actions and metadata:** Tags and action-driven status (acknowledge, snooze, resolve) consistent with the episodes table. -- **Related episodes:** Other episodes on the same rule or series. -- **Grouping:** When the rule uses grouping, the detail view surfaces the field values that identify the series. - -## Alert actions [alert-actions-v2] - -$$$alert-actions-v2$$$ - -When you take an action, {{kib}} writes a document to the `.alert-actions` data stream. You can query these documents in Discover for auditing and metrics such as mean time to acknowledge (MTTA). - -### Episode scope versus group scope - -| Action | Scope | -|---|---| -| Acknowledge / Unacknowledge | Episode | -| Snooze / Unsnooze | Group (`group_hash`) | -| Resolve / Unresolve | Group | -| Edit tags | Episode | - -### Action types in storage - -The `action_type` field identifies the operation in `.alert-actions` documents: - -| action_type | Meaning | -|---|---| -| ack / unack | Episode acknowledged or unacknowledged. | -| snooze / unsnooze | Notifications snoozed or cleared for the group. | -| deactivate / activate | Group resolved or reopened (UI labels: Resolve / Unresolve). | -| tag | Tags applied to an episode. | -| suppress | Suppression recorded for the episode or dispatch pipeline. | -| fire | Notification or workflow dispatch recorded. | -| unmatched | No action policy matched, so no workflow ran. | - -For a full field list and state definitions, refer to [Alert states and fields reference](alert-states-and-fields-reference-v2.md#alert-states-reference-v2). From 89f953aa0763c3ad728d524bb43434a77aa1d1bc Mon Sep 17 00:00:00 2001 From: Nastasha Solomon <79124755+nastasha-solomon@users.noreply.github.com> Date: Sat, 25 Apr 2026 18:31:17 -0400 Subject: [PATCH 30/40] Adds more to dispatcher docs (#6114) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Adds more to dispatcher docs. Also adds annotations for areas that will need additional verification and cleans up redirects file. ## Generative AI disclosure 1. Did you use a generative AI (GenAI) tool to assist in creating this contribution? - [x] Yes - [ ] No Cursor + Claude --- .../alerting-v2-privileges.md | 30 +- .../alerting/kibana-alerting-v2/alerts-v2.md | 8 +- .../alert-states-and-fields-reference-v2.md | 33 +- ...query-alerts-and-signals-in-discover-v2.md | 127 +------- .../alerts/view-and-manage-alerts-v2.md | 36 ++- .../kibana-alerting-v2/notifications-v2.md | 2 +- .../action-policy-reference-v2.md | 19 +- .../create-configure-action-policy-v2.md | 11 +- .../quick-start-alerting-v2.md | 4 + .../alerting/kibana-alerting-v2/rules-v2.md | 2 +- .../rules/author-rules-v2.md | 14 +- .../rules/configure-a-rule-v2.md | 17 +- .../rules/create-rule-from-discover-v2.md | 19 +- .../rules/create-rule-from-rule-builder-v2.md | 12 +- .../rules/create-rule-with-yaml-v2.md | 79 +---- .../rules/esql-query-patterns-v2.md | 156 ++++++++++ .../rules/rule-event-field-reference-v2.md | 11 + .../rules/view-manage-rules-v2.md | 4 +- .../rules/yaml-rule-schema-reference-v2.md | 11 + .../kibana-alerting-v2/setup-alerting-v2.md | 12 +- .../troubleshooting-alerting-v2.md | 284 ------------------ .../workflows-alerting-v2.md | 7 +- explore-analyze/toc.yml | 2 +- redirects.yml | 65 +--- 24 files changed, 310 insertions(+), 655 deletions(-) create mode 100644 explore-analyze/alerting/kibana-alerting-v2/rules/esql-query-patterns-v2.md delete mode 100644 explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerting-v2-privileges.md b/explore-analyze/alerting/kibana-alerting-v2/alerting-v2-privileges.md index 015431711e..870922414e 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerting-v2-privileges.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerting-v2-privileges.md @@ -13,40 +13,20 @@ description: "Privilege requirements for {{alerting-v2}}: what {{kib}} feature a $$$alerting-privileges-v2$$$ -This page describes the access requirements for {{alerting-v2}}, including {{kib}} feature privileges, {{es}} index privileges, and how rules and policies inherit those privileges through API keys. - -:::{important} -Rules and action policies run in the background using the API key of the user who last saved them. That key inherits the saving user's privileges at save time. If those privileges are later reduced, rule or policy execution reflects the new limits. Ensure that only users with appropriate access save rules and policies. -::: +[CONTENT NEEDED: UI. The full privilege structure (names, granularity, and which actions each level permits) has not yet been finalized. Fill in the confirmed privilege requirements before publishing.] ## Manage rules [alerting-manage-rules-privileges] -{{kib}} privileges -: `{{rules-ui}} V2`: `All` to create, edit, enable, disable, and delete rules. `Read` to view rules and their details. - -{{es}} index privileges -: `read` on every index the rule's {{esql}} query reads (for example `logs-*`, `metrics-*`). The rule's API key must have the same read access. +[CONTENT NEEDED] ## Manage action policies [action-policy-management] -{{kib}} privileges -: `{{rules-ui}} V2`: `All` to create and edit action policies. `Read` to view policies. - -Workflow attachment -: To attach a workflow as a policy destination, you need permission to access that workflow in the space. This prevents users from routing notifications through high-privilege workflows they don't otherwise have access to. +[CONTENT NEEDED] ## Manage alerts [alerting-manage-alerts-privileges] -{{kib}} privileges -: `{{rules-ui}} V2`: `Read` or higher to view alert episodes and their details. `All` to use triage actions (acknowledge, snooze, resolve, tag). - -{{es}} index privileges -: `read` on `.rule-events` to view alert event data. `write` on `.alert-actions` to persist triage actions such as acknowledge, snooze, and tag. +[CONTENT NEEDED] ## Query alert data in Discover [alerting-discover-privileges] -{{kib}} privileges -: Standard Discover access. No additional {{alerting-v2}}-specific privilege is required. - -{{es}} index privileges -: `read` on `.rule-events` and `.alert-actions`. Anyone with this access can query alert history and triage records in Discover or build dashboards from them. +[CONTENT NEEDED] diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md index 133aea8be3..d788d07bf1 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md @@ -10,9 +10,9 @@ description: "Alert episodes in {{alerting-v2}}: lifecycle states, series and ep # {{alerting-v2}} alerts -When a rule runs in Alert mode, it maintains _alert episodes_, which are ongoing records of an issue from first breach through recovery. This is what you triage on the **Alerts** page. +When a rule fires repeatedly on the same problem, a flat list of events doesn't tell you when the issue started, whether it's still happening, or how long it's been going on. Alert episodes fill that gap. Each episode is a persistent record of one issue on one series, from first breach through recovery, with every evaluation appended to the same history. Nothing is overwritten. -An episode isn't a single event. It's the full story of one issue on one series. It covers when the condition first triggered, what state it's in right now, and when it recovered. Each rule evaluation appends to that history. Nothing is overwritten. +[CONTENT NEEDED for M2: UI. Once the navigation and page name have been confirmed, add instructions for opening the Alerts page.] ## Alert lifecycle [alert-lifecycle-v2] @@ -49,6 +49,8 @@ Your rule monitors services. Each service it tracks has its own series, one for Think of it like a patient's medical file. The file exists as long as the patient is in the system. Individual health incidents come and go, but the file persists. +For the fields that identify a series in alert event documents, refer to [Rule event and field reference](rules/rule-event-field-reference-v2.md#rule-reference-v2). + ### How series and episodes relate An episode lives inside a series. A series can contain many episodes over its lifetime, one for each time that service had a problem. @@ -97,7 +99,7 @@ A rule in Detect mode only writes signals. It never opens episodes, so action po Alert events are stored in `.rule-events`. Triage actions (acknowledge, snooze, resolve) are stored in `.alert-actions`. Both are queryable in Discover. -The **Alerts** page (**{{manage-app}} > V2 Alerting Preview > Alerts**) shows the current state of every episode in your space, filterable by rule, status, and tags. +[CONTENT NEEDED for M2: UI. "V2 Alerting Preview" is a development-phase navigation label. Once the navigation and page name have been confirmed, add instructions for opening the Alerts page.] ### Data stream storage and retention diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md index 4fed70f530..4b84c59bcb 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md @@ -20,10 +20,17 @@ The `episode.status` field appears on documents with `type: alert` in `.rule-eve | Value | Description | |---|---| -| inactive | Episode not in an active breach state in the lifecycle model. | -| pending | Condition met but activation thresholds not yet satisfied. | -| active | Episode is actively breaching per rule logic. | -| recovering | Condition clearing but recovery thresholds not yet satisfied. | +| `inactive` | Episode not in an active breach state in the lifecycle model. | +| `pending` | Condition met but activation thresholds not yet satisfied. | +| `active` | Episode is actively breaching per rule logic. | +| `recovering` | Condition clearing but recovery thresholds not yet satisfied. | + +[CONTENT NEEDED for M2: M2 adds two first-class severity fields to the episode document: + +- `episode.severity` - The severity from the most recent rule event (current state). Updated each evaluation. +- `episode.severity_max` - The highest severity seen over the episode's lifetime. Never decreases; enables "peaked at CRITICAL" display in the episode detail UI. + +Add a new table or rows for these fields once M2 ships. The episode detail UI is also expected to change to surface these fields directly. Several M2 details are still open: the enforced value set (or lack thereof), whether de-escalation triggers policy re-evaluation, and whether manual override is supported. Do not document specifics until resolved.] ## Rule event status @@ -31,18 +38,18 @@ The `status` field appears on all documents in `.rule-events`, for both `type: s | Value | Description | |---|---| -| breached | Condition met for this evaluation row. | -| recovered | Recovery path satisfied for this evaluation row. | -| no_data | No-data handling produced a no-data style outcome for this evaluation. | - +| `breached` | Condition met for this evaluation row. | +| `recovered` | Recovery path satisfied for this evaluation row. | +| `no_data` | No-data handling produced a no-data style outcome for this evaluation. | +` ## Alert action document fields When a user or the system records an action on an alert episode, {{kib}} writes a document to `.alert-actions`. Use this stream for triage history, operational metrics such as mean time to acknowledge (MTTA), and auditing. It does not store what your rule query returned on each run — that output is in `.rule-events`. | Field | Type | Description | |---|---|---| -| @timestamp | date | When the action was recorded. | -| episode.id | keyword | Target episode. | -| rule.id | keyword | Rule that owns the episode. | -| action.type | keyword | The action type, for example:
- `acknowledge`: User acknowledged the alert.
- `snooze`: Notifications snoozed for a period.
- `tag`: Tag applied to the alert.
- `fire`: Notification or escalation fired for the episode.
- `unmatched`: No action policy matched the episode, so no workflow ran for it under these policies.

For the full set of action types and UI behavior, refer to [Alert actions](view-and-manage-alerts-v2.md#alert-actions-v2). | -| episode.status_count | long | Count of consecutive evaluations in the current `episode.status`. Only set when `episode.status` is `pending` or `recovering`.
For example, if the episode stays `pending` for three rule evaluations in a row, the value is `3`. | +| `@timestamp` | date | When the action was recorded. | +| `episode.id` | keyword | Target episode. | +| `rule.id` | keyword | Rule that owns the episode. | +| `action.type` | keyword | The action type, for example:
- `acknowledge`: User acknowledged the alert.
- `snooze`: Notifications snoozed for a period.
- `tag`: Tag applied to the alert.
- `fire`: Notification or escalation fired for the episode.
- `unmatched`: No action policy matched the episode, so no workflow ran for it under these policies.

For the full set of action types and UI behavior, refer to [Alert actions](view-and-manage-alerts-v2.md#alert-actions-v2). | +| `episode.status_count` | long | Count of consecutive evaluations in the current `episode.status`. Only set when `episode.status` is `pending` or `recovering`.
For example, if the episode stays `pending` for three rule evaluations in a row, the value is `3`. | diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md index 6162067770..8a76e40d47 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md @@ -12,130 +12,15 @@ description: "Use {{esql}} in Discover against `.rule-events` and `.alert-action $$$explore-alerts-discover-v2$$$ -{{alerting-v2}} stores rule output in `.rule-events` and user or system actions in `.alert-actions`. Both are queryable with {{esql}} in Discover. Open Discover, select {{esql}}, paste a query, then adjust the time range and placeholders (`YOUR_RULE_ID`, `YOUR_GROUP_HASH`) to match your environment. +Discover gives you direct {{esql}} access to everything {{alerting-v2}} records, including rule evaluation history, episode progressions, triage actions, and operational metrics like mean time to acknowledge. -For field names, types, and episode fields, refer to [Alert states and fields reference](alert-states-and-fields-reference-v2.md#alert-states-reference-v2) and [Rule event and field reference](../rules/rule-event-field-reference-v2.md#rule-reference-v2). For triage in the product UI, refer to [View, manage, and reference alerts](view-and-manage-alerts-v2.md). - -## Rule events - -Each write to `.rule-events` is one document. The `type` field is either `signal` (Detect mode, no `episode.*` fields) or `alert` (Alert mode, with episode lifecycle fields). Fields your {{esql}} rule selected are stored under `data`. Confirm field names and types there until you know the full shape of your rule output. - -### Example: Recent events - -```esql -// ═══════════════════════════════════════════════════════════════ -// LATEST ROWS - Sample across rules, raw timeline -// Why: Inspect recent runs without aggregating. Spot spikes or odd episode state -// ═══════════════════════════════════════════════════════════════ -FROM .rule-events -| WHERE @timestamp > NOW() - 1 day -| KEEP @timestamp, rule.id, status, type, episode.status -| SORT @timestamp DESC -| LIMIT 100 -``` - -### Example: Event counts by status - -```esql -// ═══════════════════════════════════════════════════════════════ -// STATUS MIX - How many events per status over the week -// Why: Health check. Check whether no_data dominates for data or query issues -// ═══════════════════════════════════════════════════════════════ -FROM .rule-events -| WHERE @timestamp > NOW() - 7 days -| STATS event_count = COUNT(*) BY status -| SORT event_count DESC -``` - -### Example: Hourly event volume - -```esql -// ═══════════════════════════════════════════════════════════════ -// THROUGHPUT - Event counts per clock hour -// Why: Compare quiet versus busy windows. Correlate with schedules or incidents -// ═══════════════════════════════════════════════════════════════ -FROM .rule-events -| WHERE @timestamp > NOW() - 24 hours -| STATS c = COUNT(*) BY hour = DATE_TRUNC(1 hour, @timestamp) -| SORT hour ASC -``` - -### Example: Events for a specific rule - -Replace `YOUR_RULE_ID` with the ID from the rule's details or API. +The Alerts UI shows current episode state. Discover lets you go further: ask arbitrary questions, spot trends over time, replay how a specific incident unfolded, or correlate alert history with other data in your environment. -```esql -// ═══════════════════════════════════════════════════════════════ -// SINGLE RULE - All events for one rule id, replace YOUR_RULE_ID -// Why: Validate the data field payload. Isolate volume for one definition -// ═══════════════════════════════════════════════════════════════ -FROM .rule-events -| WHERE rule.id == "YOUR_RULE_ID" - AND @timestamp > NOW() - 7 days -| KEEP @timestamp, group_hash, status, type, data -| SORT @timestamp DESC -``` +To use this page, open Discover, select {{esql}}, paste a query from the examples below, then adjust the time range and placeholders (`YOUR_RULE_ID`, `YOUR_GROUP_HASH`) to match your environment. -### Example: Timeline for one alert series +[CONTENT NEEDED: The queries on this page use `.rule-events` and `.alert-actions` directly. Confirm whether these will remain the intended query surface, or whether users should query an ES|QL view or a stable user-facing data stream instead. Update all examples accordingly before publishing.] -Replace `YOUR_GROUP_HASH` with the value from an event or the rule details. +[CONTENT NEEDED for M2: Review and expand the query examples below once M2 field renames (`group_hash` → `series.key`, new `series.tracked_by`, `episode.severity`, `episode.severity_max`) are finalized. Add examples that take advantage of the new first-class severity and series fields.] -```esql -// ═══════════════════════════════════════════════════════════════ -// ONE SERIES - Timeline for a single group_hash, replace YOUR_GROUP_HASH -// Why: Replay how an episode progressed with the same series key as in the rule and alert UI -// ═══════════════════════════════════════════════════════════════ -FROM .rule-events -| WHERE group_hash == "YOUR_GROUP_HASH" - AND @timestamp > NOW() - 7 days -| KEEP @timestamp, status, episode.id, episode.status -| SORT @timestamp ASC -``` - -### Example: Lifecycle timeline for one episode - -Replace `YOUR_EPISODE_ID` with the `episode.id` value from an alert event or the alert details UI. This query returns one row per rule evaluation, ordered chronologically, so you can trace exactly how the episode moved through its lifecycle from start to finish. - -```esql -// ═══════════════════════════════════════════════════════════════ -// ONE EPISODE - Full lifecycle timeline by episode.id, replace YOUR_EPISODE_ID -// Why: Replay how an episode progressed through pending → active → recovering → inactive -// ═══════════════════════════════════════════════════════════════ -FROM .rule-events -| WHERE episode.id == "YOUR_EPISODE_ID" -| KEEP @timestamp, episode.status, episode.status_count, status -| SORT @timestamp ASC -``` - -### Example: Daily breach trend - -```esql -// ═══════════════════════════════════════════════════════════════ -// BREACH TREND - Daily breach counts, condition met rows only -// Why: Day-over-day trend, noisy rules, validate a change after deploy -// ═══════════════════════════════════════════════════════════════ -FROM .rule-events -| WHERE status == "breached" AND @timestamp > NOW() - 7 days -| STATS breaches = COUNT(*) BY day = DATE_TRUNC(1 day, @timestamp) -| SORT day ASC -``` - -## Alert actions - -Action records in `.alert-actions` capture what people did to episodes: acknowledge, snooze, resolve, and tag. Use them for operational metrics such as mean time to acknowledge (MTTA). - -### Example: Acknowledgments for MTTA - -To calculate MTTA, pair acknowledgment timestamps with episode start or first `fire` timestamps from a second query. +For field names, types, and episode fields, refer to [Alert states and fields reference](alert-states-and-fields-reference-v2.md#alert-states-reference-v2) and [Rule event and field reference](../rules/rule-event-field-reference-v2.md#rule-reference-v2). For triage in the product UI, refer to [View, manage, and reference alerts](view-and-manage-alerts-v2.md). -```esql -// ═══════════════════════════════════════════════════════════════ -// ACKNOWLEDGMENTS - Rows users acknowledged, MTTA anchor -// Why: Pair with fire or episode start in a follow-up query for your organization's MTTA definition -// ═══════════════════════════════════════════════════════════════ -FROM .alert-actions -| WHERE action.type == "acknowledge" - AND @timestamp > NOW() - 30 days -| KEEP @timestamp, episode.id, rule.id, action.type -| SORT @timestamp DESC -``` diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md index 9205d77771..6e002a05df 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md @@ -12,7 +12,9 @@ description: "Open the {{alerting-v2}} alert episodes table, triage actions, and $$$manage-alerts-v2$$$ -The **Alerts** page is the main place to view {{alerting-v2}} episodes, filter and sort them, and start triage. Open it from **{{manage-app}} > V2 Alerting Preview** > **Alerts**. +When a rule detects a problem, use the Alerts UI to understand what's happening and decide what to do about it. From here you can examine alert episodes, use filters to find what needs attention, triage alerts, and more. This is the operational surface for working through alerts day to day. + +[CONTENT NEEDED for M2: UI. "V2 Alerting Preview" is a development-phase navigation label. Once the navigation and page name have been confirmed, add instructions for opening the Alerts page.] ## Filter and search @@ -56,29 +58,31 @@ Open an episode's detail page by selecting its name or ID from the table row. Th $$$alert-actions-v2$$$ -When you take an action, {{kib}} writes a document to the `.alert-actions` data stream. You can query these documents in Discover for auditing and metrics such as mean time to acknowledge (MTTA). +When you take an action, {{kib}} writes a document to the `.alert-actions` data stream. You can query these documents in Discover for auditing and metrics such as mean time to acknowledge (MTTA). For a full field list and state definitions, refer to [Alert states and fields reference](alert-states-and-fields-reference-v2.md#alert-states-reference-v2). ### Episode scope versus group scope +Some actions apply only to the specific episode you acted on. Others apply to every episode in the same group — meaning all episodes that share the same rule and series. This matters when a rule tracks multiple services or hosts: snoozing one episode silences the whole group, not just that service. + | Action | Scope | |---|---| | Acknowledge / Unacknowledge | Episode | -| Snooze / Unsnooze | Group (`group_hash`) | +| Snooze / Unsnooze | Group | | Resolve / Unresolve | Group | | Edit tags | Episode | -### Action types in storage +## How suppression works [suppression-mechanics-v2] -The `action_type` field identifies the operation in `.alert-actions` documents: +$$$suppression-mechanics-v2$$$ -| action_type | Meaning | -|---|---| -| ack / unack | Episode acknowledged or unacknowledged. | -| snooze / unsnooze | Notifications snoozed or cleared for the group. | -| deactivate / activate | Group resolved or reopened (UI labels: Resolve / Unresolve). | -| tag | Tags applied to an episode. | -| suppress | Suppression recorded for the episode or dispatch pipeline. | -| fire | Notification or workflow dispatch recorded. | -| unmatched | No action policy matched, so no workflow ran. | - -For a full field list and state definitions, refer to [Alert states and fields reference](alert-states-and-fields-reference-v2.md#alert-states-reference-v2). +Suppression controls whether a matched alert episode actually sends a notification. The dispatcher evaluates suppression before any action policy matcher runs, so a suppressed episode never reaches routing, grouping, or throttle checks. Mechanically, each suppression option is stored as a separate document type in `.alert-actions`, and the dispatcher runs a targeted query scoped to only the relevant `(rule_id, group_hash)` pairs from the current evaluation — rather than re-reading the entire `.rule-events` index — to keep dispatch evaluation efficient at high episode volumes. + +There are three suppression options, each with a different scope: + +| Option | Scope | When to use | +|---|---|---| +| Acknowledge | Per episode | You're actively working on a specific breach and want to silence notifications for it. Unacknowledging clears suppression. | +| Deactivate | Per episode | Marks the episode as inactive and stops notifications for it. Unlike acknowledge, this closes the episode rather than silencing it while leaving it active. Use when you want to manually close a specific episode, For example, when you've addressed the issue but the rule hasn't recovered automatically. | +| Snooze | Per series (all episodes) | You want to quiet an entire alert series for a defined period. For example, during a known noisy window for a host. Expires automatically. + +[CONTENT NEEDED for M2: M2 makes severity a first-class episode property and leaves open the question of whether a severity *decrease* (de-escalation) should trigger a notification. If de-escalation notifications are added, they will require a new suppression decision point: a snoozed or acknowledged episode that de-escalates may need different suppression behavior than one that escalates. Monitor the M2 severity design and update this section if new suppression rules are added around severity changes.] diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md index 084680018a..f6ac1ee1d7 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md @@ -14,7 +14,7 @@ After a rule produces alert episodes, action policies decide what to do about th This page explains how action policies work. For creating and configuring them step by step, refer to [Create and configure an action policy](notifications/create-configure-action-policy-v2.md). -## What's an action policy [action-policies-v2] +## What is an action policy [action-policies-v2] $$$action-policies-v2$$$ diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md index ce3a462e02..f8f87b9e8a 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md @@ -26,6 +26,15 @@ Use these fields in the **Matcher** expression to filter which episodes a policy | `rule.name` | Display name of the rule. | `rule.name: "High CPU"` | | `rule.labels` | Key-value labels attached to the rule. Use dot notation to target a specific label key. | `rule.labels.env: "production"` | +[CONTENT NEEDED for M2: M2 adds two first-class episode-level severity fields that will be directly matchable in KQL: + +- `episode.severity` — the current severity of the episode (most recent evaluation). Enables matching like `episode.severity: "CRITICAL"`. +- `episode.severity_max` — the highest severity seen over the episode's lifetime. Enables matching like `episode.severity_max: "CRITICAL"` to catch episodes that were once critical even if they have since de-escalated. + +Add both fields to this table with examples. Update the introductory sentence to include them. Also remove or deprecate the `data.severity` example once `episode.severity` is the preferred approach, otherwise users will get conflicting guidance about which field to use for severity matching. + +There is also an open M2 question about whether a severity change mid-episode (de-escalation or escalation) triggers policy re-evaluation. If it does, document the re-evaluation behavior in the throttle strategies section below, since it interacts with throttling.] + ## Dispatch per options [notification-grouping] Controls how the policy batches matching episodes before sending a notification. @@ -43,17 +52,19 @@ Throttle strategies control how often the policy fires for a given episode or gr | Option | Description | When to use | |---|---|---| | On status change | Notifies when the episode status changes (for example, active → recovering). One notification per transition. | You only need to know when something breaks and when it's resolved. No reminders needed. | -| On status change + repeat at interval | Notifies on status change, then resends at a regular interval while the episode remains in the same status. | You want status change alerts plus periodic reminders that a problem is still unresolved. | -| At most once every… | Caps notifications to at most one per specified interval per episode or group, regardless of how often the rule runs. | You want to limit alert volume for noisy rules without missing new or ongoing issues. | +| On status change + repeat at interval | Notifies on status change, then resends notifications at a regular interval while the episode remains in the same status. | You want status change alerts plus periodic notifications that a problem is still unresolved, in case it has been missed or deprioritized. | +| At most once every… | Caps notifications at one per episode or group within the chosen interval, regardless of rule frequency. | You want to limit alert volume for noisy rules without missing new or ongoing issues. | | Every evaluation | Notifies on every rule evaluation. Can be noisy. Use sparingly and only with infrequent rule schedules. | You need a full audit trail of every evaluation, or the rule runs infrequently enough that noise isn't a concern. | +[CONTENT NEEDED for M2: An open M2 question is whether a severity change mid-episode (escalation or de-escalation of `episode.severity`) triggers policy re-evaluation independently of episode status changes. If it does, this table needs a new strategy option or a note explaining the interaction between severity changes and the "On status change" option. Confirm the M2 decision before updating.] + ### Frequency options for Episode [frequency-when-episode-per_episode] Available frequency options when you set **Dispatch per** to **Episode**. | Option | Description | Example | |---|---|---| -| On status change | Notifies once when the episode opens and once when it recovers. No reminders while it remains active. | A host goes down at 9:00am → one notification. Recovers at 11:00am → one notification. No notifications between them. | +| On status change | Notifies once when the episode opens and once when it recovers. No repeat notifications while it remains active. Best for when you trust your ticketing or incident workflow to track ongoing issues | A host goes down at 9:00am → one notification. Recovers at 11:00am → one notification. No notifications between them. | | On status change + repeat at interval | Same as On status change, but also sends a reminder at a set interval while the episode is still active. | A host goes down at 9:00am → notification. With a 1h repeat: reminder at 10:00am, 11:00am. Recovers at 11:30am → notification. | | Every evaluation | Fires on every rule evaluation, regardless of status. Can be noisy on frequent rule schedules. Avoid in production. | A rule running every 5 minutes with one active episode produces up to 288 notifications per day. | @@ -63,7 +74,7 @@ Available frequency options when you set **Dispatch per** to **Group**. | Option | Description | Example | |---|---|---| -| At most once every… | Caps how often each group can notify, regardless of how many episodes match or how often the rule runs. | 10 episodes share `data.host.name: "web-01"`. With a 1h cap, you get at most one notification per hour for that group. | +| At most once every… | Limits how often each group can notify, regardless of how many episodes match or how often the rule runs. | 10 episodes share `data.host.name: "web-01"`. With a 1h limit, you get at most one notification per hour for that group. | | Every evaluation | Fires on every rule evaluation for each unique group value. Still noisy on frequent rule schedules. | A rule running every 10 minutes with 5 unique host values produces up to 6 notifications per host per hour. | ### Frequency options for Digest diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md index 127158b078..575b7bced6 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md @@ -12,16 +12,15 @@ description: "Create {{alerting-v2}} action policies, configure matchers, Dispat $$$create-manage-action-policies-v2$$$ -An action policy controls which alert episodes trigger notifications, how the policy groups episodes, how often it sends notifications, and where it routes them. Policies are global within a space. You create and manage them from the **Action policies** page, not from the rule form. +Rules define what counts as a problem. Action policies define what happens when a problem is detected. They determine which episodes generate notifications, how they're grouped and throttled, and where they're routed. + +Because policies are separate from rules and global within a space, you can update notification behavior across many rules at once without touching detection logic, and you can route the same alerts differently depending on severity or source. You create and manage policies from the **Action policies** page, not from the rule form. For matcher fields, grouping modes, throttle strategies, frequency options, and dispatch outcomes, refer to [Action policy reference](action-policy-reference-v2.md). ## Create an action policy -1. Open **{{manage-app}} > V2 Alerting Preview > Action Policies**. -2. Select **Create policy**. -3. Fill in the policy fields described in [Policy fields](#policy-fields). -4. Select **Save**. Kibana validates the matcher expression on save and rejects any KQL that isn't valid. +[CONTENT NEEDED for M2: UI. Once the navigation and action policy settings have been confirmed, add instructions for creating an action policy.] ## Policy fields [policy-fields] @@ -33,6 +32,8 @@ An optional KQL expression that filters which episodes this policy applies to. A Use matchers to route different episodes to different policies, for example, one policy for `data.severity: "critical"` episodes routed to PagerDuty and another for warnings routed to Slack. For available fields and examples, refer to [Matcher fields](action-policy-reference-v2.md#matcher-fields). +[CONTENT NEEDED for M2: The `data.severity: "critical"` example above will become the legacy approach once M2 ships. M2 promotes severity to `episode.severity` and `episode.severity_max` as first-class episode fields. Update this example to use `episode.severity: "CRITICAL"` and update the cross-reference to include the new fields. Also decide whether to retain `data.severity` as an alternative for rules that haven't migrated, or to remove it from guidance entirely.] + ### Grouping and frequency [reduce-noise-grouping-v2] $$$reduce-noise-grouping-v2$$$ diff --git a/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md index 1b656de146..56ffc92057 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md @@ -61,6 +61,8 @@ You should see two rows: one for `checkout` (3 errors) and one for `payments` (2 Go to **Management > V2 Alerting Preview** and create a new rule using the YAML editor with the following configuration: +[CONTENT NEEDED: UI. "V2 Alerting Preview" is a development-phase navigation label that will change. Update all instances of this navigation path in this tutorial before publishing.] + ```yaml kind: alert metadata: @@ -83,6 +85,8 @@ grouping: - service_name ``` +[CONTENT NEEDED for M2: The `grouping` key will be renamed to `track_by` in M2. Update this example to use `track_by: { fields: [service_name] }` once that change ships.] + Save the rule. It will be enabled automatically. diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules-v2.md index 12f4f65438..9aecb4479b 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules-v2.md @@ -37,4 +37,4 @@ This separation means you can build and test a rule without anyone getting paged ## Next steps - **[Author rules](rules/author-rules-v2.md):** Write the {{esql}} query, choose Detect or Alert mode, and structure your data sources and conditions. -- **[View and manage rules](rules/view-manage-rules-v2.md):** Enable, disable, clone, delete, and bulk-manage rules from the rules list. +- **[View and manage rules](rules/view-manage-rules-v2.md):** Enable, disable, clone, delete, and bulk-manage rules from the rules list. \ No newline at end of file diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md index 3dce889ce0..5fda672d94 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md @@ -5,14 +5,14 @@ applies_to: serverless: preview products: - id: kibana -description: "Write ES|QL queries for {{alerting-v2}} rules: modes, query structure, base query, alert condition, thresholds, and severity." +description: "Learn how to write ES|QL queries for rules. Choose a rule mode, structure a base query and alert condition, set thresholds, and assign severity levels." --- # Author {{alerting-v2}} rules [author-rules-v2] $$$author-rules-v2$$$ -Every {{alerting-v2}} rule is an {{esql}} query. Instead of choosing from a catalog of fixed rule types, you write {{esql}} directly. Describe what to look for, what counts as a breach, and which fields to store on each event. +Authoring a rule means deciding three things: what condition in your data counts as a problem, whether you want the rule to silently record matches or actively track issues through to resolution, and which fields to carry forward onto each alert event so you can route and triage effectively. Getting these decisions right in the query is what makes the difference between a rule that fires on everything and one that surfaces the problems that actually need attention. This page covers the query concepts behind a rule definition. For settings beyond the query (such as schedules, grouping, and lifecycle thresholds), refer to [Configure a rule](configure-a-rule-v2.md). Once you understand what goes into a rule, you can write one using the [rule builder](create-rule-from-rule-builder-v2.md), [YAML editor](create-rule-with-yaml-v2.md), or [a Discover session](create-rule-from-discover-v2.md). @@ -75,6 +75,12 @@ Severity is carried by convention as a field under `data.*`, for example `data.s There is no required severity field name or fixed value set. Use whatever convention your team aligns on, and reference those same field names in your action policies. -## Rule templates [rule-templates-v2] +[CONTENT NEEDED for M2: M2 promotes severity to a first-class episode-level property rather than a `data.*` convention field. Once this ships, the guidance above will need to change: there will be a defined field name, possibly a defined value set, and severity will be directly available on the episode without needing to be threaded through `KEEP` and matched via KQL. Update this section to reflect the M2 severity schema and revise any query examples that output severity as a plain string into `data.*`.] -[CONTENT NEEDED: List supported rule template types, what each template pre-fills in ES|QL or YAML, and how templates relate to user-authored queries once the product catalog is finalized.] +## Next steps + +Once you understand the query structure, explore [{{esql}} query patterns](esql-query-patterns-v2.md) for advanced use cases including SLO burn rate queries, no-data detection, persistent breach detection, and unsupported operations. + +## Rule forms [rule-forms-v2] + +[CONTENT NEEDED for M2: UI. This page needs a procedure once rule forms are finalized: what forms are available, what each one pre-fills in the ES|QL query or YAML, and how to start from a form versus authoring a rule from scratch. Verify the name "rule forms" and the available form types against the shipped product before publishing.] diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md index 4e871019d2..86a8c35214 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md @@ -12,9 +12,9 @@ description: "Configure {{alerting-v2}} rules: mode, ES|QL, grouping, schedule, $$$rule-settings-v2$$$ -Use this page to configure how a {{alerting-v2}} rule evaluates data and manages its alert lifecycle. These settings live on the rule itself. +The {{esql}} query defines what a rule detects. The settings on this page determine whether it behaves correctly in production: how often it runs, how it groups related problems, when it opens and closes alerts, and what it does when data stops arriving. -For writing the {{esql}} query, refer to [Author rules](author-rules-v2.md). For notification routing (matchers, grouping, throttling, maintenance windows), refer to [Notifications](../notifications-v2.md) and [Manage action policies](../notifications/manage-action-policies-v2.md). +For query authoring, refer to [Author rules](author-rules-v2.md). For notification routing, refer to [Notifications](../notifications-v2.md). :::{note} Action policies are not configured on the rule form. You create them separately in the **Action policies** area and use KQL matchers to scope them to the episodes you want to route. The rule builder form does not link to policies. @@ -45,6 +45,8 @@ Group key fields must align with the `BY` clause in your {{esql}} query's `STATS Note that rule grouping is separate from notification grouping on an action policy, which controls how episodes batch into messages. +[CONTENT NEEDED for M2: M2 replaces the current `grouping.fields` approach with a `track_by` concept and introduces a `series.*` block that gives each series a stable, explicit identity. Update this section to document the `track_by` configuration, explain how the `series.*` block differs from the current `group_hash` approach, and revise any references to `grouping.fields` or the `BY` clause alignment requirement once the M2 schema is finalized.] + ## Schedule and lookback [schedule-lookback-v2] $$$schedule-lookback-v2$$$ @@ -105,6 +107,8 @@ No-data handling controls what happens when a rule executes and the base query r | last_status | Carry forward the previous status | | recover | Treat absence as recovery | +These behaviors apply when the base query returns zero rows. They do not help when you want to *detect* that a specific host or data source has gone silent — that requires a different query approach. See [No-data detection](esql-query-patterns-v2.md#no-data-esql-query-v2) in the authoring guide for an ES|QL pattern that surfaces silent sources as alert rows. + ## Tags and investigation guide [tags-investigation-v2] Alert-mode rules support two optional metadata fields: @@ -114,11 +118,4 @@ Alert-mode rules support two optional metadata fields: ## Evaluate rule output [evaluate-rule-output-v2] -Before relying on a rule in production, evaluate it against recent data. A full evaluation surfaces: - -- How many rows the query returns. -- How many alert events would be generated. -- Sample alert event documents. -- A histogram of matching row counts over time (for evaluation and, when recovery logic applies, for recovery-oriented previews). - -In the rule builder, click **Preview** before saving to run this evaluation against your current query and settings. +Before relying on a rule in production, evaluate it against recent data by running a preview. A full evaluation surfaces how many rows the query returns, how many alert events would be generated, sample alert event documents, and a histogram of matching row counts over time. diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md index acfab66655..144524d8f0 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md @@ -8,25 +8,10 @@ products: description: "Turn an {{esql}} query in Discover into a {{alerting-v2}} rule with pre-filled evaluation and lookback." --- -# Create rules using Discover [create-rules-discover-v2] +# Create rules from Discover [create-rules-discover-v2] $$$create-rules-discover-v2$$$ Create {{alerting-v2}} rules directly from Discover. When you build an {{esql}} query that surfaces interesting patterns, you can convert it into a rule without rewriting the query. For the full rule form including preview, alert mode settings, and YAML toggle, refer to [Create rules using the rule builder](create-rule-from-rule-builder-v2.md). -When you create a rule from Discover, the following is populated: - -- The full {{esql}} query from your current Discover session is placed into the rule's base query field. -- The index pattern is inferred from the `FROM` command in your query. -- The time range is converted into the rule's lookback window. - -You can modify any of these values before saving. - -## Create a rule from Discover - -1. Open Discover and switch to {{esql}} mode. -2. Write and run an {{esql}} query that returns the data you want to monitor. -3. Open the **Rules** menu on the Discover toolbar and choose **Create v2 ES|QL rule**. -4. The rule creation form opens with the {{esql}} query pre-populated in the evaluation field. -5. Configure the remaining rule settings. For details on each setting, see [Configure a rule](configure-a-rule-v2.md). -6. Click **Save**. +[CONTENT NEEDED: UI. This page needs a procedure once the Discover-to-rule workflow is finalized: how to open it from an ES|QL query in Discover, what pre-fills (query, lookback, schedule), and how to complete and save the rule. Verify the menu item name and entry point against the shipped UI before publishing.] \ No newline at end of file diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md index 8ee86b08b4..70ce9203cd 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md @@ -5,7 +5,7 @@ applies_to: serverless: preview products: - id: kibana -description: "Create a {{alerting-v2}} rule with the interactive rule builder: open the form, configure settings, preview, and save." +description: "Create a rule with the interactive rule builder" --- # Create rules using the rule builder [create-rules-rule-builder-v2] @@ -13,10 +13,8 @@ description: "Create a {{alerting-v2}} rule with the interactive rule builder: o $$$create-rules-rule-builder-v2$$$ $$$create-rules-ui-v2$$$ -Create {{alerting-v2}} rules using the interactive rule creation form. The form provides a guided experience for all rule settings, with the option to toggle between interactive and YAML modes. +The rule builder is the right starting point when you're creating a rule from scratch and want inline guidance through each setting. For a full description of what each setting does, refer to [Configure a rule](configure-a-rule-v2.md). -1. Navigate to **{{manage-app}} > V2 Alerting Preview > Rules**. -2. Click **Create rule**. -3. Set up the rule. Refer to [](configure-a-rule-v2.md) to learn about the available settings. -4. Click **Preview** to evaluate the query against recent data before saving. The preview shows how many rows the query returns, how many alert events would be generated, sample alert event documents, and a bar chart of matching row counts over time. -5. Click **Save**. The rule starts executing on its configured schedule. +If you already have a working query in Discover, you can [create a rule directly from there](create-rule-from-discover-v2.md) without re-entering it. If you're managing rules as code or need to version-control rule definitions, use the [YAML editor](create-rule-with-yaml-v2.md) instead. + +[CONTENT NEEDED: UI. This page needs a procedure once the rule builder UI is finalized: how to open it, how to fill in settings, how to preview, and how to save. Navigation paths, button labels, and form field arrangement should all be verified against the shipped UI before publishing. Hold until the rule builder workflow is confirmed.] diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md index bdd17344ea..abad1a8171 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md @@ -12,81 +12,10 @@ description: "Define {{alerting-v2}} rules as YAML for version control, infrastr $$$create-rules-yaml-v2$$$ -Define {{alerting-v2}} rules as YAML documents for version control, infrastructure-as-code workflows, and bulk provisioning. For a list of valid YAML fields, refer to [YAML rule schema reference](yaml-rule-schema-reference-v2.md). +The YAML editor lets you define rules as text documents rather than filling in a form. Use it when you want to version-control rule definitions alongside your other configuration, manage rules through infrastructure-as-code tooling, copy or adapt a rule quickly without re-entering settings by hand, or provision many rules at once. -## YAML rule structure +If you're creating a rule from scratch and want guidance through each setting, the [rule builder](create-rule-from-rule-builder-v2.md) is the better starting point. If you have a query already working in Discover, you can [create a rule directly from there](create-rule-from-discover-v2.md). -A complete alert-mode rule in YAML: +For the full list of supported YAML fields and their accepted values, refer to [YAML rule schema reference](yaml-rule-schema-reference-v2.md). -```yaml -kind: alert - -metadata: - name: checkout-error-rate-by-route - owner: platform - labels: ["production", "checkout"] - -time_field: "@timestamp" - -schedule: - every: 1m - lookback: 20m - -evaluation: - query: - base: | - FROM metrics-* - | STATS avg_cpu = AVG(system.cpu.total.pct) BY host.name - | WHERE env == "production" - condition: "WHERE avg_cpu > 0.9" - -recovery_policy: - type: query - query: - base: | - FROM metrics-* - | STATS avg_cpu = AVG(system.cpu.total.pct) BY host.name - condition: "WHERE avg_cpu < 0.67" - -state_transition: - pending_operator: OR - pending_count: 3 - pending_timeframe: 5m - recovering_operator: AND - recovering_count: 2 - recovering_timeframe: 10m - -grouping: - fields: [host.name] - -no_data: - behavior: no_data - timeframe: 15m - -notification_policies: - - ref: "policies/service-alerts-v1" - - ref: "policies/pagerduty-sev1-v1" -``` - -## Detect mode example - -A minimal detect-mode rule: - -```yaml -kind: signal - -metadata: - name: http-500-errors - -schedule: - every: 5m - lookback: 5m - -evaluation: - query: - base: | - FROM logs-* - | WHERE http.response.status_code >= 500 - | STATS error_count = COUNT(*) BY service.name - | KEEP service.name, error_count -``` \ No newline at end of file +[CONTENT NEEDED: UI. This page needs a procedure once the YAML editor UI is finalized: how to open it, how to paste or edit a definition, and how to save. Hold until the editor workflow is confirmed.] diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/esql-query-patterns-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/esql-query-patterns-v2.md new file mode 100644 index 0000000000..994ef36301 --- /dev/null +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/esql-query-patterns-v2.md @@ -0,0 +1,156 @@ +--- +navigation_title: ES|QL query patterns +applies_to: + stack: unavailable + serverless: preview +products: + - id: kibana +description: "Advanced {{esql}} query patterns for {{alerting-v2}} rules: SLO burn rate, no-data detection, persistent breach, and unsupported operations." +--- + +# {{esql}} query patterns for {{alerting-v2}} rules [esql-query-patterns-v2] + +$$$esql-query-patterns-v2$$$ + +Some detection problems can't be expressed as a single metric compared to a fixed threshold. You might need to know whether an SLO is burning through its error budget across multiple time windows at once, whether a specific host has gone silent rather than just whether the query returned nothing, or whether a condition has persisted continuously across consecutive time buckets rather than just appearing once. These are structurally different problems that require different query shapes. + +Use this page when a basic `STATS ... WHERE` pattern isn't enough, or when the detection logic itself requires multi-window calculation, last-seen reasoning, or bucket-level persistence checks. If you're still learning how {{alerting-v2}} rules work, start with [Author rules](author-rules-v2.md) first. + +## Basic threshold query [threshold-query-v2] + +A threshold query evaluates one metric over one lookback window and fires if a value crosses a limit. It is the simplest rule shape: a `STATS` aggregation followed by a `WHERE` condition. + +```esql +FROM logs-* +| STATS + // Count only error responses; count all requests for the denominator + error_count = COUNT_IF(http.response.status_code >= 500), + total_count = COUNT(*) + BY service.name +| EVAL error_rate = error_count / total_count // Compute the error rate as a fraction (0–1) +| WHERE error_rate > 0.10 // Alert condition: services above 10% error rate are breaches +| KEEP service.name, error_rate, error_count, total_count +``` + +One window, one aggregate, one threshold check. The result is either a breach or no breach for each group. + +## SLO burn rate query [slo-burn-rate-query-v2] + +An SLO burn rate query asks a different question than a basic threshold: are you consuming your error budget faster than you can afford to? Rather than checking a single metric at a fixed limit, it calculates error rates across multiple time windows simultaneously and returns a severity level. + +### Why multiple windows + +Checking both a short window (for example, 5 minutes) and a long window (for example, 1 hour) together filters out brief spikes that do not represent a real budget threat. CRITICAL fires only when *both* the short and long burn rates exceed the threshold. The two-window requirement is what separates a genuine budget emergency from a momentary blip. + +### Query structure + +A single {{esql}} query handles all window pairs at once using conditional aggregation: + +```esql +FROM metrics-* +| WHERE @timestamp >= NOW() - 3 days // Lookback must cover the longest window pair used below. + // Keep this value in sync with the rule's lookback setting. +| STATS + // CRITICAL window pair: 5 min catches the fast signal, 1 hour confirms it's sustained + errors_5m = COUNT_IF(outcome == "failure" AND @timestamp >= NOW() - 5 minutes), + total_5m = COUNT_IF(@timestamp >= NOW() - 5 minutes), + errors_1h = COUNT_IF(outcome == "failure" AND @timestamp >= NOW() - 1 hour), + total_1h = COUNT_IF(@timestamp >= NOW() - 1 hour), + // HIGH window pair: 30 min fast signal, 6 hours sustained confirmation + errors_30m = COUNT_IF(outcome == "failure" AND @timestamp >= NOW() - 30 minutes), + total_30m = COUNT_IF(@timestamp >= NOW() - 30 minutes), + errors_6h = COUNT_IF(outcome == "failure" AND @timestamp >= NOW() - 6 hours), + total_6h = COUNT_IF(@timestamp >= NOW() - 6 hours) + BY slo.id // Each SLO is evaluated independently +| EVAL + // Compute error rates (errors as a fraction of total requests) for each window + burn_5m = errors_5m / total_5m, + burn_1h = errors_1h / total_1h, + burn_30m = errors_30m / total_30m, + burn_6h = errors_6h / total_6h +| EVAL severity = CASE( + // CRITICAL: both the fast and sustained windows exceed 14.4x the baseline error rate. + // Requiring both prevents a single brief spike from triggering a critical alert. + burn_5m > 14.4 AND burn_1h > 14.4, "CRITICAL", + // HIGH: same two-window logic at a lower threshold + burn_30m > 6.0 AND burn_6h > 6.0, "HIGH", + "none" + ) +| WHERE severity != "none" // Only breaching SLOs become alert rows +| KEEP slo.id, severity, burn_5m, burn_1h, burn_30m, burn_6h // Store fields needed for routing and triage +``` + +The burn rate multipliers (14.4×, 6×) reflect standard SLO error budget consumption rates. Adjust them to match your SLO targets. + +Because the query computes several window pairs in one pass, the lookback window on the rule must cover the longest window in the query (3 days in the example above). + +[CONTENT NEEDED for M2: An open design question from M1 is whether SLO burn rates should be pre-computed and indexed separately (for example, via a transform writing to a dedicated metrics index) rather than calculated inside the rule query. If this pattern is adopted as the recommended approach, the query structure above will need to be revised or replaced. Confirm the recommended pattern before finalizing this section.] + +[CONTENT NEEDED for M2: M2 promotes severity to a first-class episode-level property. The current query outputs severity as a plain string in a `data.*` field (for example, `"CRITICAL"`, `"HIGH"`). Verify whether M2 requires this output to map explicitly to the new episode severity property, and update the query and surrounding explanation accordingly.] + +## No-data detection [no-data-esql-query-v2] + +No-data detection inverts the normal pattern. Instead of filtering for data that meets a condition, you query for when data was *last seen* and flag sources that have gone silent. + +The technique uses a broad lookback to find all known hosts, then surfaces only those that have not reported recently: + +```esql +FROM metrics-* +| WHERE @timestamp >= NOW() - 12 hours // Broad lookback: must be wide enough that all known hosts + // have at least one event in the window under normal conditions +| STATS last_seen = MAX(@timestamp) BY host.name // Find the most recent event timestamp per host +| WHERE last_seen < NOW() - 15 minutes // Keep only hosts that have NOT reported in the last 15 minutes +| KEEP host.name, last_seen // Each returned row is a silent host — the query result itself is the alert +``` + +Every row returned is a host that has gone silent, so the base query itself drives the alert. No separate alert condition is needed. + +### Variants + +| Variant | What it detects | +|---|---| +| Host-specific | Each host that stops reporting generates its own alert series (use `BY host.name` for grouping). | +| Global | No data from any source. Omit the `BY` clause and check whether the query returns any rows at all. | +| Combined | Flags both a high-metric condition *and* silent hosts in one query using a `CASE` expression to assign a `status` field (`"alert"`, `"no data"`, or `"ok"`), then filters to only the problematic rows. | + +### Lookback window sizing + +The lookback must be wide enough that known hosts appear in the result set. If the lookback is too short, a silent host falls outside the window and is never checked. However, large lookback windows on high-frequency data streams increase query cost significantly. Start with a lookback that comfortably covers the longest expected reporting gap for your hosts, not the full history of the index. + +For no-data behavior when the entire base query returns zero rows (as opposed to detecting specific silent sources), refer to [No-data handling](configure-a-rule-v2.md#no-data-handling-v2). + +[CONTENT NEEDED for M2: M2 introduces Track By and a `series.*` block that gives the system a stable, explicit identity for each monitored series. Once series identity is formalized, the system may support native detection of when a known series stops producing events, which is the same problem this query solves manually today. Verify whether M2 adds a built-in no-data detection option at the series level, and if so, document it here as the preferred approach and move this manual `MAX(@timestamp)` pattern to a "how it works" explanation or a workaround note for cases the native approach does not cover.] + +## Limitations and workarounds [esql-limitations-v2] + +Some patterns from the classic alerting aggregation API are not directly available in {{esql}}, and some require workarounds. + +### Persistent breach detection [persistent-breach-v2] + +A persistent breach condition detects a metric that stays above a threshold across several consecutive time buckets (for example, "CPU above 90% in all 10 of the last 10 five-minute windows"). {{esql}} can express this with bucket counting: + +```esql +FROM metrics-* +| WHERE @timestamp >= NOW() - 50 minutes // Lookback must cover all 10 buckets (10 × 5 min = 50 min) +| EVAL bucket = BUCKET(@timestamp, 5 minutes) // Assign each event to its 5-minute time bucket +| STATS + total_buckets = COUNT_DISTINCT(bucket), // How many distinct buckets exist in the window + exceeding_buckets = COUNT_DISTINCT( + CASE(system.cpu.total.pct > 0.90, bucket, null) // Count only buckets where CPU exceeded the threshold; + ) // null values are excluded by COUNT_DISTINCT + BY host.name +| WHERE total_buckets >= 10 // Require a full window of data before firing — + AND exceeding_buckets == total_buckets // guards against gaps making a partial breach look persistent; + // every bucket in the window must have breached +| KEEP host.name, total_buckets, exceeding_buckets +``` + +The rule's lookback window must cover all the buckets you want to check (50 minutes for 10 five-minute buckets in this example). If any bucket is missing from the data because the host stopped reporting briefly mid-window, `total_buckets` drops below 10 and the condition does not fire. Design the query so that gaps in reporting produce the behavior you want: either treating partial coverage as a non-breach or adjusting the `WHERE` filter to allow it. + +[CONTENT NEEDED for M2: M2's Track By feature gives the system a native concept of series identity and may provide a way to track how many consecutive evaluations a series has been breaching. If this lands, persistent breach detection could become a rule configuration option rather than something expressed entirely in the {{esql}} query. Verify whether M2 adds consecutive-breach tracking at the series level, and if so, document the configuration approach here alongside or instead of this workaround.] + +### Derivative aggregation [derivative-aggregation-v2] + +{{esql}} does not have a `DERIVATIVE` function. In the {{es}} aggregations API, a derivative pipeline aggregation calculates the rate of change between consecutive time buckets (for example, "how fast is this counter increasing per minute?"). There is no equivalent in {{esql}} today. + +Use cases that require true per-bucket deltas (such as detecting a sudden acceleration in error rate) cannot be expressed as an {{esql}} rule at this time. Consider pre-computing deltas in an ingest pipeline or using a transform to write derived metrics to a separate index that your rule can then query with a standard threshold pattern. diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md index dcb6eb1a98..fb578f6376 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md @@ -65,6 +65,8 @@ Grouping is configured in YAML. The fields listed here control how the rule part |---|---| | grouping.fields | Array of field names; must align with `STATS ... BY` in the {{esql}} query. | +[CONTENT NEEDED for M2: `grouping.fields` is being renamed to `track_by.fields`. Update this section heading, table key, and description once the rename ships. Also add the `series.*` output fields that M2 introduces: `series.key` (replaces `group_hash` as the internal series identity hash) and `series.tracked_by` (a structured object of the tracked field names and values, for example `{"host.name": "web-01"}`). The `series.tracked_by` fields are directly filterable in {{esql}} queries without decoding.] + ## Rule event documents Each time a rule evaluates, {{kib}} writes one document per matched series to `.rule-events`. The `type` field determines the document kind: @@ -89,6 +91,8 @@ These fields appear on all `.rule-events` documents, regardless of whether the r | rule.id | keyword | Yes | Rule identifier. | | rule.version | long | Yes | Rule version at the time this event was emitted. | | group_hash | keyword | Yes | Series identity key for grouped evaluations. | + +[CONTENT NEEDED for M2: `group_hash` is being replaced by `series.key` (the internal hash) and `series.tracked_by` (a structured object of field names and values). Update this table to replace the `group_hash` row with the two new `series.*` fields once M2 ships. Any {{esql}} examples that filter or display `group_hash` will also need to be updated to use `series.key` for lookups and `series.tracked_by.*` for human-readable series identification.] | data | flattened | Yes | Payload from the {{esql}} query output. Shape depends on your rule. | | status | keyword | Yes | One of: `breached`, `recovered`, `no_data`. | | source | keyword | Yes | Origin of this event. Product-specific identifier. | @@ -107,3 +111,10 @@ These fields only appear on documents with `type: alert`, written by rules runni | episode.id | keyword | Episode identifier for this series. | | episode.status | keyword | One of: `inactive`, `pending`, `active`, `recovering`. | | episode.status_count | long | Count of consecutive evaluations in the current `episode.status`. Only set when `episode.status` is `pending` or `recovering`. | + +[CONTENT NEEDED for M2: M2 promotes severity to two new first-class episode fields. Add the following rows to this table once M2 ships: + +- `episode.severity` (keyword) — the severity value from the most recent rule event (current state). Replaces the M1 convention of storing severity in `data.severity`. +- `episode.severity_max` (keyword) — the highest severity seen across the episode's lifetime (high-water mark). Enables "peaked at CRITICAL" display in the episode UI and policy matching like `episode.severity_max: "CRITICAL"`. + +Several details are still open in M2 planning: the accepted value set (whether it is enforced or convention-based), whether severity de-escalation triggers policy re-evaluation, and whether manual override of `episode.severity` is supported. Do not document specifics until these are resolved. When documenting, also cross-reference the matcher fields in [Action policy reference](../notifications/action-policy-reference-v2.md#matcher-fields).] diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md index 57de44a0b8..e62b71430b 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md @@ -14,7 +14,7 @@ $$$manage-rules-v2$$$ $$$open-the-list$$$ -Open the rules list from **{{manage-app}} > V2 Alerting Preview > Rules**. From here you can search, filter, sort, and act on rules individually or in bulk. +After a rule is created, edit its settings, pause it, remove it, and more from the page listing rules. The rules list gives you search, filter, sort, and bulk actions across all rules in the space. Selecting a rule name opens its details page, where you can review the full configuration and edit or act on it directly. ## Rule details page @@ -31,5 +31,3 @@ Use **Disable** when you want the rule to stop running entirely until you re-ena - To snooze alert episodes or series, refer to [View, manage, and reference alerts](../alerts/view-and-manage-alerts-v2.md#alert-actions-v2). - To snooze or stop an action policy, refer to [Manage action policies](../notifications/manage-action-policies-v2.md). - -% If you are unsure which to use, refer to [Validation checklist and noise controls](../troubleshooting-alerting-v2.md#reduce-noise-v2). diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/yaml-rule-schema-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/yaml-rule-schema-reference-v2.md index b1b3066ba3..019a97449a 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/yaml-rule-schema-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/yaml-rule-schema-reference-v2.md @@ -44,6 +44,8 @@ This page lists every valid field for a {{alerting-v2}} YAML rule definition. Fo | `recovery_policy.type` | string | `no_breach` or `query` | How recovery is detected. `no_breach` recovers when the query returns no results. `query` uses a separate recovery query. | | `recovery_policy.query.base` | string | Valid {{esql}} query | Required when `recovery_policy.type` is `query`. The query that checks whether the condition has cleared. | +[CONTENT NEEDED for M2: M2 adds a third `recovery_policy.type` value: `manual`. When set to `manual`, an episode never auto-recovers — it must be explicitly closed by a human or API call. This is designed for security-style rules where a finding should not disappear just because the log event aged out of the lookback window. Add `manual` to the accepted values list and document its behavior and when to use it.] + ## State transition fields Only valid when `kind: alert`. Controls how many consecutive detections are required before an episode becomes active or recovers. @@ -63,6 +65,15 @@ Only valid when `kind: alert`. Controls how many consecutive detections are requ |---|---|---|---| | `grouping.fields` | array of strings | Max 16 fields, each max 256 characters | Fields to group results by. Each unique combination becomes its own series. | +[CONTENT NEEDED for M2: The `grouping` key is being renamed to `track_by` in M2 (for example, `track_by: { fields: [host.name] }`). The rename is not cosmetic: the old name implied a direct relationship to the ES|QL `STATS ... BY` clause, which caused confusion. `track_by` captures the actual intent — which fields identify the thing you're monitoring. + +Two additional behaviors change with this rename: + +- **New default**: When `track_by` is omitted, the rule creates one stable series per rule, computed from `sha256(ruleId + spaceId)`. The current `grouping` default is broken — with no fields specified it generates a per-row, per-execution hash that changes every run, orphaning episodes on every evaluation. +- **New `series.*` document fields**: M2 adds `series.key` (the internal hash, replacing `group_hash`) and `series.tracked_by` (a structured object of the field names and values, for example `{"host.name": "web-01"}`). + +Update this section to replace `grouping.fields` with `track_by.fields`, document the new default behavior, and add the `series.*` output fields. Until M2 ships, `grouping.fields` remains the correct field name.] + ## No-data fields | Field | Type | Accepted values | Description | diff --git a/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md index 8206730860..e01fab756d 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md @@ -13,19 +13,17 @@ description: "Get {{alerting-v2}} running in your space: enable the UI, confirm $$$alerting-setup-v2$$$ -This page covers what you need to do before authoring rules. You must first enabling {{alerting-v2}} and Workflows, understand where rule events (signals and alerts) are stored, and understand how spaces and API keys scope the objects you create. +Before you can create your first rule, {{alerting-v2}} needs to be enabled in your space and a few background systems need to be in place. Rules rely on two data streams to store their output, API keys to run with the right privileges, and space scoping to keep objects organized. Getting these right upfront means your rules will run cleanly and their output will be queryable from the start. If you want to jump straight to creating a rule, go to [Quick start](quick-start-alerting-v2.md). For privilege requirements, refer to [{{alerting-v2}} privileges](alerting-v2-privileges.md). -## Enable {{alerting-v2}} and Workflows [alerting-set-up-v2] +## Enable {{alerting-v2}} [alerting-set-up-v2] $$$alerting-set-up-v2$$$ -- {{alerting-v2}} is available in {{serverless-short}} only. Enable it in **{{manage-app}} > Advanced Settings** by setting `alertingv2` to `true`. Once enabled, go to **{{manage-app}} > V2 Alerting Preview** to open the **Rules** page. +{{alerting-v2}} is available in {{serverless-short}} only. -% Update these docs about enabling the advanced setting for v2 alerting. ^ - -- To use workflows to deliver notifications, also enable the Workflows UI in **{{manage-app}} > Advanced Settings** by setting `workflows:ui:enabled` to `true`. +[CONTENT NEEDED: UI. Enabling via Advanced Settings is a development-phase mechanism. Update this entire enablement section with the final path before publishing. The "V2 Alerting Preview" navigation label is also a development-phase name and will change.] ## Where rule events are stored @@ -45,6 +43,8 @@ FROM $`.rule-events` | LIMIT 10 ``` +[CONTENT NEEDED: The direct index names `.rule-events` and `.alert-actions` may not be the intended query surface for end users. There is discussion about exposing this data through other methods instead. Confirm the intended access pattern before publishing this section and the [Query alerts in Discover](alerts/query-alerts-and-signals-in-discover-v2.md) page, and update all examples that reference these index names directly.] + After your first rule runs, use the query above in Discover to confirm documents are appearing. If nothing appears after a few seconds, check that the rule is enabled and that your ES|QL query returns results when run independently. ## Spaces [spaces-for-alerting-v2] diff --git a/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md deleted file mode 100644 index 71f5c641bd..0000000000 --- a/explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md +++ /dev/null @@ -1,284 +0,0 @@ ---- -navigation_title: Troubleshooting -applies_to: - stack: unavailable - serverless: preview -products: - - id: kibana -description: "Troubleshoot {{alerting-v2}} rules, notifications, action policies, workflows, and alert lifecycle, including a validation checklist for noise controls." ---- - -# Troubleshooting [troubleshooting-alerting-v2] - -This page collects symptom-based troubleshooting and a validation checklist for reducing noise. Use the section headings below to jump to a topic. - -## Rules not generating alerts [rules-not-generating-alerts] - -### Symptom - -A rule runs on schedule but you see no new documents in `.rule-events`, no episodes in the alert inbox, or counts stay at zero when you expect breaches. - -### Likely Causes - -- The rule is **disabled** or not saved successfully. -- The {{esql}} query or **alert condition** does not match current data (wrong index pattern, time field, filters, or thresholds in the query). -- The **lookback** window is too short relative to the rule schedule, so evaluations miss data between runs. -- The rule is in **Detect** mode and you are looking only at **alert** rows in Discover. -- Index privileges or API key privileges for the rule author cannot read the source indices. -- {{alerting-v2}} is not enabled in the deployment or the {{rules-ui-v2}} UI entry is hidden by configuration. - -### Diagnostic Steps - -1. Open **{{manage-app}} > V2 Alerting Preview** and confirm the rule shows **Enabled**. -2. Open the rule **details** and read the **Rule conditions** section for the base query, alert condition, schedule, and lookback. -3. Run **Preview** from the rule editor (if available) or paste the {{esql}} into Discover and confirm rows return for the same time range. -4. In Discover on `.rule-events`, filter by `rule.id` for your rule and widen the time range. -5. Verify the rule mode: Detect emits `type: signal` without `episode.*`; Alert emits `type: alert` with episodes. -6. Confirm your user (or the rule’s execution API key owner) has read access to the indices in the `FROM` clause. - -### Resolution - -- **Enable** the rule if it was disabled. -- Tighten or broaden the {{esql}}, fix `FROM`, or adjust the **alert condition** so it reflects the signal you want. Cross-reference [Author rules](rules/author-rules-v2.md). -- Set **lookback** to at least the **schedule** interval unless you intentionally accept gaps; see [Configure a rule](rules/configure-a-rule-v2.md#schedule-lookback-v2). -- Switch to **Alert** mode when you need episodes and policy matching; see [Rules](rules-v2.md#detection-and-notification-v2). -- Restore **index privileges** or **rotate the rule API key** after privilege changes; see [Set up alerting](setup-alerting-v2.md#alerting-privileges-v2). -- Ask an administrator to confirm {{alerting-v2}} is enabled and navigation labels for your version; see [Set up and verify](setup-alerting-v2.md#alerting-set-up-v2). - -### Still not working? - -If documents never appear in `.rule-events` after the above checks, capture rule id, schedule, and a sample Discover query, then continue with [Unexpected alert behavior](#unexpected-alert-behavior) or open a support case with {{kib}} logs from evaluation time windows. - -## Notifications not sending [notifications-not-sending] - -### Symptom - -Alert episodes appear active in the UI or in `.rule-events`, but no email, chat, or other channel message arrives; `.alert-actions` may show `unmatched`, `throttled`, or `suppressed` instead of `fire`. - -### Likely Causes - -**Action policy path** - -- No global **action policy** matches the episode (overly strict **KQL matcher**, wrong `rule.name` / `rule.labels` / `data.*` fields). -- The matching policy is **disabled** or **snoozed**. -- **Throttling** or **Dispatch per** grouping prevents a new send for this evaluation cycle. -- **{{maint-windows-cap}}** or episode-level **snooze** / **suppress** blocks dispatch while evaluation continues. - -**Workflow path** - -- The policy has **no workflow destinations**, or destinations reference workflows that were **deleted** or renamed. -- The workflow exists but is **misconfigured** in core workflow tooling (channels, credentials, or steps), so delivery fails after handoff. -- **Workflow permissions** prevent the policy from resolving the destination in this space. - -**Other** - -- Heavy load or many policies delays dispatch; the dispatcher runs on an interval (on the order of tens of seconds). - -### Diagnostic Steps - -**If you suspect action policy misconfiguration** - -1. Open **Action policies** in the same **{{kib}} space** as the rule. -2. For each policy that should apply, confirm **Status** is enabled and not snoozed. -3. Open the policy **matcher** and validate KQL against a sample episode payload (`data.*`, `rule.*`, episode status fields). An empty matcher matches all episodes subject to other controls. -4. Read [How action policies work](notifications-v2.md#how-action-policies-evaluated-v2) and map your episode to suppression, matcher, grouping, and throttle steps. -5. Query `.alert-actions` for `action.type` of `unmatched`, `throttled`, or `suppressed` for the episode id; see [Alert states and fields reference](alerts/alert-states-and-fields-reference-v2.md#alert-states-reference-v2). - -**If you suspect workflow attachment or workflow health** - -1. Open the policy and confirm **at least one** `workflow` destination is selected. -2. Open **[LINK: Core Workflows Documentation]** for each workflow id and verify the workflow is published, credentials are valid, and channel steps succeed in test runs. -3. Confirm your account can read the workflow objects referenced by the policy (privilege escalation guard); see [Action policy management](alerting-v2-privileges.md). -4. After policy edits, allow a short delay for **API key invalidation** cycles described in [Manage action policies](notifications/manage-action-policies-v2.md). - -### Resolution - -- Broaden or fix the **matcher**; align field names with the matcher editor suggestions. -- **Enable** the policy or clear **snooze** when you intend dispatch to resume. -- Adjust **Frequency** and **Dispatch per** so reminders can send when you expect; see [Create and configure an action policy](notifications/create-configure-action-policy-v2.md#throttle-v2). -- Respect **maintenance windows** and episode **snooze** semantics; adjust windows or triage state if dispatch should resume. -- Add or repair **workflow destinations** on the policy, then re-test from [Workflows for {{alerting-v2}}](workflows-alerting-v2.md). -- Fix workflow configuration using **[LINK: Core Workflows Troubleshooting]**. -- If privileges block destination resolution, grant workflow access or recreate the policy with a permitted workflow. - -### Still not working? - -If `.alert-actions` shows `error`, use [Possible outcomes](notifications-v2.md#possible-outcomes) for dispatcher outcome values and check {{kib}} server logs around evaluation timestamps. If outcomes are `unmatched` after matcher fixes, continue with [Action policy not triggering](#action-policy-not-triggering). - -## Action policy not triggering [action-policy-not-triggering] - -### Symptom - -Episodes exist but policies appear to ignore them: repeated `unmatched` outcomes, or no `fire` / `throttled` rows for that episode in `.alert-actions`. - -### Likely Causes - -- **KQL matcher** is too narrow or uses field names that do not exist on the matcher context. -- Policy is **disabled** or **snoozed**. -- Episode or series is under **suppression** (acknowledge / snooze / deactivate flows) before policy evaluation. -- **Space mismatch**: The rule and policy are not in the same {{kib}} space. -- **Empty matcher** was intended, but a non-empty invalid expression was saved. Validation should catch this on save, but stale clients can still show errors at runtime. - -### Diagnostic Steps - -1. Confirm the rule and policy are listed under the **same space**. -2. Inspect the policy **matcher** text and compare to fields visible on a recent `.rule-events` document for the episode (`data.*`, `rule.*`, status fields). -3. Confirm the policy is **enabled** and not **snoozed**. -4. Review triage actions on the episode for **snooze** or **suppress** patterns; see [View, manage, and reference alerts](alerts/view-and-manage-alerts-v2.md#alert-actions-v2). -5. Query `.alert-actions` for the episode id and read `action.type` values chronologically. - -### Resolution - -- Edit the matcher to valid KQL that reflects your routing intent, or temporarily use an empty catch-all matcher to validate the rest of the pipeline (then tighten). -- **Enable** the policy or end **snooze**. -- Clear or adjust triage states only when consistent with your operational policy. -- Move or recreate objects so the rule and policy share one space. - -### Still not working? - -If matchers are empty and policies still never run, return to [Notifications not sending](#notifications-not-sending) and verify **workflow destinations**. For rule-side issues, refer to [Rules not generating alerts](#rules-not-generating-alerts). - -## Workflow not executing [workflow-not-executing] - -### Symptom - -Action policy evaluation appears to succeed (for example `fire` or downstream logs) but no workflow-driven message arrives, or workflow runs fail in core workflow tooling. - -### Likely Causes - -- Workflow was **deleted** or **disabled** outside alerting while still referenced on a policy. -- **Channel configuration** inside the workflow is invalid (expired tokens, wrong recipients). -- **Runtime permissions** for the workflow or connector user block execution. -- You are looking only at alerting pages while the failure is logged in **workflow execution history** elsewhere. - -### Diagnostic Steps - -1. Open the action policy and note each **workflow** destination id. -2. Open **[LINK: Core Workflows Documentation]** and locate each workflow; confirm it exists in the same deployment and space expectations. -3. Run any **test** or **dry run** features your workflow product provides for the same channels used in production. -4. Check {{kib}} and workflow service logs around dispatcher timestamps for errors after policy handoff. - -### Resolution - -- Update the policy to reference a valid workflow, or restore the missing workflow definition. -- Fix credentials, recipients, and channel parameters in the core workflow editor. -- Align service accounts and API keys with least-privilege requirements from your administrators. - -### Still not working? - -Use **[LINK: Core Workflows Troubleshooting]** as the primary resolution path. Workflow configuration and retries are owned outside this alerting docset. If policies show `error` instead, refer to [Possible outcomes](notifications-v2.md#possible-outcomes) and {{kib}} logs. - -## Alert not closing after resolution [alert-not-closing-after-resolution] - -### Symptom - -The underlying metric or log pattern looks healthy, but the episode remains **active** or oscillates between **recovering** and **active**. - -### Likely Causes - -- **Recovery thresholds** require more consecutive clear evaluations than have occurred yet. -- **No-data** handling treats gaps as **no_data** or **last_status** instead of recovery, so lifecycle does not move to inactive when you expect. -- **Grouping** or `group_hash` means you are viewing a different series than the one that recovered. -- **Resolve** / **deactivate** triage actions changed UI presentation while `.rule-events` history still shows transitional rows. - -### Diagnostic Steps - -1. Open the rule **configuration** and read **activation and recovery** settings; see [Configure a rule](rules/configure-a-rule-v2.md#activation-recovery-thresholds-v2). -2. Read **no-data** behavior for the rule; see [Configure a rule](rules/configure-a-rule-v2.md#no-data-handling-v2). -3. In Discover, query `.rule-events` for the episode’s `group_hash` and sort ascending by `@timestamp` to replay status transitions. -4. Compare **UI status** with raw `episode.status` fields for the latest rows. - -### Resolution - -- Tighten or loosen **recovery** counts and timeframes to match how stable the signal must be before closing. -- Change **no-data** behavior if gaps should count as recovery or should hold last status explicitly. -- Align triage expectations: manual **Resolve** affects presentation and suppression; it is not a substitute for recovery thresholds unless that matches your process. - -### Still not working? - -If flapping is caused by noisy queries, return to [Unexpected alert behavior](#unexpected-alert-behavior) and the decision table on [Validation checklist](#reduce-noise-v2). - -## Unexpected alert behavior [unexpected-alert-behavior] - -### Symptom - -Episodes open or close at surprising times, notifications repeat, multiple policies fire for one episode, or Discover rows disagree with the inbox. - -### Likely Causes - -- **Query** matches normal traffic or flapping metrics without enough **activation** dampening. -- **Multiple policies** match independently by design; there is **no precedence** between policies. -- **Dispatcher** timing differs from the rule schedule, so notification timing does not line up one-to-one with each rule run. -- **Manual triage** (snooze, resolve) interacts with lifecycle and dispatch in ways operators did not expect. - -### Diagnostic Steps - -1. Use the decision framing from [Validation checklist](#reduce-noise-v2) to decide whether to tune the rule, thresholds, matchers, throttles, or triage actions. -2. Re-read [How action policies work](notifications-v2.md#how-action-policies-evaluated-v2) for independent policy evaluation and `unmatched` behavior. -3. Compare **rule evaluation timestamps** in `.rule-events` with **dispatcher-driven** outcomes in `.alert-actions`. - -### Resolution - -Follow the **Resolution** column in the checklist table for your situation (for example tighten {{esql}}, adjust activation thresholds, add throttles, refine matchers, or use maintenance windows). - -### Still not working? - -Escalate with exported Discover queries for `.rule-events` and `.alert-actions`, policy ids, and workflow ids. For workflow-specific failures, use **[LINK: Core Workflows Troubleshooting]**. - -## Validation checklist [reduce-noise-v2] - -{{alerting-v2}} offers many ways to reduce noise. Controls live in three places: - -- **[Configure a rule](rules/configure-a-rule-v2.md)**: Thresholds, no-data handling, rule-level grouping, and related evaluation settings. -- **[Manage action policies](notifications/manage-action-policies-v2.md)**: Enablement, snooze, **{{maint-windows-cap}}**, and bulk policy actions that affect dispatch. -- **[Notifications (Action Policies)](notifications-v2.md)**: Action policies: matchers, Dispatch per, Frequency, destinations, and dispatcher behavior. -- **[View, manage, and reference alerts](alerts/view-and-manage-alerts-v2.md)**: Snooze, acknowledge, deactivate, tags, and anything persisted in **`.alert-actions`**. - -This section is a decision table so you can match a situation to the right mechanism. Deep content lives on the pages above. - -If multiple rows in the table apply, refer to [Using them together](#using-them-together). - -### Select the right approach - -| Your situation | Use this | What it does | -|---|---|---| -| The {{esql}} query matches too much normal traffic with too many breaching rows | [Author rules](rules/author-rules-v2.md) | Narrows the query, `WHERE` clause, schedule, or lookback so evaluations only surface what matters | -| Short spikes or flapping metrics open alerts before they should | [Activation and recovery thresholds](rules/configure-a-rule-v2.md#activation-recovery-thresholds-v2) | Requires consecutive breaches or a minimum duration before an episode becomes active | -| The alert recovers and reopens too often, flapping | [Activation and recovery thresholds](rules/configure-a-rule-v2.md#activation-recovery-thresholds-v2) | Requires sustained clear conditions before an episode leaves recovering | -| The query returns no rows and no_data or recovery behavior is misleading | [No-data handling](rules/configure-a-rule-v2.md#no-data-handling-v2) | Configures how empty results are interpreted so gaps do not look like false recoveries or false alerts | -| Notifications repeat for the same group on every evaluation | [Throttling on action policies](notifications/create-configure-action-policy-v2.md#throttle-v2) | Enforces a minimum interval between notifications per notification group | -| Recipients get too many separate messages for related episodes | [Notification grouping on action policies](notifications/create-configure-action-policy-v2.md#reduce-noise-grouping-v2) | Batches related alerts into fewer notifications | -| Notifications should only go out for certain episodes by severity, labels, or payload fields | [Matchers](notifications/create-configure-action-policy-v2.md#matcher-v2) | Uses KQL on the action policy over episode and rule context (for example `rule.labels` and payload fields) so only matching episodes route to workflows | -| Planned maintenance: evaluations should continue but on-call should not be paged | [{{maint-windows-cap}}](notifications/manage-action-policies-v2.md#maintenance-windows-v2) | Pauses policy dispatch for a scheduled window; rule evaluation continues | -| A temporary quiet period is needed for a series or episode without changing the rule | [View, manage, and reference alerts](alerts/view-and-manage-alerts-v2.md#alert-actions-v2) (snooze, silence, acknowledge) | Snoozes or silences notifications. Acknowledge can also quiet an episode while work proceeds | -| Many low-level alerts should roll up into one higher-level signal | [Author rules](rules/author-rules-v2.md) ({{esql}} over `.rule-events`) | Runs follow-on rules on `.rule-events` or related data to correlate and notify once | -| One alert episode should stop notifying and leave the triage queue while the rule keeps running | [View, manage, and reference alerts](alerts/view-and-manage-alerts-v2.md#alert-actions-v2) (deactivate / resolve) | Deactivates that episode. The rule still evaluates and can detect new episodes for other series | - -Use the links in the table for procedures and reference detail on each control. - -### Key distinctions - -| | Tune rule / schedule | Activation / recovery thresholds | No-data handling | Matchers / grouping / throttle | {{maint-windows-cap}} / snooze / silence | Rules on alerts | Deactivate / resolve | -|---|---|---|---|---|---|---|---| -| Rule still evaluates | Yes | Yes | Yes | Yes | Yes | Yes, source rules | Yes | -| Changes breach detection logic | Yes | No, delays state only | Yes, empty-result policy | No | No | N/A | No | -| Reduces notifications | If fewer breaches | Indirectly | Indirectly | Yes | Yes | Yes | Yes | -| Typical time scope | Until next edit | Consecutive runs / duration | Per evaluation | Policy config | Window or until cleared | N/A | Until episode handled | - -### Using them together [using-them-together] - -These options stack. A common pattern is: tune the query for precision, add activation thresholds to ignore spikes, use matchers and throttling so action policies only fire for the right episodes at a sustainable rate, and use {{maint-windows-cap}} or snooze during known change windows. - -Example: Noisy CPU rule - -| Situation | Action | Mechanism | -|---|---|---| -| The {{esql}} query flags any host over 70% | Tighten the query or add a stricter `WHERE` | Write and tune the rule | -| Legitimate bursts open alerts for 1-minute spikes | Require 3 consecutive breaches before active | Activation thresholds | -| The same host pages every run for an hour | Add throttle and grouping on the action policy | Throttle, grouping | -| Only production hosts should page on-call | Add KQL on the policy matcher (for example on host or `rule.labels`) | Matchers | -| Database change window this evening | Open a {{maint-windows-cap}} or snooze the series | {{maint-windows-cap}}, snooze | - -::::{note} -Order of application matters. Thresholds and no-data behavior affect lifecycle state before action policies run. Matchers and throttling apply when action policies are evaluated for each episode. Snooze and {{maint-windows-cap}} affect whether notifications send, not whether `.rule-events` documents are written. Check Discover if raw history is needed. -:::: diff --git a/explore-analyze/alerting/kibana-alerting-v2/workflows-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/workflows-alerting-v2.md index 420103c0bd..1be16fbba7 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/workflows-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/workflows-alerting-v2.md @@ -12,17 +12,14 @@ description: "How workflows connect to {{alerting-v2}} action policies and rule $$$workflows-v2$$$ -In {{alerting-v2}}, [Workflows](../../workflows.md) are how notifications get delivered. Action policies invoke workflows to send messages, trigger automation, or run other steps when an alert episode matches. +Without a workflow, an action policy has nowhere to send notifications. [Workflows](../../workflows.md) are the delivery layer. They define the actual steps that run when a policy matches an episode: sending a message, calling a webhook, triggering automation, or any combination. Setting up a workflow is what connects {{alerting-v2}} to the tools your team already uses for incident response. - -Before creating an action policy, make sure the workflows you want to use already exist in your space. Policies store references to workflow IDs, so a destination workflow must exist before you can select it. For workflow authoring and permissions, refer to [Workflows](../../workflows.md). +Before creating an action policy, make sure the workflows you want to use already exist in your space. Policies store references to workflow IDs, so a destination workflow must exist before you can select it. ::::{note} Only manual triggers are supported for workflows used with action policies. :::: -You can also attach workflows directly to a rule for automation that runs regardless of policy matching. To set up an action policy that references a workflow as a destination, refer to [Create and configure an action policy](notifications/create-configure-action-policy-v2.md). - ## Runtime execution order [runtime-execution-order] After a rule produces or updates alert episodes, processing follows this sequence: diff --git a/explore-analyze/toc.yml b/explore-analyze/toc.yml index 165d9afb94..5a30a364cb 100644 --- a/explore-analyze/toc.yml +++ b/explore-analyze/toc.yml @@ -402,6 +402,7 @@ toc: - file: alerting/kibana-alerting-v2/rules-v2.md children: - file: alerting/kibana-alerting-v2/rules/author-rules-v2.md + - file: alerting/kibana-alerting-v2/rules/esql-query-patterns-v2.md - file: alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md - file: alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md - file: alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md @@ -421,7 +422,6 @@ toc: - file: alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md - file: alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md - file: alerting/kibana-alerting-v2/notifications/manage-action-policies-v2.md - - file: alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md - file: alerting/watcher.md children: - file: alerting/watcher/watcher-getting-started.md diff --git a/redirects.yml b/redirects.yml index a48abf7984..551794bf0e 100644 --- a/redirects.yml +++ b/redirects.yml @@ -1079,8 +1079,6 @@ redirects: 'production-considerations-v2': 'author-rules-v2' 'explore-analyze/alerting/kibana-alerting-v2/author-rules/rule-templates.md': to: 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md' - anchors: - 'rule-templates-v2': 'rule-templates-v2' # Kibana alerting v2: IA restructure (paths removed April 2026) 'explore-analyze/alerting/kibana-alerting-v2/core-v2-alerting-concepts.md': @@ -1214,42 +1212,16 @@ redirects: to: 'explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md' anchors: 'alert-states-reference-v2': 'alert-states-reference-v2' - 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md' - anchors: - 'reduce-noise-v2': 'reduce-noise-v2' - 'using-them-together': 'using-them-together' - - # Kibana alerting v2: troubleshooting folder merged into troubleshooting-alerting-v2.md - 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/rules-not-generating-alerts.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md' - anchors: - 'rules-not-generating-alerts': 'rules-not-generating-alerts' - 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/notifications-not-sending.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md' - anchors: - 'notifications-not-sending': 'notifications-not-sending' - 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/action-policy-not-triggering.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md' - anchors: - 'action-policy-not-triggering': 'action-policy-not-triggering' - 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/workflow-not-executing.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md' - anchors: - 'workflow-not-executing': 'workflow-not-executing' - 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/alert-not-closing-after-resolution.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md' - anchors: - 'alert-not-closing-after-resolution': 'alert-not-closing-after-resolution' - 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/unexpected-alert-behavior.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md' - anchors: - 'unexpected-alert-behavior': 'unexpected-alert-behavior' - 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/validation-checklist.md': - to: 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting-alerting-v2.md' - anchors: - 'reduce-noise-v2': 'reduce-noise-v2' - 'using-them-together': 'using-them-together' + 'explore-analyze/alerting/kibana-alerting-v2/reduce-noise.md': 'explore-analyze/alerting/kibana-alerting-v2.md' + + # Kibana alerting v2: troubleshooting folder — no dedicated replacement page; send to hub + 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/rules-not-generating-alerts.md': 'explore-analyze/alerting/kibana-alerting-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/notifications-not-sending.md': 'explore-analyze/alerting/kibana-alerting-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/action-policy-not-triggering.md': 'explore-analyze/alerting/kibana-alerting-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/workflow-not-executing.md': 'explore-analyze/alerting/kibana-alerting-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/alert-not-closing-after-resolution.md': 'explore-analyze/alerting/kibana-alerting-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/unexpected-alert-behavior.md': 'explore-analyze/alerting/kibana-alerting-v2.md' + 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/validation-checklist.md': 'explore-analyze/alerting/kibana-alerting-v2.md' 'explore-analyze/alerting/kibana-alerting-v2/troubleshooting/error-messages-reference.md': to: 'explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md' anchors: @@ -1284,24 +1256,9 @@ redirects: 'explore-analyze/workflows/author-workflows.md': 'explore-analyze/workflows/authoring-techniques/use-yaml-editor.md' 'explore-analyze/workflows/monitor-troubleshoot.md': 'explore-analyze/workflows/authoring-techniques/monitor-workflows.md' 'explore-analyze/workflows/manage-workflows.md': 'explore-analyze/workflows/authoring-techniques/manage-workflows.md' - # alerting-v2 file renames: appended -v2 suffix to all page filenames - 'explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md' + # alerting-v2: pre-suffix rename redirects 'explore-analyze/alerting/kibana-alerting-v2/get-started-v2.md': to: 'explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md' anchors: 'alerting-get-started-v2': 'alerting-setup-v2' - 'explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md' - 'explore-analyze/alerting/kibana-alerting-v2/rules-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/rules-v2.md' - 'explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md' - 'explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md' 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-manage-and-reference-alerts-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md' - 'explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md' - 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md' - 'explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies-v2.md' - 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md' - 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md' - 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md' - 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md' - 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md' - 'explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md' - 'explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md': 'explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md' From f0f33a1befec4220a22f0f83560e04f8aa4cac2d Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Sat, 25 Apr 2026 20:51:45 -0400 Subject: [PATCH 31/40] Addresses some issues flagged by vale --- explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md | 2 +- .../kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md | 4 ++-- .../alerting/kibana-alerting-v2/notifications-v2.md | 6 +++--- .../notifications/action-policy-reference-v2.md | 6 +++--- .../notifications/manage-action-policies-v2.md | 2 +- .../alerting/kibana-alerting-v2/rules/author-rules-v2.md | 4 ++-- .../kibana-alerting-v2/rules/configure-a-rule-v2.md | 2 +- .../kibana-alerting-v2/rules/esql-query-patterns-v2.md | 2 +- .../alerting/kibana-alerting-v2/setup-alerting-v2.md | 2 +- 9 files changed, 15 insertions(+), 15 deletions(-) diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md index d788d07bf1..a6137457d6 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md @@ -68,7 +68,7 @@ The series is the container. Episodes are the individual problems that happened This means you can track "the checkout service was broken from 02:14 to 03:21" and "the payment service was broken at the same time" as separate episodes, even when both come from the same rule. :::{tip} -Snooze operates at the series level, not the episode level. If you snooze `checkout-service`, you're saying "stop notifying me about anything from this service for the next X hours", regardless of how many new episodes start during that time. You're silencing a specific ongoing situation, not only one alert. +Snooze operates at the series level, not the episode level. If you snooze `checkout-service`, you're silencing all notifications from that series for the next X hours, regardless of how many new episodes start during that time. You're quieting a specific ongoing situation, not a single alert. ::: ### A practical way to think about it diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md index 6e002a05df..76fd10c8c9 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md @@ -62,7 +62,7 @@ When you take an action, {{kib}} writes a document to the `.alert-actions` data ### Episode scope versus group scope -Some actions apply only to the specific episode you acted on. Others apply to every episode in the same group — meaning all episodes that share the same rule and series. This matters when a rule tracks multiple services or hosts: snoozing one episode silences the whole group, not just that service. +Some actions apply only to the specific episode you acted on. Others apply to every episode in the same group, meaning all episodes that share the same rule and series. This matters when a rule tracks multiple services or hosts. Snoozing one episode silences the whole group, not only that service. | Action | Scope | |---|---| @@ -81,7 +81,7 @@ There are three suppression options, each with a different scope: | Option | Scope | When to use | |---|---|---| -| Acknowledge | Per episode | You're actively working on a specific breach and want to silence notifications for it. Unacknowledging clears suppression. | +| Acknowledge | Per episode | You're actively working on a specific breach and want to silence notifications for it. To clear suppression, remove the acknowledgement. | | Deactivate | Per episode | Marks the episode as inactive and stops notifications for it. Unlike acknowledge, this closes the episode rather than silencing it while leaving it active. Use when you want to manually close a specific episode, For example, when you've addressed the issue but the rule hasn't recovered automatically. | | Snooze | Per series (all episodes) | You want to quiet an entire alert series for a defined period. For example, during a known noisy window for a host. Expires automatically. diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md index f6ac1ee1d7..0cc94f08ad 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md @@ -18,7 +18,7 @@ This page explains how action policies work. For creating and configuring them s $$$action-policies-v2$$$ -An action policy is a saved object in your space that controls notification routing. It's not attached to a rule. It's global within the space, so when an episode is produced, the system evaluates all enabled, unsnoozed policies in the space and decides which ones apply. +An action policy is a saved object in your space that controls notification routing. It's not attached to a rule. It's global within the space, so when an episode is produced, the system evaluates all enabled policies in the space that are not snoozed and decides which ones apply. Each policy has four controls: @@ -39,7 +39,7 @@ Multiple policies can match the same episode, and each runs independently. There $$$how-action-policies-evaluated-v2$$$ -When an episode is eligible for dispatch, the system processes each enabled, unsnoozed policy in order: +When an episode is eligible for dispatch, the system processes each enabled policy that is not snoozed, in order: 1. **Suppression:** Is the episode acknowledged, snoozed, or deactivated? If so, skip dispatch. 2. **Matcher:** Does the episode match the policy's KQL? If not, skip this policy. @@ -47,7 +47,7 @@ When an episode is eligible for dispatch, the system processes each enabled, uns 4. **Throttle:** Has a notification already gone out for this group recently? If so, wait. 5. **Destinations:** Send to the policy's workflow destinations. -The dispatcher runs on a short interval (around 10 seconds). Notifications don't arrive on the exact rule schedule; they follow the dispatcher's own cycle. +The dispatcher runs on a short interval (around 10 seconds). Notifications don't arrive on the exact rule schedule. They follow the dispatcher's own cycle. ### Possible outcomes [possible-outcomes] diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md index f8f87b9e8a..35564c26bc 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md @@ -28,8 +28,8 @@ Use these fields in the **Matcher** expression to filter which episodes a policy [CONTENT NEEDED for M2: M2 adds two first-class episode-level severity fields that will be directly matchable in KQL: -- `episode.severity` — the current severity of the episode (most recent evaluation). Enables matching like `episode.severity: "CRITICAL"`. -- `episode.severity_max` — the highest severity seen over the episode's lifetime. Enables matching like `episode.severity_max: "CRITICAL"` to catch episodes that were once critical even if they have since de-escalated. +- `episode.severity` - The current severity of the episode (most recent evaluation). Enables matching like `episode.severity: "CRITICAL"`. +- `episode.severity_max` - The highest severity seen over the episode's lifetime. Enables matching like `episode.severity_max: "CRITICAL"` to catch episodes that were once critical even if they have since de-escalated. Add both fields to this table with examples. Update the introductory sentence to include them. Also remove or deprecate the `data.severity` example once `episode.severity` is the preferred approach, otherwise users will get conflicting guidance about which field to use for severity matching. @@ -52,7 +52,7 @@ Throttle strategies control how often the policy fires for a given episode or gr | Option | Description | When to use | |---|---|---| | On status change | Notifies when the episode status changes (for example, active → recovering). One notification per transition. | You only need to know when something breaks and when it's resolved. No reminders needed. | -| On status change + repeat at interval | Notifies on status change, then resends notifications at a regular interval while the episode remains in the same status. | You want status change alerts plus periodic notifications that a problem is still unresolved, in case it has been missed or deprioritized. | +| On status change + repeat at interval | Notifies on status change, then resends notifications at a regular interval while the episode remains in the same status. | You want status change alerts plus periodic notifications that a problem is still unresolved, in case it has been missed or pushed aside. | | At most once every… | Caps notifications at one per episode or group within the chosen interval, regardless of rule frequency. | You want to limit alert volume for noisy rules without missing new or ongoing issues. | | Every evaluation | Notifies on every rule evaluation. Can be noisy. Use sparingly and only with infrequent rule schedules. | You need a full audit trail of every evaluation, or the rule runs infrequently enough that noise isn't a concern. | diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies-v2.md index 3e52241604..1ad00e250e 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications/manage-action-policies-v2.md @@ -20,7 +20,7 @@ You can disable a policy so it is not evaluated for new episodes. You can snooze $$$maintenance-windows-v2$$$ -Maintenance windows are scheduled periods during which a policy does not dispatch notifications. They are configured on the action policy alongside snooze and other policy controls, not on the rule. Rule evaluation continues and alert episodes can still be recorded in `.rule-events`; only dispatch through that policy pauses. Use maintenance windows for planned deployments, infrastructure changes, or recurring quiet periods. +Maintenance windows are scheduled periods during which a policy does not dispatch notifications. They are configured on the action policy alongside snooze and other policy controls, not on the rule. Rule evaluation continues and alert episodes can still be recorded in `.rule-events`. Only dispatch through that policy pauses. Use maintenance windows for planned deployments, infrastructure changes, or recurring quiet periods. ## Update API keys diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md index 5fda672d94..a4aee81618 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md @@ -50,7 +50,7 @@ The `KEEP` command controls which fields appear on each stored alert event. Only ## Data sources -Use `FROM` to point the rule at the indices or data streams to read. The query itself defines the scope; there is no separate data source step. +Use `FROM` to point the rule at the indices or data streams to read. The query itself defines the scope. There is no separate data source step. ```esql FROM logs-checkout-service-* @@ -75,7 +75,7 @@ Severity is carried by convention as a field under `data.*`, for example `data.s There is no required severity field name or fixed value set. Use whatever convention your team aligns on, and reference those same field names in your action policies. -[CONTENT NEEDED for M2: M2 promotes severity to a first-class episode-level property rather than a `data.*` convention field. Once this ships, the guidance above will need to change: there will be a defined field name, possibly a defined value set, and severity will be directly available on the episode without needing to be threaded through `KEEP` and matched via KQL. Update this section to reflect the M2 severity schema and revise any query examples that output severity as a plain string into `data.*`.] +[CONTENT NEEDED for M2: M2 promotes severity to a first-class episode-level property rather than a `data.*` convention field. Once this ships, the guidance above will need to change: there will be a defined field name, possibly a defined value set, and severity will be directly available on the episode without needing to be threaded through `KEEP` and matched using KQL. Update this section to reflect the M2 severity schema and revise any query examples that output severity as a plain string into `data.*`.] ## Next steps diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md index 86a8c35214..fc339cc454 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md @@ -93,7 +93,7 @@ Each timeframe value must be between 5 seconds and 365 days. | recovering_timeframe | Minimum duration for recovery | | recovering_operator | How to combine count and timeframe (`AND` or `OR`) | -Timeframe fields use the same 5 seconds to 365 days bounds as activation timeframes. +Time frame fields use the same 5 seconds to 365 days bounds as activation timeframes. ## No-data handling [no-data-handling-v2] diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/esql-query-patterns-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/esql-query-patterns-v2.md index 994ef36301..ed9b03ea09 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/esql-query-patterns-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/esql-query-patterns-v2.md @@ -12,7 +12,7 @@ description: "Advanced {{esql}} query patterns for {{alerting-v2}} rules: SLO bu $$$esql-query-patterns-v2$$$ -Some detection problems can't be expressed as a single metric compared to a fixed threshold. You might need to know whether an SLO is burning through its error budget across multiple time windows at once, whether a specific host has gone silent rather than just whether the query returned nothing, or whether a condition has persisted continuously across consecutive time buckets rather than just appearing once. These are structurally different problems that require different query shapes. +Some detection problems can't be expressed as a single metric compared to a fixed threshold. You might need to know whether an SLO is burning through its error budget across multiple time windows at once. Or whether a specific host has gone silent, rather than whether the query returned nothing. Or whether a condition has persisted continuously across consecutive time buckets rather than appearing once. These are structurally different problems that require different query shapes. Use this page when a basic `STATS ... WHERE` pattern isn't enough, or when the detection logic itself requires multi-window calculation, last-seen reasoning, or bucket-level persistence checks. If you're still learning how {{alerting-v2}} rules work, start with [Author rules](author-rules-v2.md) first. diff --git a/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md index e01fab756d..c3943b79ae 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md @@ -23,7 +23,7 @@ $$$alerting-set-up-v2$$$ {{alerting-v2}} is available in {{serverless-short}} only. -[CONTENT NEEDED: UI. Enabling via Advanced Settings is a development-phase mechanism. Update this entire enablement section with the final path before publishing. The "V2 Alerting Preview" navigation label is also a development-phase name and will change.] +[CONTENT NEEDED: UI. Enabling through Advanced Settings is a development-phase mechanism. Update this entire enablement section with the final path before publishing. The "V2 Alerting Preview" navigation label is also a development-phase name and will change.] ## Where rule events are stored From 583b481d38e6d537e07e9efd0f51f3693a43e925 Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Sat, 25 Apr 2026 21:16:45 -0400 Subject: [PATCH 32/40] Hid sections that are blocked --- .../alerts/alert-states-and-fields-reference-v2.md | 3 ++- .../query-alerts-and-signals-in-discover-v2.md | 3 ++- .../alerts/view-and-manage-alerts-v2.md | 6 ++++-- .../notifications/action-policy-reference-v2.md | 6 ++++-- .../create-configure-action-policy-v2.md | 5 ++++- .../kibana-alerting-v2/quick-start-alerting-v2.md | 3 ++- .../kibana-alerting-v2/rules/author-rules-v2.md | 5 ++++- .../kibana-alerting-v2/rules/configure-a-rule-v2.md | 3 ++- .../rules/esql-query-patterns-v2.md | 12 ++++++++---- .../rules/rule-event-field-reference-v2.md | 9 ++++++--- 10 files changed, 38 insertions(+), 17 deletions(-) diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md index 4b84c59bcb..8f6ddcc311 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md @@ -25,12 +25,13 @@ The `episode.status` field appears on documents with `type: alert` in `.rule-eve | `active` | Episode is actively breaching per rule logic. | | `recovering` | Condition clearing but recovery thresholds not yet satisfied. | -[CONTENT NEEDED for M2: M2 adds two first-class severity fields to the episode document: + ## Rule event status diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md index 8a76e40d47..b7b627c0a0 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md @@ -20,7 +20,8 @@ To use this page, open Discover, select {{esql}}, paste a query from the example [CONTENT NEEDED: The queries on this page use `.rule-events` and `.alert-actions` directly. Confirm whether these will remain the intended query surface, or whether users should query an ES|QL view or a stable user-facing data stream instead. Update all examples accordingly before publishing.] -[CONTENT NEEDED for M2: Review and expand the query examples below once M2 field renames (`group_hash` → `series.key`, new `series.tracked_by`, `episode.severity`, `episode.severity_max`) are finalized. Add examples that take advantage of the new first-class severity and series fields.] + For field names, types, and episode fields, refer to [Alert states and fields reference](alert-states-and-fields-reference-v2.md#alert-states-reference-v2) and [Rule event and field reference](../rules/rule-event-field-reference-v2.md#rule-reference-v2). For triage in the product UI, refer to [View, manage, and reference alerts](view-and-manage-alerts-v2.md). diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md index 76fd10c8c9..7d17ee3187 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md @@ -14,7 +14,8 @@ $$$manage-alerts-v2$$$ When a rule detects a problem, use the Alerts UI to understand what's happening and decide what to do about it. From here you can examine alert episodes, use filters to find what needs attention, triage alerts, and more. This is the operational surface for working through alerts day to day. -[CONTENT NEEDED for M2: UI. "V2 Alerting Preview" is a development-phase navigation label. Once the navigation and page name have been confirmed, add instructions for opening the Alerts page.] + ## Filter and search @@ -85,4 +86,5 @@ There are three suppression options, each with a different scope: | Deactivate | Per episode | Marks the episode as inactive and stops notifications for it. Unlike acknowledge, this closes the episode rather than silencing it while leaving it active. Use when you want to manually close a specific episode, For example, when you've addressed the issue but the rule hasn't recovered automatically. | | Snooze | Per series (all episodes) | You want to quiet an entire alert series for a defined period. For example, during a known noisy window for a host. Expires automatically. -[CONTENT NEEDED for M2: M2 makes severity a first-class episode property and leaves open the question of whether a severity *decrease* (de-escalation) should trigger a notification. If de-escalation notifications are added, they will require a new suppression decision point: a snoozed or acknowledged episode that de-escalates may need different suppression behavior than one that escalates. Monitor the M2 severity design and update this section if new suppression rules are added around severity changes.] + diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md index 35564c26bc..7f425e088b 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md @@ -26,7 +26,7 @@ Use these fields in the **Matcher** expression to filter which episodes a policy | `rule.name` | Display name of the rule. | `rule.name: "High CPU"` | | `rule.labels` | Key-value labels attached to the rule. Use dot notation to target a specific label key. | `rule.labels.env: "production"` | -[CONTENT NEEDED for M2: M2 adds two first-class episode-level severity fields that will be directly matchable in KQL: + ## Dispatch per options [notification-grouping] @@ -56,7 +57,8 @@ Throttle strategies control how often the policy fires for a given episode or gr | At most once every… | Caps notifications at one per episode or group within the chosen interval, regardless of rule frequency. | You want to limit alert volume for noisy rules without missing new or ongoing issues. | | Every evaluation | Notifies on every rule evaluation. Can be noisy. Use sparingly and only with infrequent rule schedules. | You need a full audit trail of every evaluation, or the rule runs infrequently enough that noise isn't a concern. | -[CONTENT NEEDED for M2: An open M2 question is whether a severity change mid-episode (escalation or de-escalation of `episode.severity`) triggers policy re-evaluation independently of episode status changes. If it does, this table needs a new strategy option or a note explaining the interaction between severity changes and the "On status change" option. Confirm the M2 decision before updating.] + ### Frequency options for Episode [frequency-when-episode-per_episode] diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md index 575b7bced6..54e6687f93 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md @@ -18,9 +18,11 @@ Because policies are separate from rules and global within a space, you can upda For matcher fields, grouping modes, throttle strategies, frequency options, and dispatch outcomes, refer to [Action policy reference](action-policy-reference-v2.md). + ## Policy fields [policy-fields] @@ -32,7 +34,8 @@ An optional KQL expression that filters which episodes this policy applies to. A Use matchers to route different episodes to different policies, for example, one policy for `data.severity: "critical"` episodes routed to PagerDuty and another for warnings routed to Slack. For available fields and examples, refer to [Matcher fields](action-policy-reference-v2.md#matcher-fields). -[CONTENT NEEDED for M2: The `data.severity: "critical"` example above will become the legacy approach once M2 ships. M2 promotes severity to `episode.severity` and `episode.severity_max` as first-class episode fields. Update this example to use `episode.severity: "CRITICAL"` and update the cross-reference to include the new fields. Also decide whether to retain `data.severity` as an alternative for rules that haven't migrated, or to remove it from guidance entirely.] + ### Grouping and frequency [reduce-noise-grouping-v2] diff --git a/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md index 56ffc92057..d312f80727 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md @@ -85,7 +85,8 @@ grouping: - service_name ``` -[CONTENT NEEDED for M2: The `grouping` key will be renamed to `track_by` in M2. Update this example to use `track_by: { fields: [service_name] }` once that change ships.] + Save the rule. It will be enabled automatically. diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md index a4aee81618..97177049c4 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/author-rules-v2.md @@ -75,12 +75,15 @@ Severity is carried by convention as a field under `data.*`, for example `data.s There is no required severity field name or fixed value set. Use whatever convention your team aligns on, and reference those same field names in your action policies. -[CONTENT NEEDED for M2: M2 promotes severity to a first-class episode-level property rather than a `data.*` convention field. Once this ships, the guidance above will need to change: there will be a defined field name, possibly a defined value set, and severity will be directly available on the episode without needing to be threaded through `KEEP` and matched using KQL. Update this section to reflect the M2 severity schema and revise any query examples that output severity as a plain string into `data.*`.] + ## Next steps Once you understand the query structure, explore [{{esql}} query patterns](esql-query-patterns-v2.md) for advanced use cases including SLO burn rate queries, no-data detection, persistent breach detection, and unsupported operations. + diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md index fc339cc454..4038f04c2f 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md @@ -45,7 +45,8 @@ Group key fields must align with the `BY` clause in your {{esql}} query's `STATS Note that rule grouping is separate from notification grouping on an action policy, which controls how episodes batch into messages. -[CONTENT NEEDED for M2: M2 replaces the current `grouping.fields` approach with a `track_by` concept and introduces a `series.*` block that gives each series a stable, explicit identity. Update this section to document the `track_by` configuration, explain how the `series.*` block differs from the current `group_hash` approach, and revise any references to `grouping.fields` or the `BY` clause alignment requirement once the M2 schema is finalized.] + ## Schedule and lookback [schedule-lookback-v2] diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/esql-query-patterns-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/esql-query-patterns-v2.md index ed9b03ea09..e961f364d4 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/esql-query-patterns-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/esql-query-patterns-v2.md @@ -84,9 +84,11 @@ The burn rate multipliers (14.4×, 6×) reflect standard SLO error budget consum Because the query computes several window pairs in one pass, the lookback window on the rule must cover the longest window in the query (3 days in the example above). -[CONTENT NEEDED for M2: An open design question from M1 is whether SLO burn rates should be pre-computed and indexed separately (for example, via a transform writing to a dedicated metrics index) rather than calculated inside the rule query. If this pattern is adopted as the recommended approach, the query structure above will need to be revised or replaced. Confirm the recommended pattern before finalizing this section.] + -[CONTENT NEEDED for M2: M2 promotes severity to a first-class episode-level property. The current query outputs severity as a plain string in a `data.*` field (for example, `"CRITICAL"`, `"HIGH"`). Verify whether M2 requires this output to map explicitly to the new episode severity property, and update the query and surrounding explanation accordingly.] + ## No-data detection [no-data-esql-query-v2] @@ -119,7 +121,8 @@ The lookback must be wide enough that known hosts appear in the result set. If t For no-data behavior when the entire base query returns zero rows (as opposed to detecting specific silent sources), refer to [No-data handling](configure-a-rule-v2.md#no-data-handling-v2). -[CONTENT NEEDED for M2: M2 introduces Track By and a `series.*` block that gives the system a stable, explicit identity for each monitored series. Once series identity is formalized, the system may support native detection of when a known series stops producing events, which is the same problem this query solves manually today. Verify whether M2 adds a built-in no-data detection option at the series level, and if so, document it here as the preferred approach and move this manual `MAX(@timestamp)` pattern to a "how it works" explanation or a workaround note for cases the native approach does not cover.] + ## Limitations and workarounds [esql-limitations-v2] @@ -147,7 +150,8 @@ FROM metrics-* The rule's lookback window must cover all the buckets you want to check (50 minutes for 10 five-minute buckets in this example). If any bucket is missing from the data because the host stopped reporting briefly mid-window, `total_buckets` drops below 10 and the condition does not fire. Design the query so that gaps in reporting produce the behavior you want: either treating partial coverage as a non-breach or adjusting the `WHERE` filter to allow it. -[CONTENT NEEDED for M2: M2's Track By feature gives the system a native concept of series identity and may provide a way to track how many consecutive evaluations a series has been breaching. If this lands, persistent breach detection could become a rule configuration option rather than something expressed entirely in the {{esql}} query. Verify whether M2 adds consecutive-breach tracking at the series level, and if so, document the configuration approach here alongside or instead of this workaround.] + ### Derivative aggregation [derivative-aggregation-v2] diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md index fb578f6376..27b3edd721 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md @@ -65,7 +65,8 @@ Grouping is configured in YAML. The fields listed here control how the rule part |---|---| | grouping.fields | Array of field names; must align with `STATS ... BY` in the {{esql}} query. | -[CONTENT NEEDED for M2: `grouping.fields` is being renamed to `track_by.fields`. Update this section heading, table key, and description once the rename ships. Also add the `series.*` output fields that M2 introduces: `series.key` (replaces `group_hash` as the internal series identity hash) and `series.tracked_by` (a structured object of the tracked field names and values, for example `{"host.name": "web-01"}`). The `series.tracked_by` fields are directly filterable in {{esql}} queries without decoding.] + ## Rule event documents @@ -92,7 +93,8 @@ These fields appear on all `.rule-events` documents, regardless of whether the r | rule.version | long | Yes | Rule version at the time this event was emitted. | | group_hash | keyword | Yes | Series identity key for grouped evaluations. | -[CONTENT NEEDED for M2: `group_hash` is being replaced by `series.key` (the internal hash) and `series.tracked_by` (a structured object of field names and values). Update this table to replace the `group_hash` row with the two new `series.*` fields once M2 ships. Any {{esql}} examples that filter or display `group_hash` will also need to be updated to use `series.key` for lookups and `series.tracked_by.*` for human-readable series identification.] + | data | flattened | Yes | Payload from the {{esql}} query output. Shape depends on your rule. | | status | keyword | Yes | One of: `breached`, `recovered`, `no_data`. | | source | keyword | Yes | Origin of this event. Product-specific identifier. | @@ -112,9 +114,10 @@ These fields only appear on documents with `type: alert`, written by rules runni | episode.status | keyword | One of: `inactive`, `pending`, `active`, `recovering`. | | episode.status_count | long | Count of consecutive evaluations in the current `episode.status`. Only set when `episode.status` is `pending` or `recovering`. | -[CONTENT NEEDED for M2: M2 promotes severity to two new first-class episode fields. Add the following rows to this table once M2 ships: + From 20cadeeb673496707303dde5698646fcfe00abfe Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Sat, 25 Apr 2026 23:39:28 -0400 Subject: [PATCH 33/40] fix tables and annotations --- .../alerting-v2-privileges.md | 2 +- .../alerting/kibana-alerting-v2/alerts-v2.md | 6 ++- .../alert-states-and-fields-reference-v2.md | 2 +- ...query-alerts-and-signals-in-discover-v2.md | 2 +- .../action-policy-reference-v2.md | 2 +- .../create-configure-action-policy-v2.md | 6 +-- .../quick-start-alerting-v2.md | 3 +- .../rules/configure-a-rule-v2.md | 22 ++++---- .../rules/create-rule-from-discover-v2.md | 3 +- .../rules/create-rule-from-rule-builder-v2.md | 3 +- .../rules/create-rule-with-yaml-v2.md | 3 +- .../rules/rule-event-field-reference-v2.md | 52 +++++++++---------- .../rules/yaml-rule-schema-reference-v2.md | 12 +++-- .../kibana-alerting-v2/setup-alerting-v2.md | 6 ++- 14 files changed, 68 insertions(+), 56 deletions(-) diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerting-v2-privileges.md b/explore-analyze/alerting/kibana-alerting-v2/alerting-v2-privileges.md index 870922414e..ababb44325 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerting-v2-privileges.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerting-v2-privileges.md @@ -13,7 +13,7 @@ description: "Privilege requirements for {{alerting-v2}}: what {{kib}} feature a $$$alerting-privileges-v2$$$ -[CONTENT NEEDED: UI. The full privilege structure (names, granularity, and which actions each level permits) has not yet been finalized. Fill in the confirmed privilege requirements before publishing.] + ## Manage rules [alerting-manage-rules-privileges] diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md index a6137457d6..309b72dfc5 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md @@ -12,7 +12,8 @@ description: "Alert episodes in {{alerting-v2}}: lifecycle states, series and ep When a rule fires repeatedly on the same problem, a flat list of events doesn't tell you when the issue started, whether it's still happening, or how long it's been going on. Alert episodes fill that gap. Each episode is a persistent record of one issue on one series, from first breach through recovery, with every evaluation appended to the same history. Nothing is overwritten. -[CONTENT NEEDED for M2: UI. Once the navigation and page name have been confirmed, add instructions for opening the Alerts page.] + ## Alert lifecycle [alert-lifecycle-v2] @@ -99,7 +100,8 @@ A rule in Detect mode only writes signals. It never opens episodes, so action po Alert events are stored in `.rule-events`. Triage actions (acknowledge, snooze, resolve) are stored in `.alert-actions`. Both are queryable in Discover. -[CONTENT NEEDED for M2: UI. "V2 Alerting Preview" is a development-phase navigation label. Once the navigation and page name have been confirmed, add instructions for opening the Alerts page.] + ### Data stream storage and retention diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md index 8f6ddcc311..93072e37c1 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/alert-states-and-fields-reference-v2.md @@ -42,7 +42,7 @@ The `status` field appears on all documents in `.rule-events`, for both `type: s | `breached` | Condition met for this evaluation row. | | `recovered` | Recovery path satisfied for this evaluation row. | | `no_data` | No-data handling produced a no-data style outcome for this evaluation. | -` + ## Alert action document fields When a user or the system records an action on an alert episode, {{kib}} writes a document to `.alert-actions`. Use this stream for triage history, operational metrics such as mean time to acknowledge (MTTA), and auditing. It does not store what your rule query returned on each run — that output is in `.rule-events`. diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md index b7b627c0a0..0b6bf54676 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/query-alerts-and-signals-in-discover-v2.md @@ -18,7 +18,7 @@ The Alerts UI shows current episode state. Discover lets you go further: ask arb To use this page, open Discover, select {{esql}}, paste a query from the examples below, then adjust the time range and placeholders (`YOUR_RULE_ID`, `YOUR_GROUP_HASH`) to match your environment. -[CONTENT NEEDED: The queries on this page use `.rule-events` and `.alert-actions` directly. Confirm whether these will remain the intended query surface, or whether users should query an ES|QL view or a stable user-facing data stream instead. Update all examples accordingly before publishing.] + diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md index 7f425e088b..885bd39ecb 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md @@ -12,7 +12,7 @@ description: "Grouping modes, throttle strategies, dispatch outcomes, and matche $$$action-policy-reference-v2$$$ -Quick-reference tables for building and debugging action policies. Use the following tables to look up valid matcher fields, map grouping modes to frequency options, or check what a dispatch outcome means. For step-by-step guidance, refer to [Create and configure an action policy](create-configure-action-policy-v2.md). +Use this page when building action policies. Below, you will find details about valid matcher fields, grouping modes and frequency options, dispatch outcome, and more. For step-by-step guidance, refer to [Create and configure an action policy](create-configure-action-policy-v2.md). ## Matcher fields [matcher-fields] diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md index 54e6687f93..382bb031a4 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md @@ -48,9 +48,9 @@ $$$reduce-noise-grouping-v2$$$ | Dispatch per | What it does | Available Frequency options | |---|---|---| -| **Episode** | One notification per episode. | - On status change
- On status change + repeat at interval
- Every evaluation | -| **Group** | Bundle episodes that share a field value. Specify **Group by** (for example `data.service.name` or `data.host.name`). | - At most once every…
- Every evaluation | -| **Digest** | One notification for all matching episodes combined. | Every evaluation | +| Episode | One notification per episode. | - On status change
- On status change + repeat at interval
- Every evaluation | +| Group | Bundle episodes that share a field value. Specify **Group by** (for example `data.service.name` or `data.host.name`). | - At most once every…
- Every evaluation | +| Digest | One notification for all matching episodes combined. | Every evaluation | ::: diff --git a/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md index d312f80727..0f8d6a9a57 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md @@ -61,7 +61,8 @@ You should see two rows: one for `checkout` (3 errors) and one for `payments` (2 Go to **Management > V2 Alerting Preview** and create a new rule using the YAML editor with the following configuration: -[CONTENT NEEDED: UI. "V2 Alerting Preview" is a development-phase navigation label that will change. Update all instances of this navigation path in this tutorial before publishing.] + ```yaml kind: alert diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md index 4038f04c2f..f9953a4261 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/configure-a-rule-v2.md @@ -80,9 +80,9 @@ Configure activation using count, timeframe, or both: | Field | Description | | --- | --- | -| pending_count | Consecutive breaches required | -| pending_timeframe | Minimum duration the condition must persist | -| pending_operator | How to combine count and timeframe (`AND` or `OR`) | +| `pending_count` | Consecutive breaches required | +| `pending_timeframe` | Minimum duration the condition must persist | +| `pending_operator` | How to combine count and timeframe (`AND` or `OR`) | Each timeframe value must be between 5 seconds and 365 days. @@ -90,9 +90,9 @@ Each timeframe value must be between 5 seconds and 365 days. | Field | Description | | --- | --- | -| recovering_count | Consecutive recoveries required | -| recovering_timeframe | Minimum duration for recovery | -| recovering_operator | How to combine count and timeframe (`AND` or `OR`) | +| `recovering_count` | Consecutive recoveries required | +| `recovering_timeframe` | Minimum duration for recovery | +| `recovering_operator` | How to combine count and timeframe (`AND` or `OR`) | Time frame fields use the same 5 seconds to 365 days bounds as activation timeframes. @@ -102,13 +102,15 @@ No-data handling controls what happens when a rule executes and the base query r ### Behaviors +Set `no_data.behavior` to one of the following values: + | Behavior | Effect | | --- | --- | -| no_data (default) | Record a no-data event | -| last_status | Carry forward the previous status | -| recover | Treat absence as recovery | +| `no_data` | Record a no-data event (default) | +| `last_status` | Carry forward the previous status | +| `recover` | Treat absence as recovery | -These behaviors apply when the base query returns zero rows. They do not help when you want to *detect* that a specific host or data source has gone silent — that requires a different query approach. See [No-data detection](esql-query-patterns-v2.md#no-data-esql-query-v2) in the authoring guide for an ES|QL pattern that surfaces silent sources as alert rows. +These behaviors apply when the base query returns zero rows. They do not help when you want to *detect* that a specific host or data source has gone silent. That requires a different query approach. See [No-data detection](esql-query-patterns-v2.md#no-data-esql-query-v2) in the authoring guide for an {{esql}} pattern that surfaces silent sources as alert rows. ## Tags and investigation guide [tags-investigation-v2] diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md index 144524d8f0..4a7d5b6a32 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md @@ -14,4 +14,5 @@ $$$create-rules-discover-v2$$$ Create {{alerting-v2}} rules directly from Discover. When you build an {{esql}} query that surfaces interesting patterns, you can convert it into a rule without rewriting the query. For the full rule form including preview, alert mode settings, and YAML toggle, refer to [Create rules using the rule builder](create-rule-from-rule-builder-v2.md). -[CONTENT NEEDED: UI. This page needs a procedure once the Discover-to-rule workflow is finalized: how to open it from an ES|QL query in Discover, what pre-fills (query, lookback, schedule), and how to complete and save the rule. Verify the menu item name and entry point against the shipped UI before publishing.] \ No newline at end of file + \ No newline at end of file diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md index 70ce9203cd..b8cdef747d 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-rule-builder-v2.md @@ -17,4 +17,5 @@ The rule builder is the right starting point when you're creating a rule from sc If you already have a working query in Discover, you can [create a rule directly from there](create-rule-from-discover-v2.md) without re-entering it. If you're managing rules as code or need to version-control rule definitions, use the [YAML editor](create-rule-with-yaml-v2.md) instead. -[CONTENT NEEDED: UI. This page needs a procedure once the rule builder UI is finalized: how to open it, how to fill in settings, how to preview, and how to save. Navigation paths, button labels, and form field arrangement should all be verified against the shipped UI before publishing. Hold until the rule builder workflow is confirmed.] + diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md index abad1a8171..86d5a7f2e4 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-with-yaml-v2.md @@ -18,4 +18,5 @@ If you're creating a rule from scratch and want guidance through each setting, t For the full list of supported YAML fields and their accepted values, refer to [YAML rule schema reference](yaml-rule-schema-reference-v2.md). -[CONTENT NEEDED: UI. This page needs a procedure once the YAML editor UI is finalized: how to open it, how to paste or edit a definition, and how to save. Hold until the editor workflow is confirmed.] + diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md index 27b3edd721..e7f31bcb34 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/rule-event-field-reference-v2.md @@ -12,7 +12,7 @@ description: "Reference for {{alerting-v2}} rule configuration fields and docume $$$rule-reference-v2$$$ -This page lists technical fields for rule configuration and rule event documents written to `.rule-events`. For alert actions in `.alert-actions`, refer to [Alert states and fields reference](../alerts/alert-states-and-fields-reference-v2.md#alert-states-reference-v2). For action policy dispatch outcomes, see [Action policy reference](../notifications/action-policy-reference-v2.md#action-policy-reference-v2). +This page lists technical fields for rule configuration and rule event documents written to `.rule-events`. For alert actions in `.alert-actions`, refer to [Alert states and fields reference](../alerts/alert-states-and-fields-reference-v2.md#alert-states-reference-v2). For action policy dispatch outcomes, refer to [Action policy reference](../notifications/action-policy-reference-v2.md#action-policy-reference-v2). :::{important} The `.rule-events` and `.alert-actions` data streams are [system indices](/reference/glossary/index.md#glossary-system-index). {{kib}} manages their versioning, retention, and lifecycle through ILM. Older backing indices are deleted automatically when the retention window expires. Do not change mappings or index settings for these streams yourself. @@ -24,8 +24,8 @@ These fields control when a rule runs and how far back its {{esql}} query looks | Field | Description | |---|---| -| schedule.every | Execution interval; minimum 5 seconds, maximum 365 days. | -| schedule.lookback | Time range the {{esql}} query covers; must not exceed 365 days; should be at least `schedule.every` to avoid gaps. | +| `schedule.every` | Execution interval; minimum 5 seconds, maximum 365 days. | +| `schedule.lookback` | Time range the {{esql}} query covers; must not exceed 365 days; should be at least `schedule.every` to avoid gaps. | ## Activation thresholds @@ -33,9 +33,9 @@ These fields are only available in Alert mode. They control how many consecutive | Field | Description | |---|---| -| pending_count | Consecutive breaches required. | -| pending_timeframe | Minimum duration the condition must persist. | -| pending_operator | How to combine count and timeframe (`AND` or `OR`). | +| `pending_count` | Consecutive breaches required. | +| `pending_timeframe` | Minimum duration the condition must persist. | +| `pending_operator` | How to combine count and timeframe (`AND` or `OR`). | ## Recovery thresholds @@ -43,9 +43,9 @@ These fields are only available in Alert mode. They control how many consecutive | Field | Description | |---|---| -| recovering_count | Consecutive recoveries required. | -| recovering_timeframe | Minimum duration for recovery. | -| recovering_operator | How to combine count and timeframe (`AND` or `OR`). | +| `recovering_count` | Consecutive recoveries required. | +| `recovering_timeframe` | Minimum duration for recovery. | +| `recovering_operator` | How to combine count and timeframe (`AND` or `OR`). | ## No-data handling @@ -53,9 +53,9 @@ These settings determine what the rule records when the {{esql}} query returns n | Behavior | Effect | |---|---| -| no_data (default) | Record a no-data event. | -| last_status | Carry forward the previous status. | -| recover | Treat absence as recovery. | +| `no_data` (default) | Record a no-data event. | +| `last_status` | Carry forward the previous status. | +| `recover` | Treat absence as recovery. | ## Rule grouping @@ -63,7 +63,7 @@ Grouping is configured in YAML. The fields listed here control how the rule part | Key | Description | |---|---| -| grouping.fields | Array of field names; must align with `STATS ... BY` in the {{esql}} query. | +| `grouping.fields` | Array of field names; must align with `STATS ... BY` in the {{esql}} query. | @@ -78,7 +78,7 @@ Each time a rule evaluates, {{kib}} writes one document per matched series to `. Both kinds share the base fields below. Only `alert` documents add the [Episode fields](#episode-fields) listed further down. :::{note} -`.rule-events` is a data stream, so it is append-only. A new document is written on every rule evaluation — existing documents are never updated. Each document is a snapshot of that moment: the `episode.status` field records the lifecycle stage the episode was in at that evaluation. To see the full history of an episode, query all documents that share the same `episode.id`. See [Query alerts and signals in Discover](../alerts/query-alerts-and-signals-in-discover-v2.md#explore-alerts-discover-v2) for example queries. +`.rule-events` is a data stream, so it is append-only. A new document is written on every rule evaluation — existing documents are never updated. Each document is a snapshot of that moment: the `episode.status` field records the lifecycle stage the episode was in at that evaluation. To view the full history of an episode, query all documents that share the same `episode.id`. Refer to [Query alerts and signals in Discover](../alerts/query-alerts-and-signals-in-discover-v2.md#explore-alerts-discover-v2) for example queries. ::: ### Signal and alert fields @@ -87,18 +87,18 @@ These fields appear on all `.rule-events` documents, regardless of whether the r | Field | Type | Required | Description | |---|---|---|---| -| @timestamp | date | Yes | When this document was written to `.rule-events`. | -| scheduled_timestamp | date | No | Scheduled execution time for this rule run. | -| rule.id | keyword | Yes | Rule identifier. | -| rule.version | long | Yes | Rule version at the time this event was emitted. | -| group_hash | keyword | Yes | Series identity key for grouped evaluations. | +| `@timestamp` | date | Yes | When this document was written to `.rule-events`. | +| `scheduled_timestamp` | date | No | Scheduled execution time for this rule run. | +| `rule.id` | keyword | Yes | Rule identifier. | +| `rule.version` | long | Yes | Rule version at the time this event was emitted. | +| `group_hash` | keyword | Yes | Series identity key for grouped evaluations. | +| `data` | flattened | Yes | Payload from the {{esql}} query output. Shape depends on your rule. | +| `status` | keyword | Yes | One of: `breached`, `recovered`, `no_data`. | +| `source` | keyword | Yes | Origin of this event. Product-specific identifier. | +| `type` | keyword | Yes | `signal` or `alert`. Application field on each rule event document written by {{kib}}. | -| data | flattened | Yes | Payload from the {{esql}} query output. Shape depends on your rule. | -| status | keyword | Yes | One of: `breached`, `recovered`, `no_data`. | -| source | keyword | Yes | Origin of this event. Product-specific identifier. | -| type | keyword | Yes | `signal` or `alert`. Application field on each rule event document written by {{kib}}. | :::{admonition} Fields not stored as a dedicated column There is no top-level or nested `duration` field on `.rule-events` documents. For triage or reporting, derive duration from [Query alerts and signals in Discover](../alerts/query-alerts-and-signals-in-discover-v2.md#explore-alerts-discover-v2), the alert UI, or your own queries over timestamps and episode identifiers. @@ -110,9 +110,9 @@ These fields only appear on documents with `type: alert`, written by rules runni | Field | Type | Description | |---|---|---| -| episode.id | keyword | Episode identifier for this series. | -| episode.status | keyword | One of: `inactive`, `pending`, `active`, `recovering`. | -| episode.status_count | long | Count of consecutive evaluations in the current `episode.status`. Only set when `episode.status` is `pending` or `recovering`. | +| `episode.id` | keyword | Episode identifier for this series. | +| `episode.status` | keyword | One of: `inactive`, `pending`, `active`, `recovering`. | +| `episode.status_count` | long | Count of consecutive evaluations in the current `episode.status`. Only set when `episode.status` is `pending` or `recovering`. | ## State transition fields @@ -65,7 +67,7 @@ Only valid when `kind: alert`. Controls how many consecutive detections are requ |---|---|---|---| | `grouping.fields` | array of strings | Max 16 fields, each max 256 characters | Fields to group results by. Each unique combination becomes its own series. | -[CONTENT NEEDED for M2: The `grouping` key is being renamed to `track_by` in M2 (for example, `track_by: { fields: [host.name] }`). The rename is not cosmetic: the old name implied a direct relationship to the ES|QL `STATS ... BY` clause, which caused confusion. `track_by` captures the actual intent — which fields identify the thing you're monitoring. + ## No-data fields @@ -88,11 +91,10 @@ Update this section to replace `grouping.fields` with `track_by.fields`, documen | `artifacts[].type` | string | For example, `runbook` | The type of artifact being attached. | | `artifacts[].value` | string | Markdown content | The content of the artifact. Runbooks are rendered as markdown in the rule detail view. | -## Other fields +## Notification policy fields | Field | Type | Accepted values | Description | |---|---|---|---| -| `time_field` | string | Any valid field name, max 128 characters | The timestamp field used for the lookback window filter. Defaults to `@timestamp`. | | `notification_policies[].ref` | string | Format: `policies/` | Links a notification policy to the rule. | ## Duration format diff --git a/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md index c3943b79ae..8506b23755 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/setup-alerting-v2.md @@ -23,7 +23,8 @@ $$$alerting-set-up-v2$$$ {{alerting-v2}} is available in {{serverless-short}} only. -[CONTENT NEEDED: UI. Enabling through Advanced Settings is a development-phase mechanism. Update this entire enablement section with the final path before publishing. The "V2 Alerting Preview" navigation label is also a development-phase name and will change.] + ## Where rule events are stored @@ -43,7 +44,8 @@ FROM $`.rule-events` | LIMIT 10 ``` -[CONTENT NEEDED: The direct index names `.rule-events` and `.alert-actions` may not be the intended query surface for end users. There is discussion about exposing this data through other methods instead. Confirm the intended access pattern before publishing this section and the [Query alerts in Discover](alerts/query-alerts-and-signals-in-discover-v2.md) page, and update all examples that reference these index names directly.] + After your first rule runs, use the query above in Discover to confirm documents are appearing. If nothing appears after a few seconds, check that the rule is enabled and that your ES|QL query returns results when run independently. From 30aca5ffa2a0bb0a70a49221fa8471dac3d275d3 Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Fri, 1 May 2026 17:37:39 -0400 Subject: [PATCH 34/40] Adds images --- .../alerting/kibana-alerting-v2.md | 28 ++++++++--- .../alerting/kibana-alerting-v2/alerts-v2.md | 34 ++++++++++--- .../alerts/view-and-manage-alerts-v2.md | 45 ++++++++++++++++-- .../quick-start-alerting-v2.md | 6 +-- .../rules/create-rule-from-discover-v2.md | 24 +++++++++- .../rules/view-manage-rules-v2.md | 18 ++++++- ...sode-example-with-activation-threshold.png | Bin 0 -> 249200 bytes ...lert-episode-example-without-threshold.png | Bin 0 -> 242679 bytes .../images/rule-alert-mode-diagram.png | Bin 0 -> 387233 bytes .../images/rule-detect-mode-diagram.png | Bin 0 -> 283374 bytes 10 files changed, 130 insertions(+), 25 deletions(-) create mode 100644 explore-analyze/images/alert-episode-example-with-activation-threshold.png create mode 100644 explore-analyze/images/alert-episode-example-without-threshold.png create mode 100644 explore-analyze/images/rule-alert-mode-diagram.png create mode 100644 explore-analyze/images/rule-detect-mode-diagram.png diff --git a/explore-analyze/alerting/kibana-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2.md index c050e5fd95..069c5d5701 100644 --- a/explore-analyze/alerting/kibana-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2.md @@ -37,12 +37,6 @@ An action policy controls whether an alert should trigger a notification, and ho ### Workflows A workflow is what actually sends the message or runs the automation, for example, posting to Slack or sending an email. Action policies hand off to workflows for delivery. Without a workflow attached, no notification is sent. Refer to [Workflows for {{alerting-v2}}](kibana-alerting-v2/workflows-alerting-v2.md) to learn more. -## A quick example - -An SRE team creates a rule that checks checkout service latency every five minutes. When p95 exceeds 2 seconds for more than one consecutive check, the rule opens an alert episode. An action policy with a `rule.labels: "checkout"` matcher picks it up, skips low-severity episodes, and sends a Slack message through an on-call workflow. - -The engineer gets one message, investigates, fixes a slow query, and latency drops. The episode recovers automatically. No dashboard watching required. - ## How the pieces fit together [how-pieces-fit-together] $$$detection-and-notification-v2$$$ @@ -67,6 +61,16 @@ Rule runs → finds something → writes an alert event 4. Matched policies invoke configured workflows, which deliver messages or run automation steps. 5. Notifications are the outcome (email, chat, webhook, and so on) when all prior steps pass. +#### Example: Rule runs in Alert mode + +An SRE team creates a rule in Alert mode that checks checkout service latency every five minutes. When p95 exceeds 2 seconds for more than one consecutive check, the rule opens an alert episode. An action policy with a `rule.labels: "checkout"` matcher picks it up, skips low-severity episodes, and sends a Slack message through an on-call workflow. + +The on-call engineer gets one message, investigates, fixes a slow query, and latency drops. The episode recovers automatically. No dashboard watching required. + +:::{image} ../images/rule-alert-mode-diagram.png +:alt: Diagram of Alert mode flow. A rule runs ES|QL on a schedule. When it finds a match, it writes an alert event tied to an ongoing episode. The episode moves through pending, active, recovering, and inactive states. An action policy matches eligible episodes and routes them to a workflow, which delivers a notification. +::: + ### Detect mode Use Detect mode when you want to record matches for querying and analysis without alerting anyone. The rule writes a signal and stops. An episode is not opened, and notifications are not sent. @@ -77,6 +81,16 @@ Rule runs → finds something → writes a signal event → no episode, no action policy, no notification ``` +#### Example: Rule runs in Detect mode + +A security team wants to track when a rarely-used admin API endpoint is called, not because every call is a problem, but because the pattern matters during investigations. They create a rule in Detect mode that checks for requests to that endpoint every hour. + +The rule writes a signal each time it finds a match. No episodes are opened and no notifications go out. When an incident is under investigation, the team queries `.rule-events` in Discover to see a full timeline of admin API activity alongside other signals, without any alert noise in between. + +:::{image} ../images/rule-detect-mode-diagram.png +:alt: Diagram of Detect mode flow. A rule runs ES|QL on a schedule. When it finds a match, it writes a signal event to .rule-events. The signal is available for querying in Discover, dashboards, and ES|QL. No episode is opened, no action policy is evaluated, and no notification is sent. +::: + $$$configuration-order$$$ ## {{alerting-v2}} terms [key-concepts-glossary] @@ -84,7 +98,7 @@ $$$configuration-order$$$ These terms appear throughout the {{alerting-v2}} docs. If a term is unclear while reading, check its definition here before going further. **Action policy** -: A set of rules that controls who gets notified, when, and how often. You configure a matcher to filter which alerts it applies to, how alerts should be grouped, and which workflow should send the message. One action policy can apply to alerts from multiple rules. To learn more, refer to [Notifications](kibana-alerting-v2/notifications-v2.md). +: How you control who gets notified, when, and how often. You configure a matcher to filter which alerts it applies to, how alerts should be grouped, and which workflow should send the message. One action policy can apply to alerts from multiple rules. To learn more, refer to [Notifications](kibana-alerting-v2/notifications-v2.md). **Alert** : A rule event produced when a rule runs in Alert mode. Unlike a signal, an alert is tied to an ongoing episode and is part of the full story of that problem from when it started to when it resolved. diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md index 309b72dfc5..e19b3e11ce 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts-v2.md @@ -32,15 +32,37 @@ inactive → pending → active → recovering → inactive Activation and recovery thresholds control how many consecutive evaluations must agree, or how long the condition must persist, before transitioning. Refer to [Configure a rule](rules/configure-a-rule-v2.md#activation-recovery-thresholds-v2) to learn more about these settings. -### Alert episode example +### Example: First breach opens, first clear closes -Suppose a service starts throwing errors at 10:00am and stops at 10:45am. Your rule runs in Alert mode every 5 seconds. Here's how one episode covers the entire incident, from detection to resolution: +A checkout-latency rule runs in Alert mode every 5 minutes. Latency breaches at 14:05 and clears at 14:50: -1. **10:00am** - The rule detects errors. A new episode is created. With no activation threshold configured, it moves immediately from `pending` to `active`. -2. **10:00am–10:45am** - The rule continues detecting errors on every run. The **same episode** stays `active`. No new episodes are created. -3. **10:45am** - Errors stop. The episode moves to `recovering`. Without a recovery threshold, it transitions immediately to `inactive`. +1. **14:00** — Routine check. p95 is within budget. The episode is `inactive`. +2. **14:05** — p95 jumps to 3.1s. The first breach is detected. With no activation threshold, the episode opens immediately as `active`. +3. **14:10–14:45** — Every evaluation finds high latency. The same episode stays `active`. No new episodes are created. +4. **14:50** — p95 drops back under 2s. With no recovery threshold, the episode resolves immediately to `inactive`. -One problem is tracked in one episode, even though the rule ran hundreds of times while the condition was ongoing. +One problem is tracked in one episode, even though the rule evaluated many times while the condition was ongoing. + +:::{image} ../../images/alert-episode-example-without-threshold.png +:alt: Timeline of a checkout-latency alert episode without thresholds. At 14:05, p95 jumps to 3.1s and the episode opens immediately as active. It stays active through 14:45. At 14:50, p95 drops back under 2s and the episode resolves immediately as inactive. +::: + +### Example: Waiting for confirmation before opening and closing + +The same checkout-latency rule, now with an activation threshold of 2 consecutive breaches and a recovery threshold of 2 consecutive clears: + +1. **14:00** — Routine check. p95 is within budget. The episode is `inactive`. +2. **14:05** — p95 jumps to 3.1s. The first breach is detected. The episode is created in `pending` and the system starts counting consecutive breaches. +3. **14:10** — p95 is still elevated. The second consecutive breach meets the activation threshold. The episode moves from `pending` to `active`, and the engineer is paged. +4. **14:10–14:45** — Latency stays elevated. The episode remains `active`. +5. **14:50** — p95 drops back under 2s. The first clean check moves the episode to `recovering`. The system starts counting consecutive clears. +6. **14:55** — A second consecutive clear meets the recovery threshold. The episode moves from `recovering` to `inactive`. + +Thresholds prevent brief spikes from opening episodes and transient dips from closing them prematurely. The episode waits in `pending` until the problem is confirmed, and waits in `recovering` until the resolution is confirmed. + +:::{image} ../../images/alert-episode-example-with-activation-threshold.png +:alt: Timeline of a checkout-latency alert episode with activation threshold of 2 and recovery threshold of 2. At 14:05, the first breach puts the episode in pending. At 14:10, the second consecutive breach moves it to active. At 14:50, the first clean check moves it to recovering. At 14:55, the second consecutive clear resolves it to inactive. +::: ## Series diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md index 7d17ee3187..0d2a0740f9 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md @@ -33,10 +33,18 @@ From any row in the table you can: - **Acknowledge / Unacknowledge:** Applies to the individual episode. - **Snooze / Unsnooze:** Applies to the group (`group_hash`), so all rows sharing that group are affected. - **Resolve / Unresolve:** Applies to the group. The episode shows as inactive in the UI when resolved, even if the underlying lifecycle data has not yet caught up. -- **Edit tags:** Opens a flyout to add tags; persisted as `tag` actions in `.alert-actions`. +- **Edit tags:** Opens a flyout where you can add new tags to the episode or remove existing ones. Tag changes apply to the individual episode and are persisted as `tag` actions in `.alert-actions`. Tags added this way appear in the **Tags** filter on the alerts table and can be queried in Discover for reporting and triage workflows. The same actions are available from the episode detail page. +### Snooze an episode [snooze-episode-v2] + +$$$snooze-episode-v2$$$ + +Snoozing suppresses notifications for an alert series for a defined period. When you select **Snooze** on a row, a popover opens where you set a duration. During the snooze window, the rule continues to evaluate, and the episode stays visible in the alerts table, but notifications are not sent. + +Snooze applies at the group level. All episodes sharing the same `group_hash` are silenced for the duration, not just the row you acted on. Use snooze when a known condition is expected to persist for a fixed time and you want to stop the noise without disabling the rule entirely. The snooze expires automatically when the duration ends. + ## Open in Discover Select **Discover** on a row to investigate source data. Discover opens with the rule {{esql}} query and a short time window around the episode so you can inspect matching documents in context. @@ -52,9 +60,34 @@ Open an episode's detail page by selecting its name or ID from the table row. Th - **Lifecycle:** A state-over-time visualization (pending, active, recovering, inactive) driven by events in `.rule-events`. - **Actions and metadata:** Tags and action-driven status (acknowledge, snooze, resolve) consistent with the episodes table. -- **Related episodes:** Other episodes on the same rule or series. +- **Related episodes:** Other episodes on the same rule or series, split into two subsections for easier triage. +- **Actors:** Users who have taken actions on the episode, visible so teams can track activity and accountability. +- **Metadata:** A dedicated tab surfacing additional fields from the source event that triggered the alert. - **Grouping:** When the rule uses grouping, the detail view surfaces the field values that identify the series. +### Related episodes [related-episodes-v2] + +$$$related-episodes-v2$$$ + +The **Related episodes** section is split into two subsections that help you distinguish between a condition that keeps recurring on one entity and a rule that is triggering across many different entities: + +- **Same alert group:** Other episodes sharing the same `rule_id` and `group_hash` as the current episode. These represent recurrences of the exact same alert condition — the same rule firing on the same grouped entity (for example, the same host or service). If this list is long, the condition is repeating and the underlying issue may not be fully resolved each time. +- **Other groups for this rule:** Episodes from the same rule but with a different `group_hash`, or all other rule episodes if there is no group. These show broader rule activity — other entities or conditions the same rule is also triggering on. Use this list to understand the rule's overall blast radius and whether a problem is isolated to one entity or affecting many. + +### Metadata tab [metadata-tab-v2] + +$$$metadata-tab-v2$$$ + +The **Metadata** tab surfaces additional information about the alert episode that is not shown in the main detail view. This includes field values from the source event that triggered the alert, giving you direct access to the raw signal during triage without switching to Discover. + +Use the **Metadata** tab when you need to inspect specific field values that are embedded in the alert's source data but not surfaced in the lifecycle or grouping sections. For example, use the tab to identify a rule's resources or version. + +### Actors [actors-v2] + +$$$actors-v2$$$ + +The **Actors** section lists the users who have taken actions on the episode (who acknowledged it, who snoozed it, and who resolved it) and when each action was taken. This gives teams visibility into the response history for an episode, which is useful for accountability and coordination. + ## Alert actions [alert-actions-v2] $$$alert-actions-v2$$$ @@ -76,15 +109,17 @@ Some actions apply only to the specific episode you acted on. Others apply to ev $$$suppression-mechanics-v2$$$ -Suppression controls whether a matched alert episode actually sends a notification. The dispatcher evaluates suppression before any action policy matcher runs, so a suppressed episode never reaches routing, grouping, or throttle checks. Mechanically, each suppression option is stored as a separate document type in `.alert-actions`, and the dispatcher runs a targeted query scoped to only the relevant `(rule_id, group_hash)` pairs from the current evaluation — rather than re-reading the entire `.rule-events` index — to keep dispatch evaluation efficient at high episode volumes. +Suppression controls whether a matched alert episode actually sends a notification. The dispatcher evaluates suppression before any action policy matcher runs, so a suppressed episode never reaches routing, grouping, or throttle checks. + +Each suppression option is stored as a separate document type in `.alert-actions`. To keep dispatch evaluation efficient at high episode volumes, the dispatcher queries only the relevant `(rule_id, group_hash)` pairs from the current evaluation rather than re-reading the entire `.rule-events` index. There are three suppression options, each with a different scope: | Option | Scope | When to use | |---|---|---| | Acknowledge | Per episode | You're actively working on a specific breach and want to silence notifications for it. To clear suppression, remove the acknowledgement. | -| Deactivate | Per episode | Marks the episode as inactive and stops notifications for it. Unlike acknowledge, this closes the episode rather than silencing it while leaving it active. Use when you want to manually close a specific episode, For example, when you've addressed the issue but the rule hasn't recovered automatically. | -| Snooze | Per series (all episodes) | You want to quiet an entire alert series for a defined period. For example, during a known noisy window for a host. Expires automatically. +| Deactivate | Per episode | Marks the episode as inactive and stops notifications for it. Unlike acknowledge, this closes the episode rather than silencing it while leaving it active. Use when you want to manually close a specific episode, for example, when you've addressed the issue but the rule hasn't recovered automatically. | +| Snooze | Per series (all episodes) | You want to quiet an entire alert series for a defined period. For example, during a known noisy window for a host. Expires automatically. | diff --git a/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md index 0f8d6a9a57..ce67a535a4 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/quick-start-alerting-v2.md @@ -97,14 +97,14 @@ Save the rule. It will be enabled automatically. Wait 5 seconds, then run the following in Discover using the ES|QL mode. Replace `` with the `tutorial-error-rate` rule ID. ```esql -FROM $`.rule-events` +FROM .rule-events | WHERE rule.id == "" | SORT @timestamp DESC | LIMIT 10 ``` :::{tip} -After saving the rule, open it in **Management > V2 Alerting Preview**. The rule ID is the string at the browser URL. +After saving the rule, open its details page. The rule ID is the string at the end of the browser URL. ::: Check the following in the query results: @@ -122,7 +122,7 @@ Check the following in the query results: In Discover, run: ```esql -FROM $`.rule-events` +FROM .rule-events | WHERE rule.id == "" | STATS latest = MAX(@timestamp) BY episode.id, episode.status, data.service_name | SORT latest DESC diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md index 4a7d5b6a32..a452d02cc1 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/create-rule-from-discover-v2.md @@ -12,7 +12,27 @@ description: "Turn an {{esql}} query in Discover into a {{alerting-v2}} rule wit $$$create-rules-discover-v2$$$ -Create {{alerting-v2}} rules directly from Discover. When you build an {{esql}} query that surfaces interesting patterns, you can convert it into a rule without rewriting the query. For the full rule form including preview, alert mode settings, and YAML toggle, refer to [Create rules using the rule builder](create-rule-from-rule-builder-v2.md). +Create {{alerting-v2}} rules directly from Discover. When you build an {{esql}} query that surfaces interesting patterns, you can convert it into a rule without rewriting the query. For the full rule form including alert mode settings and YAML toggle, refer to [Create rules using the rule builder](create-rule-from-rule-builder-v2.md). - \ No newline at end of file diff --git a/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md b/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md index e62b71430b..189b22eadb 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/rules/view-manage-rules-v2.md @@ -16,9 +16,23 @@ $$$open-the-list$$$ After a rule is created, edit its settings, pause it, remove it, and more from the page listing rules. The rules list gives you search, filter, sort, and bulk actions across all rules in the space. Selecting a rule name opens its details page, where you can review the full configuration and edit or act on it directly. -## Rule details page +## Find and filter rules [find-filter-rules-v2] + +$$$find-filter-rules-v2$$$ + +Use the search bar at the top of the rules list to find rules by name. The search field accepts plain text and matches against rule names without requiring structured query syntax — type any part of a rule name to narrow the list. Combine text search with filter controls to narrow results further by rule type, status, or tags. + +Select any column header to sort the list. Use bulk actions when you need to enable, disable, or delete multiple rules at once. + +## Rule summary flyout [rule-summary-flyout-v2] -Select a rule name to open its details page. The details page shows: +$$$rule-summary-flyout-v2$$$ + +To inspect a rule without navigating away from the rules list, select the expand icon on any row. The rule summary flyout opens alongside the list and shows a snapshot of the rule: its status, last run time, recent alert episode activity, and quick actions such as enable, disable, and snooze. + +Use the flyout when you want to confirm a rule is healthy or take a quick action without committing to a full page load. To open the complete rule configuration with all settings and edit controls, select the rule name in the table row or in the flyout header. + +## Rule details page - **Conditions**: The full {{esql}} base query, alert condition, schedule, lookback, grouping, and recovery settings. - **Runbook**: If the rule has an investigation guide, it appears here alongside Conditions. diff --git a/explore-analyze/images/alert-episode-example-with-activation-threshold.png b/explore-analyze/images/alert-episode-example-with-activation-threshold.png new file mode 100644 index 0000000000000000000000000000000000000000..2ee4e33dec194086c3978623491ffbbbda68202c GIT binary patch literal 249200 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 NuJ{Q(DKEVYuFYTkWtJmHCu*+sWh*i{s* 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

c*2MSiH^rD#ph79wOq)FVkK4a$ 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

H)4S`$|y$#XN?Fh~JTwzYnn;8dUC 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

1!WUIRWeke01EbuQ3H^?v~LLQI(7jlXE>@qU^h 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 z%0D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 K?TbmY$bSLR(^V?~ literal 0 HcmV?d00001 diff --git a/explore-analyze/images/rule-alert-mode-diagram.png b/explore-analyze/images/rule-alert-mode-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..3c28586a7b07df38bb4ac70c4bf90b3018e0fc00 GIT binary patch literal 387233 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

~9iZ!D7=*Xuj!5&Uw*Qol!67X?qO2y01f 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®kO3BH2OY9&LYMAVaA3nB$HW-4b<9XlV4`uSe#9) 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 z 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 Date: Wed, 13 May 2026 23:21:31 -0400 Subject: [PATCH 35/40] Update explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Mike Côté --- explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md index 0cc94f08ad..855eebfdfd 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md @@ -47,7 +47,7 @@ When an episode is eligible for dispatch, the system processes each enabled poli 4. **Throttle:** Has a notification already gone out for this group recently? If so, wait. 5. **Destinations:** Send to the policy's workflow destinations. -The dispatcher runs on a short interval (around 10 seconds). Notifications don't arrive on the exact rule schedule. They follow the dispatcher's own cycle. +The dispatcher runs on a short interval (around 5 seconds). Notifications don't arrive on the exact rule schedule. They follow the dispatcher's own cycle. ### Possible outcomes [possible-outcomes] From 99827b3dfd3e6ee6b29c3140b72c722e74f3fde3 Mon Sep 17 00:00:00 2001 From: Nastasha Solomon <79124755+nastasha-solomon@users.noreply.github.com> Date: Wed, 13 May 2026 23:47:57 -0400 Subject: [PATCH 36/40] Update explore-analyze/alerting/kibana-alerting-v1/alerting-setup-v1.md --- .../alerting/kibana-alerting-v1/alerting-setup-v1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/explore-analyze/alerting/kibana-alerting-v1/alerting-setup-v1.md b/explore-analyze/alerting/kibana-alerting-v1/alerting-setup-v1.md index c2ac29c3ec..2de18892e6 100644 --- a/explore-analyze/alerting/kibana-alerting-v1/alerting-setup-v1.md +++ b/explore-analyze/alerting/kibana-alerting-v1/alerting-setup-v1.md @@ -99,7 +99,7 @@ When you create a rule in {{kib}}, an API key is created that captures a snapsho When you disable a rule, it retains the associated API key which is reused when the rule is enabled. If the API key is missing when you enable the rule, a new key is generated that has your current security privileges. When you import a rule, you must enable it before you can use it and a new API key is generated at that time. -You can generate a new API key at any time in **{{stack-manage-app}} > {{rules-ui-v2}}** or in the rule details page by selecting **Update API key** in the actions menu. +You can generate a new API key at any time in **{{stack-manage-app}} > {{rules-ui-v1}}** or in the rule details page by selecting **Update API key** in the actions menu. If you manage your rules by using {{kib}} APIs, they support support both key- and token-based authentication as described in [Authentication]({{kib-apis}}authentication). To use key-based authentication, create API keys and use them in the header of your API calls as described in [API Keys](../../../deploy-manage/api-keys/elasticsearch-api-keys.md). To use token-based authentication, provide a username and password; an API key that matches the current privileges of the user is created automatically. In both cases, the API key is subsequently associated with the rule and used when it runs. From 299c0d94869372c659595c870ce2e7e003eebbcf Mon Sep 17 00:00:00 2001 From: Nastasha Solomon <79124755+nastasha-solomon@users.noreply.github.com> Date: Thu, 14 May 2026 00:34:13 -0400 Subject: [PATCH 37/40] Update explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md --- .../kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md | 1 - 1 file changed, 1 deletion(-) diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md index 0d2a0740f9..1d0d3793b3 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md @@ -111,7 +111,6 @@ $$$suppression-mechanics-v2$$$ Suppression controls whether a matched alert episode actually sends a notification. The dispatcher evaluates suppression before any action policy matcher runs, so a suppressed episode never reaches routing, grouping, or throttle checks. -Each suppression option is stored as a separate document type in `.alert-actions`. To keep dispatch evaluation efficient at high episode volumes, the dispatcher queries only the relevant `(rule_id, group_hash)` pairs from the current evaluation rather than re-reading the entire `.rule-events` index. There are three suppression options, each with a different scope: From 5e01a8c4fb3292c3f980b943c1d0b2ed4083d22c Mon Sep 17 00:00:00 2001 From: Nastasha Solomon <79124755+nastasha-solomon@users.noreply.github.com> Date: Thu, 14 May 2026 00:42:27 -0400 Subject: [PATCH 38/40] Apply suggestion from @nastasha-solomon --- .../alerting/kibana-alerting-v1/alerting-setup-v1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/explore-analyze/alerting/kibana-alerting-v1/alerting-setup-v1.md b/explore-analyze/alerting/kibana-alerting-v1/alerting-setup-v1.md index 2de18892e6..6b61128b29 100644 --- a/explore-analyze/alerting/kibana-alerting-v1/alerting-setup-v1.md +++ b/explore-analyze/alerting/kibana-alerting-v1/alerting-setup-v1.md @@ -99,7 +99,7 @@ When you create a rule in {{kib}}, an API key is created that captures a snapsho When you disable a rule, it retains the associated API key which is reused when the rule is enabled. If the API key is missing when you enable the rule, a new key is generated that has your current security privileges. When you import a rule, you must enable it before you can use it and a new API key is generated at that time. -You can generate a new API key at any time in **{{stack-manage-app}} > {{rules-ui-v1}}** or in the rule details page by selecting **Update API key** in the actions menu. +You can generate a new API key at any time in **{{stack-manage-app}} > {{rules-ui}}** or in the rule details page by selecting **Update API key** in the actions menu. If you manage your rules by using {{kib}} APIs, they support support both key- and token-based authentication as described in [Authentication]({{kib-apis}}authentication). To use key-based authentication, create API keys and use them in the header of your API calls as described in [API Keys](../../../deploy-manage/api-keys/elasticsearch-api-keys.md). To use token-based authentication, provide a username and password; an API key that matches the current privileges of the user is created automatically. In both cases, the API key is subsequently associated with the rule and used when it runs. From a438210cbe1e789996cb209ee7b2adfc591c48be Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Thu, 14 May 2026 00:51:17 -0400 Subject: [PATCH 39/40] terminology consistency edits --- .../alerting/kibana-alerting-v2.md | 2 +- .../alerts/view-and-manage-alerts-v2.md | 20 +++++++++---------- .../kibana-alerting-v2/notifications-v2.md | 6 +++--- .../action-policy-reference-v2.md | 10 +++++----- .../create-configure-action-policy-v2.md | 2 +- .../rules/create-rule-from-discover-v2.md | 4 ++-- .../rules/esql-query-patterns-v2.md | 2 +- .../kibana-alerting-v2/setup-alerting-v2.md | 2 +- 8 files changed, 24 insertions(+), 24 deletions(-) diff --git a/explore-analyze/alerting/kibana-alerting-v2.md b/explore-analyze/alerting/kibana-alerting-v2.md index 069c5d5701..15bf79431c 100644 --- a/explore-analyze/alerting/kibana-alerting-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2.md @@ -98,7 +98,7 @@ $$$configuration-order$$$ These terms appear throughout the {{alerting-v2}} docs. If a term is unclear while reading, check its definition here before going further. **Action policy** -: How you control who gets notified, when, and how often. You configure a matcher to filter which alerts it applies to, how alerts should be grouped, and which workflow should send the message. One action policy can apply to alerts from multiple rules. To learn more, refer to [Notifications](kibana-alerting-v2/notifications-v2.md). +: How you control who gets notified, when, and how often. You configure a matcher to filter which alerts it applies to, how episodes batch into notifications (Dispatch per), and which workflow should send the message. One action policy can apply to alerts from multiple rules. To learn more, refer to [Notifications](kibana-alerting-v2/notifications-v2.md). **Alert** : A rule event produced when a rule runs in Alert mode. Unlike a signal, an alert is tied to an ongoing episode and is part of the full story of that problem from when it started to when it resolved. diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md index 1d0d3793b3..0ec6ec7583 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md @@ -31,8 +31,8 @@ Narrow the time range when filters return too many rows or when tag options need From any row in the table you can: - **Acknowledge / Unacknowledge:** Applies to the individual episode. -- **Snooze / Unsnooze:** Applies to the group (`group_hash`), so all rows sharing that group are affected. -- **Resolve / Unresolve:** Applies to the group. The episode shows as inactive in the UI when resolved, even if the underlying lifecycle data has not yet caught up. +- **Snooze / Unsnooze:** Applies to the series (`group_hash`), so all rows in that series are affected. +- **Resolve / Unresolve:** Applies to the series. The episode shows as inactive in the UI when resolved, even if the underlying lifecycle data has not yet caught up. - **Edit tags:** Opens a flyout where you can add new tags to the episode or remove existing ones. Tag changes apply to the individual episode and are persisted as `tag` actions in `.alert-actions`. Tags added this way appear in the **Tags** filter on the alerts table and can be queried in Discover for reporting and triage workflows. The same actions are available from the episode detail page. @@ -43,7 +43,7 @@ $$$snooze-episode-v2$$$ Snoozing suppresses notifications for an alert series for a defined period. When you select **Snooze** on a row, a popover opens where you set a duration. During the snooze window, the rule continues to evaluate, and the episode stays visible in the alerts table, but notifications are not sent. -Snooze applies at the group level. All episodes sharing the same `group_hash` are silenced for the duration, not just the row you acted on. Use snooze when a known condition is expected to persist for a fixed time and you want to stop the noise without disabling the rule entirely. The snooze expires automatically when the duration ends. +Snooze applies at the series level. All episodes sharing the same `group_hash` are silenced for the duration, not just the row you acted on. Use snooze when a known condition is expected to persist for a fixed time and you want to stop the noise without disabling the rule entirely. The snooze expires automatically when the duration ends. ## Open in Discover @@ -71,8 +71,8 @@ $$$related-episodes-v2$$$ The **Related episodes** section is split into two subsections that help you distinguish between a condition that keeps recurring on one entity and a rule that is triggering across many different entities: -- **Same alert group:** Other episodes sharing the same `rule_id` and `group_hash` as the current episode. These represent recurrences of the exact same alert condition — the same rule firing on the same grouped entity (for example, the same host or service). If this list is long, the condition is repeating and the underlying issue may not be fully resolved each time. -- **Other groups for this rule:** Episodes from the same rule but with a different `group_hash`, or all other rule episodes if there is no group. These show broader rule activity — other entities or conditions the same rule is also triggering on. Use this list to understand the rule's overall blast radius and whether a problem is isolated to one entity or affecting many. +- **Same alert series:** Other episodes sharing the same `rule_id` and `group_hash` as the current episode. These represent recurrences of the exact same alert condition — the same rule firing on the same series (for example, the same host or service). If this list is long, the condition is repeating and the underlying issue may not be fully resolved each time. +- **Other series for this rule:** Episodes from the same rule but with a different `group_hash`, or all other rule episodes when the rule does not use grouping. These show broader rule activity — other entities or conditions the same rule is also triggering on. Use this list to understand the rule's overall blast radius and whether a problem is isolated to one entity or affecting many. ### Metadata tab [metadata-tab-v2] @@ -94,15 +94,15 @@ $$$alert-actions-v2$$$ When you take an action, {{kib}} writes a document to the `.alert-actions` data stream. You can query these documents in Discover for auditing and metrics such as mean time to acknowledge (MTTA). For a full field list and state definitions, refer to [Alert states and fields reference](alert-states-and-fields-reference-v2.md#alert-states-reference-v2). -### Episode scope versus group scope +### Episode scope versus series scope -Some actions apply only to the specific episode you acted on. Others apply to every episode in the same group, meaning all episodes that share the same rule and series. This matters when a rule tracks multiple services or hosts. Snoozing one episode silences the whole group, not only that service. +Some actions apply only to the specific episode you acted on. Others apply to every episode in the same series, meaning all episodes that share the same rule and `group_hash`. This matters when a rule tracks multiple services or hosts. Snoozing one episode silences the whole series, not only that service. | Action | Scope | |---|---| | Acknowledge / Unacknowledge | Episode | -| Snooze / Unsnooze | Group | -| Resolve / Unresolve | Group | +| Snooze / Unsnooze | Series | +| Resolve / Unresolve | Series | | Edit tags | Episode | ## How suppression works [suppression-mechanics-v2] @@ -118,7 +118,7 @@ There are three suppression options, each with a different scope: |---|---|---| | Acknowledge | Per episode | You're actively working on a specific breach and want to silence notifications for it. To clear suppression, remove the acknowledgement. | | Deactivate | Per episode | Marks the episode as inactive and stops notifications for it. Unlike acknowledge, this closes the episode rather than silencing it while leaving it active. Use when you want to manually close a specific episode, for example, when you've addressed the issue but the rule hasn't recovered automatically. | -| Snooze | Per series (all episodes) | You want to quiet an entire alert series for a defined period. For example, during a known noisy window for a host. Expires automatically. | +| Snooze | Per series | You want to quiet an entire alert series for a defined period. For example, during a known noisy window for a host. Expires automatically. | diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md index 855eebfdfd..10a534fea4 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md @@ -25,8 +25,8 @@ Each policy has four controls: | Control | What it does | | --- | --- | | Matcher (optional KQL) | Filters which episodes this policy applies to. An empty matcher matches all episodes in the space. | -| Dispatch per (grouping) | Controls how episodes batch into notifications: one per episode, one per defined group, or one digest for all. | -| Frequency (throttling) | Controls how often the policy can notify for the same group. | +| Dispatch per (grouping) | Controls how episodes batch into notifications: one per episode, one per notification group (Dispatch per **Group**), or one digest for all. | +| Frequency (throttling) | Controls how often the policy can notify for the same notification group. | | Destinations | One or more workflows to invoke when all conditions are met. | ## How policies apply to rules @@ -44,7 +44,7 @@ When an episode is eligible for dispatch, the system processes each enabled poli 1. **Suppression:** Is the episode acknowledged, snoozed, or deactivated? If so, skip dispatch. 2. **Matcher:** Does the episode match the policy's KQL? If not, skip this policy. 3. **Grouping:** How should matching episodes batch into notification groups? -4. **Throttle:** Has a notification already gone out for this group recently? If so, wait. +4. **Throttle:** Has a notification already gone out for this notification group recently? If so, wait. 5. **Destinations:** Send to the policy's workflow destinations. The dispatcher runs on a short interval (around 5 seconds). Notifications don't arrive on the exact rule schedule. They follow the dispatcher's own cycle. diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md index 885bd39ecb..fff38551d0 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md @@ -43,18 +43,18 @@ Controls how the policy batches matching episodes before sending a notification. | Option | Description | When to use | |---|---|---| | Episode | Each episode triggers its own notification independently. Default selection. | You need per-issue visibility and want to handle each problem separately. | -| Group | The policy bundles episodes that share the same value for a specified `data.*` field into one notification per unique value. | A rule produces many related episodes (for example, one per service or host) and you want to reduce noise by grouping them. | +| Group | The policy bundles episodes that share the same value for a specified `data.*` field into one notification per unique value (a **notification group**). | A rule produces many related episodes (for example, one per service or host) and you want to reduce noise by batching them into shared notifications. | | Digest | The policy combines all matching episodes into a single notification, regardless of what they have in common. | You want a single periodic summary of everything that matched, rather than individual alerts. | ## Throttle strategies [throttle-strategies] -Throttle strategies control how often the policy fires for a given episode or group. The available strategies depend on the **Dispatch per** setting. Not all strategies are valid for all modes. +Throttle strategies control how often the policy fires for a given episode or notification group. The available strategies depend on the **Dispatch per** setting. Not all strategies are valid for all modes. | Option | Description | When to use | |---|---|---| | On status change | Notifies when the episode status changes (for example, active → recovering). One notification per transition. | You only need to know when something breaks and when it's resolved. No reminders needed. | | On status change + repeat at interval | Notifies on status change, then resends notifications at a regular interval while the episode remains in the same status. | You want status change alerts plus periodic notifications that a problem is still unresolved, in case it has been missed or pushed aside. | -| At most once every… | Caps notifications at one per episode or group within the chosen interval, regardless of rule frequency. | You want to limit alert volume for noisy rules without missing new or ongoing issues. | +| At most once every… | Caps notifications at one per episode or notification group within the chosen interval, regardless of rule frequency. | You want to limit alert volume for noisy rules without missing new or ongoing issues. | | Every evaluation | Notifies on every rule evaluation. Can be noisy. Use sparingly and only with infrequent rule schedules. | You need a full audit trail of every evaluation, or the rule runs infrequently enough that noise isn't a concern. | From 486840c1dfd9827d2dd96e145c7436e9011c95b9 Mon Sep 17 00:00:00 2001 From: Nastasha Solomon Date: Thu, 14 May 2026 00:58:14 -0400 Subject: [PATCH 40/40] frequency term consistency --- explore-analyze/alerting-overview.md | 2 +- .../alerts/view-and-manage-alerts-v2.md | 2 +- .../alerting/kibana-alerting-v2/notifications-v2.md | 8 ++++---- .../notifications/action-policy-reference-v2.md | 10 +++++----- .../notifications/create-configure-action-policy-v2.md | 8 ++++---- .../kibana-alerting-v2/workflows-alerting-v2.md | 4 ++-- 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/explore-analyze/alerting-overview.md b/explore-analyze/alerting-overview.md index d868ab5141..77c2c21dcc 100644 --- a/explore-analyze/alerting-overview.md +++ b/explore-analyze/alerting-overview.md @@ -38,7 +38,7 @@ serverless: preview stack: unavailable ``` -{{alerting-v2}} is built on {{esql}}. You write the query that defines what to watch for, choose how alerts are tracked and grouped, and control notifications through action policies (shared objects that handle routing, frequency, and grouping across many rules at once). It adds alert lifecycle tracking with episodes, per-series snooze, and rules on alerts for correlation and escalation. {{alerting-v2}} a strong fit when you want full control over what data travels with each alert and how your team is notified. +{{alerting-v2}} is built on {{esql}}. You write the query that defines what to watch for, choose how alerts are tracked per series, and control notifications through action policies (shared objects that handle routing, frequency, and notification batching across many rules at once). It adds alert lifecycle tracking with episodes, per-series snooze, and rules on alerts for correlation and escalation. {{alerting-v2}} a strong fit when you want full control over what data travels with each alert and how your team is notified. [Get started with {{alerting-v2}} →](alerting/kibana-alerting-v2.md) diff --git a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md index 0ec6ec7583..d793a4fcbf 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/alerts/view-and-manage-alerts-v2.md @@ -109,7 +109,7 @@ Some actions apply only to the specific episode you acted on. Others apply to ev $$$suppression-mechanics-v2$$$ -Suppression controls whether a matched alert episode actually sends a notification. The dispatcher evaluates suppression before any action policy matcher runs, so a suppressed episode never reaches routing, grouping, or throttle checks. +Suppression controls whether a matched alert episode actually sends a notification. The dispatcher evaluates suppression before any action policy matcher runs, so a suppressed episode never reaches routing, grouping, or frequency checks. There are three suppression options, each with a different scope: diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md index 10a534fea4..d0bcca3737 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications-v2.md @@ -5,7 +5,7 @@ applies_to: serverless: preview products: - id: kibana -description: "How {{alerting-v2}} action policies route alert episodes to notifications: matchers, grouping, throttling, and workflow destinations." +description: "How {{alerting-v2}} action policies route alert episodes to notifications: matchers, grouping, frequency, and workflow destinations." --- # {{alerting-v2}} notifications @@ -26,7 +26,7 @@ Each policy has four controls: | --- | --- | | Matcher (optional KQL) | Filters which episodes this policy applies to. An empty matcher matches all episodes in the space. | | Dispatch per (grouping) | Controls how episodes batch into notifications: one per episode, one per notification group (Dispatch per **Group**), or one digest for all. | -| Frequency (throttling) | Controls how often the policy can notify for the same notification group. | +| Frequency | Controls how often the policy can notify for the same notification group. | | Destinations | One or more workflows to invoke when all conditions are met. | ## How policies apply to rules @@ -44,7 +44,7 @@ When an episode is eligible for dispatch, the system processes each enabled poli 1. **Suppression:** Is the episode acknowledged, snoozed, or deactivated? If so, skip dispatch. 2. **Matcher:** Does the episode match the policy's KQL? If not, skip this policy. 3. **Grouping:** How should matching episodes batch into notification groups? -4. **Throttle:** Has a notification already gone out for this notification group recently? If so, wait. +4. **Frequency:** Has a notification already gone out for this notification group recently? If so, wait. 5. **Destinations:** Send to the policy's workflow destinations. The dispatcher runs on a short interval (around 5 seconds). Notifications don't arrive on the exact rule schedule. They follow the dispatcher's own cycle. @@ -56,7 +56,7 @@ Each notification attempt results in one of the following outcomes. | Outcome | What it means | | --- | --- | | `dispatched` | A notification was sent. | -| `throttled` | Dispatch was suppressed due to throttle timing. | +| `throttled` | Dispatch was suppressed because the **frequency** interval had not elapsed. | | `suppressed` | The episode was suppressed before dispatch (acknowledged, snoozed, or deactivated). | | `unmatched` | No policy matched this episode; no workflow ran. | | `error` | Processing failed. Check {{kib}} logs. | diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md index fff38551d0..788244b688 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications/action-policy-reference-v2.md @@ -5,7 +5,7 @@ applies_to: serverless: preview products: - id: kibana -description: "Grouping modes, throttle strategies, dispatch outcomes, and matcher field reference for {{alerting-v2}} action policies." +description: "Grouping modes, frequency options, dispatch outcomes, and matcher field reference for {{alerting-v2}} action policies." --- # Action policy reference [action-policy-reference-v2] @@ -33,7 +33,7 @@ Use these fields in the **Matcher** expression to filter which episodes a policy Add both fields to this table with examples. Update the introductory sentence to include them. Also remove or deprecate the `data.severity` example once `episode.severity` is the preferred approach, otherwise users will get conflicting guidance about which field to use for severity matching. -There is also an open M2 question about whether a severity change mid-episode (de-escalation or escalation) triggers policy re-evaluation. If it does, document the re-evaluation behavior in the throttle strategies section below, since it interacts with throttling.] +There is also an open M2 question about whether a severity change mid-episode (de-escalation or escalation) triggers policy re-evaluation. If it does, document the re-evaluation behavior in the frequency options section below, since it interacts with frequency limits.] --> ## Dispatch per options [notification-grouping] @@ -46,9 +46,9 @@ Controls how the policy batches matching episodes before sending a notification. | Group | The policy bundles episodes that share the same value for a specified `data.*` field into one notification per unique value (a **notification group**). | A rule produces many related episodes (for example, one per service or host) and you want to reduce noise by batching them into shared notifications. | | Digest | The policy combines all matching episodes into a single notification, regardless of what they have in common. | You want a single periodic summary of everything that matched, rather than individual alerts. | -## Throttle strategies [throttle-strategies] +## Frequency [throttle-strategies] -Throttle strategies control how often the policy fires for a given episode or notification group. The available strategies depend on the **Dispatch per** setting. Not all strategies are valid for all modes. +**Frequency** controls how often the policy fires for a given episode or notification group. The available options depend on the **Dispatch per** setting. Not all options are valid for all modes. | Option | Description | When to use | |---|---|---| @@ -94,7 +94,7 @@ The system records each notification attempt with one of the following outcomes. | Outcome | What happened | |---|---| | `dispatched` | The system sent the notification successfully. | -| `throttled` | The system skipped delivery because the throttle interval hadn't elapsed. This is expected behavior, not an error. | +| `throttled` | The system skipped delivery because the **frequency** interval had not elapsed. This is expected behavior, not an error. | | `suppressed` | Dispatch was blocked before the notification went out—the rule was acknowledged, snoozed, or deactivated. | | `unmatched` | No action policy matched this episode, so no workflow ran. | | `error` | An error occurred during processing. Check {{kib}} logs to identify the cause. | \ No newline at end of file diff --git a/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md b/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md index 53cc4a44a2..4b8d027b00 100644 --- a/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md +++ b/explore-analyze/alerting/kibana-alerting-v2/notifications/create-configure-action-policy-v2.md @@ -12,11 +12,11 @@ description: "Create {{alerting-v2}} action policies, configure matchers, Dispat $$$create-manage-action-policies-v2$$$ -Rules define what counts as a problem. Action policies define what happens when a problem is detected. They determine which episodes generate notifications, how they're grouped and throttled, and where they're routed. +Rules define what counts as a problem. Action policies define what happens when a problem is detected. They determine which episodes generate notifications, how episodes batch for dispatch, **frequency** limits on notifications, and where they're routed. Because policies are separate from rules and global within a space, you can update notification behavior across many rules at once without touching detection logic, and you can route the same alerts differently depending on severity or source. You create and manage policies from the **Action policies** page, not from the rule form. -For matcher fields, grouping modes, throttle strategies, frequency options, and dispatch outcomes, refer to [Action policy reference](action-policy-reference-v2.md). +For matcher fields, grouping modes, frequency options, and dispatch outcomes, refer to [Action policy reference](action-policy-reference-v2.md).