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에 기록됩니다. 액세스 로그를 애플리케이션 로그와 분리하려면 awsfirelens 로그 드라이버를 사용자 지정 Fluent Bit 또는 Fluentd 구성과 함께 사용하는 것이 좋습니다.
-
awslogs 로그 드라이버를 사용하여 애플리케이션 및 액세스 로그를 동일한 CloudWatch 대상으로 전송하는 것이 좋습니다.
-
액세스 로그는 플랫폼 버전 1.4.0 이상을 사용하는 Fargate 서비스에서 지원됩니다.
-
요청 ID 및 토큰과 같은 쿼리 파라미터는 기본적으로 액세스 로그에서 제외됩니다. 액세스 로그에 쿼리 파라미터를 포함하려면 includeQueryParameters를 "ENABLED"로 설정합니다.
액세스 로그는 JSON 형식 사전 또는 텍스트 형식 문자열로 형식을 지정할 수 있습니다. 이 경우 여러 유형의 액세스 로그에 대해 지원되는 명령 연산자에 차이가 있습니다.
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%"
}
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%"
}
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 액세스 로그에 포함됩니다.
- 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 설명서의 Command Operators를 참조하세요.