OpenTelemetryログのアップロード
OpenTelemetryを使用してインストゥルメントされたアプリケーションまたはインフラストラクチャのログをOracle Log Analyticsに収集する場合は、UploadOtlpLogs
APIを使用してアップロードします。
APIは現在、JSON形式のOpenTelemetryログ(OTLP)をサポートしています。このAPIを使用して指定された形式でアップロードされたOTELログは、デフォルトでOracle定義のOpenTelemetryログ・ログ・ソースを使用して処理されます。JSON形式のOTLPログの詳細は、例を参照してください。
前提条件
OTELログをアップロードする前に、次の必須前提条件を満たしていることを確認してください。
- アップロードを実行するために必要な権限を提供できるユーザー・グループを識別または作成します。アクセス制御を実装するためのユーザー・グループの作成を参照してください。
- ログのアクセス制御を提供するログ・グループのOCIDを収集します。ログを格納するログ・グループの作成を参照してください。
- ログをアップロードする必要があるテナンシのネームスペースを収集します。ネームスペース値は、Log Analyticsの「サービス詳細」ページからノートにとることができます。Log Analyticsサービスの詳細の表示を参照してください。
トピック:
ユーザーによるOpenTelemetryログのアップロードの許可
要件に基づいて、次のいずれかのIAMポリシー・ステートメントを追加します:
-
次のIAMポリシー・ステートメントは、OTELログをアップロードするための権限を指定されたユーザー・グループに付与するためのものです:
allow group <group_name> to {LOG_ANALYTICS_LOG_GROUP_UPLOAD_LOGS} in compartment <log_group_compartment>
-
次のIAMポリシー・ステートメントは、アップロードを実行するための個々のリソース・タイプ
loganalytics-log-group
のレベルで権限を付与するためのものです:allow group <group_name> to use loganalytics-log-group in compartment <log_group_compartment>
-
次のIAMポリシー・ステートメントは、アップロードを実行するための権限をOracle Log Analytics集計リソース・レベルで提供するためのものです:
allow group <group_name> to use loganalytics-resources-family in tenancy/compartment
前述のすべてのポリシー・ステートメントのgroup_name
は、必要な権限を付与する必要があるユーザー・グループを参照します。
OpenTelemetryログをアップロードするためのAPI
REST APIおよび署名リクエストの使用の詳細は、REST APIおよびセキュリティ資格証明を参照してください。
APIドキュメントについては、Log Analytics API- UploadOtlpLogsを参照してください。
OTELログをアップロードするためのCLIコマンドの例を次に示します。
oci log-analytics upload upload-otlp-logs --file <Log_File_Path> --opc-meta-loggrpid <Log_Group_OCID> --namespace-name <Service_Namespace>
前述のコマンドで:
Log_File_Path
: ログ・ファイルのパス。Service_Namespace
: ログをアップロードする必要があるテナンシのネームスペース。値を取得するステップは、Log Analyticsサービスの詳細の表示を参照してください。Log_Group_OCID
: ログのアクセス制御を提供するログ・グループのOCID。
Log AnalyticsでのOTEL属性の処理
属性は、リソース、スコープ、個々のログ・レコードの3つのレベルで設定できます。セット属性は、Log Analyticsの「属性」フィールドに対して「ログ・レコード」ごとに格納されます。カスタム属性oci_la_attribute_mapping
を使用して、各属性を異なるLog Analyticsフィールドに抽出することもできます。
トピック:
- シナリオ1: デフォルトのOTLPログ形式とその抽出
- シナリオ2: 特殊属性oci_la_attribute_mappingを使用した属性のカスタム・マッピング
- シナリオ3: 複雑な属性マッピングの処理
シナリオ1: デフォルトのOTLPログ形式とその抽出
次のOTLP形式のログの例を考えます。
{
"resourceLogs": [
{
"resource": {
"attributes": [
{
"key": "deployment.environment",
"value": {
"stringValue": "development"
}
},
{
"key": "service.name",
"value": {
"stringValue": "SampleLogApp"
}
},
{
"key": "service.version",
"value": {
"stringValue": "0.0.2"
}
}
]
},
"scopeLogs": [
{
"scope": {
"name": "sample-scope-info",
"version": "1.0.0"
},
"logRecords": [
{
"timeUnixNano": "1758112881118549000",
"severityNumber": 10,
"severityText": "INFO",
"body": {
"stringValue": "Processed request successfully"
},
"attributes": [
{
"key": "event_type",
"value": {
"stringValue": "event-info"
}
},
{
"key": "os",
"value": {
"stringValue": "linux"
}
},
{
"key": "custom_attribute",
"value": {
"stringValue": "some_value"
}
},
{
"key": "dropped",
"value": {
"stringValue": "value"
}
},
{
"key": "otel.dropped_attributes_count",
"value": {
"intValue": "5"
}
},
{
"key": "id",
"value": {
"stringValue": "123"
}
}
],
"traceId": "0102030405060708090a0b0c0d0e0f10",
"spanId": "0102030405060708"
}
]
}
]
}
]
}
前述の例の属性は、次のようにOracle Log Analyticsの「属性」フィールドに抽出されます。
{
"service.version":"0.0.2",
"os":"linux",
"dropped":"value",
"id":"123",
"custom_attribute":"some_value",
"otel.dropped_attributes_count":"5"
}
シナリオ2: 特殊属性oci_la_attribute_mapping
を使用した属性のカスタム・マッピング
たとえば、次の属性をOracle Log Analyticsフィールドにマップするには:
- service.name: フィールド「アプリケーション」
- deployment.environmentから「環境」フィールド
- event_type: フィールド「イベント・タイプ」。
oci_la_attribute_mapping
は、次のように定義する必要があります。
[{"attributeName":"service.name","laFieldName":"Application"},{"attributeName":"deployment.environment","laFieldName":"Environment"},{"attributeName":"event_type","laFieldName":"Event Type"}]
OTELログに組み込まれている前述のカスタム・マッピングの例を次に示します。
{
"resourceLogs": [
{
"resource": {
"attributes": [
{
"key": "deployment.environment",
"value": {
"stringValue": "development"
}
},
{
"key": "service.name",
"value": {
"stringValue": "SampleLogApp"
}
},
{
"key": "service.version",
"value": {
"stringValue": "0.0.2"
}
},
{
"key": "oci_la_attribute_mapping",
"value": {
"stringValue": "[{\"attributeName\":\"service.name\",\"laFieldName\":\"Application\"},{\"attributeName\":\"deployment.environment\",\"laFieldName\":\"Environment\"},{\"attributeName\":\"event_type\",\"laFieldName\":\"Event Type\"}]"
}
}
]
},
"scopeLogs": [
{
"scope": {
"name": "sample-scope-info",
"version": "1.0.0"
},
"logRecords": [
{
"timeUnixNano": "1758112881118549000",
"severityNumber": 10,
"severityText": "INFO",
"body": {
"stringValue": "Processed request successfully"
},
"attributes": [
{
"key": "event_type",
"value": {
"stringValue": "event-info"
}
},
{
"key": "os",
"value": {
"stringValue": "linux"
}
},
{
"key": "custom_attribute",
"value": {
"stringValue": "value"
}
},
{
"key": "dropped",
"value": {
"stringValue": "value"
}
},
{
"key": "otel.dropped_attributes_count",
"value": {
"intValue": "5"
}
},
{
"key": "id",
"value": {
"stringValue": "123"
}
}
],
"traceId": "0102030405060708090a0b0c0d0e0f10",
"spanId": "0102030405060708"
}
]
}
]
}
]
}
シナリオ3: 複雑な属性マッピングの処理
配列属性(複数値):
配列(リスト)値を持つ属性の場合、マップされたOracle Log Analyticsフィールドで、次のような複数値データ型がサポートされていることを確認してください。
{"key": "teams", "value": {"arrayValue": {"values": [{"stringValue": "Alpha"}, {"stringValue": "Beta"}]}}}
マップ属性(ネストされたキー値):
マップ(オブジェクト)属性の場合は、Oracle Log Analyticsフィールドにマップする子キーを指定します。
リスト属性の例:
{
"key": "system",
"value": {
"kvlistValue": {
"values": [
{
"key": "version",
"value": {
"stringValue": "1.0"
}
},
{
"key": "build",
"value": {
"stringValue": "2.0"
}
},
{
"key": "env",
"value": {
"stringValue": "test"
}
}
]
}
}
}
前述のリスト属性に対するoci_la_attribute_mapping
のマッピングの例:
[{"attributeName":"system","childAttributeName":"env","laFieldName":"Environment"}]