はじめに
OSSで簡単なオブザーバビリティサービスを構築する機会があり、その事前知識をまとめた備忘録です。
オブザーバビリティとは?
「オブザーバビリティ(Observability)」は、「Observe (観察する)」と「Ability (能力)」の組み合わせから示す通り、日本語では「可観測性」や「観察する能力」と翻訳されています。ではその概念は、いつ頃に登場したのでしょうか。
これは決して新しい概念ではなく、最初に提唱したのは「カルマンフィルター」で知られるRudolf E. Kálmán氏だと言われており、1960年に発表された「On the general theory of control systems(https://www.sciencedirect.com/science/article/pii/S1474667017700948?via%3Dihub)」に登場しています。
その意味は「システム内部の状態を外部出力の情報から推測できる度合いを示す指標」であり、もともとは「自己調整システムの制御理論」に関して言及された言葉でした。
現在IT業界で使われている「オブザーバビリティ」も、基本的な意味は同様です。
つまり「システムの状態に係る出力情報を調査することによって、システム内部の状態を推測、把握する能力」です。
オブザーバビリティを高める上で得られるメリット、期待できることは主に下記の 2 点です。
- システム状態の即時把握による、問題への迅速な初動対応
- ユーザーに対するサービスレベルの維持が容易になる
なぜオブザーバビリティが必要なのか?
システムが複雑化したことへの対応と、障害対応時間の短縮などに必要です。
従来の監視と問題
- 個々のシステムやネットワークを監視
- 問題:システム間のつながりが見えないため、マイクロサービスへの対応が困難
- 結果:異常が発生しても根本原因かの特定に時間がかかる
- 問題:システム間のつながりが見えないため、マイクロサービスへの対応が困難
どのような問題を解決できるのか?
- システム全体を監視しているため、管理が必要なコンピューターが増えても対応が容易
- システム間のつながりがわかるため、原因特定の時間を短縮できる
オブザーバビリティを高めるためには、一般的に3つの要素が必要とされている。
オブザーバビリティ3つの柱、3大監視項目
メトリクス
CPU使用率、メモリ使用量、ディスク使用量などのシステムのパフォーマンスを数値化して示した定量的な指標のこと
何が良いのか?
-
グラフやチャートでアラート監視を行うことで、健全性や異常の有り無しを把握できる
-
アプリの動きや、ハードの稼働状態を可視化し、稼働状態を把握できる
ログ
システムやアプリの実行履歴を記録したデータのこと
例えば、アプリの起動や停止、エラーの発生、DBへのアクセスのこと
何が良いのか?
-
障害発生時に原因特定ができる
-
システムの挙動の追跡ができる
トレース
以下Gemini
トレースとは、あるリクエストがシステム内でどのように処理されたかを、一連のステップとして追跡する記録のことです。まるで探偵が犯人を追跡するように、リクエストがシステム内のどのサービスを経由し、どの処理を経て最終的な結果に至ったのかを詳細に記録します。
何が良いのか?
- マイクロサービスにおいて、複数のサービスをまたがったリクエストの可視化ができる
具合例
ユーザーリクエスト
↓
API Gateway(100ms)
↓
認証サービス(50ms)
↓
商品サービス(200ms)
↓
データベース(150ms)
↓
在庫サービス(80ms)
-
トレースでは各サービスの処理時間と呼び出しの流れの全てが見える
-
そのため、マイクロサービスなどの分散システムにおいて、リクエストを可視化する手段として用いられる。
3本の柱の役割を簡潔に表すと以下になる。
オブザーバビリティの3本柱の一つで、メトリクスが「何が起きているか」、ログが「なぜ問題が起きたか」を判別できるのに対し、トレースはアプリケーションが処理するリクエストに関するデータを収集することで、「どこで問題が発生したか」を判別できます。