コンテンツへスキップ
Contentin
Contentin無料の$100を受け取る

ポストモーテム

リンクバックチェッカーがリリースをブロックした:架空のポストモーテム

架空のチーム、架空のインシデント、しかしメカニクスは現実的。オンコールエンジニアが記録する順序でこれを語ります。

ミニチュア工場の設定で、コンベアベルト上のパッケージを停止する赤い機械アーム
これは例です

以下に示すチーム、製品、タイムラインは、失敗がどのように進行するかを示すために作成された架空のものです。実際の企業、顧客、または計測値は記載されていません。

インシデントの経緯

  1. 1

    09:10、ランディングページがCMSにアップロードされる

    6人の製品チームがヘッドレスCMSと静的ビルドを使用してマーケティングサイトを運用しています。編集者は、前週に登録されたパートナードメインへのリンクを含むパートナー発表の準備をしています。

  2. 2

    09:14、編集者が公開ボタンを押す

    公開ウェブフックが関数を呼び出します。その関数はパートナードメインに対してリンクバックチェッカーの呼び出しを実行し、成功しない応答が返された場合にリリースをブロックするように設計されています。

  3. 3

    09:14、ビルドが開始されない

    2つのことが同時に失敗します。ドメインが非常に新しく設定されたため、インデックスにまだ登録されていない可能性があります。また、チームのキーのプリペイド残高が空だったため、有料のフォローアップ呼び出しがHTTP 402を返しました。

  4. 4

    09:40、チームがこれを発見する

    編集者は曖昧なエラーを報告します。エンジニアは関数のログを読み、402と空の結果を確認し、どちらがブロックの原因となったのかを特定するために20分費やします。

  5. 5

    10:05、手動で公開が実行される

    誰かがフックをバイパスして手動デプロイを行います。公開は55分遅れとなり、バイパスによってどのチェックがスキップされたかの記録が残されません。

庭師がミニチュアの花壇で3種類の植物の手入れをしている

公開前にチームが確認していた内容

実際には非常に少ないものでした。テストリストには著名なドメインしか含まれていなかったため、パートナーリンクが到着するまでギャップは隠れたままでした。有名サイトでのテストは、配管(連携)が機能していることを証明しますが、インデックスにまだ登録されていないドメインについては何も示していません。

より良いテストリストには、3種類のドメインを含める必要があります:確立されたドメイン、小さなニッチドメイン、そして最近登録されたドメインです。誰もそれを信頼する前に、これら3つすべてをフックに通してください。

テストはどのドメインをカバーしていましたか?

簡単なものだけでした。リストにあるすべてのドメインには数年の歴史があったため、すべての応答が完全なもので返され、空の結果が公開にどのような影響を与えるのかを誰も見ていませんでした。

本当に新しいドメインを1つ追加し、その結果を手動で確認します。「不明」とすべきところに「不良」という注記がある場合、ルールは公開前に書き換える必要があります。

ステージング実行では何が省略されていましたか?

ステージング実行では残高が健全なキーが使用されたため、残高空のパスは実行されませんでした。意図的にクレジットを使い果たすテストが書かれていませんでした。

そのパスをテスト対象に含めてください。四半期に1回、402を強制的に発生させ、その後に編集者が何を見るかを確認してください。誰も実行しない失敗パスは、誰も信頼できないパスだからです。

なぜこれが起きたのか

ゲートは成功しないものをすべて判断基準として扱いました。これが根本原因です。残高の問題と不明なドメインは、ツールとインデックスに関する事実であり、ページ自体については何も示していません。

当社のグラフは約1ヶ月に1回再構築されます。最後の更新後に登録されたドメインは空のように見える可能性があり、新しいパートナーはランディングページの通常のケースです。誰も確認していませんでした。チームは、nytimes.comなどの古くからある著名なドメインのみを使用してフックをテストしていました。

2つ目の見落としは沈黙でした。関数はエラーをログに記録しましたが、アラートを送信せず、編集者はクレジットが枯渇したことを示すヒントのない汎用的な失敗メッセージだけを見ました。

コストは問題ではありませんでした。1回呼び出しあたり2クレジットで、この架空のサイトの1ヶ月分のチェックの合計は約$0.60でした。これはコストテーブルの3,000回公開行と同じ数字です。ゲートは安価でしたが、2026年には1時間の損失をもたらしました。

402は独自の行を持つに値します。プリペイド残高は監視可能な状態であるため、10,000クレジット($1相当)で単純なアラームを設定していれば、数日早く通知が来ていたはずです。

チームが記載したアクションアイテム

所有者は個人ではなく役割です。すべてのアイテムは例の一部です。
変更所有者理由
402をスキップとして扱い、プラットフォームチャンネルにアラートを送信するプラットフォームクレジットはページの状態ではなく課金状態である
新しいドメインに対する空の結果を「不良」ではなく「不明」として扱うプラットフォームインデックスは約1ヶ月遅延する
編集者に理由を平易な言葉で表示する編集ツールログの読み取りに20分を要した
スキップされたチェックをエントリに記録するプラットフォーム手動デプロイは追跡を残さなかった
今週登録されたドメインでフックをテストするQA古いドメインはギャップを隠蔽する

公開週の練習

次の失敗の後ではなく、次の公開の前にこれらを実行してください。

  1. 1

    誰もチェックしていないドメインを選ぶ

    最近登録されたドメインを選び、そのドメインに対して無料の概要アクションを呼び出します。薄い応答がブロックではなく「不明」としてログに記録されることを確認します。

  2. 2

    テスト残高を使い切る

    少量の残高を持つテストキーを使用し、意図的にゼロになるまで実行させます。402の到着、アラートの発生、そしてビルドへの公開継続を監視します。

  3. 3

    編集者のメッセージを声に出して読む

    フックを知らない同僚にエラーテキストを読んでもらいます。次に何をすべきかがわからない場合、公開前にメッセージを書き換えます。

  4. 4

    スキップをエントリに記録する

    スキップされたチェックがエントリに日付付きの注記(理由付き)を残すことを確認します。手動デプロイが行われても、誰も説明できないギャップが残ることはありません。

3つの異なる色の工具箱がミニチュアシーン内の作業台に置かれている

修正の書き方

チームは1つの汎用的な失敗を3つに分割しました。なぜなら、各応答には異なる所有者がいるからです。401はキーの問題、402は課金状態、新しいドメインに対する空の結果は単に不明です。それぞれに独自のブランチとメッセージが割り当てられます。これこそが全ての変更です。

誰がスタックトレースを読む必要もありませんでした。アラート名が状態を特定し、編集者は次に何をすべきかを示す文章を見ることができます。

なぜ残高アラームはゼロよりもはるかに高い位置に設定されているのか?

10,000クレジットは公開価格で$1であり、早期に到着しても十分な警告を与えるには小さな金額です。アラームは、誰も金曜日に開かないログではなく、人間が目にする場所に設定してください。

毎日一度、大きく失敗するチェックは、公開中に沈黙して失敗するチェックよりも優れています。

その数字をチームと合意し、キーのローテーションに関するルールと同じ場所に記載してください。そうすれば、両方が一緒にレビューされます。

新しいドメインは失敗としてカウントすべきか?

いいえ。インデックスがまだ見ていないドメインは、ページに関する事実ではなくインデックスに関する事実です。日付付きで「不明」として保存し、編集者が次の更新を待つかどうかを判断できるようにします。

このルールは、薄い応答が返された場合にも適用されます。これを欠落データとして扱い、パートナーに対する判断基準として決して扱わないでください。

不明な応答を独自のリストにログ記録し、一般的なログに埋もれるのではなく、次のレビュー時にそのパターンを可視化できるようにします。

参考になる点

リンクデータについてはフェイルオープン、アラートについてはフェイルラウド(失敗を明確に通知)

リンクチェックは、編集者と公開の間に立ちはだかる唯一の存在であってはなりません。ページを通し、エントリにタグを付け、キーの所有者にとって見逃せない失敗にしてください。

  • コード内で401、402、空の結果を区別する
  • 残高アラームをゼロよりもはるかに高い位置に設定する(コストテーブル参照)
  • 公開日の前にステージングで失敗の練習を行う

チームが後に投げかけた質問

レビュー会議では、この物語のすべてのバージョンで同じ数少ない質問が提起されました。以下は、架空のチームがそれらにどのように答え、なぜその答えが組織によって異なるのかを示しています。

これらの答えのいずれも普遍的なものではなく、それぞれがページが何のためにあるかに依存します。重要なのは、次のリリースの前に紙面上に答えを持っておくことです。

ゲートはフェイルクローズすべきだったか?

この架空のチームにとって、いいえ。リンクチェックは月次インデックスに基づいて構築されたシグナルであり、編集者と公開の間に立ちはだかる唯一の存在であってはなりません。

ポリシーを1文で記載し、次のエンジニアが意図的なブロックとバグを区別できるようにしてください。

より大きな残高があればこれを防げたか?

それは問題を修正するのではなく、遅らせるだけでした。より大きな残高でも枯渇する可能性はあり、成功しないものをすべて判断基準として扱うゲートは、最初の不明なドメインで依然としてブロックします。

修正は、3つの応答への分割と、早期に発生するアラートです。残高は物語の一部に過ぎません。

構築するすべてのゲートに対して同じ質問を投げかけてください:どの失敗が沈黙し、誰が最初にそれに気づくのか?

架空の事例に関する注記

実際のチームは異なるでしょう。あなたのチームは、すべての外部リンクが人間によってレビューされる規制対象サイトなど、良い理由でフェイルクローズするかもしれません。それで結構です。ただ、それを意図的な選択にしてください。

ウェブフックランブックには、同じ決定がチェックリストとして記載されており、ミスのリストには、この架空のチームを罠に陥らせた信念が網羅されています。