AWS Elastic Beanstalk
개발자 가이드

Elastic Beanstalk 환경에서 Amazon EC2 인스턴스의 로그 보기

Elastic Beanstalk 환경의 Amazon EC2 인스턴스는 애플리케이션이나 구성 파일과 관련된 문제를 해결하기 위해 볼 수 있는 로그를 생성합니다. 웹 서버, 애플리케이션 서버, Elastic Beanstalk 플랫폼 스크립트 및 AWS CloudFormation에 의해 생성된 로그는 개별 인스턴스에 로컬로 저장됩니다. 환경 관리 콘솔 또는 EB CLI를 사용하여 쉽게 검색할 수 있습니다. 로그를 Amazon CloudWatch Logs로 실시간으로 스트리밍하도록 환경을 구성할 수도 있습니다.

테일 로그는 가장 일반적으로 사용되는 로그 파일의 마지막 100줄로 Elastic Beanstalk 작업 로그와 웹 서버 또는 애플리케이션 서버의 로그입니다. 환경 관리 콘솔에서 또는 eb logs를 사용하여 테일 로그를 요청하면 환경의 인스턴스가 가장 최근의 로그 항목을 연결하여 단일 텍스트 파일로 만들고 이를 Amazon S3에 업로드합니다.

번들 로그는 다양한 로그 파일의 전체 로그로, yum 및 cron의 로그와 AWS CloudFormation의 여러 로그가 포함됩니다. 번들 로그를 요청하면 환경의 인스턴스가 전체 로그 파일을 ZIP 아카이브로 패키지하고 이를 Amazon S3에 업로드합니다.

참고

Elastic Beanstalk Windows Server 플랫폼은 번들 로그를 지원하지 않습니다.

교체된 로그를 Amazon S3에 업로드하려면 환경의 인스턴스에 Elastic Beanstalk Amazon S3 버킷에 쓸 권한이 있는 인스턴스 프로파일이 있어야 합니다. 이러한 권한은 Elastic Beanstalk 콘솔에서 처음 환경을 시작할 때 Elastic Beanstalk에서 생성하라는 메시지를 표시하는 기본 인스턴스 프로파일에 포함되어 있습니다.

환경 관리 콘솔에서 로그를 검색하려면 로그로 이동하고, 로그 요청을 선택한 다음, 검색할 로그 유형을 선택합니다. 테일 로그를 가져오려면 Last 100 Lines(마지막 로그 100줄)를 선택합니다. 번들 로그를 가져오려면 Full Logs(전체 로그)를 선택합니다.


      Elastic Beanstalk 콘솔의 환경 로그 페이지

Elastic Beanstalk가 로그 검색을 마치면 다운로드를 선택합니다.

Elastic Beanstalk는 Amazon S3 버킷에 테일 및 번들 로그를 저장하며, 사용자의 로그 액세스에 사용할 수 있는 미리 서명된 Amazon S3 URL 또한 생성합니다. Elastic Beanstalk는 15분이 경과하면 Amazon S3에서 파일을 삭제합니다.

주의

미리 서명된 Amazon S3 URL의 소유자는 삭제 전에 파일에 액세스할 수 있습니다. URL은 신뢰할 수 있는 당사자만 사용할 수 있도록 해야 합니다.

로그를 유지하려면 로그가 교체된 후 이를 Amazon S3에 자동으로 게시하도록 환경을 구성하면 됩니다. Amazon S3로의 로그 교체를 활성화하려면 인스턴스 로그 보기 구성의 절차를 따르십시오. 환경의 인스턴스는 교체된 로그를 시간당 한 번 업로드하려고 시도합니다.

애플리케이션이 환경의 플랫폼의 기본 구성의 일부가 아닌 위치에서 로그를 생성하는 경우, 구성 파일(.ebextensions)을 사용하여 기본 구성을 확장할 수 있습니다. 테일 로그, 번들 로그 또는 로그 순환에 애플리케이션의 로그 파일을 추가할 수 있습니다.

실시간 로그 스트리밍 및 장기 저장의 경우 로그를 Amazon CloudWatch Logs로 스트리밍하도록 환경을 구성합니다.

Amazon EC2 인스턴스상의 로그 위치

로그는 환경 내 Amazon EC2 인스턴스의 표준 위치에 저장됩니다. Elastic Beanstalk는 다음 로그를 생성합니다.

Linux

  • /var/log/eb-activity.log

  • /var/log/eb-commandprocessor.log

Windows Server

  • C:\Program Files\Amazon\ElasticBeanstalk\logs\

  • C:\cfn\logs\cfn-init.log

이러한 로그에는 구성 파일(.ebextensions)과 관련된 메시지를 비롯하여 배포 활동에 대한 메시지가 포함되어 있습니다.

각 애플리케이션과 웹 서버는 각자의 폴더에 로그를 저장합니다.

  • Apache/var/log/httpd/

  • IISC:\inetpub\wwwroot\

  • Node.js/var/log/nodejs/

  • nginx/var/log/nginx/

  • Passenger/var/app/support/logs/

  • Puma/var/log/puma/

  • Python/opt/python/log/

  • Tomcat/var/log/tomcat8/

Amazon S3에서의 로그 위치

환경에서 테일 또는 번들 로그를 요청하거나 인스턴스가 교체된 로그를 업로드하면, 이러한 로그는 Amazon S3의 Elastic Beanstalk 버킷에 저장됩니다. Elastic Beanstalk는 환경을 생성하는 각 AWS 리전에 elasticbeanstalk-region-account-id라는 버킷을 생성합니다. 이 버킷 내에서 로그는 경로 resources/environments/logs/logtype/environment-id/instance-id 아래에 저장됩니다.

예를 들어 계정 123456789012에서 AWS 리전 us-west-2의 Elastic Beanstalk 환경 e-mpcwnwheky에 있는 인스턴스 i-0a1fd158의 로그는 다음 위치에 저장됩니다.

  • 테일 로그

    s3://elasticbeanstalk-us-west-2-123456789012/resources/environments/logs/tail/e-mpcwnwheky/i-0a1fd158

  • 번들 로그

    s3://elasticbeanstalk-us-west-2-123456789012/resources/environments/logs/bundle/e-mpcwnwheky/i-0a1fd158

  • 교체된 로그

    s3://elasticbeanstalk-us-west-2-123456789012/resources/environments/logs/publish/e-mpcwnwheky/i-0a1fd158

참고

환경 관리 콘솔에서 환경 ID를 찾을 수 있습니다.

Elastic Beanstalk는 테일 및 번들 로그가 생성된 후 15분이 지나면 Amazon S3에서 자동으로 삭제합니다. 교체된 로그는 이를 삭제하거나 Glacier로 이동할 때까지 유지됩니다.

Linux에서 로그 교체 설정

Linux 플랫폼에서 Elastic Beanstalk는 logrotate를 사용하여 로그를 주기적으로 교체합니다. 구성된 경우 로컬에서 로그가 교체되면 로그 교체 작업에서 이를 수집하여 Amazon S3에 업로드합니다. 로컬에서 교체되는 로그는 기본적으로 테일 또는 번들 로그에 표시되지 않습니다.

/etc/logrotate.elasticbeanstalk.hourly/에서 logrotate에 대한 Elastic Beanstalk 구성 파일을 찾을 수 있습니다. 이러한 교체 설정은 플랫폼별로 다르며, 이후 플랫폼 버전에서 변경될 수 있습니다. 사용 가능한 설정에 대한 자세한 내용 및 구성 예제를 보려면 man logrotate를 실행하십시오.

구성 파일은 /etc/cron.hourly/에서 cron 작업으로 호출됩니다. cron에 대한 자세한 내용을 보려면 man cron을 실행하십시오.

기본 로그 작업 구성 확장

Elastic Beanstalk는 Amazon EC2 인스턴스에 있는 /opt/elasticbeanstalk/tasks(Linux) 또는 C:\Program Files\Amazon\ElasticBeanstalk\config(Windows Server)의 하위 폴더의 파일을 사용하여 테일 로그, 번들 로그, 로그 순환에 대한 작업을 구성합니다.

Linux 상:

  • 테일 로그

    /opt/elasticbeanstalk/tasks/taillogs.d/

  • 번들 로그

    /opt/elasticbeanstalk/tasks/bundlelogs.d/

  • 교체된 로그

    /opt/elasticbeanstalk/tasks/publishlogs.d/

Windows Server에서:

  • 테일 로그

    c:\Program Files\Amazon\ElasticBeanstalk\config\taillogs.d\

  • 교체된 로그

    c:\Program Files\Amazon\ElasticBeanstalk\config\publogs.d\

예를 들어 Linux에서 eb-activity.conf 파일은 테일 로그 작업에 다음과 같은 2개의 로그 파일을 추가합니다.

/opt/elasticbeanstalk/tasks/taillogs.d/eb-activity.conf

/var/log/eb-commandprocessor.log /var/log/eb-activity.log

환경 구성 파일(.ebextensions)을 사용하여 직접 만든 .conf 파일을 이러한 폴더에 추가할 수 있습니다. .conf 파일에는 Elastic Beanstalk가 로그 파일 작업에 추가한 해당 애플리케이션에 대한 로그 파일이 나열됩니다.

수정하려는 작업에 구성 파일을 추가하려면 files 섹션을 사용합니다. 예를 들어 다음 구성 텍스트는 환경의 각 인스턴스에 로그 구성 파일을 추가합니다. 이 로그 구성 파일 cloud-init.conf/var/log/cloud-init.log를 테일 로그에 추가합니다.

files: "/opt/elasticbeanstalk/tasks/taillogs.d/cloud-init.conf" : mode: "000755" owner: root group: root content: | /var/log/cloud-init.log

.config라는 폴더 아래에서 소스 번들에 대한 파일 이름 확장명이 .ebextensions인 파일에 이 텍스트를 추가합니다.

~/workspace/my-app |-- .ebextensions | `-- tail-logs.config |-- index.php `-- styles.css

Linux 플랫폼에서는 로그 작업 구성에 와일드카드 문자를 사용할 수도 있습니다. 이 구성 파일은 애플리케이션 루트의 .log 폴더에서 파일 이름 확장명이 log인 모든 파일을 번들 로그에 추가합니다.

files: "/opt/elasticbeanstalk/tasks/bundlelogs.d/applogs.conf" : mode: "000755" owner: root group: root content: | /var/app/current/log/*.log

참고

로그 작업 구성은 Windows 플랫폼에서 와일드카드 문자를 지원하지 않습니다.

구성 파일 사용에 대한 자세한 내용은 구성 파일(.ebextensions)을 사용하여 고급 환경 사용자 지정 단원을 참조하십시오.

테일 로그와 번들 로그를 연장하듯이 로그 교체도 구성 파일을 사용하여 연장할 수 있습니다. Elastic Beanstalk는 자체 로그를 교체하여 Amazon S3에 업로드할 때마다 추가 로그로 교체하고 업로드합니다. 로그 교체 연장은 플랫폼의 운영 체제에 따라 다르게 동작합니다. 다음 섹션에서는 두 가지 경우에 대해 설명합니다.

Linux에서 로그 교체 연장

Linux에서 로그 교체 설정에서 설명한 것처럼, Elastic Beanstalk는 logrotate를 사용하여 Linux 플랫폼의 로그를 교체합니다. 애플리케이션 로그 파일을 로그 순환으로 구성한 경우, 애플리케이션에서 로그 파일 사본을 생성할 필요가 없습니다. Elastic Beanstalk는 애플리케이션 로그 파일의 사본을 각 순환마다 만들도록 logrotate를 구성합니다. 따라서 애플리케이션에서 능동적으로 작성하지 않는 경우 로그 파일을 잠금 해제 상태로 유지해야 합니다.

Windows Server에서 로그 교체 연장

Windows Server에서 애플리케이션 로그 파일을 장기 교체로 구성한 경우 애플리케이션에서 로그 파일을 정기적으로 교체해야 합니다. Elastic Beanstalk는 사용자가 구성한 패턴으로 시작하는 이름을 가진 파일을 찾아서 선택한 후 Amazon S3에 업로드합니다. 또한 파일 이름의 점은 무시되고, Elastic Beanstalk는 점 이전의 이름까지만 고려하며 이 이름이 기존 로그 파일 이름이 됩니다.

Elastic Beanstalk는 최신 파일을 유효한 애플리케이션 로그 파일(잠길 수 있음)로 간주하기 때문에 최신 버전을 제외하고 모든 버전의 기본 로그 파일을 업로드합니다. 따라서 애플리케이션은 교체 사이에 유효한 로그 파일을 잠금 상태로 유지할 수 있습니다.

애플리케이션에서 my_log.log라는 로그 파일을 작성하고, 사용자가 해당 .conf 파일에 이 이름을 지정하는 경우를 예로 들어보겠습니다. 애플리케이션은 파일을 정기적으로 교체합니다. Elastic Beanstalk는 교체 주기 동안 로그 파일 폴더에서 my_log.log, my_log.0800.log, my_log.0830.log라는 파일을 찾습니다. Elastic Beanstalk는 이 모든 파일을 기본 이름 my_log의 버전으로 간주합니다. my_log.log 파일에는 최신 수정 시간이 들어 있으므로 Elastic Beanstalk는 다른 두 개의 파일인 my_log.0800.logmy_log.0830.log만 업로드합니다.

Amazon CloudWatch Logs에 대한 로그 파일 스트리밍

AWS Management 콘솔에서 또는 구성 옵션을 사용하여 로그를 Amazon CloudWatch Logs로 스트리밍하도록 환경을 구성할 수 있습니다. CloudWatch Logs에서 환경의 각 인스턴스는 환경이 종료된 후에도 몇 주 또는 몇 년간 보존하도록 구성할 수 있는 로그 그룹으로 로그를 스트리밍합니다.

스트리밍되는 로그 세트는 환경에 따라 다르지만, 항상 eb-activity.log와 애플리케이션 앞에서 실행되는 nginx 또는 Apache 프록시 서버의 액세스 로그가 포함되어 있습니다.

환경 생성 중 또는 기존 환경에 대해 AWS Management 콘솔에서 로그 스트리밍을 구성할 수 있습니다. 다음 예제에서 로그는 환경이 종료된 경우에도 최대 7일 동안 저장됩니다.


        CloudWatch Logs 설정

다음 구성 파일은 환경이 종료된 후에도 180일 보존으로 로그 스트리밍을 활성화합니다.

예 .ebextensions/log-streaming.config

option_settings: aws:elasticbeanstalk:cloudwatch:logs: StreamLogs: true DeleteOnTerminate: false RetentionInDays: 180