향상된 상태 로그 형식 - AWS Elastic Beanstalk

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

향상된 상태 로그 형식

AWS Elastic Beanstalk 플랫폼은 사용자 지정 웹 서버 로그 형식을 사용하여, 확장 상태 보고 시스템에 대한 HTTP 요청 관련 정보를 효율적으로 전달합니다. 시스템에서 로그를 분석하고 문제를 식별하며 그에 따라 인스턴스 및 환경 상태를 설정합니다. 환경에서 웹 서버 프록시를 비활성화하고 웹 컨테이너에서 요청을 직접 서비스하는 경우에도 Elastic Beanstalk 상태 확인 에이전트가 사용하는 위치와 형식으로 로그를 출력하도록 서버를 구성하여 확장 상태 확인 보고를 최대한 활용할 수 있습니다.

참고

이 페이지의 정보는 Linux 기반 플랫폼에만 관련되어 있습니다. Windows Server 플랫폼에서 Elastic Beanstalk가 IIS 웹 서버로부터 직접 HTTP 요청에 대한 정보를 수신합니다. 세부 정보는 Windows Server의 IIS에서 웹 서버 지표 캡처을 참조하세요.

웹 서버 로그 구성

Elastic Beanstalk 플랫폼은 HTTP 요청에 대한 정보가 포함된 두 개의 로그를 출력하도록 구성됩니다. 첫 번째는 상세 표시 형식이며 요청자의 사용자 에이전트 정보 및 사람이 읽을 수 있는 타임스탬프를 포함하여 요청에 대한 세부 정보를 제공합니다.

/var/log/nginx/access.log

다음 예제는 Ruby 웹 서버 환경에서 실행되는 nginx 프록시에서 나온 것이지만, 형식은 Apache와 비슷합니다.

172.31.24.3 - - [23/Jul/2015:00:21:20 +0000] "GET / HTTP/1.1" 200 11 "-" "curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3" "177.72.242.17" 172.31.24.3 - - [23/Jul/2015:00:21:21 +0000] "GET / HTTP/1.1" 200 11 "-" "curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3" "177.72.242.17" 172.31.24.3 - - [23/Jul/2015:00:21:22 +0000] "GET / HTTP/1.1" 200 11 "-" "curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3" "177.72.242.17" 172.31.24.3 - - [23/Jul/2015:00:21:22 +0000] "GET / HTTP/1.1" 200 11 "-" "curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3" "177.72.242.17" 172.31.24.3 - - [23/Jul/2015:00:21:22 +0000] "GET / HTTP/1.1" 200 11 "-" "curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3" "177.72.242.17"

두 번째 로그는 terse 형식입니다. 아 로그에는 확장 상태 보고에만 관련된 정보가 포함됩니다. 이 로그는 healthd라는 하위 폴더에 출력되며 매시간 교체됩니다. 기존 로그는 교체된 후 즉시 삭제됩니다.

/var/log/nginx/healthd/application.log.2015-07-23-00

다음 예제에서는 머신 판독 가능 형식의 로그를 보여 줍니다.

1437609879.311"/"200"0.083"0.083"177.72.242.17 1437609879.874"/"200"0.347"0.347"177.72.242.17 1437609880.006"/bad/path"404"0.001"0.001"177.72.242.17 1437609880.058"/"200"0.530"0.530"177.72.242.17 1437609880.928"/bad/path"404"0.001"0.001"177.72.242.17

확장 상태 로그 형식에는 다음 정보가 포함됩니다.

  • Unix 시간으로 표시된 요청의 시간

  • 요청의 경로

  • 요청에 대한 HTTP 상태 코드

  • 요청 시간

  • 업스트림 시간

  • X-Forwarded-For HTTP 헤더

nginx 프록시의 경우 시간은 세 자리의 부동 소수점 초로 인쇄됩니다. Apache의 경우 전체 마이크로초가 사용됩니다.

참고

로그 파일에서 다음과 같은 경고가 보이는 경우, 여기서 DATE-TIME은 날짜 및 시간이며, 멀티컨테이너 Docker 환경에서와 같이 사용자 지정 프록시를 사용합니다. 이 경우 healthd가 로그 파일을 읽을 수 있도록 .ebextension을 사용하여 환경을 구성해야 합니다.

W, [DATE-TIME #1922] WARN -- : log file "/var/log/nginx/healthd/application.log.DATE-TIME" does not exist

멀티컨테이너 Docker 샘플에서 .ebextension으로 시작할 수 있습니다.

/etc/nginx/conf.d/webapp_healthd.conf

다음 예제에서는 healthd 로그 형식이 강조 표시된 nginx에 대한 로그 구성을 보여 줍니다.

upstream my_app { server unix:///var/run/puma/my_app.sock; } log_format healthd '$msec"$uri"' '$status"$request_time"$upstream_response_time"' '$http_x_forwarded_for'; server { listen 80; server_name _ localhost; # need to listen to localhost for worker tier if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") { set $year $1; set $month $2; set $day $3; set $hour $4; } access_log /var/log/nginx/access.log main; access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd; location / { proxy_pass http://my_app; # match the name of upstream directive which is defined above proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /assets { alias /var/app/current/public/assets; gzip_static on; gzip on; expires max; add_header Cache-Control public; } location /public { alias /var/app/current/public; gzip_static on; gzip on; expires max; add_header Cache-Control public; } }
/etc/httpd/conf.d/healthd.conf

다음 예제는 Apache용 로그 구성을 보여 줍니다.

LogFormat "%{%s}t\"%U\"%s\"%D\"%D\"%{X-Forwarded-For}i" healthd CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/healthd/application.log.%Y-%m-%d-%H 3600" healthd

향상된 상태 보고를 위한 로그 생성

상태 에이전트에 로그를 제공하려면 다음을 수행해야 합니다.

  • 이전 단원의 설명과 같이 올바른 형식의 로그 출력

  • /var/log/nginx/healthd/에 로그 출력

  • 다음 형식을 사용하여 로그에 이름 지정. application.log.$year-$month-$day-$hour

  • 시간당 한 번 로그 교체

  • 로그를 자르지 마세요.