オブザーバビリティとは
日々の開発や保守の中で、みなさんはインフラ監視ツール等を使って、サーバーやネットワークの状態をモニタリングしているかと思います。 CPU使用率やメモリ消費量、死活監視のアラートを頼りに安定稼働を守ってきたはずです。
しかし、こんな経験はありませんか?
- アラートは鳴ったけど、どこで問題が起こっているのかが分からない
- 大量のログを追ってみても、どのサービスが遅延の原因なのか特定できない
- 再起動したら直ったけど、結局何が起きたのか謎のまま
従来のインフラ監視ツールは、あくまで異常を検知することが中心でした。
近年はシステム開発や構築を早めるためにアーキテクチャが複雑化し、マイクロサービスやクラウド環境が当たり前になっており、従来のインフラ監視だけでは問題の原因を迅速に特定することが不十分になってきています。
そこで必要になるのが、オブザーバビリティツールです。(例:Datadog、NewRelicなど)
これらは単なる監視ではなく、システムの可観測性を向上させ、不具合がなぜ発生したかを追跡できるようにするためのアプローチをサポートしてくれます。
監視とオブザーバビリティの違い
| 監視 | オブザーバビリティ | |
|---|---|---|
| 目的 | 異常を検知すること | 原因を特定し、改善すること |
| データの取得方法 | 事前に設定した閾値・メトリクス | あらゆる観測データを断片的に収集・分析(サンプリング) |
監視は 異常が発生したらアラートを通知する という役割が強く、オブザーバビリティは なぜ問題が起きたかを分析する ことに対して軸を置いています。
ただ、監視とオブザーバビリティは別物ではなく、オブザーバビリティの一部として監視があると考えられます。
オブザーバビリティを構成する3種類のテレメトリデータ
オブザーバビリティを支える重要なテレメトリデータは大きく3つあります。 一般的に「メトリクス」「トレース」「ログ」と言われています。
- メトリクス
- 数値化されたシステム状態の指標(CPU使用率、リクエスト数、エラーレートなど)
- ログ
- システムやアプリケーションで発生したイベントや状態変化を記録したテキスト情報(エラーメッセージ、処理の履歴など)
- トレース
- 1つのリクエストや処理が、分散システムの中をどのように流れたかを可視化する情報
例えば、オブザーバビリティの代表的な重要機能である、APM(Application Performance Monitoring)はこの「トレース」を中心に、アプリケーションのパフォーマンスを詳細に監視・分析するツール群です。
以下はNewRelicのAPM画面ですが、どのツールのAPMも画像のように処理毎のパフォーマンスが把握できるので、即座にボトルネックを発見できます。

なぜオブザーバビリティが必要なのか
理由はシンプルで、システム構成が複雑化しているからです。 従来のモノリシックなアプリでは、問題の発生場所は比較的簡単に特定できました。
しかし現在は、マイクロサービス化が進み、1つのユーザー操作でも複数のサービス・API・バッチが連携していたりします。 このため、遅延やエラーが発生した際にどのサービスが原因になっているかを即座に特定することが困難になっています。
例
- フロント ⇨ API Gateway ⇨ 認証サービス ⇨ 決済サービス ⇨ バッチ処理
- どこか1つでも遅延するとレスポンスに影響する
- 原因として外部APIやネットワーク遅延の可能性も考えられる
さらに監視のアプローチも変わりつつあります。 今まではユーザーからの問い合わせや、監視ツールなどでアラートを受け取って問題を把握・対応するのが一般的でした。
しかしオブザーバビリティツールを導入すれば、顧客やアプリケーションの視点から監視することが可能になります。
アプリケーションの内部状態やサービス間のやりとりを可視化できるため、以下のようなメリットがあります。
- ユーザー体験に影響が出る前に異常を検知し、先手を打って対応可能
- 表面化していない状態を可視化できるため、根本解決が可能
- 不具合発生後に、原因特定がしやすくなるため復旧対応が短縮される
結果として、「問題が起きてから直す」から「問題が起きる前に防ぐ」というように運用の質を進化させることができます。
まとめ
現代の複雑なシステム運用において、オブザーバビリティは不可欠なアプローチとなっています。 メトリクス・ログ・トレースのテレメトリデータを活用し、システム全体を俯瞰して観測することで、問題の発生源を素早く理解し、ユーザー影響を最小限に抑えることができます。
みなさんのプロジェクトにも合う形でオブザーバビリティを取り入れて、より良いオブザーバビリティライフを送ってみてください。