可観測性とは、システムが生成するデータに基づいてシステムの現在の状態を測定して推測できることです。このデータは通常、ログ、指標、トレースの形式で生成されます。簡単な例を挙げると、指標を調べることで、マイクロサービス アプリケーションの正常性を監視することができます。

可観測性の仕組み

可観測性があると、開発者は、複雑なシステムがどのように機能しているかを総合的に把握できます。また、データの収集、保存、分析を通じて、システムで発生した問題を特定し、トラブルシューティングすることができます。

可観測性は、リアルタイムでデータを収集することから始まります。収集されたデータは、分析のために1か所にまとめて保存されます。この分析は、機械学習アルゴリズムや可視化技術を用いたり、統計技術を組み合わせたりすることで行われます。

この分析結果に応じて、アプリケーションやシステム内の異常が開発者に警告されます。警告は自動化して、ビジネスやアプリケーションのニーズに基づいて設定されたしきい値、重大度レベルなどの基準に応じてトリガすることができます。異常が特定され、その位置が判明したら、開発者はデータを利用して問題のデバッグと解決にあたることができます。

可観測性データの例

前述のように、可観測性データの基本タイプは、ログ、指標、トレースです。

  • ログ:メタデータを含むタイムスタンプ付きのテキスト レコード。これらの記録やメッセージは通常、アプリケーションやシステムが生成します。ログは、ソフトウェア開発に可観測性を実装する、最も一般的な方法の1つです。
  • 指標:サービスに関する測定値。実行時に取得されます。これらの測定数値には、CPU使用率、メモリ使用率、エラー率などがあります。これらの測定値はすべて、アプリケーションやシステムのパフォーマンスと正常性を追跡するものです。
  • トレース:分散システムのノード間を移動するリクエストの経路やアクションを示す情報。トレースは、リクエストがどのように処理され、完了するまでにどのくらいの時間がかかったかを記録したものです。このデータは、ボトルネックやその他の遅延の問題を特定するのに役立ちます。
監視と可観測性の違い

監視とは、システムやアプリケーション内で発生するプロセスの進行状況を観察して確認することです。監視は、指標に大きく左右されます。つまり、環境を可視化して、既知の問題をテストすることができます。一方、可観測性は、問題が存在する可能性を推測することができる、新しい詳細なデータを提供します。これにより、問題の原因を探り、今後に向けたインサイトを得ることができます。

監視と可観測性に明確な区別はありません。むしろこれらは、開発者がより速くインサイトを得るためのデータ分析オプションであり、可視化技術です。

これらの定義を確認したところで、以下の表では、ソフトウェア アプリケーションにおける監視と可観測性の4つの微妙な違いを詳しく見ていきます。4つの違いは、対象範囲、粒度、柔軟性、分析に分けられています。

 

  監視 可観測性
対象範囲 指標(システムのアップタイム、CPU使用率、エラー率など)を測定する 出力から、稼働しているシステムのメカニズムを把握する

粒度

収集したデータを定期的に集計またはサンプリングする(定義済みの指標に基づく)

詳細なデータを収集して分析し、より詳細なインサイトを得て、システムの動作を把握する

柔軟性

定義済みのダッシュボードやアラートしきい値を実装する(導入後に変更しにくい)

変化する状況や要件に応じて変更しやすいツールを用い、柔軟で適応性の高いアプローチを使用する

分析

特定のイベントや異常を特定して対応する

問題の原因を特定して経時的に解決策を実装するために必要なツールを開発者に提供し、プロアクティブな分析とトラブルシューティングを重視する

可観測性でテレメトリが担う役割

ソフトウェアの可観測性において、テレメトリとは、ソフトウェア システムのパフォーマンスと動作に関するデータをリアルタイムで収集して送信することです。このデータ(応答時間、エラー率、リソース消費量など)は、システムの現在の状態を監視して把握するために使用され、開発者がパフォーマンスの改善機会を見極めるのに役立ちます。

テレメトリに関して、OpenTelemetry(OTel)がよく話題に上るのは、可観測性を容易にするシンプルなアプローチを開発者に提供するためです。OTelとは、ソフトウェア システムから収集したテレメトリ データ(ログ、指標、トレース)を標準化するオープンソース ツールとライブラリのセットです。

OTelの詳細と、OTelがクラウドネイティブ環境に与える影響については、「OpenTelemetryがアプリケーションのトレースと設計をどのように変えるのか」をご覧ください。

可観測性のメリット

可観測性があると、開発者はアプリケーションをより詳細に把握することができ、以下のことが可能になります。

  • デバッグの高速化:詳細な分析データにより、システムの問題の診断とデバッグを効率化することができます。
  • パフォーマンスの向上:主な指標を監視して阻害要因を特定することで、データ主導の意思決定を行い、アプリケーションのパフォーマンスを向上させることができます。
  • 信頼性の向上:可観測性データにより、ユーザー エクスペリエンスを阻害する可能性があるシステム障害をプロアクティブに解決できます。
  • コラボレーションの向上:経時的に収集した標準データ セットにより、普遍的な一連の指標に基づき、複数のチームが問題解決に向けてすぐに協力することができます。
可観測性のデメリット

可観測性にはいくつかの欠点があり、最も一般的なものを以下に示します。

  • オーバーヘッドの増加:可観測性を実装すると、アプリケーションやシステムの指標を追跡するために使用する特別なツールのコストが追加されることになり、さらにデータ ストレージも追加する必要があります。
  • 複雑さの増大:追加の計測と監視が必要になり、これらの追加ツールへの対応で、アプリケーションが一層複雑になる可能性があります。
  • 情報過多:可観測性は大量のデータを作り出すため、すぐに管理が煩雑になる可能性があります。また、データが多すぎるために、直ちに解決すべき問題の優先順位付けが難しくなりかねません。
その他のリソース

NGINXでは、可観測性とOTelの両方に関する無料の教育リソースを他にもご用意しています。

ブログ