可観測性とは、システムが生成するデータに基づいてシステムの現在の状態を測定して推測できることです。このデータは通常、ログ、指標、トレースの形式で生成されます。簡単な例を挙げると、指標を調べることで、マイクロサービス アプリケーションの正常性を監視することができます。
可観測性があると、開発者は、複雑なシステムがどのように機能しているかを総合的に把握できます。また、データの収集、保存、分析を通じて、システムで発生した問題を特定し、トラブルシューティングすることができます。
可観測性は、リアルタイムでデータを収集することから始まります。収集されたデータは、分析のために1か所にまとめて保存されます。この分析は、機械学習アルゴリズムや可視化技術を用いたり、統計技術を組み合わせたりすることで行われます。
この分析結果に応じて、アプリケーションやシステム内の異常が開発者に警告されます。警告は自動化して、ビジネスやアプリケーションのニーズに基づいて設定されたしきい値、重大度レベルなどの基準に応じてトリガすることができます。異常が特定され、その位置が判明したら、開発者はデータを利用して問題のデバッグと解決にあたることができます。
前述のように、可観測性データの基本タイプは、ログ、指標、トレースです。
監視とは、システムやアプリケーション内で発生するプロセスの進行状況を観察して確認することです。監視は、指標に大きく左右されます。つまり、環境を可視化して、既知の問題をテストすることができます。一方、可観測性は、問題が存在する可能性を推測することができる、新しい詳細なデータを提供します。これにより、問題の原因を探り、今後に向けたインサイトを得ることができます。
監視と可観測性に明確な区別はありません。むしろこれらは、開発者がより速くインサイトを得るためのデータ分析オプションであり、可視化技術です。
これらの定義を確認したところで、以下の表では、ソフトウェア アプリケーションにおける監視と可観測性の4つの微妙な違いを詳しく見ていきます。4つの違いは、対象範囲、粒度、柔軟性、分析に分けられています。
監視 | 可観測性 | |
---|---|---|
対象範囲 | 指標(システムのアップタイム、CPU使用率、エラー率など)を測定する | 出力から、稼働しているシステムのメカニズムを把握する |
粒度 |
収集したデータを定期的に集計またはサンプリングする(定義済みの指標に基づく) |
詳細なデータを収集して分析し、より詳細なインサイトを得て、システムの動作を把握する |
柔軟性 |
定義済みのダッシュボードやアラートしきい値を実装する(導入後に変更しにくい) |
変化する状況や要件に応じて変更しやすいツールを用い、柔軟で適応性の高いアプローチを使用する |
分析 |
特定のイベントや異常を特定して対応する |
問題の原因を特定して経時的に解決策を実装するために必要なツールを開発者に提供し、プロアクティブな分析とトラブルシューティングを重視する |
ソフトウェアの可観測性において、テレメトリとは、ソフトウェア システムのパフォーマンスと動作に関するデータをリアルタイムで収集して送信することです。このデータ(応答時間、エラー率、リソース消費量など)は、システムの現在の状態を監視して把握するために使用され、開発者がパフォーマンスの改善機会を見極めるのに役立ちます。
テレメトリに関して、OpenTelemetry(OTel)がよく話題に上るのは、可観測性を容易にするシンプルなアプローチを開発者に提供するためです。OTelとは、ソフトウェア システムから収集したテレメトリ データ(ログ、指標、トレース)を標準化するオープンソース ツールとライブラリのセットです。
OTelの詳細と、OTelがクラウドネイティブ環境に与える影響については、「OpenTelemetryがアプリケーションのトレースと設計をどのように変えるのか」をご覧ください。
可観測性があると、開発者はアプリケーションをより詳細に把握することができ、以下のことが可能になります。
可観測性にはいくつかの欠点があり、最も一般的なものを以下に示します。
NGINXでは、可観測性とOTelの両方に関する無料の教育リソースを他にもご用意しています。