

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 增强型运行状况日志格式
<a name="health-enhanced-serverlogs"></a>

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

**注意**  
此页面上的信息仅与基于 Linux 的平台相关。在 Windows Server 平台上，Elastic Beanstalk 将直接从 IIS Web 服务器接收有关 HTTP 请求的信息。有关更多信息，请参阅 [Windows Server 上的 IIS 中的 Web 服务器指标捕获](health-enhanced-metrics-server-iis.md)。

## Web 服务器日志配置
<a name="health-enhanced-serverlogs.configure"></a>

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 示例](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/samples/docker-multicontainer-v2.zip)中开始使用 .ebextension。

**/etc/nginx/conf.d/webapp\$1healthd.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
```

## 为增强型运行状况报告生成日志
<a name="health-enhanced-serverlogs.generate"></a>

要将日志提供给运行状况代理，您必须执行以下操作：
+ 以正确格式输出日志，如前一部分所示
+ 将日志输出到 `/var/log/nginx/healthd/`
+ 使用以下格式命名日志：`application.log.$year-$month-$day-$hour`
+ 每小时将日志轮换一次
+ 请勿截断日志