AWS Elastic Beanstalk
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

增强型运行状况日志格式

AWS Elastic Beanstalk 平台使用自定义 Web 服务器日志格式将有关 HTTP 请求的信息高效地中继到增强型运行状况报告系统,该系统将分析日志、确定问题并相应地设置实例和环境运行状况。如果您对环境禁用 Web 服务器代理并从 Web 容器直接响应请求,则仍然可以通过将服务器配置为以 Elastic Beanstalk 运行状况代理使用的位置和格式来输出日志,从而充分利用增强型运行状况报告。

Web 服务器日志配置

Elastic Beanstalk 平台配置为输出两个包含有关 HTTP 请求的信息的日志。第一个日志采用详细格式并提供关于请求的详细信息,如请求者的用户代理信息和人类可读的时间戳。

/var/log/nginx/access.log

以下示例来自在 Ruby Web 服务器环境上运行的 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"

第二个日志采用简洁格式。它只包含与增强型运行状况报告相关的信息。此日志输出到一个名为 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 环境中。您必须使用 .ebextension 来配置环境,这样 healthd 才能读取您的日志文件:

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

以下示例显示了 Nginx 的日志配置,并突出显示了 healthd 日志格式。

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

  • 每小时将日志轮换一次

  • 请勿截断日志