[アップデート] ECS Service Connect エージェントのアクセスログを出力可能になりました
概要
ECS サービスで Service Connect を有効化した際、Service Connect エージェントがサイドカーとして自動で挿入されます。
エージェントの実態としては AWS が管理する Envoy であり、Envoy 自体のアプリケーションログは以前から出力可能でした。
今回のアップデートで Envoy のアクセスログも含めて CloudWatch ログに出力可能になりました。
公式ドキュメント
Envoy 側のアクセスログに関するドキュメント
やってみる
「クライアント側のみ」を有効化した ECS サービス (Client) と「クライアントとサーバー」を有効化した ECS サービス (Server) を用意します。

Server 側でアクセスログを有効化します。

フォーマットとしてテキストと JSON を選択可能ですが、CloudWatch Logs Insights で扱いやすいので今回は JSON を選択します。

クライアント側から HTTP リクエストを送った所、サーバー側で下記ログを出力できました。
{
"start_time": "2025-11-11T07:40:46.216Z",
"bytes_received": 0,
"user_agent": "curl/8.11.1",
"protocol": "HTTP/1.1",
"forwarded_for": null,
"bytes_sent": 11,
"path": "/",
"duration": 1,
"request_id": "c13c6bc6-5a9e-4ee8-929d-7089c54f31fd",
"method": "GET",
"authority": "app.sample-namespace",
"response_code": 200,
"upstream_service_time": "1"
}
今回は HTTP リクエストの場合ですが、HTTP2 や gRPC、TCP のログフォーマットについても AWS 公式ドキュメント に記載されています。
※ 今回はサーバー側タスク定義の portMappings.appProtocol で http を指定しています。
{
"compatibilities": ["EC2", "FARGATE", "MANAGED_INSTANCES"],
"containerDefinitions": [
{
"entryPoint": [],
"environment": [],
"essential": true,
"image": "xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/sample-ecs-app:v1",
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/sample-ecs-app",
"awslogs-region": "ap-northeast-1",
"awslogs-stream-prefix": "ecs"
}
},
"name": "App",
"portMappings": [
{
"appProtocol": "http",
"containerPort": 80,
"hostPort": 80,
"name": "app",
"protocol": "tcp"
}
],
"secrets": []
}
],
"cpu": "256",
"executionRoleArn": "arn:aws:iam::xxxxxxxxxxxx:role/MainStack-TaskExecutionRole250D2532-Rlp5UtlWi3H2",
"family": "MainStackTaskDefinitionC957DE9A",
"memory": "512",
"networkMode": "awsvpc",
"requiresCompatibilities": ["FARGATE"],
"revision": 6,
"taskDefinitionArn": "arn:aws:ecs:ap-northeast-1:xxxxxxxxxxxx:task-definition/MainStackTaskDefinitionC957DE9A:6",
"taskRoleArn": "arn:aws:iam::xxxxxxxxxxxx:role/MainStack-EcsTaskRole8DFA0181-1EKaZTXqypel",
"volumes": [],
"tags": []
}
クエリパラメータについて
デフォルトではメールアドレスなどの機密情報が乗る可能性があるクエリパラメータはログに出力されません。
「クエリパラメータを含める」にチェックを入れることで下記のように path 属性に含めることが可能です。
{
"authority": "app.sample-namespace",
"path": "/?key1=value1",
"forwarded_for": null,
"user_agent": "curl/8.11.1",
"protocol": "HTTP/1.1",
"request_id": "472e98e9-4e1e-48bf-be3f-fce64d172688",
"response_code": 200,
"duration": 1,
"method": "GET",
"upstream_service_time": "1",
"bytes_sent": 11,
"bytes_received": 0,
"start_time": "2025-11-11T08:18:10.196Z"
}
ログの振り分けについて
アプリケーションログとアクセスログの両方が同一のログストリームに配信されるので、振り分けるなら Fluent Bit などで分ける必要があります。

混じった状態で Logs Insights で検索してしまうのもありですが、コストが気になる場合はアクセスログを Fluent Bit 経由で S3 などに転送すると良いでしょう。

最後に
ECS Service Connect でカスタマイズできる部分がまた一つ増えました。
特にセキュリティ要件でアクセスログが必須な場合でも利用できるようになったのは大きいと思います。






