payments on-call · alert review · week 38
Which alerts should still page?
Payments paged 158 times last week, and 17 of those pages needed a person. Pick what each noisy alert should do; I'll change every rule in one pull request.
5 caught incidents 7 mostly noise 2 wrong owner
Alerts by pages
Evidence and decision
Canary health check
- Rule
payments_canary_probe_failed- Fires on
- One failed probe against the canary pod
- Pages
- 47, none of which needed a person
Forty-four of the 47 pages came within three minutes of a deploy, while the restarting canary missed one probe; the 10:00, 14:00 and 18:00 trains alone account for 39. It was never down long enough to act on.
How should the canary probe page?
Checkout p99 latency
- Rule
checkout_latency_p99_high- Fires on
- p99 above 800 ms for two minutes
- Pages
- 31, one of which needed a person
Most pages came from the lunchtime traffic peak and recovered on their own in a median of four minutes. The one real page was Thursday's database failover, which the 5xx alert also caught a minute earlier.
What should the latency alert page on?
Checkout's latency objective is 1.2 seconds at p99 over ten minutes.
Webhook queue depth
- Rule
webhook_queue_depth_high- Fires on
- More than 5,000 queued deliveries
- Pages
- 22, two of which needed a person
Twenty pages were one partner's bulk retries, which drained within ten minutes each time. The two that mattered were Wednesday's stuck consumer: the queue was short, but its oldest delivery was 40 minutes old.
What should the webhook alert measure?
Depth tracks partner traffic; age tracks whether we are keeping up.
Ledger export lag
- Rule
ledger_export_lag_high- Fires on
- Export more than 30 minutes behind
- Pages
- 18, none of which needed a person
Every page fell between 01:00 and 03:00 UTC, while the nightly settlement batch holds the ledger lock. The lag cleared by 03:20 each night without anyone touching it.
hour, pages 22:00, 0 23:00, 0 00:00, 0 01:00, 7 02:00, 9 03:00, 2 04:00, 0 05:00, 0 06:00, 0
What should happen during the nightly batch?
Finance reads the export at 07:00 UTC.
Replica disk usage
- Rule
ledger_replica_disk_80- Fires on
- Ledger read replica above 80% full
- Pages
- 9, none of which needed a person
Autovacuum reclaimed the space within the hour every time. Growth is already tracked in the monthly capacity review, and the 95% critical alert on the same disk stays either way.
Should the 80% disk alert page at all?
The 95% alert has not fired this quarter.
Sandbox TLS expiry
- Rule
tls_cert_expiring_14d- Fires on
- A certificate within 14 days of expiry
- Pages
- 7, one a day for the same certificate
The certificate belongs to the partner sandbox host, which Platform owns and renews automatically. Their renewal job is failing, and PLAT-2291 already tracks the fix.
Who should hear about the sandbox certificate?
It expires in six days.
Settlement job failed
- Rule
settlement_job_failed- Fires on
- Any failed settlement attempt
- Pages
- 6, three of which needed a person
The three pages nobody needed were first attempts that the scheduler retried successfully five minutes later. The other three were Friday's expired bank credential, which failed every retry.
Should a settlement failure wait for its retry?
The scheduler retries once, five minutes after a failure.
Ledger consumer lag
- Rule
ledger_events_consumer_lag- Fires on
- More than 50,000 unread events on the ledger topic
- Pages
- 5, none of which needed a person
Each page was a broker rebalance on the shared event cluster, which Data Platform runs. The consumer caught up once partitions were reassigned; nothing on the payments side changed.
Who should hear about ledger consumer lag?
Lag that outlasts a rebalance does delay the ledger export.
Payments API 5xx rate
- Rule
payments_api_5xx_rate- Pages
- 4, all of which needed a person
Caught Tuesday's card-network outage six minutes before the first customer ticket, and paged for Thursday's failover a minute ahead of the latency alert. It keeps paging unchanged.
3-D Secure failure rate
- Rule
threeds_challenge_failure_rate- Fires on
- More than 8% of challenges failing over five minutes
- Pages
- 3, one of which needed a person
Two pages came from one issuing bank's challenge outage, which only that bank could fix. The third was our own expired signing key, which failed every issuer at once.
Should one issuer's outage page us?
Per-issuer failure rates are already on the payments dashboard.
Fraud score drift
- Rule
fraud_score_distribution_drift- Pages
- 2, both of which needed a person
Both pages were Friday's stale feature pipeline, which left the model scoring on day-old velocity counts. It keeps paging unchanged.
Payout file rejected
- Rule
payout_file_rejected- Pages
- 2, both of which needed a person
The bank rejected Monday's payout file over a changed date format, and the page arrived in time to resubmit before the cutoff. It keeps paging unchanged.
Refund processor timeouts
- Rule
refund_processor_timeout_rate- Pages
- 1, which needed a person
Saturday's page was the processor's own degradation, confirmed on their status page twelve minutes later. It keeps paging unchanged.
Dispute deadline near
- Rule
dispute_evidence_due_24h- Pages
- 1, which needed a person
A chargeback's evidence was due within a day and had no owner; the page got it filed with four hours to spare. It keeps paging unchanged.