ログのデータモデル付録

この記事は英語の原文を日本語に翻訳したものです。原文: https://opentelemetry.io/docs/specs/otel/logs/data-model-appendix/

翻訳元: open-telemetry/opentelemetry-specification v1.60.0(コミット 29ae8c7

注: この文書は仕様ではなく、ログのデータモデル仕様を補足するために提供されています。これらの例はあくまで説明のためのものであり、網羅的・規範的なものではありません。正確な詳細が必要な場合は、それぞれのエクスポーターのドキュメントを参照してください。

Appendix A. Example Mappings

この節には、他のイベント・ログフォーマットをこのデータモデルへマッピングする例が含まれています。

RFC5424 Syslog

プロパティ説明統一モデルのフィールドへのマッピング
TIMESTAMPTimestamp発生元のクロックで計測された、イベントが発生した時刻。Timestamp
SEVERITYenumイベントの重要度を定義します。例: DebugSeverity
FACILITYenumイベントの発生元を記述します。UNIXプロセスの定義済みリストです。イベント発生源のアイデンティティの一部です。例: mail system`Attributes["syslog.facility"]`
VERSIONnumberメタ情報: イベントとは直交するプロトコルバージョン。`Attributes["syslog.version"]`
HOSTNAMEstringイベントの発生場所を記述します。FQDN、IPアドレスなどが値として考えられます。`Resource["host.name"]`
APP-NAMEstringユーザー定義のアプリケーション名。イベント発生源のアイデンティティの一部です。`Resource["service.name"]`
PROCIDstring明確には定義されていません。プロトコル操作のためのメタフィールドとして使われることも、イベント発生源のアイデンティティの一部として使われることもあります。`Attributes["syslog.procid"]`
MSGIDstringイベントの種別を定義します。イベント発生源のアイデンティティの一部です。例: `"TCPIN"``Attributes["syslog.msgid"]`
STRUCTURED-DATAarray of maps of string to stringSD-IDに応じてさまざまな用途があります。
イベント発生源のアイデンティティを記述できます。
イベントの特定の発生を記述するデータを含められます。
タイムスタンプ値の品質など、メタ情報になることもあります。
SD-IDのorigin.swVersionは`Resource["service.version"]`にマッピングされます。SD-IDのorigin.ipは`Attributes["client.address"]`にマッピングされます。残りのSD-IDは`Attributes["syslog.*"]`にマッピングされます。
MSGstringイベントに関する自由形式のテキストメッセージ。通常は人間が読める形式です。Body

Windows Event Log

プロパティ説明統一モデルのフィールドへのマッピング
TimeCreatedTimestampイベントが記録された時刻を識別するタイムスタンプ。Timestamp
Levelenumイベントの重大度レベルを含みます。Severity
Computerstringイベントが発生したコンピューターの名前。`Resource["host.name"]`
EventIDuintプロバイダーがイベントを識別するために使った識別子。`Attributes["winlog.event_id"]`
Messagestringメッセージ文字列。Body
その他すべてのフィールド。anyイベント内のその他すべてのフィールド。`Attributes["winlog.*"]`

SignalFx Events

フィールド説明統一モデルのフィールドへのマッピング
TimestampTimestamp発生元のクロックで計測された、イベントが発生した時刻。Timestamp
EventTypestringイベント種別を記述する、機械が理解できる短い文字列。SignalFx固有の概念です。名前空間を持ちません。例: k8sのEvent Reasonフィールド。`Attributes["com.splunk.signalfx.event_type"]`
Categoryenumイベントの発生元とその理由を記述します。SignalFx固有の概念です。例: AGENT。`Attributes["com.splunk.signalfx.event_category"]`
Dimensionsmap<string, string>EventTypeとCategoryと合わせて、イベント発生源のアイデンティティを定義するのに役立ちます。同じイベント発生源から来るイベントが時間をおいて複数回発生しても、それらはすべてDimensionsの値を持ちます。Resource
Propertiesmap<string, any>特定のイベント発生に関する追加情報。特定のイベント発生源に対して固定されているDimensionsとは異なり、Propertiesは同じイベント発生源から来るイベントの発生ごとに異なる値を持てます。Attributes

Splunk HEC

HECから統一モデルへ、次のマッピングを適用します。

フィールド説明統一モデルのフィールドへのマッピング
timenumeric, string秒単位のエポックタイム形式によるイベント時刻。Timestamp
hoststringイベントデータに割り当てるhostの値。通常はデータを送信しているクライアントのホスト名です。`Resource["host.name"]`
sourcestringイベントデータに割り当てるsourceの値。例えば、開発中のアプリケーションからデータを送信している場合、このキーをそのアプリケーションの名前に設定できます。`Resource["com.splunk.source"]`
sourcetypestringイベントデータに割り当てるsourcetypeの値。`Resource["com.splunk.sourcetype"]`
eventanyイベントの生のbodyをJSONで表現したもの。文字列、数値、文字列配列、数値配列、JSONオブジェクト、JSON配列のいずれかです。Body
fieldsmap<string, any>明示的なカスタムフィールドを含むJSONオブジェクトを指定します。Attributes
indexstringイベントデータのインデックス付けに使われるインデックスの名前。トークンにindexesパラメータが設定されている場合、ここで指定するインデックスは許可されたインデックスのリストに含まれていなければなりません。`Attributes["com.splunk.index"]`

統一モデルからHECへマッピングする際は、次の追加のマッピングを適用します。

統一モデルの要素説明HECへのマッピング
SeverityTextstring人間が読める文字列としてのイベントの重大度。`Fields["otel.log.severity.text"]`
SeverityNumberstring数値としてのイベントの重大度。`Fields["otel.log.severity.number"]`
Namestring変化する部分を含まない短いイベント識別子。`Fields["otel.log.name"]`
TraceIdstringリクエストのトレースID。`Fields["trace_id"]`
SpanIdstringリクエストのスパンID。`Fields["span_id"]`
TraceFlagsstringW3Cのトレースフラグ。`Fields["trace_flags"]`

Log4j

フィールド説明統一モデルのフィールドへのマッピング
InstantTimestamp発生元のクロックで計測された、イベントが発生した時刻。Timestamp
Levelenumログレベル。Severity
Messagestring人間が読めるメッセージ。Body
その他すべてのフィールドany構造化データ。Attributes

Zap

フィールド説明統一モデルのフィールドへのマッピング
tsTimestamp発生元のクロックで計測された、イベントが発生した時刻。Timestamp
levelenumログレベル。Severity
callerstring呼び出し元関数のファイル名と行番号。Attributes、key=未定
msgstring人間が読めるメッセージ。Body
その他すべてのフィールドany構造化データ。Attributes

Apache HTTP Server access log

フィールド説明統一モデルのフィールドへのマッピング
%tTimestamp発生元のクロックで計測された、イベントが発生した時刻。Timestamp
%astringクライアントアドレス`Attributes["network.peer.address"]`
%Astringサーバーアドレス`Attributes["network.local.address"]`
%hstringクライアントのホスト名。`Attributes["client.address"]`
%mstringリクエストメソッド。`Attributes["http.request.method"]`
%v,%p,%U,%qstring組み合わせてURLを構成できる複数のフィールド。`Attributes["url.full"]`
%>sstringレスポンスステータス。`Attributes["http.response.status_code"]`
その他すべてのフィールドany構造化データ。Attributes、key=未定

CloudTrail Log Event

フィールド説明統一モデルのフィールドへのマッピング
eventTimestringリクエストが行われた日時(協定世界時、UTC)。Timestamp
eventSourcestringリクエストが行われたサービス。この名前は通常、スペースを含まないサービス名の短縮形に.amazonaws.comを付けたものです。`Resource["service.name"]`?
awsRegionstringリクエストが行われたAWSリージョン(us-east-2など)。`Resource["cloud.region"]`
sourceIPAddressstringリクエストが行われたIPアドレス。`Attributes["client.address"]`
errorCodestringリクエストがエラーを返した場合のAWSサービスのエラー。`Attributes["cloudtrail.error_code"]`
errorMessagestringリクエストがエラーを返した場合の、そのエラーの説明。Body
その他すべてのフィールド*`Attributes["cloudtrail.*"]`

Google Cloud Logging

フィールド説明統一モデルのフィールドへのマッピング
timestampstringログエントリが記述するイベントが発生した時刻。Timestamp
resourceMonitoredResourceこのログエントリを生成した監視対象リソース。Resource
log_namestringlog_nameフィールドのURLエンコードされたLOG_IDサフィックスは、このエントリがどのログストリームに属するかを識別します。Attributes["gcp.log_name"]
json_payloadgoogle.protobuf.StructJSONオブジェクトとして表現された構造体として表されるログエントリのペイロード。Body
proto_payloadgoogle.protobuf.AnyProtocol Bufferとして表現されるログエントリのペイロード。Body
text_payloadstringUnicode文字列(UTF-8)として表現されるログエントリのペイロード。Body
severityLogSeverityログエントリの重大度。Severity
tracestringログエントリに関連付けられたトレース(あれば)。TraceId
span_idstringログエントリに関連付けられたトレース内のスパンID。SpanId
labelsmap<string,string>ログエントリに関する追加情報を提供する、ユーザー定義のキーと値の組の集合。Attributes
http_requestHttpRequestログエントリに関連付けられたHTTPリクエスト(あれば)。Attributes["gcp.http_request"]
trace_sampledbooleanログエントリに関連付けられたトレースのサンプリング判定。TraceFlags.SAMPLED
その他すべてのフィールドAttributes["gcp.*"]

Elastic Common Schema

フィールド説明統一モデルのフィールドへのマッピング
@timestampdatetimeイベントが記録された時刻Timestamp
messagestring任意の種別のメッセージBody
labelskey/valueイベントに関連する任意のラベルAttributes[*]
tagsarray of stringイベントに関連する値の一覧
trace.idstringトレースIDTraceId
span.id*stringスパンIDSpanId
agent.ephemeral_idstringエージェントが生成した一時的なID**Resource
agent.idstringこのエージェントの一意な識別子**Resource
agent.namestringエージェントに付けられた名前`Resource["telemetry.sdk.name"]`
agent.typestringエージェントの種別`Resource["telemetry.sdk.language"]`
agent.versionstringエージェントのバージョン`Resource["telemetry.sdk.version"]`
source.ip, client.ipstringリクエストが行われたIPアドレス。`Attributes["client.address"]`
cloud.account.idstring対象のクラウド内でのアカウントのID`Resource["cloud.account.id"]`
cloud.availability_zonestringこのホストが動作しているアベイラビリティゾーン。`Resource["cloud.zone"]`
cloud.instance.idstringホストマシンのインスタンスID。**Resource
cloud.instance.namestringホストマシンのインスタンス名。**Resource
cloud.machine.typestringホストマシンのマシン種別。**Resource
cloud.providerstringクラウドプロバイダー名。値の例はaws、azure、gcp、digitaloceanです。`Resource["cloud.provider"]`
cloud.regionstringこのホストが動作しているリージョン。`Resource["cloud.region"]`
cloud.image.id*string`Resource["host.image.name"]`
container.idstring一意なコンテナID`Resource["container.id"]`
container.image.namestringコンテナがビルドされたイメージの名前。`Resource["container.image.name"]`
container.image.tagArray of stringコンテナイメージのタグ。**Resource
container.labelskey/valueイメージのラベル。Attributes[*]
container.namestringコンテナ名。`Resource["container.name"]`
container.runtimestringこのコンテナを管理しているランタイム。例: "docker"**Resource
destination.addressstringイベントの宛先アドレス`Attributes["destination.address"]`
error.codestringエラーを記述するエラーコード。`Attributes["error.code"]`
error.idstringエラーの一意な識別子。`Attributes["error.id"]`
error.messagestringエラーメッセージ。`Attributes["error.message"]`
error.stack_tracestringこのエラーのスタックトレース(プレーンテキスト)。`Attributes["error.stack_trace]
host.architecturestringオペレーティングシステムのアーキテクチャ**Resource
host.domainstringホストが属するドメインの名前。
例えば、WindowsではホストのアクティブディレクトリドメインやNetBIOSドメイン名になります。LinuxではホストのLDAPプロバイダーのドメインになります。
**Resource
host.namestringホストのホスト名。
通常はホストマシンでhostnameコマンドが返す値を含みます。
`Resource["host.name"]`
host.idstring一意なホストID。`Resource["host.id"]`
host.ipArray of stringホストのIP`Resource["host.ip"]`
host.macarray of stringホストのMACアドレス`Resource["host.mac"]`
host.namestringホストの名前。
UNIXシステムでhostnameが返す値、FQDN、あるいはユーザーが指定した名前を含むことがあります。
`Resource["host.name"]`
host.typestringホストの種別。`Resource["host.type"]`
host.uptimestringホストが起動してからの秒数。
service.ephemeral_idstringこのサービスの一時的な識別子**Resource
service.idstring実行中のサービスの一意な識別子。サービスが多数のノードから構成される場合、service.idはすべてのノードで同じであるべきです。**Resource
service.namestringデータの収集元であるサービスの名前。`Resource["service.name"]`
service.node.namestringそのサービスを提供している特定のノード`Resource["service.instance.id"]`
service.statestringサービスの現在の状態。`Attributes["service.state"]`
service.typestringデータの収集元であるサービスの種別。**Resource
service.versionstringデータの収集元であるサービスのバージョン。`Resource["service.version"]`

* まだECSに正式に取り込まれていません。

** OpenTelemetryのリソースに関するセマンティック規約には存在しないリソースです。

これは最も関連性の高いフィールドを選んだものです。網羅的な一覧については完全なリファレンスを参照してください。

ETW (Event Tracing for Windows)

次の表は、ETWイベントのフィールドがログのデータモデルへどのようにマッピングされるかを示します。ETWのヘッダーメタデータはetw.*属性の下に保持され、TDHでデコードされたTraceLoggingのペイロードフィールドは、そのフィールド名をキーとする属性として追加されます。

ETWフィールド説明統一モデルのフィールドへのマッピング
TimeStampTimestampEVENT_HEADER.TimeStampを、トレース・セッションのタイムスタンプメタデータ(QPC、システム時刻、CPUサイクルカウンターなど)に従ってUNIXエポックナノ秒に変換した値Timestamp
Leveluint8イベントの重大度・詳細レベルSeverity(SeverityNumberSeverityText)およびAttributes["etw.level"]
Event namestringTraceLoggingのイベント名(TDH経由)。取得できない場合はetw.<EventId>にフォールバックしますEventName
PayloadanyETWには単一のメッセージフィールドがありません。デコードされたフィールドはAttributesへ格納され、Bodyは空のままになりますBody
ProviderIdGUIDプロバイダーGUID。ハイフン区切りの16進文字列でフォーマットされますAttributes["etw.provider.id"]
EventIduint16イベントディスクリプタから得られるイベント識別子Attributes["etw.event.id"]
Opcodeuint8イベントディスクリプタから得られるOpcodeAttributes["etw.opcode"]
Versionuint8イベントディスクリプタから得られるバージョンAttributes["etw.version"]
Keywordsuint64イベントディスクリプタから得られるKeywordsのビットマスクAttributes["etw.keywords"]
ProcessIduint32イベントヘッダーから得られる発行元プロセスIDAttributes["etw.process.id"]
ThreadIduint32イベントヘッダーから得られる発行元スレッドIDAttributes["etw.thread.id"]
ActivityIdGUID相関ID。ゼロでない場合にのみ発行されますAttributes["etw.activity.id"]
Decoded payload fieldsanyフィールド名をキーとする、TDHでデコードされたTraceLoggingフィールドAttributes[<field name>]

ETWのLevelは8ビットの値であり、その意味はEVENT_DESCRIPTORによって定義されます。SeverityTextには、発生元で知られている元のETWレベル名がそのまま入ります。

ETWレベルETW名SeverityNumberSeverityText
0LOG_ALWAYS0 (UNSPECIFIED)LOG_ALWAYS
1CRITICAL21 (FATAL)CRITICAL
2ERROR17 (ERROR)ERROR
3WARNING13 (WARN)WARNING
4INFO9 (INFO)INFO
5VERBOSE5 (DEBUG)VERBOSE
6–15reserved0 (UNSPECIFIED)(none)
16–255provider-defined0 (UNSPECIFIED)provider-defined (if any)

Level 0LOG_ALWAYS)は重大度ではなく、フィルタリングの指示です。ETWはevent.level <= session.levelのときにイベントを配信するため、レベル0のイベントは設定されたセッションレベルにかかわらず常に配信されます。重大度の情報を持たないため、特定の重大度を作り出すのではなくSeverityNumberUNSPECIFIED (0)にマッピングされます。元の発生源名はSeverityTextLOG_ALWAYSとしてそのまま記録されます。レベル6〜15はMicrosoftによって予約されており、プロバイダーが定義に使うことはできないため、名前を持ちません。レベル16〜255はプロバイダー定義のカスタムレベルです。各プロバイダーのマニフェストが名前(NotValidなど)を割り当てることがありますが、プロバイダー間で標準化された名前はないため、SeverityTextはそのレベルに対してプロバイダーが定義した値(あれば)になります。いずれの範囲も標準化された重大度を持たず、UNSPECIFIED (0)にマッピングされます。いずれの場合も、元のETWレベルはAttributes["etw.level"]に保持されるため、マッピングは可逆的です。

このマッピングの実装例として、OpenTelemetry otel-arrowプロジェクトのETW receiverがあります。この参照は説明のためのものであり非規範的です。上記のマッピングは特定の実装に紐づくものではありません。

Appendix B: SeverityNumber example mappings

SyslogWinEvtLogETWLog4jZapjava.util.logging.NET (Microsoft.Extensions.Logging)SeverityNumber
TRACEFINESTLogLevel.TraceTRACE (1)
Debug (7)VerboseVERBOSEDEBUGDebugFINERLogLevel.DebugDEBUG (5)
FINEDEBUG2 (6)
CONFIGDEBUG3 (7)
Informational (6)InformationINFOINFOInfoINFOLogLevel.InformationINFO (9)
Notice (5)INFO2 (10)
Warning (4)WarningWARNINGWARNWarnWARNINGLogLevel.WarningWARN (13)
Error (3)ErrorERRORERRORErrorSEVERELogLevel.ErrorERROR (17)
Critical (2)CriticalDpanicERROR2 (18)
Alert (1)PanicERROR3 (19)
Emergency (0)CRITICALFATALFatalLogLevel.CriticalFATAL (21)

参考文献