Amazon ECS Service Connect アクセスログ - Amazon Elastic Container Service

Amazon ECS Service Connect アクセスログ

Amazon ECS Service Connect は、Service Connect プロキシによって処理された個別のリクエストに関する詳細なテレメトリを提示するアクセスログをサポートします。アクセスログは、HTTP メソッド、パス、レスポンスコード、フラグ、タイミング情報などのリクエストごとのトラフィックメタデータをキャプチャすることで、既存のアプリケーションログを補完します。これにより、リクエストレベルのトラフィックパターンとサービスインタラクションをより詳細に観察できるため、効果的なトラブルシューティングとモニタリングが可能になります。

アクセスログを有効にするには、serviceConnectConfiguration オブジェクトで logConfiguration オブジェクトと accessLogConfiguration オブジェクトの両方を指定します。ログの形式と、ログについて accessLogConfiguration にクエリパラメータが含まれるかどうかを設定できます。ログは、logConfiguration で指定されたログドライバーによって送信先ロググループに配信されます。

{ "serviceConnectConfiguration": { "enabled": true, "namespace": "myapp.namespace", "services": [ ... ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "my-envoy-log-group", "awslogs-region": "us-west-2", "awslogs-stream-prefix": "myapp-envoy-logs" } }, "accessLogConfiguration": { "format": "TEXT", "includeQueryParameters": "ENABLED" } } }

考慮事項

アクセスログへのアクセスを有効にする場合は、次の点を考慮してください。

  • アクセスログとアプリケーションログはどちらも /dev/stdout に書き込まれます。アクセスログをアプリケーションログから分離するには、カスタムの Fluent Bit または Fluentd の設定で awsfirelens ログドライバーを使用することをお勧めします。

  • awslogs ログドライバーを使用して、アプリケーションとアクセスログを同じ CloudWatch の宛先に送信することをお勧めします。

  • アクセスログは、プラットフォームバージョン 1.4.0 以降を使用する Fargate サービスでサポートされています。

  • リクエスト ID やトークンなどのクエリパラメータは、デフォルトでアクセスログから除外されます。アクセスログにクエリパラメータが含まれるようにするには、includeQueryParameters"ENABLED" に設定します。

アクセスログの形式

アクセスログは、JSON 形式のディクショナリまたはテキスト形式の文字列のいずれかでフォーマットできますが、異なるタイプのアクセスログでサポートされているコマンド演算子は異なります。

HTTP アクセスログ

HTTP ログには、デフォルトで次のコマンド演算子が含まれています。

Text
[%START_TIME%] "%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%" %RESPONSE_CODE% %BYTES_RECEIVED% %BYTES_SENT% %DURATION% %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% "%REQ(X-FORWARDED-FOR)%" "%REQ(USER-AGENT)%" "%REQ(X-REQUEST-ID)%" "%REQ(:AUTHORITY)%" "%UPSTREAM_HOST%"\n
JSON
{ "start_time": "%START_TIME%", "method": "%REQ(:METHOD)%", "path": "%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%", "protocol": "%PROTOCOL%", "response_code": "%RESPONSE_CODE%", "bytes_received": "%BYTES_RECEIVED%", "bytes_sent": "%BYTES_SENT%", "duration_ms": "%DURATION%", "upstream_service_time": "%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%", "forwarded_for": "%REQ(X-FORWARDED-FOR)%", "user_agent": "%REQ(USER-AGENT)%", "request_id": "%REQ(X-REQUEST-ID)%", "authority": "%REQ(:AUTHORITY)%", "upstream_host": "%UPSTREAM_HOST%" }

HTTP2 アクセスログ

HTTP ログに含まれるコマンド演算子に加えて、HTTP2 ログにはデフォルトで %STREAM_ID% 演算子が含まれます。

Text
[%START_TIME%] "%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%" %RESPONSE_CODE% %BYTES_RECEIVED% %BYTES_SENT% %DURATION% %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% "%REQ(X-FORWARDED-FOR)%" "%REQ(USER-AGENT)%" "%REQ(X-REQUEST-ID)%" "%REQ(:AUTHORITY)%" "%UPSTREAM_HOST%" "%STREAM_ID%"\n
JSON
{ "start_time": "%START_TIME%", "method": "%REQ(:METHOD)%", "path": "%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%", "protocol": "%PROTOCOL%", "response_code": "%RESPONSE_CODE%", "bytes_received": "%BYTES_RECEIVED%", "bytes_sent": "%BYTES_SENT%", "duration": "%DURATION%", "upstream_service_time": "%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%", "forwarded_for": "%REQ(X-FORWARDED-FOR)%", "user_agent": "%REQ(USER-AGENT)%", "request_id": "%REQ(X-REQUEST-ID)%", "authority": "%REQ(:AUTHORITY)%", "upstream_host": "%UPSTREAM_HOST%", "stream_id": "%STREAM_ID%" }

gRPC アクセスログ

HTTP ログに含まれるコマンド演算子に加えて、gRPC アクセスログにはデフォルトで %STREAM_ID% および %GRPC_STATUS()% の演算子が含まれます。

Text
[%START_TIME%] "%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%" %RESPONSE_CODE% %GRPC_STATUS()% %BYTES_RECEIVED% %BYTES_SENT% %DURATION% %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% "%REQ(X-FORWARDED-FOR)%" "%REQ(USER-AGENT)%" "%REQ(X-REQUEST-ID)%" "%REQ(:AUTHORITY)%" "%UPSTREAM_HOST%" "%STREAM_ID%"\n
JSON
{ "start_time": "%START_TIME%", "method": "%REQ(:METHOD)%", "path": "%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%", "protocol": "%PROTOCOL%", "response_code": "%RESPONSE_CODE%", "grpc_status": "%GRPC_STATUS()%", "bytes_received": "%BYTES_RECEIVED%", "bytes_sent": "%BYTES_SENT%", "duration": "%DURATION%", "upstream_service_time": "%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%", "forwarded_for": "%REQ(X-FORWARDED-FOR)%", "user_agent": "%REQ(USER-AGENT)%", "request_id": "%REQ(X-REQUEST-ID)%", "authority": "%REQ(:AUTHORITY)%", "upstream_host": "%UPSTREAM_HOST%", "stream_id": "%STREAM_ID%" }

TCP アクセスログ

次のコマンド演算子は、デフォルトで TCP アクセスログに含まれています。

Text
[%START_TIME%] %DOWNSTREAM_REMOTE_ADDRESS% %DOWNSTREAM_REMOTE_PORT% %BYTES_RECEIVED% %BYTES_SENT% %DURATION% %CONNECTION_TERMINATION_DETAILS% %CONNECTION_ID%\n
JSON
{ "start_time": "%START_TIME%", "downstream_remote_address": "%DOWNSTREAM_REMOTE_ADDRESS%", "downstream_remote_port": "%DOWNSTREAM_REMOTE_PORT%",s "bytes_received": "%BYTES_RECEIVED%", "bytes_sent": "%BYTES_SENT%", "duration": "%DURATION%", "connection_termination_details": "%CONNECTION_TERMINATION_DETAILS%", "connection_id": %CONNECTION_ID% }

これらのコマンド演算子の詳細については、Envoy ドキュメントの「コマンド演算子」を参照してください。