Logs de acesso do Amazon ECS Service Connect - Amazon Elastic Container Service

Logs de acesso do Amazon ECS Service Connect

O Amazon ECS Service Connect oferece suporte a logs de acesso para fornecer telemetria detalhada sobre solicitações individuais processadas pelo proxy do Service Connect. Os logs de acesso complementam os logs existentes da aplicação, capturando metadados de tráfego por solicitação, como métodos HTTP, caminhos, códigos de resposta, flags e informações de tempo. Isso permite a observabilidade mais profunda dos padrões de tráfego da solicitação e das interações de serviço para solução de problemas e monitoramento eficazes.

Para habilitar os logs de acesso, especifique os objetos logConfiguration e accessLogConfiguration no objeto serviceConnectConfiguration. Você pode configurar o formato dos logs e se eles devem incluir parâmetros de consulta no accessLogConfiguration. Os logs são entregues ao grupo de logs de destino pelo driver de log especificado no 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" } } }

Considerações

Considere o seguinte ao habilitar o acesso aos logs de acesso:

  • Os logs de acesso e da aplicação são gravados em /dev/stdout. Para separar os logs de acesso dos logs da aplicação, recomendamos usar o driver de log awsfirelens com uma configuração Fluent Bit ou Fluentd personalizada.

  • Recomendamos usar o driver de log awslogs para enviar logs da aplicação e de acesso para o mesmo destino do CloudWatch.

  • os logs de acesso são aceitos nos serviços do Fargate que usam a versão da plataforma 1.4.0 e superior.

  • Os parâmetros de consulta, como ids e tokens de solicitação, são excluídos dos logs de acesso por padrão. Para incluir parâmetros de consulta nos logs de acesso, defina includeQueryParameters como "ENABLED".

Formatos de log de acesso

os logs de acesso podem ser formatados em dicionários no formato JSON ou em cadeias de caracteres no formato de texto, com diferenças nos operadores de comando compatíveis para diferentes tipos de logs de acesso.

Logs de acesso HTTP

Os seguintes operadores de comando são incluídos por padrão para logs 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%" }

Logs de acesso HTTP2

Além dos operadores de comando incluídos para logs HTTP, os logs HTTP2 incluem o operador %STREAM_ID% por padrão.

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%" }

Logs de acesso gRPC

Além dos operadores de comando incluídos para logs HTTP, os logs de acesso gRPC incluem os operadores %STREAM_ID% e %GRPC_STATUS()% por padrão.

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%" }

Logs de acesso TCP

Os seguintes operadores de comando são incluídos por padrão nos logs de acesso 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% }

Para obter mais informações sobre esses operadores de comando, consulte Operadores de comando na documentação do Envoy.