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

增强型运行状况日志格式

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

注意

此页面上的信息仅与基于 Linux 的平台相关。在 Windows Server 平台上,Elastic Beanstalk 将直接从 IIS Web 服务器接收有关 HTTP 请求的信息。有关详细信息,请参阅 Windows Server 上的 IIS 中的 Web 服务器指标捕获

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

  • 每小时将日志轮换一次

  • 请勿截断日志