本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon ECS Service Connect 存取日誌
Amazon ECS Service Connect 支援存取日誌,以提供 Service Connect Proxy 處理之個別請求的詳細遙測。存取日誌會擷取每個請求流量中繼資料,例如 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 日誌預設包含下列命令運算子:
- 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 文件中的命令運算子。