Start with health
When the question is “is this forwarder healthy enough to continue?”, begin withhealth.
--fail-on turns a threshold into a process failure (partial_failure, exit 8) so CI and agents do not parse text. It accepts success_rate and dlq_depth with comparisons and ||. Here failed, pending_retries, and dlq_depth are non-zero, so continue into inspection.
Search events within bounds
Search only the bucket and time range the workflow needs.--cursor — it is forward-only and bound to this exact query and window. Don’t widen --limit to dodge paging; narrow the query. Full query grammar and cursor rules are in Search & filters.
Inspect an event
Move from search results to a single event by ID.Inspect delivery attempts
Find failed deliveries with--failed, then pull the retry chain for one event and forwarder.
forwards search finds candidate attempts fast (use --failed rather than a status: query); forwards chain is the authoritative per-attempt timeline — order, response code, latency, retry intent, and terminal status — for one event and forwarder. Search to locate, chain to drill in.will_retry / next_retry_at are the forwarder’s automatic retries (its retry policy). Deliberately re-sending an event is a replay — a separate, manual action covered in Replay deliveries.
Triage the DLQ
When health reports DLQ depth, inspect the rows before replaying.dlq_ids straight into a replay to remediate exhausted deliveries.
Continue
Replay deliveries safely
Replay the failed event from its ID or the DLQ, behind a dry-run.
Wait for a webhook
Confirm a fix by waiting for the next matching event.
Transcript safety
What redaction covers, and what you must scrub yourself.