Alerting ​
Alerts should be actionable, low-noise, and tied to user impact.
Batch-style pipelines behave differently than request/response APIs. Prefer run-based and item-based alerts instead of wall-clock throughput over idle time.
Principles ​
- Alert on symptoms, not every error
- Use severity levels consistently
- Include context in the alert payload
- Separate SLO alerts from operational alerts
Dashboards ​
Pair alerts with dashboards that show step latency, item throughput (while running), and error rates.
Common Alerts ​
- Run failure rate above threshold (orchestrator)
- Step error rate above SLO (gRPC server spans)
- Item latency above SLO (run average or per-step)
- Backpressure rising (buffer queued stays high)
- Orchestrator runtime failure or restart loops
Practical Defaults ​
Start with:
- Run failure rate > 1% over 1 day (warning)
- Item avg latency > 2x baseline for 10 minutes (warning)
- Buffer queued stays high for 5 minutes (warning)
- Execution DLQ backlog growth sustained for 5 minutes (critical, provider queue-depth metric)
- Item reject sink backlog growth sustained for 5 minutes (critical, provider queue-depth metric; in-memory sink uses retained-size logs instead of a backlog gauge)
Queue-async additions:
- Due-sweeper recoveries stop while due backlog rises (critical)
- Lease conflict/stale-commit rate spikes above baseline (warning)
- Retry-saturation exceeds threshold (warning/critical by tenant tier)
- Queue age/lag exceeds execution SLO budget (critical)
- Await dropped completions are non-zero outside known duplicate/retry windows (warning/critical by workflow)
- Early-held await completions rise without matching resume releases (warning)
- Object Publish failures are non-zero for terminal-output pipelines (critical)
- Object Ingest failures or duplicate-admission spikes exceed baseline (warning)
When using New Relic, derive these from tpf.pipeline.run spans, tpf.step.* metrics (for example tpf.step.reject.total), and provider-native queue-depth metrics for DLQ/reject backlog.
Suggested starter thresholds:
- Queue oldest-message age > 2x target execution SLO for 10 minutes (critical).
- Retry-saturation ratio > 0.2 for 15 minutes (warning), > 0.4 (critical).
- Sweeper recoveries = 0 while due backlog grows for 5 minutes (critical).
- Lease/stale conflict rate > 3x 7-day baseline for 10 minutes (warning).
rate(tpf_await_completion_dropped_total[5m]) > 0for 10 minutes (warning; critical when paired with provider completion backlog).increase(tpf_await_completion_early_held_total[10m]) > increase(tpf_await_resume_released_total[10m])for 10 minutes (warning; check parent wait persistence and dispatch completion).rate(tpf_object_publish_failed_total[5m]) > 0for 5 minutes (critical for pipelines where terminal output is contractual).rate(tpf_object_ingest_failed_total[5m]) > 0for 10 minutes (warning), or duplicate admissions > 3x baseline (warning).
What Alerts Mean Operationally ​
Use channel-specific interpretation so incidents route to the right team.
Execution DLQ Backlog Growth (Critical) ​
Operational meaning:
- Terminal execution failures are accumulating faster than triage/re-drive.
- Queue-async control plane may be healthy, but execution outcomes are failing systemically.
Business meaning:
- End-to-end workflows are not completing.
- Customer-visible outcomes can be delayed, missing, or inconsistent until replay.
Immediate operator actions:
- Identify dominant terminal causes (
FAILEDvsDLQ) and affected contracts/steps. - Validate downstream idempotency before any bulk re-drive.
- Re-drive in bounded batches and watch duplicate suppression and retry saturation.
Item Reject Sink Backlog Growth (Critical) ​
Operational meaning:
- Recover-and-continue paths are active, but rejected items are not being drained.
- Step execution may still be healthy while reject-handling capacity is insufficient.
Business meaning:
- Main workflows can complete, but rejected records accumulate unresolved business exceptions.
- Availability risk is often on data completeness/quality rather than total platform uptime.
Immediate operator actions:
- Segment by reject fingerprint/error class to isolate top failure cohorts.
- Coordinate data/business remediation for dominant reject reasons.
- Re-drive only corrected cohorts and track repeat-reject ratio.
Worker Lag / Queue Age Breach (Critical) ​
Operational meaning:
- Dispatch and processing are behind incoming workload or dependency latency budget.
- Recovery paths (retry/sweeper) may amplify lag if left unchecked.
Business meaning:
- End-user latency and completion-time SLOs are at risk.
- Time-sensitive workflows may miss windows even without outright failure.
Immediate operator actions:
- Check dependency latency/error spikes and retry amplification signals.
- Scale workers or reduce ingest pressure temporarily.
- Verify sweeper activity and lease conflict levels during catch-up.
Await Boundary Flow Stall (Warning/Critical) ​
Operational meaning:
- External completions are arriving, but downstream business steps are not progressing at the expected rate.
- On the live path, the issue is usually downstream demand, worker capacity, broker lag, or state-store write latency.
- On the durable fallback path, the parent execution may not have reached durable
WAITING_EXTERNAL, dispatch completion may be delayed, or the worker queue may be saturated.
Business meaning:
- Provider work may have completed, but the pipeline is not yet turning those completions into downstream business transitions.
- User-visible completion time can breach even when the provider itself is healthy.
Immediate operator actions:
- Compare
tpf.await.completion.admitted.total, downstream step throughput, Object Publish progress, and provider-native completion queue age. - Inspect durable interaction completion alongside downstream step and Object Publish events. Use
await_unit_item_completed,await_execution_waiting, andawait_resume_releasedonly to diagnose durable fallback. - Check queue-async worker lag and state-store write latency before increasing provider throughput.
Object Publish Failure (Critical) ​
Operational meaning:
- Terminal output reached the connector boundary, but the object target did not accept the write.
- The execution should not be marked successful until configured Object Publish completes.
Business meaning:
- The business transition completed in memory, but the expected durable output file/object is missing or delayed.
- Downstream consumers that rely on object output can see incomplete results.
Immediate operator actions:
- Check
tpf.object_publish.failed.total,tpf.object_publish.published.total, and write-duration p95/p99 by target/provider. - Inspect replay for
object_publish_grouped,object_publish_published, andobject_publish_failedevents; object keys are in replay, not metric labels. - Validate target credentials, permissions, disk/S3 availability, and idempotency before replaying failed executions.
Object Ingest Admission Spike (Warning) ​
Operational meaning:
- Source listing is returning failed or duplicate admissions above the normal baseline.
- This can be a source-store issue, a mapping error, or expected duplicate listing after a restart.
Business meaning:
- New inputs may not be admitted into queue-async executions, or duplicate source notifications may be creating avoidable load.
Immediate operator actions:
- Compare listed, submitted, duplicate, and failed Object Ingest counters by source/provider.
- Inspect replay/span events for object keys and idempotency identity.
- Check provider-native source backlog or object-store notification health before scaling consumers.