TL;DR

内容

オブザーバビリティの主要な用語

オブザーバビリティとは、分散システムを観測することである。分散システムとは、異なるネットワーク上のコンピュータに配置されたコンポーネントが、互いにメッセージをやり取りして動作を調整するシステムを指す。分散システムはリソースとトランザクションから成る。

  • リソース: システムを構成する物理的・論理的なコンポーネント。物理的なものにはサーバ、コンテナ、RAM、CPU があり、論理的なものにはクライアント、アプリケーション、API エンドポイント、データベース、ロードバランサがある。
  • トランザクション: ユーザの代わりにタスクをこなすために、必要なリソースを用意して利用するリクエスト。通常は実際のユーザが開始し、ユーザは完了を待つ。飛行機の予約などがこれにあたる。

テレメトリは、システムが何をしているかを示すデータである。ボタンのクリックやセッション時間のように、ユーザの行動を分析するためのクライアント側の情報をユーザテレメトリと呼ぶ。一方、システムのコンポーネントの動作とパフォーマンスに関する統計データをパフォーマンステレメトリと呼ぶ。パフォーマンステレメトリは分散システムのさまざまなリソースから集まり、原因と結果を結びつける手がかりになる。

シグナルはテレメトリの一種で、イベントログ、システムメトリクス、プロファイルなどがある。シグナルはそれぞれ目的が異なり、互換性がない。そのため、システム全体を理解するには何種類ものシグナルが必要になる。シグナルは、テレメトリを生成するための実装である計装と、解析ツールにネットワーク経由でデータを送る伝送システムで構成される。

オブザーバビリティは、テレメトリとそのデータを分析することでもある。DevOps と同じく組織的なプラクティスであり、CI/CD やカオスエンジニアリング、開発生産性の向上といった最新のソフトウェア開発プラクティスの土台になっている。

テレメトリの歴史

テレメトリは、ログ、メトリクス、分散トレースの順に発展してきた。

ログは、システムやサービスの状態を人が読める形で記述したテキストのメッセージである。個々のイベントについては教えてくれるが、時間とともにどう変化しているかを理解するには多くのデータが必要になる。

メトリクスは、システムの状態やリソースの利用状況を統計的に表したデータである。メトリクスの登場によって、エラーや例外だけでなく、データそのものに対してアラートを作れるようになった。

分散トレースは、個々のイベントを見る代わりに、操作全体と、それらがどう組み合わさってトランザクションを形作っているかを調べる。操作には開始時刻、終了時刻、場所が記録されており、これを追跡(トレース)することで原因を突き止められる。ただし、リソースの制約からトレースは大量にサンプリングされがちだった。結果としてトランザクションの一部しか記録されず、パフォーマンス分析以外での有用性は限られていた。

「三本柱」の罠

ログ、メトリクス、トレースは、オブザーバビリティの「三本柱」と呼ばれる。旧来のオブザーバビリティでは、これらがサイロ化された別々のシステムとして作られており、「三本柱」という呼び方自体がこの垂直統合をよく表している。

問題が起きたとき、個々のデータを見るだけでは解決に至らないことが大半である。解決するには、データの流れを横断して相関関係を見つける必要がある。しかし、サイロ化されているとこれが非常に難しい。たとえば、別々のブラウザのタブでそれぞれのページを見比べることになる。また、垂直統合されているため、シグナルどうしを確実に結びつける共通の識別子もない。

OpenTelemetry は、この 3 つのシグナルを組み合わせることで、こうした問題を解決する。

キーワード

自分の理解

問題が起きたとき、個々のデータを見るだけでは解決に至らないことが大半だという指摘には、強く同意する。