TL

オブザーバビリティ(メトリクス・ログ・トレース)

システムの「中で何が起きているか」を、外から出る信号だけで推測できる状態にすること。メトリクス・ログ・トレースの3本柱で“未知の不具合”まで追えるようにする。

中級オブザーバビリティ監視分散トレースSRE最終更新: 2026-06-04
TL;DR要点だけ先に
  • 1.オブザーバビリティ=外から取れる出力(メトリクス・ログ・トレース)だけで、内部状態を説明できる状態。
  • 2.3本柱の役割分担:メトリクス=「何かおかしい」、ログ=「何が起きた」、トレース=「どこで遅い/失敗した」。
  • 3.監視は“想定した異常を見張る”、オブザーバビリティは“想定外も調べられる”。分散システムほど後者が効く。

元々は制御工学の言葉で、「出力を観測すれば内部状態を推定できるか」という性質を指します。ソフトウェアでは、コードに手を入れて再デプロイしなくても、すでに出している信号だけで未知の問題を調査できるか がオブザーバビリティの高さです。

なぜ必要か:分散システムは「中が見えない」

1台のサーバで動くモノリスなら、ログを tail して CPU を眺めれば、だいたい状況はつかめました。ところが今は、

  • リクエスト1本が 複数のマイクロサービス を横断する
  • コンテナは 数分で生まれて消える(落ちた頃にはもうログを出した実体がいない)
  • 「遅い」と言われても、どのサービスのどの処理が原因か が一目で分からない

こうなると「サーバにログインして調べる」が成立しません。だからこそ、各サービスが自分の状態を信号として外に出し続け、それを後から突き合わせて調査する設計が要る——これがオブザーバビリティの動機です。

3本柱:メトリクス・ログ・トレース

それぞれ得意分野が違い、補完しあって初めて全体像が見えます。

メトリクス(Metrics)

一定間隔で記録される 数値の時系列 データ。CPU使用率、リクエスト数、エラー率、レイテンシのp95など。

  • 集計済みで軽いので、長期間ためても安価
  • ダッシュボードやアラートの土台(「エラー率が5%超えたら通知」)
  • ただし「何かがおかしい」は分かっても、個別の原因までは分からない

ログ(Logs)

いつ・何が起きたか を記録した、時刻つきのイベント列。エラーメッセージ、注文ID、スタックトレースなど。

  • 1件ずつの詳細が分かる(「注文 #1234 が在庫チェックで失敗」)
  • 量が多くコストもかさむので、構造化ログ(JSON等)にして検索・集計できる形にするのが定石
  • 何が起きたか」は分かるが、サービスをまたいだ1リクエストの流れは追いにくい

トレース(分散トレース / Traces)

1本のリクエストが複数サービスを通る経路全体 を、所要時間つきで記録したもの。

  • リクエストに trace ID を付け、各処理区間を span として連結する
  • 「どのサービスの・どの処理で・何ミリ秒かかったか」が見える=ボトルネックの特定に直結
  • どこで遅い/失敗したか」を答えるのが役割
3つは“別物”ではなく繋げて使う

強いのは横断です。アラート(メトリクス)→ 該当 trace ID でリクエスト経路を特定(トレース)→ その span の詳細ログを読む(ログ)、と一気通貫で辿れる状態が理想。trace ID を全ログ・全シグナルに付与しておくのがその鍵です。

3本柱の比較

観点メトリクスログトレース
数値の時系列時刻つきイベントリクエストの経路(span)
答える問い何かおかしい?何が起きた?どこで遅い/失敗した?
粒度集計済み(粗い)1イベント単位(細かい)1リクエスト単位(横断)
コスト/量安い・長期保持向き多い・かさみやすい中(サンプリングで調整)
主な用途ダッシュボード・アラート原因の特定・監査ボトルネック特定・依存把握

モニタリング(監視)との違い

混同されがちですが、視点が違います。

  • モニタリングあらかじめ決めた指標を見張り、既知の異常に気づく(「CPUが90%を超えたら通知」)。"Known unknowns"(起こると分かっている問題)への備え。
  • オブザーバビリティ事前に質問を決めていなくても、出ている信号を後から掘って調べられる性質。"Unknown unknowns"(予想していなかった問題)にも対応できる。
“ツールを入れた=可観測”ではない

よくある誤解。Prometheus や監視SaaSを導入しただけでオブザーバビリティが手に入るわけではありません。何を計測し、どんな属性(ユーザID・エンドポイント等)を付け、信号同士をどう繋ぐか という設計が本体です。ダッシュボードがあっても「想定外の障害を後から追えない」なら、可観測性は低いままです。

モニタリングはオブザーバビリティの一部、と捉えると整理できます。監視で「異常」に気づき、可観測性で「原因」を掘る、という関係です。具体的な指標設計は /devops/sre-slo/ の SLI/SLO と一緒に考えると効きます。

つまずきポイント

  • ログだけで戦おうとする:サービス横断の遅延はログの grep では追えない。リクエストの流れはトレース、傾向はメトリクスに任せる。
  • trace ID を伝播していない:サービス境界で trace ID を渡さないと span が繋がらず、トレースが“途切れた点”だらけになる。
  • 何でも全部ログに出す:コスト爆発とノイズ増加で、肝心なログが埋もれる。サンプリング構造化で「後で集計・検索できる形」に絞る。
  • 計測の入れ方がバラバラ:サービスごとに独自フォーマットだと突き合わせ不能。OpenTelemetry のような共通規格で、メトリクス・ログ・トレースを統一的に収集するのが今の定番。
“高カーディナリティ”が効くこともある

ユーザIDやリクエストIDのように 値の種類が膨大な属性(高カーディナリティ) は、メトリクスのラベルにすると基盤を圧迫します。一方で「特定の1ユーザだけ失敗」のような問題を後から掘るには、その属性がイベント側(ログ/トレース)に付いていることが効きます。どの信号に何の属性を載せるかが設計の勘所。

イメージをつかむ

メトリクスでアラートが鳴ってから原因に辿り着くまでの流れの一例です。

# 1) メトリクスで異変に気づく(Prometheus のクエリ例)
#    直近5分の 5xx エラー率
sum(rate(http_requests_total{status=~"5.."}[5m]))
  / sum(rate(http_requests_total[5m]))

# 2) 該当時間帯の失敗リクエストから trace ID を拾う(構造化ログを検索)
#    例: {"level":"error","trace_id":"abc123","msg":"checkout failed"}

# 3) その trace ID でリクエスト経路を開く → どの span で時間/失敗が出たか確認
#    checkout(120ms) → inventory(15ms) → payment(2,400ms ← ここ) ...

メトリクスが「何かおかしい」、トレースが「payment サービスで遅い」、ログが「決済APIがタイムアウトした」——3つが揃って初めて「原因はここ」と言い切れます。

メトリクス収集の具体的な仕組みは /devops/tools/prometheus/ を、信頼性目標との結びつきは /devops/sre-slo/ を参照してください。

DevOps/インフラ Article

オブザーバビリティ(メトリクス・ログ・トレース)を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

オブザーバビリティ

比較で見る軸

難易度: intermediate / カテゴリ: DevOps/インフラ / タグ数: 4

導入後に効く点

3本柱の役割分担:メトリクス=「何かおかしい」、ログ=「何が起きた」、トレース=「どこで遅い/失敗した」。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
intermediate
カテゴリ
DevOps/インフラ
タグ数
4

判断チェックリスト

  • 自社の用途が「オブザーバビリティ / 監視」に近いか確認する。
  • 強みである「オブザーバビリティ=外から取れる出力(メトリクス・ログ・トレース)だけで、内部状態を説明できる状態。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

オブザーバビリティ監視分散トレースSREオブザーバビリティ監視分散トレースSRE
参考: 公式情報