Skip to content

Alert rules and events

A "rule" is the pairing of a channel with an event. A channel that subscribes to critical_cve will receive every critical_cve event the platform emits. Severity, digest mode, and any provider-specific filtering happen on top of that subscription.

Event catalog

EventTypical severityDescription
critical_cveCRITICALA new CVE with severity Critical was detected on a scanned image. Fires once per (image, CVE) pair.
high_cveHIGHA new High-severity CVE was detected. Same dedupe semantics as above.
sla_breachHIGHAn open vulnerability passed its SLA deadline. Fires once when the deadline elapses.
scan_completeINFOA scan finished. Useful for low-traffic CI dashboards; noisy at scale.
scan_failedHIGHA scan errored — registry auth failure, sensor crash, image too large, etc.
agent_disconnectedHIGHA sensor stopped heartbeating. Fires after the configured grace window.
coverage_gapMEDIUMAn image has no scan within the freshness window.
exception_expiringMEDIUMA risk-accepted exception is approaching its expiration date.
regressionHIGHA previously fixed CVE re-appeared on the same image.
new_imageINFOA new tag was discovered in a watched registry.
cve_watch_newvariesA CVE on your CVE Watch list was added to NVD or another upstream feed. Severity is the CVE's own severity.
cve_watch_kevCRITICALA CVE you are tracking was added to the CISA Known Exploited Vulnerabilities catalog.

Severity in this table is the typical level — the exact severity is set per-event by the producer and may vary (e.g. cve_watch_new reflects the upstream CVE's severity).

Digest modes

Each channel-event subscription sets a digest mode:

  • Realtime — deliver as the event happens.
  • Daily — batch into a single message at the channel's daily summary time.
  • Weekly — batch into a Monday-morning summary.

Digest batches are rendered as a table or attachment list, never a wall of pings.

Routing recipes

Three patterns cover the majority of teams. Pick whichever shape matches your on-call posture.

Recipe 1 — Page on critical, slack the rest

For teams with a real on-call rotation. Pages must be load-bearing.

ChannelTypeSubscribed eventsMode
pd-security-oncallPagerDutycritical_cve, cve_watch_kev, regressionrealtime
slack-securitySlackhigh_cve, sla_breach, scan_failed, agent_disconnectedrealtime
slack-platformSlackcoverage_gap, exception_expiring, new_imagedaily

Recipe 2 — Slack-only, severity-graded

For teams without 24/7 on-call. Everyone watches #security-alerts; broader hygiene goes to a quieter channel.

ChannelTypeSubscribed eventsMode
slack-security-alertsSlackcritical_cve, high_cve, sla_breach, cve_watch_kev, regression, scan_failedrealtime
slack-security-hygieneSlackcoverage_gap, exception_expiring, agent_disconnected, new_image, scan_complete, cve_watch_newdaily

Recipe 3 — Webhook to a SIEM, email digest to compliance

For regulated workloads where every event must land in a SIEM and compliance wants a weekly rollup.

ChannelTypeSubscribed eventsMode
webhook-siemWebhookall 12 eventsrealtime
email-complianceEmailsla_breach, exception_expiring, cve_watch_kev, regressionweekly
pd-prod-criticalsPagerDutycritical_cve, cve_watch_kev (filtered to production registries)realtime

Event filtering

In addition to event type, channels can be scoped to specific registries or images so a CI registry's noise does not page your production on-call. Configure scope in Settings -> Notifications -> [channel] -> Scope.

PagerDuty channels automatically drop events below HIGH severity even when subscribed to noisier events like scan_complete. This is intentional — pages must be actionable.

On this page