Integrate Spike with Monte Carlo
Send Monte Carlo data observability alerts to Spike so your data on-call rotation is paged by phone, SMS, Slack or Teams, and incidents resolve themselves when the alert is fixed.
Monte Carlo watches your warehouse for freshness, volume and schema anomalies and for custom rule breaches. Its Webhook notification channel posts a JSON payload when an alert opens and again every time somebody works on that alert, so Spike can page the data on-call rotation on the first anomaly and close the incident when the alert is marked fixed in Monte Carlo.
Nothing is installed anywhere. You create an audience in Monte Carlo, point its Webhook channel at a Spike integration URL, and the two stay in sync from there.
What Spike does with each webhook
type: open_anomaly_incident
Opens an incident for that alert and pages the escalation policy
type: open_custom_rule_anomaly_incident
Opens an incident for the rule breach and pages the escalation policy
Alert status set to fixed, expected, no_action_needed or false_positive
Auto-resolves the open incident. Dropped when nothing is open
Alert acknowledged, or status set to investigating, work_in_progress or no_status
Added as an event on the open incident. Escalation continues
Owner changed, alert marked or unmarked as an incident, external ticket attached
Added as an event on the open incident. They never page anyone
Spike identifies the incident by payload.incident_id, the same id Monte Carlo puts in the alert URL. Every update for that alert lands on the one incident, so an alert that is acknowledged, reassigned, escalated to SEV-1 and finally resolved pages your team once.
Incident titles
Titles come from the alert itself, so they stay readable when Spike reads them out on a phone call:
Anomaly:
Has 1,204 rows vs. 58,930 expected on analytics:prod.finance.daily_ledger, built fromevent_list[0].event_detailsandevent_list[0].table_nameCustom rule breach:
Rule broken: Refund amounts must never be negative on snowflake:prod.payments.refunds, built from the rule description. A rule that carries no table readsRule broken: Daily signups below 40% of 7-day averageAn alert that carries nothing to build a title from:
Monte Carlo incident <incident_id>, orMonte Carlo alert with no detailswhen even the id is missing
The Rule broken: prefix is there so a custom rule reads as an alert rather than as a reminder of the rule. Anomaly titles never get it, because the event details already read as a problem.
A title longer than 200 characters keeps its on {table} part whole and shortens only the subject, at a word boundary, so the table a responder needs is never the part that gets cut:
The alert URL, the group id, the table and the rule comparisons stay in the payload and show up on the incident page. Use a Title Remapper if you would rather see the warehouse or the domain in the title:
Severity
Set severity on a Monte Carlo incident with alert rules. The same rules route the incident to another escalation policy or suppress it entirely, which is how you send freshness alerts on a staging dataset somewhere quieter than the pager.
The SEV you declare in Monte Carlo does not reach the Spike incident. Monte Carlo sends declared_alert_severity only on a later "marked as incident" update, never on the alert that opens the incident, and Spike sets severity when an incident is created or reopened rather than on an update that joins one that is already open.
Spike does read the value when it ever arrives on an opening payload, and maps it onto its three severities:
declared_alert_severity
Severity in Spike
SEV-1
SEV1
SEV-2
SEV2
SEV-3
SEV3
SEV-4
SEV3
null or absent
Left unset
Monte Carlo has four severities and Spike has three, which is why SEV-4 lands on SEV3. Read more about priority and severity.
Step 1 — Create the integration in Spike
In Spike, go to Integrations → Add integration → Monte Carlo, attach it to a service and an escalation policy, and copy the webhook URL. It looks like https://hooks.spike.sh/<your-token>/push-events.
Step 2 — Create the audience in Monte Carlo
Open notification settings: Go to Settings → Notifications in Monte Carlo.
Create the audience: Click Create audience and select Webhook from the Channel drop down.
Point it at Spike: Paste the webhook URL from Step 1 into the URL field. Leave Secret blank, see the note below.
Choose what the audience covers: Pick the alert types, domains, tables or monitors this audience should notify on. An audience scoped to your production domain keeps development noise out of the pager, and you can create a second audience for a second Spike integration when different teams own different domains.
Save and test: Save the audience, then use Send test notification if the channel offers it. Otherwise wait for the next real alert, or trigger a custom rule against a test table. The incident shows up in Spike within a few seconds.
Monte Carlo sends webhooks from a fixed set of public IP addresses listed on your Account information page. If egress to hooks.spike.sh runs through a proxy you control, nothing needs allowlisting on the Spike side.
Which events to send
The Webhook channel has no per-event switch. Once an audience notifies on an alert, Monte Carlo sends the alert creation and every later update for it: acknowledgement, status change, owner change, external ticket attached, marked or unmarked as an incident, and resolution. Spike pages on the creation, resolves on the resolving statuses, and records the rest on the incident, so there is nothing to turn off.
The audience filters are therefore the only knob that matters. Scope the audience to the alerts a human should be woken up for.
The webhook secret
Monte Carlo can sign the body with a secret and send the result in an x-mcd-signature header. Spike does not verify that header today, so leave Secret blank. Your webhook URL carries a token that only your integration has, which is the same model every other Spike integration uses. If the URL leaks, archive the integration and create a new one.
Payload reference
Monte Carlo sends application/json over POST, version v0.1. An anomaly alert opens with:
A custom rule breach carries type: open_custom_rule_anomaly_incident and a rule object instead of the table level details:
An update repeats incident_id and adds the fields that changed:
alert_feedback
investigating
The alert is acknowledged, or its status is set to investigating
alert_feedback
work_in_progress, no_status
The status is updated and the alert stays open
alert_feedback
fixed, expected, no_action_needed, false_positive
The alert is resolved. Spike resolves the incident
declared_alert_severity
SEV-1, SEV-2, SEV-3, SEV-4
The alert is marked as an incident
declared_alert_severity
null
The alert is unmarked as an incident
owner
An email address
The alert owner changes
Troubleshooting
Last updated
Was this helpful?