OpenTelemetry のロギングとあなた
Blog posts are not updated after publication. This post is more than a year old, so its content may be outdated, and some links may be invalid. Cross-verify any information before relying on it.
OpenTelemetry をしばらく追いかけてきた方なら、ログについて多くのことを聞いてきたでしょう。 ログブリッジ、Logs API、イベントなど、私たちはあらゆることについて語ってきました。 このブログ記事は、OpenTelemetry におけるロギングの設計理念と現在の方向性について議論することを目的としています。
定義
OpenTelemetry がログについてどのように考えているかの基本的な定義から始めましょう。 広い意味では、ログとはログパイプラインを通じて出力されるテレメトリーであり、Logs API を呼び出すことで作成されます。 ユーザーがこれを行うために、私たちは2つの方法を想定しています。
- Logs API を既存のロガーのシンクとして使用する(既存のログを OpenTelemetry に送信する)
- Logs API を使用してイベントやログレコードを出力する
ソースに関係なく、Logs API を通じて出力されるすべてのログは、OpenTelemetry のコンテキストに参加できます。 ログレコードは、メトリクスやスパンと同じトランザクションまたはスレッドのコンテキストを共有します。 これは OpenTelemetry の設計の基本的な部分であり、すべてのテレメトリーシグナルがコンテキストを通じて相関づけられます。
それを踏まえた上で、ログとイベントの違いは何でしょうか。 答えは非常にわかりやすいものです。イベントとは、OpenTelemetry が保証できるログのことです。 イベントには必須の名前があり、現在のセマンティック規約の定義と同様にスキーマによって定義された構造を持ちます。 OpenTelemetry のすべてのログレコードは構造化されていますが、この定義済みスキーマを持つのはイベントだけです。 私たちがイベントという言葉を使うのは、イベントとは何かを最もわかりやすく表現しているからです。つまり、持続時間を持たずに起こる、名前を付けられる何かです。
ほとんどのログレコードはイベントであるべきだと私たちは考えています。
他のシグナルとの違い
ログとスパンは、特にイベントについて語り始めると、概念的な双子のように考えられることがよくあります。 結局のところ、スパンとは特に詳細なスキーマを持つイベント以外の何なのでしょうか。 両者の重要な違いは、スパンには持続時間があるということです。 イベントには明示的な持続時間がありません。 真に瞬間的な出来事を表すこともあれば、数分、数時間、数日にわたる作業の結果を表すこともあります。 もう1つの大きな違いは、スパンには明示的な階層があるということです。 スパンは他のスパンとの接続を持ち、接続のないスパンでも完全なトレースとして成立します。 イベントにはこの特性がありません。1つのイベントを見ただけでは、それが他のイベントとどのように関連しているかはわかりません。
ログとメトリクスの違いは、より明確に概念的なものです。メトリクスは時間にわたる数値の系列です。 ログをメトリクスに変換することは可能ですが、これはテレメトリー自体を定義した後の段階です。
根本的に、OpenTelemetry はすべてのシグナルを個別にではなく、一緒に解釈するという概念の上に構築されています。 イベントは、それが出力されたスパンの一部と見なすことができ、例外からセキュリティデータ、アクセスログ、タイミング情報まで、あらゆるものを表現するために使用できます。 これは、イベントが単体では役に立たないということではありません。 たとえば、フロントエンド開発者は、スパンの一部ではない画面上の各クリックやタップに対してインタラクションイベントを出力したいと考えるかもしれません。 しかし、イベントがスパンの最中に発生した場合、それはスパンの「一部」と考えることができるということです。
これらをどのように呼ぶか
OpenTelemetry に関わった7年間で個人的に学んだことがあるとすれば、それは、ものの名前についての意見が非常に強い人が多いということです。 特にロギングに関してはその傾向が顕著です。 ロギングの分野において、すべての人の要望や既存の認識に応えることは不可能です。 そのため、この記事で示した用語法を使うよう努めます。
ログとは Logging Provider を通じて送信するものであり、イベントはログの特別な種類です。 すべてのログがイベントというわけではありませんが、すべてのイベントはログです。
セマンティック規約や計装の作者はイベントを使用すべきです。 ログの使用は、既存のロギングライブラリを OpenTelemetry にブリッジする場合、または他に適用可能なシグナルがない場合に限定すべきです。 詳細については、ログの仕様を参照してください。
コメント
この記事について議論するために GitHub イシューを公開しました。 ぜひフィードバックをお寄せください。