높은 처리량을 위한 Amazon ECS 로그 구성 - Amazon Elastic Container Service

높은 처리량을 위한 Amazon ECS 로그 구성

작업 정의를 생성할 때 log-driver-buffer-limit에 값을 지정하여 메모리에 버퍼링되는 로그 줄 수를 지정할 수 있습니다. 자세한 정보는 Docker 설명서의 Fluentd logging driver(Fluentd 로깅 드라이버)를 참조하세요.

Docker에서 버퍼 메모리가 부족하여 새 메시지를 추가할 수 있도록 버퍼 메시지를 삭제할 수 있으므로 처리량이 많을 때 이 옵션을 사용합니다.

버퍼 제한 옵션과 함께 Amazon ECS용 FireLens를 사용할 때 다음 사항을 고려해야 합니다.

  • 이 옵션은 플랫폼 버전 1.4.0 이상의 Amazon EC2 시작 유형 및 Fargate 시작 유형에서 지원됩니다.

  • 이 옵션은 logDriverawsfirelens로 설정된 경우에만 유효합니다.

  • 기본 버퍼 제한은 1048576개의 로그 줄입니다.

  • 버퍼 제한은 로그 라인 0줄 이상, 536870912줄 미만이어야 합니다.

  • 이 버퍼에 사용되는 최대 메모리 양은 각 로그 줄의 크기와 버퍼 크기를 곱한 값입니다. 예를 들어 애플리케이션의 로그 줄이 평균 2KiB인 경우 4096의 버퍼 제한은 최대 8MiB를 사용합니다. 작업 수준에서 할당된 총 메모리 양은 로그 드라이버 메모리 버퍼 외에도 모든 컨테이너에 할당된 메모리 양보다 커야 합니다.

awsfirelens 로그 드라이버가 태스크 정의에 지정되어 있으면 Amazon ECS 컨테이너 에이전트는 다음 환경 변수를 컨테이너에 주입합니다.

FLUENT_HOST

FireLens 컨테이너에 할당된 IP 주소입니다.

참고

bridge 네트워크 모드에서 EC2 시작 유형을 사용하는 경우 FireLens 로그 라우터 컨테이너(컨테이너 정의에 firelensConfiguration 객체가 있는 컨테이너)를 다시 시작한 후 애플리케이션 컨테이너의 FLUENT_HOST 환경 변수가 부정확해질 수 있습니다. 이는 FLUENT_HOST가 동적 IP 주소이며 재시작 후 변경될 수 있기 때문입니다. 애플리케이션 컨테이너에서 FLUENT_HOST IP 주소로 직접 로깅하면 주소가 변경된 후 실패하기 시작할 수 있습니다. 개별 컨테이너를 재시작하는 방법에 대한 자세한 내용은 컨테이너 재시작 정책이 있는 Amazon ECS 작업의 개별 컨테이너 재시작 섹션을 참조하세요.

FLUENT_PORT

Fluent Forward 프로토콜이 수신 대기 중인 포트입니다.

FLUENT_HOSTFLUENT_PORT 환경 변수를 사용하면 stdout을 거치지 않고 코드에서 로그 라우터로 직접 로깅할 수 있습니다. 자세한 정보는 GitHub에서 fluent-logger-golang을 참조하세요.

다음은 log-driver-buffer-limit를 지정하는 구문입니다. my_service_를 사용자 서비스의 이름으로 바꿉니다.

{ "containerDefinitions": [ { "name": "my_service_log_router", "image": "public.ecr.aws/aws-observability/aws-for-fluent-bit:stable", "cpu": 0, "memoryReservation": 51, "portMappings": [], "essential": true, "environment": [], "mountPoints": [], "volumesFrom": [], "user": "0", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/ecs-aws-firelens-sidecar-container", "mode": "non-blocking", "awslogs-create-group": "true", "max-buffer-size": "25m", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "firelens" }, "secretOptions": [] }, "systemControls": [], "firelensConfiguration": { "type": "fluentbit" } }, { "essential": true, "image": "httpd", "name": "app", "logConfiguration": { "logDriver": "awsfirelens", "options": { "Name": "firehose", "region": "us-west-2", "delivery_stream": "my-stream", "log-driver-buffer-limit": "51200" } }, "dependsOn": [ { "containerName": "log_router", "condition": "START" } ], "memoryReservation": 100 } ] }