Notifications module
The Notifications module enables the Wazuh indexer to send alerts, reports, and messages to external services. These external services include: Slack, Microsoft Teams, Amazon Chime, Amazon SNS, email, and custom webhooks.
The module acts as a bridge between internal Wazuh indexer components such as Alerting, Reporting, and Index State Management (ISM) and external destinations. When an alert fires or a report is generated, these components call the Notifications module. The notification module resolves the destination type and sends the message through the appropriate transport.
All channel configurations are managed through a unified REST API at /_plugins/_notifications/ and are accessible from the Wazuh Dashboard under Explore > Notifications > Channels.
Key capabilities
The Notifications module provides the following capabilities, enabling administrators and security teams to integrate the Wazuh indexer with a wide range of external notification services and platforms.
Multi-channel delivery: Send notifications to Slack, Microsoft Teams, Amazon Chime, email (SMTP and AWS SES), AWS SNS, and custom HTTP webhooks.
Unified REST API: Create, update, delete, and query notification channel configurations through a single API surface at
/_plugins/_notifications/.Test notifications: Validate a channel configuration by sending a test message before relying on it for production alerts.
Feature discovery: Other modules can dynamically query the supported notification features and allowed channel types.
RBAC integration: Access to notification configurations is governed by the Wazuh indexer security module, with optional backend-role-based filtering.
Default channels: Pre-configured channel templates for Slack, Jira, PagerDuty, and Shuffle SOAR are created automatically on first startup.
Extensible architecture: The module uses a Service Provider Interface (SPI) pattern, making it straightforward to add new destination types.
Supported channel types
The Notifications module delivers messages to external services through the following channel types. Each channel type defines how a notification is delivered and requires its own set of configuration fields.
Channel Type |
Protocol |
Description |
|---|---|---|
|
HTTPS (Webhook) |
Sends messages to a Slack channel using an incoming webhook URL. |
|
HTTPS (Webhook) |
Sends messages to an Amazon Chime room using a webhook URL. |
|
HTTPS (Webhook) |
Sends messages to a Microsoft Teams channel using a connector webhook. |
|
HTTP/HTTPS |
Sends a payload to an arbitrary HTTP endpoint with configurable method, headers, and URL. |
|
SMTP / AWS SES |
Sends email messages. Requires an smtp_account or ses_account configuration. |
|
AWS SNS SDK |
Publishes a message to an Amazon SNS topic. |
|
None |
Defines SMTP server connection details (host, port, encryption method, and credentials). |
|
None |
Defines AWS SES sending details (region, IAM role ARN, and from address). |
|
None |
Defines a named group of email recipients for reuse across email-type channels. |
Default notification channels
The Notifications module creates a set of predefined notification channels when the Wazuh indexer starts for the first time. These channels are disabled by default and contain placeholder values that must be updated before use.
You can modify the channel configuration and enable it after providing the required credentials and connection details.
The following default channels are created:
Channel Name |
Type |
Target Service |
Fixed ID |
|---|---|---|---|
Slack Channel |
|
Slack |
|
Jira Channel |
|
Jira Cloud |
|
PagerDuty Channel |
|
PagerDuty Events API v2 |
|
Shuffle Channel |
|
Shuffle SOAR |
|
Default channels behaviors
The following rules govern how the module creates and manages default channels.
Default channels are created only on the cluster manager node during startup.
If a default channel already exists, it is not recreated or overwritten on subsequent startups.
All default channels are created with an empty access list, making them visible to all users.
Each channel has a fixed, predictable ID (for example,
default_slack_channel) so they can be referenced consistently.A sample alerting monitor is created alongside these channels. You can review it under Explore > Alerting > Monitors in the Wazuh Dashboard before enabling production alerts.
Activating a default channel
Default notification channels are created in a disabled state. Before a channel can be used, you must update its configuration with valid connection details and enable it.
For a detailed guide on configuring and activating default notification channels, see the Notifications and alerts section of the Wazuh dashboard documentation.
Configuration
The Notifications module supports both static and dynamic configuration settings. Static settings are defined in the /etc/wazuh-indexer/opensearch.yml file and are applied when the Wazuh indexer starts. Dynamic settings can be modified at runtime using the cluster settings API without restarting the Wazuh indexer.
The module also loads default values from bundled configuration files during startup. These defaults can be overridden through /etc/wazuh-indexer/opensearch.yml or by using the cluster settings API.
The following sections describe the configuration files, available settings, and secure credential storage options used by the Notifications module.
Configuration files
The Notifications module loads default configuration values from the following files during startup.
File |
Description |
|---|---|
|
Defines core settings for the notification delivery engine |
|
Defines module-specific default settings |
Settings configured in /etc/wazuh-indexer/opensearch.yml or through the cluster settings API override the values defined in these files.
The following example shows a minimal /etc/wazuh-indexer/opensearch.yml configuration for the Notifications module.
# Notification core settings
opensearch.notifications.core.email.size_limit: 10000000
opensearch.notifications.core.http.max_connections: 60
opensearch.notifications.core.http.connection_timeout: 5000
opensearch.notifications.core.http.socket_timeout: 50000
opensearch.notifications.core.http.host_deny_list:
- "10.0.0.0/8"
- "172.16.0.0/12"
# Allowed channel types
opensearch.notifications.core.allowed_config_types:
- slack
- chime
- microsoft_teams
- webhook
- email
- sns
- ses_account
- smtp_account
- email_group
# Plugin settings
opensearch.notifications.general.operation_timeout_ms: 60000
opensearch.notifications.general.default_items_query_count: 100
opensearch.notifications.general.filter_by_backend_roles: false
Core settings
Core settings control how the Notifications module delivers messages and manages HTTP and email communications.
Email settings
The following settings control email message size limits and email header validation.
Setting |
Description |
Type |
Default |
|---|---|---|---|
|
Maximum allowed size, in bytes, for email messages and attachments. |
Integer |
10000000 (10 MB) |
|
Minimum length allowed for email headers during validation. |
Integer |
160 |
HTTP connection settings
The following settings control HTTP communication used by Slack, Microsoft Teams, Chime, and custom webhook destinations.
Setting |
Description |
Type |
Default |
|---|---|---|---|
|
Maximum number of concurrent HTTP connections used by the Notifications module. |
Integer |
60 |
|
Maximum size, in bytes, of an HTTP response that the Notifications module can process when communicating with external services. |
Integer |
104857600 |
|
Maximum number of concurrent connections allowed for a single destination endpoint. |
Integer |
20 |
|
Time, in milliseconds, to wait when establishing an HTTP connection. |
Integer |
5000 |
|
Time, in milliseconds, to wait for data after a connection is established. |
Integer |
50000 |
|
List of hosts or network ranges that notification requests cannot access. |
List<String> |
[] |
General core settings
The following settings control supported channel types and general module behavior.
Setting |
Description |
Type |
Default |
|---|---|---|---|
|
Defines the notification channel types that users can create and manage. Only the specified channel types are available for configuration. |
List<String> |
Configured channel types |
|
Enables tooltip information in supported user interfaces that interact with the Notifications module. |
Boolean |
true |
Module settings
Module settings control the general behavior of the Notifications module.
Setting |
Description |
Type |
Default |
|---|---|---|---|
|
Maximum time, in milliseconds, that the module waits for an operation to complete. |
Long |
60000 |
|
Default number of items returned by list operations when a count is not specified. |
Integer |
100 |
|
Restricts access to notification configurations based on backend role mappings. |
Boolean |
false |
Update dynamic settings
The following Notifications module settings support dynamic updates through the OpenSearch Cluster Settings API. Unlike static settings configured in the /etc/wazuh-indexer/opensearch.yml file, dynamic settings can be modified without restarting the Wazuh indexer.
The following example updates two Notifications module settings as persistent cluster settings:
opensearch.notifications.core.http.max_connections: Increases the maximum number of HTTP connections that the Notifications module can use simultaneously to deliver notifications.opensearch.notifications.general.filter_by_backend_roles: Enables backend role filtering so users can access only the notification resources permitted by their assigned backend roles.
Run the following command from a terminal on a host that can communicate with the Wazuh indexer REST API.
curl -sk -u admin:admin -X PUT \
"https://localhost:9200/_cluster/settings" \
-H "Content-Type: application/json" \
-d '{
"persistent": {
"opensearch.notifications.core.http.max_connections": 100,
"opensearch.notifications.general.filter_by_backend_roles": true
}
}'
Output
{
"acknowledged": true,
"persistent": {
"opensearch": {
"notifications": {
"core": {
"http": {
"max_connections": "100"
}
},
"general": {
"filter_by_backend_roles": "true"
}
}
}
},
"transient": {}
}
The acknowledged value confirms that the Wazuh indexer successfully applied the requested settings. The updated values appear under the persistent section, indicating that they are stored as persistent cluster settings and remain in effect after the Wazuh indexer restarts.
Email destination secure settings
Email notification channels require an email account configuration to send messages to recipients.
The Notifications module supports the following email delivery methods:
SMTP (Simple Mail Transfer Protocol): used to send email through a mail server such as Microsoft Exchange, Microsoft 365, Gmail, Postfix, or other SMTP-compatible services.
Amazon Simple Email Service (SES): which sends email through Amazon Web Services (AWS).
Both SMTP and SES configurations require credentials to authenticate with the email service. To protect sensitive information, the Notifications module stores these credentials in the OpenSearch Keystore rather than plain-text configuration files.
SMTP account credentials
Perform the following steps to configure SMTP credentials for an email account named my_smtp_account:
Run the command below to add the SMTP username:
/usr/share/wazuh-indexer/bin/opensearch-keystore add \ opensearch.notifications.core.email.my_smtp_account.username
Enter the SMTP username when prompted
Run the command below to add the SMTP password:
/usr/share/wazuh-indexer/bin/opensearch-keystore add \ opensearch.notifications.core.email.my_smtp_account.password
Enter the SMTP password when prompted.
SMTP authentication credentials are stored as secure settings in the Wazuh Indexer keystore using the following keys, where <account_name> is the name of the configured SMTP sender:
opensearch.notifications.core.email.<account_name>.username
opensearch.notifications.core.email.<account_name>.password