断続的な切断は、設定の問題になる前にデータ収集の問題である。毎回同じ項目を記録しなければ、事象を比較できない。事象のたびに三つの設定を変えると、手元にあった唯一の証拠を壊してしまう。

以下の手順は一件あたりおよそ二分で、事象ごとに一行を残す。管理下の端末で読み取り専用の権限があることを前提とする。

最初の障害の前に項目を決める

何かが壊れる前に項目表を作る、なぜなら事象の最中に考案した雛形は必ず列を一つ落とすからだ。始めるには五項目で足りる:オフセット付きの現地時刻、引き金、壊れた段階、エラーの正確な文言、新しい試行が成功したかどうかである。

引き金には独自の語彙が要る、すなわち無操作、スリープからの復帰、ネットワークの切り替え、負荷の急増、資格情報の更新、不明のいずれかである。不明は後から記憶で埋めず、不明のまま印を付けておく。最も価値が高いのは段階の項目で、利用者が何を感じたかではなく、鎖がどこで止まったかを記録する。エラーの文言は逐語で写す、なぜなら言い換えると、似た二つのコードの区別が失われるからだ。

空欄は空欄のままにする。回答を強いる雛形は作り話を招き、作られた文脈は空欄より悪い。

FieldExampleWhy it earns its place
Time with offset2026-11-03T09:14+08:00Orders events across sources in different zones
Triggerresume from sleepSeparates a cause from a coincidence
Stagehandshake ok, no routeNames the boundary that failed

障害の瞬間に同じ五つの事実を記録する

毎回、同じコマンドを同じ順序で実行する。二分の出力はトレイのアイコンの写真より有用で、後で時刻が食い違うときには順序が効いてくる。

date -Is
journalctl -u wg-quick@wg0 --since "-2 min" --no-pager
wg show wg0 latest-handshakes transfer
ip route get 203.0.113.10
ping -c 3 -W 2 192.0.2.1

最初の行は観測にオフセットを付ける、そしてそれが別々の地域で記録された三つの情報源を突き合わせる唯一の方法である。ジャーナルの抜粋はサービスのライフサイクルを覆い、ハンドシェイクの行は相手が応答したかどうかを語る。経路の照会は、特定の宛先が使うインターフェースを名指しするが、これはインターフェースが存在するという事実とは別である。トンネルのアドレスへの ping は、リンクを何かが通るかどうかを示すのであり、向こう側に到達できるかではない。

継続する記録に事象ごとに一行を書き、項目はそれだけで他は書かない。五、六件たまったら引き金で並べ、次に段階で並べる。模様は繰り返す対として現れ、決して繰り返さない対は偶然である可能性が高い。

壊れた段階を特定する

ローカルの接続、相手の状態、経路、名前解決はそれぞれ別の場所で失敗し、それぞれが独自の痕跡を残す。インターフェースはあるのに経路がそこを指していなければ、失敗はローカルの方針である。インターフェースが上がったままハンドシェイクの時刻が進まなくなれば、失敗は上流にある。

名前解決も同じ記録に含める。月曜はトンネルを、火曜はローカル網をたどったリゾルバは、アプリケーション層では乱暴に見える失敗を生む。

許可されたサーバーアクセスでは、近くの再接続ではなく同じ試行を対応づける。元の時刻を保存し、ずれは別に記録する、その場で変換すると変換の証拠が消えるからだ。一つの試行、一組の時刻、一つの結論である。

条件を一つずつ比べる

統制のとれた比較は意味のある条件を一つだけ変え、失敗した実行を成功した実行の隣に置く。端末を別のネットワークへ移すか、除外を一つ無効にし、同じ手順で他は何も変えない。

失敗した実行は記録に残す。動いた方を優先して消すと、探している境界の唯一の証拠を捨てることになる。

プロファイルではなく抜粋を共有する

送る前に、パスワード、トークン、秘密鍵、無関係な識別情報、ペイロードを取り除く。完全なプロファイルは接続の要約ではなく設定の秘密であり、チケットに載せるものではない。

五つの項目を添えて抜粋を送り、どの段階が失敗したと思うかを伝える。そうすれば管理者は、切断されたアイコンの画面写真を送る代わりに、名指しした境界を調べられる。境界がまだ不明なら、次の一歩はもう一回の統制された記録であり、もう一つの設定変更ではない。

関連記事