TL;DR

システムの内部構造を知らなくても、そのシステムについて問いを投げることで、外から理解できるようにする性質。日本語では可観測性と訳される。

なぜ必要か

OpenTelemetry のドキュメントでは、次のように説明されている。

Observability lets you understand a system from the outside by letting you ask questions about that system without knowing its inner workings. Furthermore, it allows you to easily troubleshoot and handle novel problems, that is, “unknown unknowns”. It also helps you answer the question “Why is this happening?”

未知の問題、いわゆる「未知の未知」にも対処でき、トラブルシューティングが容易になる。「なぜこれが起きているのか」という問いに答える助けにもなる。

仕組み

オブザーバビリティを実現するには、アプリケーションが適切に計装されている必要がある。

To ask those questions about your system, your application must be properly instrumented. That is, the application code must emit signals such as traces, metrics, and logs.

計装とは、トレースやスパン、イベントなどを出力する実装を通じて、アプリケーションを観測できるようにすることである。主な構成要素は次のとおり。

  • イベント: ある時点で何があったかを記録したもの。「データベースに INSERT を発行した」「ステータスコード 200 を返した」といった情報が、1 行ずつログとして出力される
  • スパン: プログラム中の、ある操作の開始から終了までの範囲を表すもの。イベントがどの文脈で発行されたかを与え、親子関係で処理の入れ子を表す
  • トレース: 1 つのリクエストの処理で、どのスパンやイベントが発行されたかを追跡する方法。トレース ID にスパンが結び付けられる
  • 構造化ログ: これらの要素を、JSON(JSON Lines)や LTSV、logfmt など機械が読み取りやすい形式で保存するログ。各ログが共通のフィールドを持つので、後から検索して追跡しやすい

関連

出典