本文へ移動

「成功」と表示されていても、仕事が終わったとは限りません。

OutcomeGuard は n8n のワークフローを見守るサービスです。1 本ごとに普段の動きを覚え、「動いていない」「動いたのに何も起きていない」「出力が空」を見つけて知らせます。

n8n の API を読み取り専用で使います。n8n のインスタンスに何かを入れる必要はありません。

緑のチェックは、仕事が終わった証拠になりません

n8n が教えてくれるのは、実行がエラーなく終わったかどうかまでです。請求書が保存されたか、リードが CRM に届いたか、レポートがシートに書き込まれたかは、そこには含まれません。

自動化の障害は、たいてい音もなく起きます。トリガーが動かなくなる。IF の条件に誰も当てはまらなくなる。認証情報が夜中に期限切れになる。取得元が空のリストを返す。それでも実行は「成功」と表示され、顧客から「データはどこですか」と聞かれるまで誰も気づきません。

  • そもそも動いていない

    編集したあと、スケジュールトリガーが止まったままだった。最新の実行は 4 日前、表示は成功。

  • 動いたが、何もしていない

    フィルタを通るデータが 0 件になった。ワークフローは 800 ミリ秒で成功し、どこにも何も書き込まない。

  • 動いたが、途中で終わっている

    最後に動いたノードが、データベースではなく HTTP だった。エラーなし、データなし、通知なし。

顧客より先に、気づける。

障害 1 件につきメール 1 通。何を期待していたか、実際に何がいつ観測されたか、どれくらい確かなのかを添えて送ります。

OutcomeGuard が見ているもの

判定はワークフローごとに、そのワークフロー自身の履歴だけを基準にします。よそのデータとは比べません。検出結果には、シグナル名・根拠・時刻・確信度に加えて、理由をひと言で添えます。判定に足りる履歴がないときは、無理に異常を作らず「データ不足」と報告します。

  • サイレント障害SILENT_FAILURE

    エラーは出ていないのに、仕事が進んでいません。トリガーが沈黙したとき、または成功した実行が以前より手前のノードで終わるようになったときに出します。

  • 実行されなかったMISSED_RUN

    予定されていた実行がありません。cron も間隔指定もタイムゾーンまで読むので、08:30 JST に動くはずのワークフローは 08:30 JST を基準に判定します。

  • 出力ゼロEMPTY_OUTPUT

    成功しているのに、出力が 0 件でした。普段は件数が出ているワークフローに限って報告します。

  • 失敗FAILED

    実行がエラー、クラッシュ、またはキャンセルで終わりました。

  • 成果条件を満たさないOUTCOME_FAILED

    実行はされましたが、Outcome Contract の条件を 1 つ以上満たしていません。

  • 更新が止まっているSTALE_OUTPUT

    Outcome Contract で許容した時間を超えて、連携先の内容が更新されていません。

  • 件数の異常VOLUME_ANOMALY

    実行回数、または 1 回あたりの件数が、そのワークフローの普段の範囲から大きく外れています。

  • 実行時間の異常LATENCY_ANOMALY

    実行時間が、そのワークフローの普段の時間から大きく外れています。長すぎる場合も、短すぎる場合も報告します。

  • 認証エラーAUTH_ERROR

    認証情報が拒否されました。OAuth トークンの期限切れ、キーの失効、パスワードの変更が典型です。

  • 連携先のエラーDOWNSTREAM_ERROR

    ワークフローが頼っている外部サービスが失敗したか、リクエストを拒否しました。

  • 設定の変更CONFIG_DRIFT

    ワークフローの定義が変更された、またはワークフローが非アクティブになりました。

  • 判定不能UNKNOWN

    インスタンスに接続できないため、このワークフローは判定していません。推測で状態を決めることはしません。

Outcome Contract:「終わった」の定義を先に書いておく

実行の監視で分かるのは「動いたか、エラーが出たか」までです。Outcome Contract は「仕事が終わったか」に答えます。

ワークフローごとに、期待する結果を書いておきます。期限が来たら OutcomeGuard が条件を 1 つずつ確かめ、すべて満たしたときだけ正常と扱います。

契約の例

正常
  1. 平日は 08:30 JST 以降に必ず実行されている
  2. 実行が成功で終わっている
  3. 出力が 1 件以上ある
  4. 5 分以内に終わっている
  5. 連携先が実際に更新されたことを、届け先で確かめられる

1 つでも欠ければ、正常とは扱いません。n8n 側に「成功」と記録されていても同じです。

API キーの登録から、最初の検出まで

  1. 接続

    n8n で API キーを作り、インスタンスの URL と一緒に入力します。OutcomeGuard が触るのは n8n の公開 REST API だけです。セルフホストでも n8n Cloud でも動きます。

  2. 基準の学習

    ワークフローごとに実行履歴を読み、そのワークフロー自身の「普段」を覚えます。どれくらいの間隔で動くか、どれくらい時間がかかるか、何件出すか、いつもどのノードで終わるか、空の結果が本当に普通なのか。

  3. 監視

    その後は定期的に n8n を読みに行き、実行ごとの要約を集めます。状態、開始時刻、所要時間、件数、最後に動いたノード、秘密情報を取り除いたエラー文、それにワークフロー定義のハッシュです。

  4. 検出

    ワークフローごとに、そのワークフロー自身の基準と、トリガーに設定されたスケジュールに照らして判定します。cron も間隔指定もタイムゾーンまで読むので、08:30 JST に動くはずの実行は、08:30 JST の時点で「来ていない」と判定します。08:30 UTC ではありません。

  5. 成果の検証

    Outcome Contract を設定したワークフローは、期限が来た時点で結果を確かめます。実行されたか、成功したか、件数は足りたか、時間内に終わったか、そして連携先が実際に変わったことを、届け先で確かめられたか。

  6. 通知と報告

    検出結果は、問題 1 件につきインシデント 1 件にまとめます。同じ問題はまとめ、通知の間隔を空け、段階を踏んで知らせるので、1 回の障害でメールが 40 通届くことはありません。月次レポートは Pro と Agency に含まれます。

死活監視と Error Workflow で拾えるのは、はっきり落ちた障害だけです

死活監視が教えてくれるのは「処理が ping を送った」ことだけ。n8n の Error Workflow が動くのは「ノードが例外を投げた」ときだけ。どちらも役に立ちますが、いちばん高くつく障害には反応しません。始まらなかった実行、何も返さなかった実行、1 つ手前のノードで終わった実行です。

OutcomeGuard は実行履歴から、そのワークフロー自身の実行間隔、所要時間、件数、いつも最後になるノードを覚えます。新しい実行は、その基準と、トリガーが実際に宣言しているスケジュールに照らして判定します。

データの扱いは、あえて地味に

  • アクセスは n8n の公開 REST API を読むだけです。ワークフローには書き込みません。
  • 保存するのは実行の要約だけです。状態、時刻、所要時間、件数、最後のノード、秘密情報を取り除いたエラー文。ペイロードは保存しません。
  • API キーは AES-256-GCM で暗号化して保存します。暗号鍵は実行環境にしか置きません。
  • 自動で行う操作は、安全なものだけです。当社側のチェックのやり直しと、通知の再送だけ。ワークフローの書き換えや認証情報の変更はしません。

まず n8n から

現在の対象は n8n(セルフホストと n8n Cloud)です。Make、Zapier、GitHub Actions は今後の予定に入れています。4 つを中途半端に扱うより、1 つをきちんと扱うことを選びました。

今後の予定

料金は暫定です

ワークフロー 3 本までは無料で、カード登録も要りません。有料プランは月額 19 ドルから。月単位で、いつでも解約できます。

いま静かに壊れているものを確かめる

n8n の URL と API キーを貼るだけです。読み取り専用で、1 分ほどで終わります。インスタンスを連携しない場合、キーはスキャンが終わった時点で破棄します。

読み取り専用。カード登録は不要です。