Skip to main content
The AIOps platform notification system allows alerts, Issue state changes, and SLA violations to be automatically communicated to the right teams, on the right channels, at the right time. Combined with escalation policies, it ensures that no critical incident goes unnoticed.

Overview

The NotificationEngine is triggered whenever:

NotificationPolicy CRD

The NotificationPolicy defines which events trigger notifications, to which channels, and with which throttling rules.

Spec Fields

NotificationRule

Each rule defines a match + channels pair. Multiple rules can be defined in the same policy.

NotificationMatch

All fields are optional. If omitted, it acts as a wildcard (match all). When multiple fields are defined, the logic is AND between fields and OR within each field.
Combine severities with states for fine-grained control. Example: notify critical only on Detected and Escalated, avoiding noise from intermediate transitions.

ThrottleConfig

Controls the frequency and deduplication of notifications to prevent alert fatigue.
Setting maxPerHour too low (e.g., 5) may suppress critical alerts. Use values >= 30 for policies covering critical and high severities. The throttle never blocks the first notification of a new incident.

Notification Channels

1. Slack

Sends notifications via Slack Incoming Webhooks using Block Kit for rich formatting.
Block Kit colors by severity:Block Kit payload sent:
Minimal example:

2. PagerDuty

Integrates with PagerDuty via Events API v2 for on-call incident management.
Default severity mapping:Deduplication:The dedup_key ensures that updates to the same incident do not create duplicate alerts in PagerDuty. The default uses the Issue name, but it can be customized:
Payload sent (Events API v2):
Automatic resolution: When the Issue transitions to Resolved, the NotificationEngine sends event_action: resolve with the same dedup_key, automatically closing the incident in PagerDuty.

3. OpsGenie

Integrates with OpsGenie for alerts and on-call management with P1-P4 priorities.
Default priority mapping:Responder types:

4. Email

Sends notifications via SMTP with STARTTLS support and HTML templates.
Variables available in templates:Example with STARTTLS:
Never put SMTP credentials directly in the NotificationPolicy YAML. Always use password_secret pointing to a Kubernetes Secret.

5. Webhook

Sends notifications to arbitrary HTTP endpoints with HMAC-SHA256 signing.
HMAC-SHA256 signing:When secret is defined, every request includes the X-ChatCLI-Signature header with the HMAC-SHA256 signature of the body:
Validation on the receiver:
JSON payload sent:

6. Microsoft Teams

Sends notifications to Microsoft Teams channels via Adaptive Cards and Incoming Webhooks.
Generated Adaptive Card:The NotificationEngine builds an Adaptive Card with sections for:
  • Header with colored severity
  • Resource details (namespace, kind, name)
  • AI analysis (if available)
  • Suggested actions
  • Link to the Grafana dashboard
Card colors by severity:

EscalationPolicy CRD

The EscalationPolicy defines the automatic escalation chain when an alert is not acknowledged within the defined timeout.

Spec Fields

EscalationLevel

EscalationTarget

How Escalation Works

Tracking via annotations: The EscalationPolicy reconciler tracks escalation state using annotations on the Issue CR: Acknowledgement: To stop the escalation chain, the on-call must acknowledge the alert:
Or via PagerDuty/OpsGenie (the return webhook updates the annotation automatically).

Complete Examples

Notification Policy: Slack + PagerDuty

Escalation Policy L1 -> L2 -> L3

Email for SLA Breaches

Troubleshooting

Diagnostic checklist:
  1. Verify that the NotificationPolicy exists in the correct namespace:
  1. Check the operator logs for dispatch errors:
  1. Confirm that the matching is correct:
  1. Verify that throttling is not suppressing notifications:
  • Confirm that the webhook_url is correct and the Slack app is installed in the workspace
  • Verify that the channel exists and the bot has permission to post
  • Test the webhook manually:
  • Confirm that the routing_key is an Integration Key (not an API Key)
  • Verify that the service in PagerDuty is active
  • Validate the payload in the PagerDuty Event Debugger
  • Confirm that the event is not being deduplicated by the dedup_key
  • Verify SMTP connectivity:
  • Confirm credentials in the Secret referenced by password_secret
  • Verify that tls_skip_verify: false and the server certificate is valid
  • Check the recipients’ spam folder
  • Check Issue annotations:
  • Confirm that escalation-acknowledged is not set to true
  • Check the EscalationPolicy reconciler logs
  • Confirm that the level timeout is not greater than the time since creation
  • Confirm that the secret in the policy is the same used by the receiver for verification
  • Verify that the receiver is reading the raw body before parsing JSON
  • Use hmac.compare_digest (or equivalent) to avoid timing attacks

Prometheus Metrics

The notification system exposes metrics for full observability: Recommended Prometheus alerts:

Next Steps

SLOs and SLAs

Service Level Objectives management with burn rate alerting

Approval Workflow

Change control with approval policies and blast radius

AIOps Platform

Deep-dive into the AIOps architecture

K8s Operator

Operator configuration and CRDs