ログ

イベントの記録

ログは、構造化(推奨)または非構造化された、メタデータを含む、タイムスタンプ付きのテキストレコードです。 すべてのテレメトリーシグナルの中で、ログは最も大きな遺産を持っています。 ほとんどのプログラミング言語には、組み込みのログ機能があるか、もしくはよく知られ、広く使われているログライブラリがあります。 ログは独立したデータソースですが、スパンに添付することもできます。 OpenTelemetryでは、分散トレースやメトリクスの一部でないデータはすべてログです。 たとえば、イベント は特定の種類のログです。 ログは多くの場合、操作への入力、操作の結果、その操作をサポートするメタデータなどの詳細なデバッグ/診断情報を含んでいます。

トレースとメトリクスに関して、OpenTelemetryはゼロから設計するアプローチを取り、新しいAPIを指定し、このAPIの完全な実装を複数の言語SDKで提供します。

OpenTelemetryのログに対するアプローチは異なります。 既存のロギングソリューションは、言語や運用のエコシステムに広く普及しているので、OpenTelemetryは、それらのログ、トレースやメトリクスシグナル、そして、他のOpenTelemetryコンポーネント間の「ブリッジ」として機能します。 実際、ログのためのAPIは、この理由から「Logs Bridge API」と呼ばれています。

ログ仕様には、この哲学の詳細が記載されています。

OpenTelemetry でのロギングの仕組みを理解するために、コードの計装の一翼を担うコンポーネントのリストを見てみましょう。

ログアペンダー(Log Appender)/ブリッジ(Bridge)

アプリケーション開発者としては、Log Bridge API はログアペンダー/ブリッジを構築するためのロギングライブラリ作者のために提供されているので、直接呼び出すべきではありません。 かわりに、好みのロギングライブラリを使い、OpenTelemetryのログレコードエクスポーターにログを出力できるログアペンダー(またはログブリッジ)を使うように設定するだけです。

OpenTelemetry言語SDKはこの機能を提供します。

ロガープロバイダー

Logs Bridge APIの一部であり、ロギングライブラリの作者である場合にのみ使用すべきです。

ロガープロバイダー( LoggerProvider と呼ばれることもある)は ロガー のファクトリーです。 ほとんどの場合、ロガープロバイダは一度初期化され、そのライフサイクルはアプリケーションのライフサイクルと一致します。 ロガープロバイダーの初期化には、リソースとエクスポーターの初期化も含まれます。

ロガー

Logs Bridge APIの一部であり、ロギングライブラリの作者である場合にのみ使用すべきです。

ロガーはログレコードを作成します。ロガーはログプロバイダーから作成されます。

ログレコードエクスポーター

ログレコードエクスポーターは、ログレコードをコンシューマーに送信します。 このコンシューマーは、デバッグや開発時間用の標準出力、OpenTelemetryコレクター、あるいは、お好みのオープンソースやベンダーのバックエンドです。

ログレコード

ログレコードはイベントの記録を表します。 OpenTelemetryでは、ログレコードには2種類のフィールドがあります。

  • 特定の型と意味を持つ名前付きトップレベルフィールド
  • 任意の値と型のリソースと属性フィールド

トップレベルのフィールドは以下の通りです。

フィールド名説明
Timestampイベントが発生した時刻
ObservedTimestampイベントが観測された時刻
TraceIdリクエストトレースID
SpanIdリクエストスパンID
TraceFlagsW3Cトレースフラグ
SeverityText重要度テキスト(ログレベルとも呼ばれる)
SeverityNumber重要度の数値
Bodyログレコードの本文
Resourceログのソース
InstrumentationScopeログを出力したスコープ
Attributesイベントに関する追加情報

ログレコードとログフィールドの詳細については、ログデータモデル を参照してください。

言語サポート

ログは OpenTelemetry 仕様の stable シグナルです。 ログAPIとSDKの各言語固有の実装については、ステータスは以下の通りです。

LanguageLogs
C++Stable
C#/.NETStable
Erlang/ElixirDevelopment
GoBeta
JavaStable
JavaScriptDevelopment
PHPStable
PythonDevelopment
RubyDevelopment
RustAlpha
SwiftDevelopment

仕様

OpenTelemetryのログについての詳細は、ログ仕様 を参照してください。