Scenario Checklists¶
Use these as a guide to keep triage systematic and fast.
HTTP: error spike (5xx) or latency regression¶
- Identify the operation:
- route template (not raw URL)
- status codes (4xx vs 5xx vs timeouts)
- Find 1–3 exemplar requests in logs:
- capture
traceId/requestId,op, and top-level error envelope - Use traces to locate the “first failure”:
- dependency call timing out?
- retry amplification?
- DB span slow/error?
- Use metrics to confirm scope:
- request rate change (traffic spike?)
- error rate and p95 latency by route (if available)
- saturation signals (CPU/mem/event loop/DB connections)
- Mitigation checklist:
- rollback latest deploy or disable flag
- shed load / rate limit if needed
- scale the dependency that’s saturated
- Fix checklist:
- add/adjust timeouts and propagate cancellation
- eliminate unsafe retries (or add idempotency/dedupe)
- optimize DB query or add index (validate via span timing)
gRPC: DEADLINE_EXCEEDED / slow method¶
- Identify:
grpc_service+grpc_method- caller and server services
- Logs:
- look for
DEADLINE_EXCEEDED,UNAVAILABLE, connection resets - confirm call deadlines/time budgets are set and propagated
- Traces:
- confirm client/server spans are linked (if using trace context propagation)
- find the slowest server span and the slowest downstream span
- Metrics:
- error rate by
grpc_code - latency p95 by method
- Common causes:
- missing deadline propagation
- server threadpool/concurrency exhaustion
- downstream dependency latency (DB/cache/HTTP)
- retry amplification without idempotency
Async consumer: backlog / lag / poison messages¶
- Identify:
- consumer group / worker name
- message type / topic / stream
- Metrics:
- backlog depth / lag (if exported)
- processing rate vs incoming rate
- DLQ rate (if applicable)
- Logs:
- repeated failures on the same message key/ID?
- deserialization/validation errors (input contract drift)?
- timeouts calling downstream dependencies?
- Traces (if you propagate context):
- confirm each message run has a trace root span
- look for repeated retries and long-running spans
- Mitigation checklist:
- pause ingestion (if possible) or slow producers
- quarantine poison messages (DLQ) to restore throughput
- scale consumers (only if you’re not hitting a downstream limit)
- Fix checklist:
- validate inputs at the consumer boundary (treat as
unknown) - ensure idempotency/dedupe (at-least-once delivery is normal)
- add per-message timeouts + cancellation