Stack Map新人 Web エンジニアの地図

作って出したら終わり、ではありません。見張って、壊れたら直して、少しずつ良くする。
その「運用」の考え方と、障害が起きたときの動き方をまとめました。

運用とは

運用は「見張る・気づく・直す・良くする」のくり返しです。これをエンジニアリングで支える考え方が SRE です。

    見張るための 3 つの手がかり

    ログ・メトリクス・トレース。同じ「決済が遅い」を、それぞれで見るとどう見えるかを切り替えてみてください(中身は作り物の例です)。

    ログの書き方

    障害のとき、最初に頼りになるのはログです。あとで「探せる」「読める」形で書いておきます。読み方はデバッグのタブへ。

    レベルを使い分ける

    Laravel(中の Monolog)は、重い順に emergency・alert・critical・error・warning・notice・info・debug の 8 段階。出し先(チャンネル)ごとに、残す最低のレベルを決められる。

    Log::error('決済に失敗しました', ['order' => $order->id]);

    Laravel「Log Levels」

    文と手がかりを分ける

    何が起きたかの文に、手がかり(ID など)を別に渡す。あとで ID で探せる。

    Log::info('User {id} failed to login.', ['id' => $user->id]);

    Laravel「Contextual Information」

    頼みごとに ID を付ける

    1 回の頼みに 1 つの ID を付け、その間のログ全部に入れる。返事のヘッダーにも入れておくと、利用者の画面からログへたどれる。

    Log::withContext(['request-id' => $requestId]);

    Laravel「Contextual Information」

    書いてはいけないもの

    パスワード・アクセストークン・セッション ID・暗号の鍵・カードの番号・データベースの接続文字列・大事な個人情報。ログは多くの人や道具が読むので、そこから漏れる。

    OWASP「Logging Cheat Sheet」

    まず見る 4 つ(ゴールデンシグナル)

    利用者に向いたサービスで、4 つしか測れないならこれを、と Google の SRE の本が挙げているものです。

    目標を数で決める(SLI・SLO・エラーバジェット)

    「止まらないように頑張る」ではなく、「どこまでなら止まってよいか」を先に決めます。

    計算してみる: 目標から、止まってよい時間を出す

    目標
    期間

    アラートの考え方

    アラートは、人を呼び出すものです。鳴らしすぎても、鳴らなくても困ります。

    本番への出し方と、戻し方

    障害の多くは、何かを変えたあとに起きます。出し方を工夫しておくと、失敗しても早く戻せます。 設定をコードで管理するやり方はインフラをコードでへ。

    ブルーグリーン

    本番と同じ環境を 2 つ用意し、新しい版を片方で確かめてから、つなぐ先を切り替える。おかしければ、つなぐ先を戻すだけ(切り戻し)。

    Martin Fowler「BlueGreenDeployment」

    データベースの変更は、分けて出す

    列の名前を変えるなら、① 新しい列を足して両方に書く → ② 読む所を新しい列に移す → ③ 古い列を消す、と分けて出す(expand and contract)。どの段階でも、アプリを前の版に戻せる。

    Martin Fowler「ParallelChange」

    考え方のヒント戻し方は、出す前に決めておく。前の版はどれか、戻すコマンド、戻すかを決める人。本番作業の前のチェックリストと、元に戻せるかも見てください。

    障害(インシデント)対応を 1 歩ずつ

    例:「14:00 にリリースしたあと、決済が急に遅くなった」。「次へ」で進むと、グラフの時刻と、そのとき動く役が変わります(時刻と数字は作り物です)。

    決済の遅さ(遅いほうから 5% の頼みの時間)のグラフ。14:02 から 3 秒前後に上がり、14:18 に元に戻る

      利用者への連絡

      お知らせに入れること: 。分からないことは「分からない」と書き、次のお知らせの時刻を約束して守ります。

      振り返り(ポストモーテム)のひな形

      責めずに、仕組みのどこに穴があったかを書きます(リスク: 責めない振り返り)。Google の SRE の本の例をもとにしました。「運が良かったこと」も書くのがポイントです。

      ふだんの運用

      障害が起きていない日の、地道な仕事です。

      道具

      見張り・呼び出し・お知らせの道具です。技術の地図で「開発・運用」の層を見る ↗

      AI 時代の運用

      AI は調べものの強い味方です。一方で、AI の機能そのものも見張る相手になりました。

      チェックリスト

      確かめたものにチェックを付けてください(この端末にだけ保存されます)。