awslogs 로그 드라이버 사용 - Amazon Elastic Container Service

awslogs 로그 드라이버 사용

CloudWatch Logs로 로그 정보를 전송하도록 태스크의 컨테이너를 구성할 수 있습니다. 태스크의 Fargate 시작 유형을 사용하는 경우, 컨테이너에서 로그를 볼 수 있습니다. EC2 시작 유형을 사용하고 있다면 한 곳의 편리한 위치에서 컨테이너의 다양한 로그를 볼 수 있으며 컨테이너 로그가 컨테이너 인스턴스에서 디스크 공간을 차지하지 못하도록 방지합니다. 이 주제에서는 작업 정의에서 awslogs 로그 드라이버를 사용하여 시작하는 방법에 대해 설명합니다.

참고

태스크의 컨테이너에서 기록되는 정보 유형은 대부분 ENTRYPOINT 명령에 따라 결정됩니다. 기본적으로 수집되는 로그는 컨테이너를 로컬에서 실행했을 때 일반적으로 대화식 터미널에 표시되는 명령 출력(STDOUTSTDERR I/O 스트림)을 나타냅니다. awslogs 로그 드라이버는 이러한 로그를 Docker에서 CloudWatch Logs로 전달하는 역할만 합니다. 다른 파일 데이터 또는 스트림을 수집할 수 있는 대체 방법을 포함해 Docker 로그가 처리되는 방식에 대한 자세한 정보는 Docker 설명서에서 컨테이너 또는 서비스 로그 보기 섹션을 참조하세요.

Amazon ECS 컨테이너 인스턴스에서 CloudWatch Logs로 시스템 로그를 전송하려면 컨테이너 인스턴스 모니터링 섹션을 참조하세요. CloudWatch Logs에 대한 자세한 정보는 Amazon CloudWatch Logs 사용 설명서로그 파일 모니터링CloudWatch Logs 할당량을 참조하세요.

컨테이너에 대해 awslogs 로그 드라이버 설정

작업에 Fargate 시작 유형을 사용하는 경우 작업 정의에 필요한 logConfiguration 파라미터를 추가하여 awslogs 로그 드라이버를 켜야 합니다. 자세한 정보는 태스크 정의에서 로그 구성 지정 섹션을 참조하세요.

해당 태스크에 EC2 시작 유형을 사용하는 경우 awslogs 로그 드라이버를 설정하려면 Amazon ECS 컨테이너 인스턴스에 버전 1.9.0 이상의 컨테이너 에이전트가 필요합니다. 에이전트 버전을 확인하고 최신 버전으로 업데이트하는 방법에 대한 자세한 정보는 Amazon ECS 컨테이너 에이전트 업데이트 섹션을 참조하세요.

참고

컨테이너 인스턴스에 Amazon ECS 최적화 AMI(버전 1.9.0-1 이상의 ecs-init 패키지 포함)를 사용하지 않는 경우에는 docker run 문 또는 환경 변수 파일에서 다음 환경 변수를 사용하여 에이전트를 시작할 때 awslogs 로깅 드라이버를 사용 가능하도록 지정도 해야 합니다. 자세한 정보는 Amazon ECS 컨테이너 에이전트 설치 섹션을 참조하세요.

ECS_AVAILABLE_LOGGING_DRIVERS='["json-file","awslogs"]'

또한 Amazon ECS 컨테이너 인스턴스는 컨테이너 인스턴스를 시작할 때 사용하는 IAM 역할에 logs:CreateLogStreamlogs:PutLogEvents 권한도 요구합니다. Amazon ECS에서 awslogs 로그 드라이버를 사용 설정하기 전에 Amazon ECS 컨테이너 인스턴스 역할을 생성한 경우 이 권한을 추가해야 할 수 있습니다. ecsTaskExecutionRole은 태스크에 할당되고 올바른 권한이 포함되어 있을 때 사용됩니다. 태스크 실행 역할 확인에 대한 자세한 정보는 IAM 콘솔에서 ecsTaskExecutionRole을 확인하는 방법 섹션을 참조하세요. 컨테이너 인스턴스가 컨테이너 인스턴스에 대해 관리형 IAM 정책을 사용하는 경우 컨테이너 인스턴스에 올바른 권한이 부여될 수 있습니다. Amazon ECS 컨테이너 인스턴스 역할을 확인하고 컨테이너 인스턴스에 대한 관리형 IAM 정책을 연결하는 방법은 IAM 콘솔에서 ecsInstanceRole을 확인하는 방법 섹션을 참조하세요.

로그 그룹 생성

awslogs 로그 드라이버는 로그 스트림을 CloudWatch Logs의 기존 로그 그룹에 전송할 수 있거나 사용자를 대신하여 새 로그 그룹을 생성할 수 있습니다. AWS Management Console은 ecs를 접두사로 사용하는 태스크 정의 패밀리 이름을 사용하여 사용자 대신에 로그 그룹을 생성하는 자동 구성 옵션을 제공합니다. 또한 사용자가 로그 구성 옵션을 수동으로 지정하고 사용자 대신에 로그 그룹을 생성하게 될 true의 값을 가진 awslogs-create-group 옵션을 지정할 수 있습니다.

참고

awslogs-create-group 옵션을 사용하여 로그 그룹을 생성하도록 하려면 IAM 정책에 logs:CreateLogGroup 권한이 포함되어 있어야 합니다.

다음 코드는 awslogs-create-group 옵션을 설정하는 방법을 보여줍니다.

{ "containerDefinitions": [ { "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "firelens-container", "awslogs-region": "us-west-2", "awslogs-create-group": "true", "awslogs-stream-prefix": "firelens" } } }

자동 구성 기능을 사용하여 로그 그룹 생성

Amazon ECS 콘솔에서 태스크 정의를 등록하는 경우, Amazon ECS가 CloudWatch Logs를 자동 구성하도록 허용할 수 있습니다. 이렇게 하면 ecs를 접두사로 사용하는 태스크 정의 패밀리 이름을 사용하여 사용자를 대신하여 로그 그룹을 생성합니다.

Amazon ECS 콘솔에서 로그 그룹 자동 구성 옵션을 사용하는 방법

  1. https://console.aws.amazon.com/ecs/에서 Amazon ECS 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 태스크 정의, 새 태스크 정의 생성을 선택합니다.

  3. 호환성 옵션을 선택한 후 다음 단계(Next Step)를 선택합니다.

  4. 컨테이너 추가(Add container)를 선택합니다.

  5. 스토리지 및 로깅 섹션의 로그 구성에서 CloudWatch Logs 자동 구성을 선택합니다.

  6. awslogs 로그 드라이버 옵션을 입력합니다. 자세한 정보는 태스크 정의에서 로그 구성 지정 섹션을 참조하세요.

  7. 태스크 정의 마법사의 나머지 단계를 완료합니다.

사용 가능한 awslogs 로그 드라이버 옵션

awslogs 로그 드라이버는 Amazon ECS 태스크 정의에서 다음 옵션을 지원합니다. 자세한 정보는 CloudWatch Logs 로깅 드라이버를 참조하세요.

awslogs-create-group

필수 항목 여부: 아니요

로그 그룹을 자동으로 생성할지를 지정합니다. 이 옵션이 지정되지 않은 경우 기본적으로 false로 설정됩니다.

참고

awslogs-create-group을 사용하기 전에 IAM 정책이 logs:CreateLogGroup 권한을 포함해야 합니다.

awslogs-region

필수 항목 여부: 예

awslogs 로그 드라이버가 Docker 로그를 보낼 AWS 리전을 지정합니다. 여러 리전의 클러스터로부터 모든 로그를 CloudWatch Logs 내 단일 리전으로 전송하도록 선택할 수 있습니다. 이는 로그를 모두 한 곳에서 볼 수 있도록 하기 위함입니다. 또는, 리전별로 구분하여 세분화할 수 있습니다. 지정한 로그 그룹이 이 옵션으로 지정한 리전에 위치하는지 확인하세요.

awslogs-group

필수 항목 여부: 예

awslogs 로그 드라이버가 로그 스트림을 전송할 로그 그룹을 지정해야 합니다. 자세한 정보는 로그 그룹 생성 섹션을 참조하세요.

awslogs-stream-prefix

필수 항목 여부: EC2 시작 유형의 경우 선택 사항, Fargate 시작 유형의 경우 필수 항목.

awslogs-stream-prefix 옵션을 사용하여 로그 스트림을 지정한 접두사, 컨테이너 이름 및 컨테이너가 속하는 Amazon ECS 태스크의 ID와 연결할 수 있습니다. 이 옵션을 사용하여 접두사를 지정하는 경우 로그 스트림은 다음 형식을 취합니다.

prefix-name/container-name/ecs-task-id

이 옵션을 사용하여 접두사를 지정하지 않는 경우 로그 스트림 이름이 컨테이너 인스턴스의 Docker 데몬에 의해 할당된 컨테이너 ID를 따서 지정됩니다. Docker 컨테이너 ID(컨테이너 인스턴스에서만 사용 가능)만으로는 로그를 전송한 컨테이너로 역추적하기 어려우므로 이 옵션에서 접두사를 지정하는 것이 좋습니다.

Amazon ECS 서비스의 경우 서비스 이름을 접두사로 사용할 수 있습니다. 이렇게 하면 로그 스트림을 컨테이너가 속하는 서비스, 로그를 전송한 컨테이너의 이름, 컨테이너가 속하는 태스크의 ID로 추적할 수 있습니다.

Amazon ECS 콘솔을 사용할 때 로그 창에 로그가 표시되도록 하기 위해서는 해당 로그에 스트림 접두사를 지정해야 합니다.

awslogs-datetime-format

필수 항목 여부: 아니요

이 옵션은 Python strftime 형식의 여러 줄 시작 패턴을 정의합니다. 로그 메시지는 패턴과 일치하는 하나의 줄과 패턴과 일치하지 않는 나머지 줄들로 이루어져 있습니다. 일치하는 줄은 로그 메시지 간의 구분 기호입니다.

이 형식을 사용하는 사용 사례의 한 예는 스택 덤프와 같은 출력을 구문 분석하는 것이며, 그렇지 않으면 여러 항목에 기록될 수 있습니다. 올바른 패턴을 통해 단일 항목으로 캡처할 수 있습니다.

자세한 정보는 awslogs-datetime-format을 참조하세요.

awslogs-datetime-formatawslogs-multiline-pattern이 모두 구성된 경우, 이 옵션은 항상 우선순위를 갖습니다.

참고

여러 줄 로깅은 모든 로그 메시지의 정규식 구문 분석 및 일치 태스크를 수행합니다. 이는 로깅 성능에 부정적인 영향을 줄 수 있습니다.

awslogs-multiline-pattern

필수 항목 여부: 아니요

이 옵션은 정규식을 사용하여 여러 줄 시작 패턴을 정의합니다. 로그 메시지는 패턴과 일치하는 하나의 줄과 패턴과 일치하지 않는 나머지 줄들로 이루어져 있습니다. 일치하는 줄은 로그 메시지 간의 구분 기호입니다.

자세한 정보는 awslogs-multiline-pattern을 참조하세요.

이 옵션은 awslogs-datetime-format을 구성하는 경우에 무시됩니다.

참고

여러 줄 로깅은 모든 로그 메시지의 정규식 구문 분석 및 일치 태스크를 수행합니다. 이는 로깅 성능에 부정적인 영향을 줄 수 있습니다.

mode

필수 항목 여부: 아니요

유효한 값: non-blocking | blocking

기본값: blocking

컨테이너에서 awslogs로의 로그 메시지 전달 모드. 자세한 정보는 로깅 드라이버 구성 섹션을 참조하세요.

max-buffer-size

필수 항목 여부: 아니요

기본값: 1m

non-blocking 모드를 사용하면 max-buffer-size 로그 옵션은 중간 메시지 스토리지에 사용되는 링 버퍼의 크기를 제어합니다.

태스크 정의에서 로그 구성 지정

컨테이너가 awslogs로 로그를 전송할 수 있으려면 태스크 정의에서 컨테이너에 대한 CloudWatch 로그 드라이버를 지정해야 합니다. 이 섹션에서는 awslogs 로그 드라이버를 사용할 컨테이너의 로그 구성에 대해 설명합니다. 자세한 정보는 새 콘솔을 사용하여 태스크 정의 생성 섹션을 참조하세요.

다음의 작업 정의 JSON에는 각 컨테이너에 대해 지정된 logConfiguration 개체가 있습니다. 하나는 awslogs-wordpress라는 로그 그룹에 로그를 보내는 WordPress 컨테이너용입니다. 다른 하나는 awslogs-mysql이라는 로그 그룹에 로그를 보내는 MySQL 컨테이너용입니다. 두 컨테이너 모두 awslogs-example 로그 스트림 접두사를 사용합니다.

{ "containerDefinitions": [ { "name": "wordpress", "links": [ "mysql" ], "image": "wordpress", "essential": true, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "awslogs-wordpress", "awslogs-region": "us-west-2", "awslogs-stream-prefix": "awslogs-example" } }, "memory": 500, "cpu": 10 }, { "environment": [ { "name": "MYSQL_ROOT_PASSWORD", "value": "password" } ], "name": "mysql", "image": "mysql", "cpu": 10, "memory": 500, "essential": true, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "awslogs-mysql", "awslogs-region": "us-west-2", "awslogs-stream-prefix": "awslogs-example" } } } ], "family": "awslogs-example" }

컨테이너 정의 로그 구성에서 awslogs 로그 드라이버로 태스크 정의를 등록한 후 사용하여 태스크를 실행하거나 해당 태스크 정의를 사용하여 CloudWatch Logs로 로그 전송을 시작할 수 있습니다. 자세한 정보는 독립 실행형 작업 실행Amazon ECS 서비스 생성 섹션을 참조하세요.

CloudWatch Logs에서 awslogs 컨테이너 로그 보기

EC2 시작 유형을 사용하는 태스크의 경우, CloudWatch Logs로 로그를 전송할 적절한 권한이 컨테이너 인스턴스 역할에 포함되고, 컨테이너 에이전트가 버전 1.9.0 이상으로 업데이트되며, awslogs 로그 드라이버를 사용하는 컨테이너를 사용하여 태스크를 구성 및 시작했다면 구성된 컨테이너가 CloudWatch Logs로 로그 데이터를 전송할 것입니다. 콘솔에서 이러한 로그를 보고 검색할 수 있습니다.

Amazon ECS 콘솔에서 컨테이너의 CloudWatch Logs 데이터를 보는 방법

  1. https://console.aws.amazon.com/ecs/에서 Amazon ECS 콘솔을 엽니다.

  2. 클러스터 페이지에서 보려는 작업이 포함된 클러스터를 선택합니다.

  3. 클러스터: cluster_name 페이지에서 Tasks를 선택한 다음, 볼 태스크를 선택합니다.

  4. 태스크: task_id 페이지에서 컨테이너 이름의 왼쪽에 있는 화살표를 선택하여 컨테이너 보기를 확장합니다.

  5. 로그 구성 섹션에서 CloudWatch에서 로그 보기를 선택합니다. 그러면 CloudWatch 콘솔에서 연결된 로그 스트림이 열립니다.

    
							로그 구성의 태스크 정의 보기

CloudWatch 콘솔에서 CloudWatch Logs 데이터를 보는 방법

  1. https://console.aws.amazon.com/cloudwatch/에서 CloudWatch 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 로그를 선택합니다.

  3. 보려는 로그 그룹을 선택합니다. 로그 그룹 생성에서 생성한 로그 그룹이 보일 것입니다.

    
							awslogs 콘솔 지표 보기
  4. 보려는 로그 스트림을 선택합니다.

    
							awslogs 콘솔 지표 보기