사용자 지정 로그 라우팅 사용 - Amazon Elastic Container Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

사용자 지정 로그 라우팅 사용

Amazon ECS에서 작업 정의 파라미터를 사용하여 로그를 AWS 서비스 또는 AWS Partner Network (APN) 대상으로 라우팅하여 로그 저장 및 분석을 수행할 수 있습니다. FireLens 프로그램, 전문 지식 및 리소스를 활용하여 고객 제품을 구축, 마케팅 및 판매하는 글로벌 파트너 AWS Partner Network 커뮤니티입니다. 자세한 내용은 AWS Partner를 참조하세요. FireLens는 Fluentd 및 Fluent Bit와 함께 작동합니다. AWS for Fluent Bit 이미지가 제공되거나 자체 Fluentd 또는 Fluent Bit 이미지를 사용할 수 있습니다.

고려 사항

Amazon ECS에 FireLens 사용할 때는 다음 사항을 고려하십시오.

  • 콘솔에서 컨테이너 이름을 쉽게 구분할 수 있도록 로그 컨테이너 이름을 추가하는 my_service_ 것이 좋습니다.

  • Amazon ECS는 기본적으로 애플리케이션 컨테이너와 컨테이너 간에 시작 FireLens 컨테이너 주문 종속성을 추가합니다. 애플리케이션 컨테이너와 컨테이너 간에 컨테이너 순서를 지정하면 기본 시작 FireLens 컨테이너 순서가 재정의됩니다.

  • FireLensAmazon ECS는 Linux와 AWS Fargate Linux의 Amazon EC2 모두에서 호스팅되는 작업에 대해 지원됩니다. Windows 컨테이너는 FireLens를 지원하지 않습니다.

    Windows 컨테이너에 대한 중앙 집중식 로깅을 구성하는 방법에 대한 자세한 내용은 Centralized logging for Windows containers on Amazon ECS using Fluent Bit(Fluent Bit를 사용하여 Amazon ECS에서 Windows 컨테이너에 대한 중앙 집중식 로깅)를 참조하세요.

  • FireLensAmazon ECS의 경우 AWS CloudFormation 템플릿에서 지원됩니다. 자세한 내용은 AWS CloudFormation 사용 AWS::ECS::TaskDefinition FirelensConfiguration설명서를 참조하십시오.

  • FireLens포트에서 24224 수신하므로 작업 외부에서 FireLens 로그 라우터에 연결할 수 없도록 하려면 24224 작업에서 사용하는 보안 그룹의 포트에서 인바운드 트래픽을 허용하지 않아야 합니다. awsvpc 네트워크 모드를 사용하는 작업의 경우 이것은 태스크와 연결된 보안 그룹입니다. host 네트워크 모드를 사용하는 태스크의 경우 이것은 태스크를 호스팅하는 Amazon EC2 인스턴스와 연결된 보안 그룹입니다. bridge 네트워크 모드를 사용하는 태스크의 경우 포트 24224를 사용하는 포트 매핑을 생성하지 마세요.

  • bridge네트워크 모드를 사용하는 작업의 경우 해당 구성을 사용하는 애플리케이션 컨테이너가 시작되기 전에 FireLens 구성이 있는 컨테이너를 시작해야 합니다. 컨테이너의 시작 순서를 제어하려면 태스크 정의에서 종속성 조건을 사용하세요. 자세한 설명은 컨테이너 종속성 섹션을 참조하세요.

    참고

    FireLens 구성과 함께 컨테이너 정의에서 종속성 조건 매개 변수를 사용하는 경우 각 컨테이너에 START 또는 HEALTHY 조건 요구 사항이 있는지 확인하십시오.

  • 기본적으로 FireLens는 클러스터 및 태스크 정의 이름을 추가하고 클러스터의 Amazon 리소스 이름(ARN)을 stdout/stderr 컨테이너 로그에 메타데이터 키로 추가합니다. 다음은 메타데이터 형식의 예입니다.

    "ecs_cluster": "cluster-name", "ecs_task_arn": "arn:aws:ecs:region:111122223333:task/cluster-name/f2ad7dba413f45ddb4EXAMPLE", "ecs_task_definition": "task-def-name:revision",

    로그에 메타데이터를 포함시키지 않으려면 태스크 정의의 firelensConfiguration 섹션에서 enable-ecs-log-metadatafalse로 설정합니다.

    "firelensConfiguration":{ "type":"fluentbit", "options":{ "enable-ecs-log-metadata":"false", "config-file-type":"file", "config-file-value":"/extra.conf" }

필수 IAM 권한

이 기능을 사용하려면 작업에 필요한 AWS 서비스를 사용하는 데 필요한 권한을 제공하는 작업에 대한 IAM 역할을 생성해야 합니다. 예를 들어 컨테이너가 Firehose로 로그를 라우팅하는 경우 작업에는 API를 호출할 수 있는 권한이 필요합니다. firehose:PutRecordBatch 자세한 정보는 IAM 사용 설명서IAM 자격 증명 권한 추가 및 제거 섹션을 참조하세요.

다음 예제 IAM 정책은 Firehose에 로그를 라우팅하는 데 필요한 권한을 추가합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "firehose:PutRecordBatch" ], "Resource": [ "*" ] } ] }

다음 예제 IAM 정책은 CloudWatch 로그를 Amazon Logs로 라우팅하는 데 필요한 권한을 추가합니다.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:PutLogEvents" ], "Resource": "*" }] }

다음 조건에서는 태스크 수행 시 Amazon ECS 태스크 실행 역할이 필요할 수도 있습니다. 자세한 설명은 Amazon ECS 태스크 실행 IAM 역할 섹션을 참조하세요.

  • 작업이 Fargate에서 호스팅되고 Amazon ECR에서 컨테이너 이미지를 가져오거나 로그 구성의 민감한 데이터를 참조하는 경우 작업 실행 IAM 역할을 포함해야 합니다. AWS Secrets Manager

  • Amazon S3에서 호스팅되는 사용자 지정 구성 파일을 지정하는 경우 태스크 실행 IAM 역할에 구성 파일에 대한 s3:GetObject 권한과 파일이 있는 Amazon S3 버킷에 대한 s3:GetBucketLocation 권한이 포함되어야 합니다. 자세한 정보는 Amazon Simple Storage Service 사용 설명서정책에서 권한 지정을 참조하세요.

    다음 IAM 정책 예시에서는 Amazon S3에서 파일을 검색하는 데 필요한 권한을 추가합니다. Amazon S3 버킷의 이름과 구성 파일 이름을 지정합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::examplebucket/folder_name/config_file_name" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::examplebucket" ] } ] }

Fluentd 버퍼 제한

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

Docker에서 버퍼 메모리가 부족하여 새 메시지를 추가할 수 있도록 버퍼 메시지를 삭제할 수 있으므로 처리량이 많을 때 이 옵션을 사용합니다. 손실된 로그로 인해 문제를 해결하기 어려울 수 있습니다. 버퍼 제한을 설정하면 이 문제를 방지하는 데 도움이 될 수 있습니다.

다음은 를 지정하는 구문을 보여줍니다. log-driver-buffer-limit 서비스 my_service_ 이름으로 바꾸십시오. :

{ "containerDefinitions": [ { "essential": true, "image": "906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:stable", "name": "my_service_log_router", "firelensConfiguration": { "type": "fluentbit" }, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "firelens-container", "awslogs-region": "us-west-2", "awslogs-create-group": "true", "awslogs-stream-prefix": "firelens" } }, "memoryReservation": 50 }, { "essential": true, "image": "httpd", "name": "app", "logConfiguration": { "logDriver": "awsfirelens", "options": { "Name": "firehose", "region": "us-west-2", "delivery_stream": "my-stream", "log-driver-buffer-limit": "2097152" } }, "dependsOn": [ { "containerName": "log_router", "condition": "START" } ], "memoryReservation": 100 } ] }

Amazon ECS에서 버퍼 제한 옵션을 FireLens 사용할 때는 다음 사항을 고려하십시오.

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

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

  • 기본 버퍼 제한은 1MiB입니다.

  • 유효 값은 0536870912(512MiB)입니다.

  • 태스크 수준에서 할당된 총 메모리 양은 메모리 버퍼 제한 외에 모든 컨테이너에 할당된 메모리 양보다 커야 합니다. 컨테이너 memorymemoryReservation 값을 지정하지 않을 경우 지정된 버퍼 메모리의 총량은 536870912(512MiB) 미만이어야 합니다. 보다 구체적으로 말하면 awsfirelens 로그 드라이버와 log-driver-buffer-limit 옵션이 300MiB로 설정된 앱 컨테이너가 있을 수 있습니다. 그러나 log-driver-buffer-limit이 300MiB(300MiB * 2 > 512MiB)로 설정된 컨테이너가 2개 이상 있는 경우 태스크를 실행할 수 없습니다.

TCP를 통해 Fluent 로거 라이브러리 또는 Log4j 사용

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

FLUENT_HOST

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

FLUENT_PORT

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

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

주제