監視設計を「まず動かしてから」と後回しにするプロジェクトは、本番稼働後に観測点の空白を抱えたまま運用を始める。障害が起きたとき、何が壊れているかではなく、何が壊れているか分からない状態に陥るのが最大のリスクだ。何を観測するか・どこに記録するか・いつ誰に通知するかという三つの判断を構築フェーズで決めておくことが、インシデント対応コストと設計品質の両方を左右する。本稿では、構築担当者が観測性の「初期値」を確定するための設計判断の軸を整理する。
監視を後付けすると必ず穴が空く構造的な理由
計装ポイントは設計時にしか埋められない
アプリケーションにメトリクスやログの出力を組み込む「計装」は、コード設計の段階で対象箇所を決めておかなければ、後から差し込めない箇所が生まれる。データベース接続プールの使用率・キューの滞留数・バックグラウンドジョブの処理件数は、フレームワークが自動で吐き出す指標ではなく、コードの特定の位置に計装を仕込まなければ観測できない。本番稼働後にこれらを埋めようとすると、再デプロイや設定変更に加え、対象箇所を改めて調査する工数が発生する。構築を任されたある担当者が「稼働後に気づいたが変更できなかった」という状況に行き詰まったという話は現場でよく聞く。構築フェーズでしか刺せない観測点は確かに存在し、それを見落とした代償は後から取り返せない。
インフラ・アプリ・ネットワーク層の観測が分断する
後付けで監視を追加すると、担当者がアクセスできるレイヤーに偏った設計になりやすい。インフラ担当がOS・ハードウェア指標を追加し、アプリ担当がアプリケーションログを追加しても、両者の相関を取れる構造になっていなければ意味をなさない。CPU使用率が高い時刻と、アプリのレスポンス遅延の時刻が別々のシステムに記録されていれば、「CPUスパイクがレイテンシ悪化を引き起こしたのか、それとも別の要因か」を判断する手がかりがなくなる。構築時に時刻同期・共通ラベル・集約先を決めておかなければ、複数層を横断した原因特定は構造的に不可能になる。
後付け対応が引き起こす実際の工数
10台規模のサーバー環境で、構築後に監視を組み込もうとすると、設計・実装・テスト込みで2〜3週間を要するケースが報告されている。構築フェーズに含めていれば数日で済む作業量に相当する。後付けの場合、既存設定への影響確認と本番環境での動作検証が必要になるため、変更リスクも上乗せされる。観測性を後回しにするコストは工数だけでなく、稼働中のシステムへの変更リスクとして現れる点が問題の本質だ。稼働中のシステムは構築フェーズとは比較にならない慎重さを要求するため、同じ作業でも時間と確認コストが大きく膨らむ。
何を見れば「壊れ始め」に気づけるかの設計
USE法・RED法で観測対象を絞る
観測指標を決める出発点として、インフラ層にはUSE法(Utilization・Saturation・Errors)、サービス層にはRED法(Rate・Errors・Duration)が設計の骨格として使える。USE法では「リソースの使用率が限界に近づいていないか」「飽和が始まっていないか」「エラーが出ていないか」の三軸で絞り込む。RED法では「リクエスト数・エラー率・レイテンシ」の三指標で外から見たサービスの健全性を判断する。この二つの枠組みを使うと、最初から全指標を収集しようとする過剰設計を防ぎやすくなる。観測指標が多すぎると、重要なシグナルが膨大なデータに埋もれる逆効果が生まれる点も設計判断に含める。
正常系の基線を構築時に定義する
「異常」を検知するには「正常」が何かを先に決める必要がある。構築フェーズでは負荷試験・ウォームアップ期間・典型的な業務ピーク時のデータから、CPU使用率・メモリ使用量・レスポンスタイムの正常範囲を記録しておく。この基線がなければ、アラート閾値は担当者の感覚に依存することになり、「うるさすぎる」か「鳴らなさすぎる」かのどちらかに偏る。構築時点でのベースライン記録は、後の閾値調整の根拠になる。特にトラフィックが時間帯で大きく変動するシステムでは、ピーク時と低負荷時で別々の基線を記録しておくと閾値設計が現実的になる。
「最初の異常信号」をあらかじめ特定する
障害は突然すべてが壊れるわけではなく、前兆指標が段階的に変化する。構築設計の段階で「このシステムが壊れ始めるとき、最初に何が変化するか」を担当者間で議論しておく価値がある。接続数が先に増え始める、キューが溜まり始める、特定のエラーコードが増加する、といった前兆を特定できれば、アラートを「壊れてから鳴らす」ではなく「壊れ始めを捉える」設計にできる。運用担当者を巻き込んで議論すると、過去の障害経験から前兆パターンを抽出できる。この作業は設計フェーズに30分〜1時間程度の議論を確保するだけで実行できる。
ログの置き場所・保存期間・集約範囲の判断
ローカル・集中管理・外部サービスの選択基準
ログの置き場所はサーバーローカル・自前の集中管理基盤・外部SaaSの三択が基本になる。ローカルのみは最も手軽だが、サーバーが停止するとログも消える構造上の弱点があり、障害調査と同時にログを失うリスクを抱える。集中管理基盤(Elasticsearch+Kibana等の構成)は自由度が高い一方、構築・運用コストが乗る。外部SaaSは立ち上がりが早いが、データが外部に出ることへの要件確認が必要になる。どれを選ぶかは「ログをいつ・誰が・何のために見るか」という運用要件から逆算する。障害時に参照できることが最低要件であれば、サーバー停止でもログが消えない構造を選ぶことが設計の前提になる。
保存期間は法令・運用・コストの三角形で決める
ログの保存期間は、法令要件・インシデント対応で遡れる必要な期間・ストレージコストの三者を突き合わせて決める。業種によっては監査ログを3〜7年保存する法令要件が存在する。一方、デバッグ用のアプリケーションログは直近30〜90日あれば運用上は十分なケースが多い。期間を設定せずに流し続けると、1年後にストレージが枯渇するか、クラウドの転送コストが計画を超えるかのいずれかで問題になる。ログの種別ごとに保存期間を設計書に明記し、自動削除・アーカイブのルールも合わせて設定することが構築フェーズの成果物として必要だ。
何を集約し、何を集約しないかの線引き
すべてのログを一箇所に集めるのが理想のように見えるが、集約する価値と通信・ストレージコストのバランスを取る必要がある。デバッグレベルのログを全量転送すると、集中管理基盤への負荷が増え、本当に必要な情報が埋もれる。設計の原則として「集約するのはサービス間の相関が必要なログ・監査目的のログ・アラートのソースになるログ」に絞り、それ以外は各サーバーのローカルに残す判断が現実的だ。全量集約と選択集約の中間として、ERRORレベル以上のみ転送してINFO以下はローカル保持にする構成も有効な選択肢になる。集約範囲を広げる場合は段階的に行い、都度ボリュームを確認する。
■ この設計判断を深める一冊[PR]
SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム(Betsy Beyer/オライリー)
可用性や信頼性をどこまで作り込むかの判断軸を、Googleの運用思想から学べる一冊です。冗長化の「やりすぎない線引き」を深めたい方に向いています。
メトリクス/ログ/トレースのどこまで持つか
三本柱の役割分担と優先順位
観測性の三本柱(メトリクス・ログ・トレース)はそれぞれ役割が異なる。メトリクスは「何かがおかしい」ことを最初に教える数値指標で、アラートのソースになる。ログは「何がなぜ起きたか」の記録で、インシデント後の原因特定に使う。トレースは「どのコンポーネントで処理に時間がかかっているか」を可視化するもので、分散システムでのボトルネック特定に力を発揮する。優先順位はメトリクス→ログ→トレースの順に導入コストと複雑さが上がる。規模の小さい環境でトレースまで整備しようとすると、管理コストが見合わなくなりやすい。
環境規模に応じた現実的な取捨選択
単一サービスが3〜5台で稼働するような環境では、メトリクスとログで大半の問題に対応できる。マイクロサービスが10サービス以上に分散し、複数チームが並行開発するような環境では、トレースなしでの障害特定が現実的に困難になる。中間のモノリシックなアプリが数台で動く構成では、メトリクスの充実とアプリログの構造化(JSON形式への統一等)に投資する方が費用対効果が高い。どの層に何を投資するかは、環境の複雑さに比例して判断する。複雑さが増す前にトレースを入れると後々の管理負荷を下げられるが、小規模のまま運用するシステムにトレース基盤を入れることは過剰投資になりやすい。
| 観測手段 | 主な用途 | 向いている構成・規模 | 導入・管理コスト |
|---|---|---|---|
| メトリクス | 異常の早期検知・アラートのソース | すべての規模・構成 | 低〜中 |
| ログ | 原因特定・監査・デバッグ | すべての規模・構成 | 中 |
| トレース | 分散システムのボトルネック特定 | 10サービス以上の分散構成 | 高 |
三本柱以外の補完的な観測手段の位置づけ
メトリクス・ログ・トレースの三本柱に加え、継続的プロファイリング(実行時間の関数レベル分解)を補完的に使う選択肢もある。ただしこれらは三本柱が整備された後の話であり、基礎が整っていない状態でプロファイリングを入れても活用しきれない。構築フェーズで「三本柱のうちどこまで持つか」を確定し、補完的な手段は運用フェーズで段階的に評価する設計順序が現実的だ。選択の幅を広げることと、管理できる範囲に絞ることは常にトレードオフになる。
アラートを「鳴らしすぎない」設計の線引き
アラート疲弊が生む見落としのリスク
アラートが頻繁に鳴ると、担当者は「またか」という心理状態になり、本物の緊急アラートを見落とすリスクが生まれる。ある現場では、1日に50件以上のアラートが飛ぶ状態が3ヶ月続いた結果、本番データベースのディスク残量警告が埋もれ、深夜のディスクフルを招いたという報告がある。アラート疲弊は運用担当者の注意力の問題ではなく、設計の問題として捉える必要がある。鳴らす件数を絞る設計は、アラートの信号密度を上げることに直結する。
「鳴らすべき」と「ログに残すだけ」の分離
アラートを設計する際の基本原則は「アラートとは、人間が今すぐ判断して行動しなければならない事象を通知するもの」という定義から始めることだ。この定義に照らすと、多くのWARNINGレベルの通知は「ログに残してダッシュボードで確認する」に分類できる。CPU使用率70%・ディスク使用率60%のような情報系の通知をアラートに流し込まず、ダッシュボード上の視覚的な変化として確認できる設計にすることで、アラートの信号密度を上げられる。「即座に人が動く必要があるか」を判定軸にすると、分類の基準が明確になる。
閾値設計の考え方と見直しサイクル
閾値は構築時の暫定値として設定し、3ヶ月・半年の運用を経て実績値に基づいて調整するサイクルを組み込む。初期値として「CPU使用率90%以上が5分継続」「メモリ使用率85%以上が継続」「エラーレート1%以上」といった水準が出発点になるが、環境のサイズや業務特性によって大きく変わる。重要なのは閾値の数字ではなく、「なぜその値に設定したか」の根拠を記録しておくことだ。根拠がなければ見直し時に判断の基準がなくなり、感覚値の繰り返しになる。閾値の見直しタイミングは、大きなシステム変更や季節性イベントの前後も良い機会になる。
構築時に最低限決めておく観測性の初期値
Day 1に確定すべき4つの判断事項
構築フェーズが終わるまでに確定しなければならない観測性の初期値は、大きく4項目に絞られる。①監視対象の一覧(何を見るか)、②アラートの通知先と連絡体制(誰に届けるか)、③ログの集約先と保存期間(どこに・いつまで保存するか)、④メトリクスの収集間隔と保持期間(どの粒度で・どれくらい保持するか)だ。この4項目が未決定のまま本番稼働を迎えると、最初のインシデントで参照できる情報がない状態になる。手を動かす実装の詳細はセミナー・実装フェーズで詰めるとして、「何を決めるか」の一覧を構築設計書に含めることが先決だ。
段階的に育てる観測性の設計思想
観測性は一度設計したら完成ではなく、運用経験を積みながら育てていくものと位置づける。初期は必要最低限の指標だけ監視し、インシデントが発生するたびに「どの観測点があれば早く気づけたか」を振り返って追加していく。この積み上げ方が、使われないダッシュボードだらけになる過剰設計を避けるための現実的なアプローチだ。「育てる前提」は「初期値が存在する」ことが条件で、ゼロからの後付けとは別物だ。初期値がなければ振り返りの基準点がなく、何を追加すべきかの判断もできなくなる。
チーム間で合意しておくべきルール
観測性の設計で見落とされやすいのが、チーム間の合意形成だ。「誰がアラートを受け取り、何分以内に何をするか」「ログのフォーマットは何を使うか(JSON・テキスト等)」「重大度の定義(P1〜P4等)は何か」を構築フェーズで明文化しておく。これらを決めずに運用を始めると、アラートが飛んでも誰も動かない、あるいは複数の担当者が同時に動いて混乱するという事態が起きる。ドキュメントの保存場所と更新ルールも合わせて決めておくと、構成変更があったときに観測設計が陳腐化することを防げる。
観測性チェックフレーム
構築フェーズの完了前に、以下の項目が決まっているか確認する。設計書・runbook・チームへの共有のいずれかに記録されていることを確認の条件とする。
- 監視対象の一覧が存在するか——何のメトリクスをどの間隔で収集するか、対象サーバー・サービスが列挙されているか。
- ベースラインが記録されているか——負荷試験や初期運用期間中のCPU・メモリ・レスポンスタイムの正常範囲が残っているか。
- 「壊れ始め」の前兆指標が定義されているか——このシステムが壊れ始めるとき、最初に何が変化するかが担当者間で共有されているか。
- ログの種別・集約先・保存期間が決まっているか——監査ログ・アプリログ・アクセスログそれぞれの扱いが定義されているか。
- アラートの通知先と対応フローが決まっているか——誰がアラートを受け取り、何分以内に何をするかが明文化されているか。
- 重大度の定義が共有されているか——P1〜P4などの優先度分類と、それぞれの対応期待時間が合意されているか。
- メトリクス/ログ/トレースの選択が環境規模と一致しているか——3〜5台構成でトレース基盤まで持とうとしていないか、10サービス以上の分散構成でメトリクスのみになっていないか。
- 閾値の根拠が記録されているか——「なぜその値にしたか」が残っているか。感覚値のみになっていないか。
- 観測性ドキュメントの更新ルールが決まっているか——構成変更があったときに観測設計を更新する担当と手順があるか。
▶ 手を動かして本番まで到達する
その設計判断を、RHEL10の本番環境で手を動かして固めませんか
ここまでの設計判断は、読めば腹に落ちます。ですが「自分の手で本番まで通しきる自信」は、それとは別の話になります。
最大6名の少人数で、構築実務者の到達点まで引き上げます。座学で終わらせず、本番相当の環境で判断を検証する2日間です。
Linuxセミナー上級編(RHEL10)|最大6名の少人数ハンズオン