Skip to content

ワークフロー観測性とリプレイ

この記事は英語版から翻訳されました。最新版は英語版をご覧ください。

ワークフロー観測性は通常のサービス観測性と違う問いに答えます。サービスtraceは「このリクエストで何が起きたか」を見ます。ワークフローtraceは「この業務プロセスはどこにいて、何をすでにcommitし、なぜ待っていて、次に何を安全にできるか」を見ます。長時間実行システムでは、observability、replay、repair toolingは正しさの一部です。

観測レイヤー

レイヤー問い
Workflow instanceこのプロセスはどの状態か
Activity attemptどの副作用が実行/リトライ中か
Queuerunnable workが待ちすぎていないか
Schedulerdue taskが発見されているか
Dependencydownstreamがretry/backpressureの原因か
Operator action誰がrepair/cancel/replayしたか

Timeline

運用者は5つのサービスのログを読むことなく、このビューを見られる必要があります。

Structured Events

各eventに含めるもの:

  • workflow IDとtype
  • run ID
  • sequence number
  • event type
  • activity ID
  • attempt number
  • idempotency key
  • tenant/namespace
  • correlation/trace ID
  • payload referenceまたはredacted payload
  • trusted clock timestamp

secretや巨大payloadを履歴に直接保存しないでください。

Replay

replay種別目的リスク
deterministic code replay履歴から状態を再構築非決定的コードで失敗
operational replay失敗作業や副作用を再実行冪等性が弱いと重複副作用

operational replayは権限管理と監査が必要です。ガードなしのreplay buttonは事故を作ります。

Repair Tools

本番システムに必要な安全なrepair primitive:

  • failed activityをretry
  • optional activityをskip
  • external signalを注入
  • workflow cancel
  • continue as new
  • manual action後にcompensation completeをmark
  • stuck jobをrepair queueへ移動

各操作はaudit eventを追記します。DB直接編集は最後の手段です。

Stuck Workflowの診断

原因証拠
signal待ち最終eventがwaiting、signalなし
timer未発火timerが期限超過
workersなしqueue age増加、lease取得なし
downstream outageretryとdependency error
bad deployversion変更後にnon-determinism/error spike
lost wakeup履歴上runnableだがqueue taskなし

Metrics

  • workflow type別 start-to-complete duration
  • stateごとの滞在時間
  • oldest non-terminal workflow age
  • waiting workflows by reason
  • activity retry histogram
  • compensation failure count
  • manual repair count
  • replay failure count
  • queue age by task type
  • scheduler lag

Alerting

良いalert悪いalert
oldest runnable task age > SLOqueue depth > N
timer lag > thresholdscheduler CPU high
compensation failures > 0generic workflow failures
stuck in state too longworkflow not completed
DLQ oldest age > thresholdDLQ count > N

内部カウンタではなくユーザー/業務影響にalertします。

Privacy and Retention

  • payload全体ではなく参照を保存
  • sensitive fieldsを暗号化
  • event追記前にsecretをredact
  • workflow typeごとにretentionを定義
  • verbose activity payloadよりaudit eventを長く保持

関連パターン

MITライセンスの下で公開。Babushkaiコミュニティが構築。