Skip to main content

Native alerting integrations

The monitor worker (crates/atlas-monitor) evaluates alert rules every ATLAS_MONITOR_INTERVAL_SECS and can push each one to any combination of these sinks — they're independent, not a single either/or choice, so e.g. PagerDuty for paging and a human-readable Slack channel can both be on at once.

SinkEnv var(s)Notes
Generic webhookATLAS_ALERT_WEBHOOK_URLSlack-payload-shaped JSON POST; pre-existing, unchanged. Good for SIEM/automation pipelines.
PagerDutyATLAS_PAGERDUTY_ROUTING_KEYEvents API v2. Triggers an incident per alert (deduped by Atlas's alert id) and auto-resolves it when the condition clears.
OpsgenieATLAS_OPSGENIE_API_KEY, ATLAS_OPSGENIE_REGION (us default or eu)Alert API. Creates an alert (aliased to Atlas's alert id) and closes it on resolution.
Slack (native)ATLAS_SLACK_WEBHOOK_URLA Slack incoming webhook, posting a human-readable trigger message and a follow-up "resolved" message — distinct from the generic webhook above so both can run simultaneously.

Delivery tracking​

The generic webhook keeps its original single-sink tracking (storage_alerts.notified_at). PagerDuty/Opsgenie/Slack are tracked per-sink in the alert_notifications table (migrations/0030_alert_notifications.sql), so each sink independently knows which alerts it has already triggered and resolved — enabling/disabling a sink after alerts have already fired won't cause a flood of stale notifications or miss the resolve event for alerts it never saw trigger.

Setting these via the Helm chart​

deploy/helm/atlas/values.yaml's alerting.* block wires all four sinks, referencing secrets (never inlining values) for the PagerDuty routing key, Opsgenie API key, and Slack webhook URL:

alerting:
pagerduty:
enabled: true
existingSecret: atlas-alerting
routingKeySecretKey: pagerduty-routing-key

Severity mapping​

Atlas severityPagerDutyOpsgenie
criticalcriticalP1
warningwarningP3
otherinfoP5