Triggering Incidents #
Every way an incident can start, and how each source reaches the owning team.
Classification: Internal-Only
When to Use This Page #
- You want to know why you were paged
- You are adding a new monitor that should page
- You spotted a problem and need to raise it
Trigger Sources #
| Source | Type | Route | Result |
|---|---|---|---|
| P1 Datadog monitor | Automated | @incident-critical + @oncall-<team> |
Incident auto-declared, team paged, Slack channel created |
| P2 Datadog monitor | Automated | @oncall-<team> |
Team paged, no incident created |
| P3 Datadog monitor | Automated | @oncall-<team> |
Team paged, no incident until declared |
| Prod deploy failure | Automated | notify-failures job in prod-deploy.yaml |
Page (PagerDuty today, migrating) |
| Sentry alert | Automated | Sentry → Slack alert channel | Engineer declares manually |
| Datadog UI | Manual | Incidents → Declare Incident | Incident declared, team paged |
P1 Monitors: End to End #
A P1 monitor always triggers an incident. No human decision is needed.
Phase 1: Monitor Fires #
Goal: Detect customer-facing impact without waiting for a human
The P1 monitor owned by AI, Frontend, Backend or Infra goes into alert.
Phase 2: Incident Declared #
Goal: Put the incident on record immediately
- Datadog auto-declares an incident from the monitor
- Severity is set to SEV-1 or SEV-2 per the monitor
- Ken Kanai is set as Commander
- The owning team is set as the responding team
Phase 3: Team Paged #
Goal: Get the owning team responding
- One owning-team member is paged by round robin (
@oncall-<team>) - The Admin team is notified
- Escalation follows the escalation policy
Phase 4: Slack Channel Created #
Goal: One place for all incident discussion
- Datadog creates
#incident-<incident-id>-<date>, for example#incident-142-20261005 - The owning team’s on-call members are added to the channel
- Ken Kanai is added to the channel
- The incident link and monitor link are posted as the first message
Configuring Monitors #
Creating and Approving Monitors #
Each team creates its own monitors. The Admin team approves the priority.
Step 1: Team Creates the Monitor #
- The owning team creates the monitor in Datadog
- Tag it with
team:<ai|frontend|backend|infra>andservice:<name> - Propose a priority in the monitor description, for example
Proposed: P1 - Leave the paging handles out until the priority is approved
Step 2: Admin Team Approves the Priority #
- Ask the Admin team in Slack to review the monitor
- Share the monitor link and the proposed priority
- Admin confirms or changes the priority
- Admin sets the final priority on the monitor
P1 and P2 monitors always need Admin approval. Do not set either priority yourself.
Step 3: Team Adds the Paging Handles #
Once approved, add the handles that match the priority. See the message templates below.
Who Owns Which Monitors #
| Team | Example monitors |
|---|---|
| AI | Extraction failure rate, LLM latency, OCR queue age |
| Frontend | Webapp error rate, Core Web Vitals, synthetic login |
| Backend | BonsAPI 5xx rate, worker error rate, integration sync failures |
| Infra | EKS node and pod health on bonsai-app-eks-cluster-prod, RDS CPU / connections / storage, ElastiCache Redis memory / evictions, Amazon MQ queue depth / connections / DLQ, ALB 5xx, WAF blocks |
P1 Monitor Message #
A P1 monitor must both declare the incident and page the team.
| Handle | Alert | Warning | Recovery |
|---|---|---|---|
@incident-critical |
Yes | No | No |
@oncall-<team> |
Yes | Yes | Optional |
{{#is_alert}}
@incident-critical @oncall-infra
## WHATS HAPPENING
Container terminated state in kube_cluster_name bonsai-app-eks-cluster-prod
for container bonsapi is greater than {{threshold}} over the last 5 minutes.
## IMPACT
<who and what is affected>
## Related links
- Logs
- Metrics Explorer (kube_pod_container_status_terminated)
{{/is_alert}}
{{#is_warning}}
@oncall-infra
Terminated containers rising for bonsapi in bonsai-app-eks-cluster-prod.
{{/is_warning}}
{{#is_recovery}}
@oncall-infra
Recovered.
{{/is_recovery}}
The screenshot below shows the older layout with handles on the first line. Move them inside the blocks as above.

P2-P3 Monitor Message #
P2 and P3 monitors page the on-call but do not create an incident. Declare one manually if impact is confirmed.
{{#is_alert}}
@oncall-backend
## WHATS HAPPENING
Worker DLQ depth rising on {{service.name}}.
## IMPACT
<who and what is affected>
## Related links
- Logs
{{/is_alert}}
{{#is_warning}}
@oncall-backend
Worker DLQ depth approaching threshold on {{service.name}}.
{{/is_warning}}
Rules for all monitors:
- Each monitor has exactly one owning team.
- Tag it with
team:<ai|frontend|backend|infra>andservice:<name>. - P1 and P2 priorities are set only by the Admin team.
- Only P1 monitors use
@incident-critical. - Every message has WHATS HAPPENING, IMPACT and Related links sections.
@incident-criticalgoes only inside{{#is_alert}}.@oncall-<team>goes inside{{#is_alert}}and{{#is_warning}}.@oncall-<team>inside{{#is_recovery}}is optional.
Monitor Priority #
| Priority | Incident | Page urgency | Notification |
|---|---|---|---|
| P1 | Always auto-declared | High | Datadog app, high urgency |
| P2 | Not created, on-call page only | High | Datadog app, high urgency |
| P3 | Declare if impact confirmed | Low | Datadog app, low urgency |
| P4-P5 | No | No page | Slack only, see below |
P4-P5 Slack Alerts #
P4 and P5 monitors never page. They post to a Slack channel by environment.
| Environment | Slack channel | Handle |
|---|---|---|
| dev | #dev-eng-alerts |
@slack-Tofu-dev-eng-alerts |
| prod | #prod-eng-alerts |
@slack-Tofu-prod-eng-alerts |
- Put the handle inside
{{#is_alert}}and{{#is_warning}}. - Use the handle that matches the monitor’s environment.
- Copy the handle exactly; Slack handles are set up with that casing.
Prod Deploy Failure #
The notify-failures job in .github/workflows/prod-deploy.yaml fires when any prod deploy job fails. It still uses the PagerDuty action and is being moved to Datadog On-Call under the Infra team.
When it fires:
- Open the failed run in GitHub Actions
- Check the release thread in Slack for the tag and notes
- Follow Deployment Monitoring
- Declare an incident only if production is impacted
Manual Triggers #
From Datadog #
- Open Datadog → Incidents → Declare Incident
- Set Severity to SEV-3 and Commander to Ken Kanai
- Optionally attach the triggering monitor or dashboard
Severity Review #
Manual incidents always start at SEV-3, even when raised from a monitor.
- Post in the incident channel why it may be more severe
- Invite the Admin team to the channel to review the impact
- If Admin agrees, Ken escalates it to SEV-2 or SEV-1
When to Declare Manually #
P1 monitor fired? → Already declared, join the channel
Customers cannot use a core flow? → Declare
Data is wrong, lost or exposed? → Declare
Security concern? → Declare (see Security below)
One user, workaround exists? → Linear ticket, no incident
Unsure? → Declare. Downgrading is cheap.
Security Incidents #
- Declare with a vague title, for example
Security investigation. - Mark the incident private in Datadog.
- Do not discuss details in public channels.
- Page
@oncall-adminand tell Ken Kanai immediately.
See Also #
- On-Call - Who receives the page
- Managing Incidents - What happens after declaring
- Monitoring & Alerting - Building and reading monitors