컨테이너 로그를 AWS Fargate에서 Amazon ECS의 여러 대상으로 전송하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 8월 27일

AWS Fargate에서 실행되는 애플리케이션 컨테이너의 로그를 여러 대상으로 전달하려고 합니다. 이러한 대상은 Amazon CloudWatch, Amazon Kinesis Data Firehose 또는 Splunk일 수 있습니다.

간략한 설명

Amazon Elastic Container Service(Amazon ECS) 태스크 정의를 사용하면 지정된 컨테이너에 대해 단일 로그 구성 객체만 지정할 수 있습니다. 즉, 로그를 단일 대상으로만 전달할 수 있습니다. Fargate의 Amazon ECS에 있는 여러 대상으로 로그를 전달하려면 FireLens를 사용할 수 있습니다.

참고: FireLens는 Fluent Bit 및 Fluentd 로그 전달자 모두에서 작동합니다. 다음 해결 방법에서는 Fluent Bit가 Fluentd보다 리소스 효율적이기 때문에 Fluent Bit를 사용합니다.

다음 사항을 고려하십시오.

  • FireLens는 ECS 태스크 정의의 logConfiguration 객체에 옵션으로 지정된 키-값 페어를 사용하여 Fluent Bit 출력 정의를 생성합니다. 로그가 라우팅되는 대상은 Fluent Bit 구성 파일의 [OUTPUT] 정의 섹션에 지정됩니다. 자세한 내용은 Fluent Bit 웹 사이트의 Output을 참조하십시오.
  • FireLens는 사용자 대신 구성 파일을 생성하지만 사용자 지정 구성 파일을 지정할 수도 있습니다. Amazon Simple Storage Service(Amazon S3)에서 이 구성 파일을 호스팅하거나 사용자 지정 출력 구성 파일이 추가된 사용자 지정 Fluent Bit Docker 이미지를 생성할 수 있습니다.
  • Fargate에서 Amazon ECS를 사용하는 경우 Amazon S3에서 구성 파일을 가져올 수 없습니다. 대신 구성 파일을 사용하여 사용자 정의 Docker 이미지를 만들어야 합니다.

​해결 방법

AWS Identity and Access Management(IAM) 권한 만들기

IAM 권한을 생성하여 태스크 역할이 로그를 다른 대상으로 라우팅할 수 있도록 합니다. 예를 들어 대상이 Kinesis Data Firehose인 경우 태스크에 firehose:PutRecordBatch API를 호출할 수 있는 권한을 부여해야 합니다.

참고: Fluent Bit는 로그 대상으로서 여러 플러그인을 지원합니다. CloudWatchKinesis 스트림과 같은 대상에 필요한 권한에는 logs:CreateLogGroup, logs:CreateLogStream, logs:DescribeLogStreams, logs:PutLogEventskinesis:PutRecords가 포함됩니다.

사용자 지정 출력 구성 파일로 Fluent Bit Docker 이미지를 만듭니다.

1.    파일에 정의된 [OUTPUT] 정의를 선택하면 logDestinations.conf라는 사용자 지정 Fluent Bit 구성 파일을 만듭니다. 예를 들어, 다음 구성 파일에는 CloudWatch, Kinesis Data Firehose 및 Splunk에 대해 정의된 구성이 포함되어 있습니다.

[OUTPUT]
    Name                firehose
    Match               YourContainerName*
    region              us-west-2
    delivery_stream     nginx-stream  
[OUTPUT]
    Name                cloudwatch
    Match               YourContainerName*
    region              us-east-1
    log_group_name      firelens-nginx-container
    log_stream_prefix   from-fluent-bit
    auto_create_group   true   
[OUTPUT]
    Name                splunk
    Match               <ContainerName>*
    Host                127.0.0.1
    Splunk_Token        xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx
    Splunk_Send_Raw     On

참고: 대상에 따라 [OUTPUT] 정의에 서로 다른 필드를 지정해야 합니다. 예를 보려면 Amazon ECS FireLens 예제를 참조하십시오.

2.    다음 Dockerfile 예제를 사용하여 사용자 정의 Fluent Bit 출력 구성 파일로 Docker 이미지를 만듭니다.

FROM amazon/aws-for-fluent-bit:latest
ADD logDestinations.conf /logDestinations.conf

참고: 자세한 내용은 Docker 웹 사이트의 Dockerfile 참조를 확인하십시오.

3.    2단계에서 만든 Dockerfile을 사용하여 사용자 지정 Fluent Bit Docker 이미지를 만들려면 다음 명령을 실행합니다.

docker build -t custom-fluent-bit:latest .

중요: Dockerfile과 동일한 위치에서 docker 빌드 명령을 실행하십시오.

4.    Docker 이미지를 Amazon ECS에서 사용할 수 있는지 확인하려면 Docker 이미지를 Amazon Elastic Container Registry(Amazon ECR) 또는 자체 Docker 레지스트리에 푸시합니다. 예를 들어 로컬 Docker 이미지를 Amazon ECR로 푸시하려면 다음 명령을 실행합니다.

docker push aws_account_id.dkr.ecr.region.amazonaws.com/custom-fluent-bit:latest

5.    태스크 정의(TaskDefinition)에서 FireLens 구성(firelensConfiguration)에 대한 옵션을 업데이트합니다. 예:

{
   "containerDefinitions":[
      {
         "essential":true,
         "image":"aws_account_id.dkr.ecr.region.amazonaws.com/custom-fluent-bit:latest",
         "name":"log_router",
         "firelensConfiguration":{
            "type":"fluentbit",
            "options":{
               "config-file-type":"file",
               "config-file-value":"/logDestinations.conf"
            }
         }
      }
   ]
}

FireLens 구성에 대한 옵션을 업데이트할 때 다음 사항을 고려하십시오.

사용자 지정 구성 파일을 지정하려면 FireLens 구성 파일에 구성 파일 유형 및 구성파일 값 옵션을 포함해야 합니다. 이러한 옵션AWS Command Line Interface(AWS CLI)를 사용하여 태스크 정의를 생성할때만 설정할 수 있습니다.

유효한 Amazon ECR 이미지 위치를 반영하도록 구성의 containerDefinition 섹션에서 [이미지(image)] 속성을 수정해야 합니다. 전체 registry/repository:tag 명명 규칙을 사용하여 Amazon ECR 리포지토리에서 이미지를 지정할 수 있습니다. 예:

aws_account_id.dkr.ecr.region.amazonaws.com/custom-fluent-bit:latest

다른 리포지토리를 사용하려면 태스크 정의의 [이미지(image)] 속성을 참조하십시오.


이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?