Transaction Searchの有効/無効がトレースマップに与える影響について確認してみた
リテールアプリ共創部@大阪の岩田です。
担当している案件でCloudWatch Logsのトレースマップが微妙に意図通りになっておらず、原因を調査したところ、Transaction Searchの有効/無効が原因ということが判明しました。ということでTransaction Searchの有効/無効やOTLPエンドポイントの利用有無によってトレースデータやトレースマップがどのように変化するのか確認してみました。
環境
今回利用した環境は以下の通りです。
- ADOT Collectorのイメージ: public.ecr.aws/aws-observability/aws-otel-collector:v0.47.0
- open-telemetry/api: 1.9.0
- open-telemetry/context: 1.5.0
- open-telemetry/exporter-otlp: 1.4.0
- open-telemetry/opentelemetry-auto-laravel: 1.5.0
- open-telemetry/sdk: 1.14.0
- open-telemetry/sem-conv: 1.38.0
やってみる
それではやっていきます。まず以下ブログと同様の手順でEC2上にLaravel Breezeのアプリケーションを起動、ADOT Collector経由でX-Rayにトレースデータを送信していきます。
単純にAWS X-RayエクスポーターでX-Rayにトレースデータを送信してみる
ADOT Collectorの設定ファイルは以下の通りです。
...略
exporters:
...略
awsxray:
endpoint: https://xray.ap-northeast-3.amazonaws.com
region: ap-northeast-3
...略
service:
pipelines:
traces:
receivers: [otlp]
exporters: [awsxray]
Laravel Breezeを軽く操作してからCloudWatchのコンソールからトレースマップを確認すると以下のような表示でした。

DB操作がsql UPDATEとsql SELECTの2つに分離しています。そしてアイコンがDBのアイコンになっていません。
X-Rayのマネコンから生のトレースデータを取得すると以下の通りでした。 ※一部省略しています。
トレースデータ
{
"Id": "1-53c6850c-cfdea120e995f3ee360a4e6f",
"Duration": 0.024,
"LimitExceeded": false,
"Segments": [
{
"Id": "e05f9dc612515c60",
"Document": {
"id": "e05f9dc612515c60",
"name": "my-laravel-app",
"start_time": 1774512291.3431795,
"trace_id": "1-53c6850c-cfdea120e995f3ee360a4e6f",
"end_time": 1774512291.3670502,
"fault": false,
"error": false,
"throttle": false,
"http": {
"request": {
"url": "http://15.152.32.13:8000/profile",
"method": "GET",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",
"client_ip": "104.28.206.119"
},
"response": {
"status": 200,
"content_length": 0
}
},
"aws": {
"ec2": {
"availability_zone": null,
"instance_id": "ec2b89f83bcccb07cea30e7a5e6e9b50",
"instance_size": null,
"ami_id": null
},
"xray": {
"auto_instrumentation": true,
"sdk_version": "1.14.0",
"sdk": "opentelemetry for php"
}
},
"metadata": {
"default": {
"otel.resource.telemetry.sdk.name": "opentelemetry",
"otel.resource.telemetry.distro.version": "1.2.1",
...略
}
},
"subsegments": [
{
"id": "a2f5cad3a284f850",
"name": "sql SELECT",
"start_time": 1774512291.351203,
"end_time": 1774512291.356583,
"fault": false,
"error": false,
"throttle": false,
"aws": {
"ec2": {
"availability_zone": null,
"instance_id": "ec2b89f83bcccb07cea30e7a5e6e9b50",
"instance_size": null,
"ami_id": null
},
"xray": {
"auto_instrumentation": true,
"sdk_version": "1.14.0",
"sdk": "opentelemetry for php"
}
},
"metadata": {
"default": {
"db.system.name": "pgsql",
"db.query.text": "select * from \"sessions\" where \"id\" = ? limit 1",
"db.namespace": "laravel",
"db.operation.name": "SELECT"
}
},
"namespace": "remote"
},
{
"id": "a83cfc6216b85b8a",
"name": "sql UPDATE",
"start_time": 1774512291.364767,
"end_time": 1774512291.3666172,
"fault": false,
"error": false,
"throttle": false,
"aws": {
"ec2": {
"availability_zone": null,
"instance_id": "ec2b89f83bcccb07cea30e7a5e6e9b50",
"instance_size": null,
"ami_id": null
},
"xray": {
"auto_instrumentation": true,
"sdk_version": "1.14.0",
"sdk": "opentelemetry for php"
}
},
"metadata": {
"default": {
"db.system.name": "pgsql",
"db.query.text": "update \"sessions\" set \"payload\" = ?, \"last_activity\" = ?, \"user_id\" = ?, \"ip_address\" = ?, \"user_agent\" = ? where \"id\" = ?",
"db.namespace": "laravel",
"db.operation.name": "UPDATE"
}
},
"namespace": "remote"
},
{
"id": "622e564376219c0a",
"name": "AppModelsUser::get",
"start_time": 1774512291.3586502,
"end_time": 1774512291.3596728,
"fault": false,
"error": false,
"throttle": false,
"aws": {
"ec2": {
"availability_zone": null,
"instance_id": "ec2b89f83bcccb07cea30e7a5e6e9b50",
"instance_size": null,
"ami_id": null
},
"xray": {
"auto_instrumentation": true,
"sdk_version": "1.14.0",
"sdk": "opentelemetry for php"
}
},
"metadata": {
"default": {
"laravel.eloquent.operation": "get",
"db.statement": "select * from \"users\" where \"id\" = ? limit 1",
...略
}
},
"subsegments": [
{
"id": "682014d76df8ec38",
"name": "sql SELECT",
"start_time": 1774512291.3587203,
"end_time": 1774512291.35942,
"fault": false,
"error": false,
"throttle": false,
"aws": {
"ec2": {
"availability_zone": null,
"instance_id": "ec2b89f83bcccb07cea30e7a5e6e9b50",
"instance_size": null,
"ami_id": null
},
"xray": {
"auto_instrumentation": true,
"sdk_version": "1.14.0",
"sdk": "opentelemetry for php"
}
},
"metadata": {
"default": {
"db.system.name": "pgsql",
"db.query.text": "select * from \"users\" where \"id\" = ? limit 1",
"db.namespace": "laravel",
"db.operation.name": "SELECT"
}
},
"namespace": "remote"
}
]
}
]
}
},
{
"Id": "28f516fe3ccab724",
"Document": {
"id": "28f516fe3ccab724",
"name": "sql SELECT",
"start_time": 1774512291.3587203,
"trace_id": "1-53c6850c-cfdea120e995f3ee360a4e6f",
"end_time": 1774512291.35942,
"parent_id": "682014d76df8ec38",
"inferred": true
}
},
{
"Id": "0a84c54318042c81",
"Document": {
"id": "0a84c54318042c81",
"name": "sql UPDATE",
"start_time": 1774512291.364767,
"trace_id": "1-53c6850c-cfdea120e995f3ee360a4e6f",
"end_time": 1774512291.3666172,
"parent_id": "a83cfc6216b85b8a",
"inferred": true
}
},
{
"Id": "234bb4b933dba604",
"Document": {
"id": "234bb4b933dba604",
"name": "sql SELECT",
"start_time": 1774512291.351203,
"trace_id": "1-53c6850c-cfdea120e995f3ee360a4e6f",
"end_time": 1774512291.356583,
"parent_id": "a2f5cad3a284f850",
"inferred": true
}
}
]
}
Transaction Searchを有効化してからAWS X-RayエクスポーターでX-Rayにトレースデータを送信してみる
続いてCloudWatchのマネコンからTransaction Search有効化してから先程と同じようにLaravel Breezeを操作、CloudWatchのコンソールからトレースマップを確認してみました。今度は以下のような表示でした。

先ほどまでと異なりアイコンがDBのアイコンに変わっています。
X-Rayのマネコンから確認できた生のトレースデータは以下の通りです。※一部省略しています。
トレースデータ
{
"Id": "1-88f29afa-8f86b11888aa3151f68cf500",
"Duration": 0.021,
"LimitExceeded": false,
"Segments": [
{
"Id": "6ab4586454f292e6",
"Document": {
"id": "6ab4586454f292e6",
"name": "my-laravel-app",
"start_time": 1774514254.843955,
"trace_id": "1-88f29afa-8f86b11888aa3151f68cf500",
"end_time": 1774514254.8653238,
"fault": false,
"error": false,
"throttle": false,
"http": {
"request": {
"url": "http://15.152.32.13:8000/profile",
"method": "GET",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",
"client_ip": "104.28.206.119"
},
"response": {
"status": 200,
"content_length": 0
}
},
"aws": {
"xray.fault": false,
"xray.error": false,
"ec2": {
"instance_id": "ec2b89f83bcccb07cea30e7a5e6e9b50"
},
"span.kind": "LOCAL_ROOT",
"xray.throttle": false,
"xray": {
"auto_instrumentation": true,
"sdk_version": "1.14.0",
"sdk": "opentelemetry for php"
}
},
"annotations": {
"aws.local.service": "my-laravel-app",
"span.name": "GET /profile",
"aws.local.operation": "GET /profile",
"span.kind": "SERVER",
"aws.local.environment": "ec2:default"
},
"metadata": {
"telemetry.distro.version": "1.2.1",
"http.url": "http://15.152.32.13:8000/profile",
...略
},
"subsegments": [
{
"id": "18e4ea7cecf719c1",
"name": "sql SELECT",
"start_time": 1774514254.8507657,
"end_time": 1774514254.855846,
"fault": false,
"error": false,
"throttle": false,
"aws": {
"xray.error": false,
"xray.fault": false,
"ec2": {
"instance_id": "ec2b89f83bcccb07cea30e7a5e6e9b50"
},
"span.kind": "CLIENT",
"xray.throttle": false,
"xray": {
"auto_instrumentation": true,
"sdk_version": "1.14.0",
"sdk": "opentelemetry for php"
}
},
"sql": {
"sanitized_query": "select * from \"sessions\" where \"id\" = ? limit 1",
"database_type": "pgsql"
},
"annotations": {
"aws.local.service": "UnknownService",
"span.name": "sql SELECT",
"aws.local.operation": "UnmappedOperation",
"span.kind": "CLIENT",
"aws.remote.service": "pgsql",
"aws.local.environment": "ec2:default",
"aws.remote.operation": "SELECT"
},
"metadata": {
"cloud.provider": "aws",
"telemetry.extended": "true",
"db.system.name": "pgsql",
"db.query.text": "select * from \"sessions\" where \"id\" = ? limit 1",
"PlatformType": "AWS::EC2",
"db.namespace": "laravel",
"db.operation.name": "SELECT",
"cloud.platform": "aws_ec2",
"host.id": "ec2b89f83bcccb07cea30e7a5e6e9b50"
},
"namespace": "remote"
},
{
"id": "44f651602133afb6",
"name": "AppModelsUser::get",
"start_time": 1774514254.857517,
"end_time": 1774514254.8585784,
"fault": false,
"error": false,
"throttle": false,
"aws": {
"xray.error": false,
"xray.fault": false,
"ec2": {
"instance_id": "ec2b89f83bcccb07cea30e7a5e6e9b50"
},
"xray.throttle": false,
"xray": {
"auto_instrumentation": true,
"sdk_version": "1.14.0",
"sdk": "opentelemetry for php"
}
},
"sql": {
"sanitized_query": "select * from \"users\" where \"id\" = ? limit 1"
},
"annotations": {
"aws.local.service": "UnknownService",
"span.name": "AppModelsUser::get",
"span.kind": "INTERNAL",
"aws.local.environment": "ec2:default"
},
"metadata": {
"laravel.eloquent.operation": "get",
"cloud.provider": "aws",
"db.statement": "select * from \"users\" where \"id\" = ? limit 1",
...略
},
"subsegments": [
{
"id": "592f3f4438b9f803",
"name": "sql SELECT",
"start_time": 1774514254.857585,
"end_time": 1774514254.858355,
"fault": false,
"error": false,
"throttle": false,
"aws": {
"xray.error": false,
"xray.fault": false,
"ec2": {
"instance_id": "ec2b89f83bcccb07cea30e7a5e6e9b50"
},
"span.kind": "CLIENT",
"xray.throttle": false,
"xray": {
"auto_instrumentation": true,
"sdk_version": "1.14.0",
"sdk": "opentelemetry for php"
}
},
"sql": {
"sanitized_query": "select * from \"users\" where \"id\" = ? limit 1",
"database_type": "pgsql"
},
"annotations": {
"aws.local.service": "UnknownService",
"span.name": "sql SELECT",
"aws.local.operation": "UnmappedOperation",
"span.kind": "CLIENT",
"aws.remote.service": "pgsql",
"aws.local.environment": "ec2:default",
"aws.remote.operation": "SELECT"
},
"metadata": {
"cloud.provider": "aws",
"telemetry.extended": "true",
"db.system.name": "pgsql",
"db.query.text": "select * from \"users\" where \"id\" = ? limit 1",
...略
},
"namespace": "remote"
}
]
},
{
"id": "d775e8b609d3d783",
"name": "sql UPDATE",
"start_time": 1774514254.863247,
"end_time": 1774514254.864997,
"fault": false,
"error": false,
"throttle": false,
"aws": {
"xray.error": false,
"xray.fault": false,
"ec2": {
"instance_id": "ec2b89f83bcccb07cea30e7a5e6e9b50"
},
"span.kind": "CLIENT",
"xray.throttle": false,
"xray": {
"auto_instrumentation": true,
"sdk_version": "1.14.0",
"sdk": "opentelemetry for php"
}
},
"sql": {
"sanitized_query": "update \"sessions\" set \"payload\" = ?, \"last_activity\" = ?, \"user_id\" = ?, \"ip_address\" = ?, \"user_agent\" = ? where \"id\" = ?",
"database_type": "pgsql"
},
"annotations": {
"aws.local.service": "UnknownService",
"span.name": "sql UPDATE",
"aws.local.operation": "UnmappedOperation",
"span.kind": "CLIENT",
"aws.remote.service": "pgsql",
"aws.local.environment": "ec2:default",
"aws.remote.operation": "UPDATE"
},
"metadata": {
"cloud.provider": "aws",
"telemetry.extended": "true",
"db.system.name": "pgsql",
"db.query.text": "update \"sessions\" set \"payload\" = ?, \"last_activity\" = ?, \"user_id\" = ?, \"ip_address\" = ?, \"user_agent\" = ? where \"id\" = ?",
"PlatformType": "AWS::EC2",
"db.namespace": "laravel",
"db.operation.name": "UPDATE",
"cloud.platform": "aws_ec2",
"host.id": "ec2b89f83bcccb07cea30e7a5e6e9b50"
},
"namespace": "remote"
}
]
}
},
{
"Id": "0d605ba209a1dfff",
"Document": {
"id": "0d605ba209a1dfff",
"name": "sql UPDATE",
"start_time": 1774514254.863247,
"trace_id": "1-88f29afa-8f86b11888aa3151f68cf500",
"end_time": 1774514254.864997,
"parent_id": "d775e8b609d3d783",
"inferred": true,
"sql": {
"sanitized_query": "update \"sessions\" set \"payload\" = ?, \"last_activity\" = ?, \"user_id\" = ?, \"ip_address\" = ?, \"user_agent\" = ? where \"id\" = ?",
"database_type": "pgsql"
},
"annotations": {
"aws.local.service": "pgsql",
"aws.local.operation": "UPDATE"
},
"origin": "Database::SQL"
}
},
{
"Id": "357fcf660a4daf86",
"Document": {
"id": "357fcf660a4daf86",
"name": "sql SELECT",
"start_time": 1774514254.857585,
"trace_id": "1-88f29afa-8f86b11888aa3151f68cf500",
"end_time": 1774514254.858355,
"parent_id": "592f3f4438b9f803",
"inferred": true,
"sql": {
"sanitized_query": "select * from \"users\" where \"id\" = ? limit 1",
"database_type": "pgsql"
},
"annotations": {
"aws.local.service": "pgsql",
"aws.local.operation": "SELECT"
},
"origin": "Database::SQL"
}
},
{
"Id": "2d5db2cd21a6a423",
"Document": {
"id": "2d5db2cd21a6a423",
"name": "sql SELECT",
"start_time": 1774514254.8507657,
"trace_id": "1-88f29afa-8f86b11888aa3151f68cf500",
"end_time": 1774514254.855846,
"parent_id": "18e4ea7cecf719c1",
"inferred": true,
"sql": {
"sanitized_query": "select * from \"sessions\" where \"id\" = ? limit 1",
"database_type": "pgsql"
},
"annotations": {
"aws.local.service": "pgsql",
"aws.local.operation": "SELECT"
},
"origin": "Database::SQL"
}
}
]
}
先程までとは異なりサブセグメントのDocumentに"origin": "Database::SQL"のような情報が増えています。アイコンがDB に変わったのはこれが理由でしょうかね?その他annotationsなども増えていますね。
Transaction Searchを有効化してからOTLPエクスポーターでX-Rayにトレースデータを送信してみる
最後にTransaction Searchを有効化した状態でX-RayのOTLPエンドポイントにトレースデータを送信してみます。ADOT Collectorの設定ファイルを以下のように変更します。
...略
exporters:
otlphttp:
traces_endpoint: https://xray.ap-northeast-3.amazonaws.com/v1/traces
compression: gzip
auth:
authenticator: sigv4auth
...略
extensions:
sigv4auth:
region: ap-northeast-3
service: xray
service:
extensions: [sigv4auth]
pipelines:
traces:
receivers: [otlp]
exporters: [otlphttp]
この状態で再度Laravel Breezeを操作してCloudWatchのコンソールからトレースマップを確認すると、表示が以下のように変わりました。

トレースマップ上のノードの表示が1つに集約され、表示もpgsqlに変わりました。
X-Rayのマネコンから確認できる生のトレースデータは以下の通りです。※一部省略しています。
トレースデータ
{
"Id": "1-7f7dc45a-03cd27a1a88eb45b62903d06",
"Duration": 0.023,
"Segments": [
{
"Id": "24923bf0173b98b0",
"Document": {
"id": "24923bf0173b98b0",
"name": "my-laravel-app",
"start_time": 1774513468.0129948,
"trace_id": "1-7f7dc45a-03cd27a1a88eb45b62903d06",
"end_time": 1774513468.0363288,
"http": {
"request": {
"url": "http://15.152.32.13:8000/profile",
"method": "GET",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",
"client_ip": "104.28.206.119"
},
"response": {
"status": 200
}
},
"aws": {
"span.kind": "LOCAL_ROOT"
},
"annotations": {
"aws.local.service": "my-laravel-app",
"span.name": "GET /profile",
"aws.local.operation": "GET /profile",
"span.kind": "SERVER",
"aws.local.environment": "generic:default"
},
"metadata": {
"telemetry.distro.version": "1.2.1",
"code.function.name": "Illuminate\\Foundation\\Http\\Kernel::handle",
"process.runtime.version": "8.5.3",
...略
},
"subsegments": [
{
"id": "cc9b80530d219589",
"name": "App\\Models\\User::get",
"start_time": 1774513468.0284073,
"end_time": 1774513468.0293968,
"sql": {
"sanitized_query": "select * from \"users\" where \"id\" = ? limit 1"
},
"annotations": {
"aws.local.service": "my-laravel-app",
"span.name": "App\\Models\\User::get",
"span.kind": "INTERNAL",
"aws.local.environment": "generic:default"
},
"metadata": {
"telemetry.distro.version": "1.2.1",
"code.function.name": "Illuminate\\Database\\Eloquent\\Builder::getModels",
...略
},
"subsegments": [
{
"id": "e6ed1a06b48ad6fa",
"name": "pgsql",
"start_time": 1774513468.028477,
"end_time": 1774513468.029147,
"aws": {
"span.kind": "CLIENT"
},
"sql": {
"sanitized_query": "select * from \"users\" where \"id\" = ? limit 1",
"database_type": "pgsql"
},
"annotations": {
"aws.local.service": "my-laravel-app",
"span.name": "sql SELECT",
"aws.local.operation": "UnmappedOperation",
"span.kind": "CLIENT",
"aws.remote.service": "pgsql",
"aws.local.environment": "generic:default",
"aws.remote.operation": "SELECT"
},
"metadata": {
"telemetry.distro.version": "1.2.1",
"telemetry.extended": "true",
"service.name": "my-laravel-app",
"telemetry.distro.name": "opentelemetry-php-instrumentation",
...略
},
"namespace": "remote"
}
]
},
{
"id": "930ca9eefb7bdc86",
"name": "pgsql",
"start_time": 1774513468.0343292,
"end_time": 1774513468.035979,
"aws": {
"span.kind": "CLIENT"
},
"sql": {
"sanitized_query": "update \"sessions\" set \"payload\" = ?, \"last_activity\" = ?, \"user_id\" = ?, \"ip_address\" = ?, \"user_agent\" = ? where \"id\" = ?",
"database_type": "pgsql"
},
"annotations": {
"aws.local.service": "my-laravel-app",
"span.name": "sql UPDATE",
"aws.local.operation": "UnmappedOperation",
"span.kind": "CLIENT",
"aws.remote.service": "pgsql",
"aws.local.environment": "generic:default",
"aws.remote.operation": "UPDATE"
},
"metadata": {
"telemetry.distro.version": "1.2.1",
"telemetry.extended": "true",
"service.name": "my-laravel-app",
"telemetry.distro.name": "opentelemetry-php-instrumentation",
"process.runtime.version": "8.5.3",
"os.type": "linux",
"db.query.text": "update \"sessions\" set \"payload\" = ?, \"last_activity\" = ?, \"user_id\" = ?, \"ip_address\" = ?, \"user_agent\" = ? where \"id\" = ?",
...略
},
"namespace": "remote"
},
{
"id": "60e2bbd4a3f0f047",
"name": "pgsql",
"start_time": 1774513468.0211809,
"end_time": 1774513468.026461,
"aws": {
"span.kind": "CLIENT"
},
"sql": {
"sanitized_query": "select * from \"sessions\" where \"id\" = ? limit 1",
"database_type": "pgsql"
},
"annotations": {
"aws.local.service": "my-laravel-app",
"span.name": "sql SELECT",
"aws.local.operation": "UnmappedOperation",
"span.kind": "CLIENT",
"aws.remote.service": "pgsql",
"aws.local.environment": "generic:default",
"aws.remote.operation": "SELECT"
},
"metadata": {
"telemetry.distro.version": "1.2.1",
"telemetry.extended": "true",
"service.name": "my-laravel-app",
"telemetry.distro.name": "opentelemetry-php-instrumentation",
"process.runtime.version": "8.5.3",
"os.type": "linux",
"db.query.text": "select * from \"sessions\" where \"id\" = ? limit 1",
...略
},
"namespace": "remote"
}
]
}
},
{
"Id": "2a11cf113752e453",
"Document": {
"id": "2a11cf113752e453",
"name": "pgsql",
"start_time": 1774513468.0211809,
"trace_id": "1-7f7dc45a-03cd27a1a88eb45b62903d06",
"end_time": 1774513468.026461,
"parent_id": "60e2bbd4a3f0f047",
"inferred": true,
"sql": {
"sanitized_query": "select * from \"sessions\" where \"id\" = ? limit 1",
"database_type": "pgsql"
},
"annotations": {
"aws.local.service": "pgsql",
"aws.local.operation": "SELECT"
},
"origin": "Database::SQL"
}
},
{
"Id": "148bd0f702dfc786",
"Document": {
"id": "148bd0f702dfc786",
"name": "pgsql",
"start_time": 1774513468.0343292,
"trace_id": "1-7f7dc45a-03cd27a1a88eb45b62903d06",
"end_time": 1774513468.035979,
"parent_id": "930ca9eefb7bdc86",
"inferred": true,
"sql": {
"sanitized_query": "update \"sessions\" set \"payload\" = ?, \"last_activity\" = ?, \"user_id\" = ?, \"ip_address\" = ?, \"user_agent\" = ? where \"id\" = ?",
"database_type": "pgsql"
},
"annotations": {
"aws.local.service": "pgsql",
"aws.local.operation": "UPDATE"
},
"origin": "Database::SQL"
}
},
{
"Id": "01ce7cfd3f442f47",
"Document": {
"id": "01ce7cfd3f442f47",
"name": "pgsql",
"start_time": 1774513468.028477,
"trace_id": "1-7f7dc45a-03cd27a1a88eb45b62903d06",
"end_time": 1774513468.029147,
"parent_id": "e6ed1a06b48ad6fa",
"inferred": true,
"sql": {
"sanitized_query": "select * from \"users\" where \"id\" = ? limit 1",
"database_type": "pgsql"
},
"annotations": {
"aws.local.service": "pgsql",
"aws.local.operation": "SELECT"
},
"origin": "Database::SQL"
}
}
]
}
サブセグメントのDocumentのnameがsql UPDATEやsql SELECTからpgsqlに変わっています。これがトレースマップの表示に反映されていそうですね。
ちなみに差分の概要をAIに解説してもらうと以下の通りでした。
まとめ
┌────────────────────────────┬────────────────────┬──────────────────────────────┐
│ 観点 │ X-Ray SDK │ OTLP │
├────────────────────────────┼────────────────────┼──────────────────────────────┤
│ DB セグメント名 │ sql SELECT/UPDATE │ pgsql(接続先名) │
├────────────────────────────┼────────────────────┼──────────────────────────────┤
│ プラットフォーム │ AWS::EC2 │ Generic │
├────────────────────────────┼────────────────────┼──────────────────────────────┤
│ EC2メタ情報 │ 詳細あり │ 省略 │
├────────────────────────────┼────────────────────┼──────────────────────────────┤
│ aws.local.service (子span) │ UnknownService │ my-laravel-app(正しく伝播) │
├────────────────────────────┼────────────────────┼──────────────────────────────┤
│ メタデータ量 │ 子spanはコンパクト │ 子spanにも完全な属性セット │
└────────────────────────────┴────────────────────┴──────────────────────────────┘
OTLPに切り替えることでサービス名の伝播が改善される一方、EC2固有情報が失われ、セグメント名の命名規則が変わるという差分です。
トレースデータを見ると確かにその通りになっていますね。
まとめ
トレースデータを送信する際にX-Ray標準のエンドポイントを使うかOTLPエンドポイントを使うかだけでなく、Transaction Searchを有効/無効化するだけでもトレースマップが変化するというのは意外でした。X-Ray周辺の技術だとX-RayデーモンやX-Ray SDKの廃止がすでに決定していることから、今後はどんどんOTEL標準に沿って進化していくことが予想されます。今後はOTLPエンドポイントを積極的に利用していく方が良さそうですね。







