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

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

awslogs 로그 드라이버 사용

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

참고

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

Amazon ECS 컨테이너 인스턴스에서 Logs로 시스템 CloudWatch 로그를 보내려면 Amazon Logs 사용 설명서의 로그 파일 및 CloudWatch 로그 할당량 모니터링을 참조하십시오. CloudWatch

컨테이너에 대해 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은 태스크에 할당되고 올바른 권한이 포함되어 있을 때 사용됩니다. 작업 실행 역할에 대한 자세한 내용은 을 참조하십시오. Amazon ECS 태스크 실행 IAM 역할 컨테이너 인스턴스가 컨테이너 인스턴스에 대해 관리형 IAM 정책을 사용하는 경우 컨테이너 인스턴스에 올바른 권한이 부여될 수 있습니다. 컨테이너 인스턴스의 관리형 IAM 정책에 대한 자세한 내용은 을 참조하십시오Amazon ECS 컨테이너 인스턴스 IAM 역할.

로그 그룹 생성

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

참고

awslogs-create-group 옵션을 사용하여 로그 그룹을 생성하도록 하려면 작업 실행 IAM 역할 정책 또는 EC2 인스턴스 역할 정책에 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 이렇게 하면 ecs를 접두사로 사용하는 태스크 정의 패밀리 이름을 사용하여 사용자를 대신하여 로그 그룹을 생성합니다. 자세한 설명은 콘솔을 사용하여 작업 정의 생성 섹션을 참조하세요.

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

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

awslogs-create-group

필수 항목 여부: 아니요

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

참고

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

awslogs-region

필수 항목 여부: 예

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

awslogs-group

필수 항목 여부: 예

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

awslogs-stream-prefix

필수: 예, Fargate 시작 유형을 사용하는 경우 가능합니다. 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을 구성하는 경우에 무시됩니다.

awslogs-datetime-formatawslogs-multiline-pattern 옵션을 모두 구성할 수는 없습니다.

참고

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

mode

필수 항목 여부: 아니요

유효한 값: non-blocking | blocking

기본 값: blocking

이 옵션은 컨테이너에서 로그로의 CloudWatch 로그 메시지 전달 모드를 정의합니다. 선택한 전송 모드는 컨테이너에서 컨테이너로의 로그 흐름이 중단될 때 애플리케이션 가용성에 영향을 줍니다. CloudWatch

기본 blocking 모드를 사용할 때 로그 흐름이 CloudWatch 중단되면 컨테이너 코드에서 쓰기 stdoutstderr 스트림에 대한 호출이 차단됩니다. 결과적으로 애플리케이션의 로깅 스레드가 차단됩니다. 이로 인해 애플리케이션이 응답하지 않고 컨테이너 상태 확인에 실패할 수 있습니다.

non-blocking 모드를 사용하는 경우 컨테이너의 로그는 max-buffer-size 옵션으로 구성된 인 메모리 중간 버퍼에 대신 저장됩니다. 이렇게 하면 로그를 전송할 수 없을 때 애플리케이션이 응답하지 않는 상황이 발생하는 것을 방지할 수 있습니다. CloudWatch 서비스 가용성을 보장하고 일부 로그 손실이 괜찮다면 이 모드를 사용하는 것이 좋습니다.

max-buffer-size

필수 항목 여부: 아니요

기본 값: 1m

non-blocking 모드를 사용하면 max-buffer-size 로그 옵션은 중간 메시지 스토리지에 사용되는 버퍼의 크기를 제어합니다. 애플리케이션에 따라 적절한 버퍼 크기를 지정해야 합니다. 버퍼가 가득 차면 로그를 더 이상 저장할 수 없습니다. 저장할 수 없는 로그는 손실됩니다.

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

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

다음의 작업 정의 JSON에는 각 컨테이너에 대해 지정된 logConfiguration 개체가 있습니다. 하나는 라는 로그 그룹에 로그를 보내는 WordPress awslogs-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", "mode": "non-blocking", "max-buffer-size": "25m" } } } ], "family": "awslogs-example" }

컨테이너 정의 로그 구성에서 awslogs 로그 드라이버와 함께 작업 정의를 등록한 후 해당 작업 정의를 사용하여 작업을 실행하거나 서비스를 생성하여 CloudWatch 로그를 Logs로 보내기 시작할 수 있습니다. 자세한 내용은 애플리케이션을 Amazon ECS 태스크로 실행콘솔을 사용하여 서비스 생성 섹션을 참조하세요.