

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

# 示例：对 HTTP 404 代码进行计数
<a name="Counting404Responses"></a>

使用 CloudWatch 日志，您可以监控 Apache 服务器返回 HTTP 404 响应的次数，这是未找到页面的响应代码。您可能需要对此进行监控，从而了解站点来访者找不到所查找资源的频率。假定日志记录是结构化的，每个日志事件（站点访问）都包含以下信息：
+ 请求者 IP 地址
+ RFC 1413 标识
+ 用户名
+ Timestamp
+ 请求方法以及请求的资源和协议
+ 对请求的 HTTP 响应代码
+ 请求中传输的字节数

这种日志记录的示例如下所示：

```
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 404 2326
```

您可以指定一个规则，让它尝试匹配其结构反应 HTTP 404 错误的事件，如下例所示：

**使用 CloudWatch 控制台创建指标筛选器**

1. 打开 CloudWatch 控制台，网址为[https://console.aws.amazon.com/cloudwatch/](https://console.amazonaws.cn/cloudwatch/)。

1. 在导航窗格中，选择 **Log groups（日志组）**。

1. 选择 `Actions`、**Create metric filter（创建指标筛选条件）**。

1. 对于 **Filter Pattern（筛选条件模式）**，键入 **[IP, UserInfo, User, Timestamp, RequestInfo, StatusCode=404, Bytes]**。

1. （可选）要测试您的筛选条件模式，请在 **Test Pattern（测试模式）**下，输入一个或多个用于测试模式的日志事件。每个日志事件必须位于一行内，因为换行符用于在 **Log event messages（日志事件消息）**框中分隔日志事件。

1. 选择 “**下一步**”，然后在 “**筛选器名称”** 中键入 “**HTTP404错误**”。

1. 在 **Metric Details（指标详细信息）**下，对于 **Metric Namespace（指标命名空间）**，输入 **MyNameSpace**。

1. 对于 **Metric Name（指标名称）**，输入 **ApacheNotFoundErrorCount**。

1. 确认 **Metric Value（指标值）** 为 1。这指定对于每个“404 Error”事件，计数以 1 累加。

1. 对于 **Default Value（默认值）**，输入 0，然后选择 **Next（下一步）**。

1. 选择 **Create metric filter（创建指标筛选条件）**。

**要使用创建指标筛选器 Amazon CLI**  
在命令提示符处，运行以下命令：

```
aws logs put-metric-filter \
  --log-group-name MyApp/access.log \
  --filter-name HTTP404Errors \
  --filter-pattern '[ip, id, user, timestamp, request, status_code=404, size]' \
  --metric-transformations \
      metricName=ApacheNotFoundErrorCount,metricNamespace=MyNamespace,metricValue=1
```

此示例中使用了文字字符，如左右方括号、双引号和字符串 404。该模式需要整个日志事件消息匹配，才能考虑监控日志事件。

您可以使用 **describe-metric-filters** 命令来验证指标筛选条件的创建。应看到类似如下内容的输出：

```
aws logs describe-metric-filters --log-group-name MyApp/access.log

{
    "metricFilters": [
        {
            "filterName": "HTTP404Errors", 
            "metricTransformations": [
                {
                    "metricValue": "1", 
                    "metricNamespace": "MyNamespace", 
                    "metricName": "ApacheNotFoundErrorCount"
                }
            ], 
            "creationTime": 1399277571078, 
            "filterPattern": "[ip, id, user, timestamp, request, status_code=404, size]"
        }
    ]
}
```

现在，您可以手动发布一些事件：

```
aws logs put-log-events \
--log-group-name MyApp/access.log --log-stream-name hostname \
--log-events \
timestamp=1394793518000,message="127.0.0.1 - bob [10/Oct/2000:13:55:36 -0700] \"GET /apache_pb.gif HTTP/1.0\" 404 2326" \
timestamp=1394793528000,message="127.0.0.1 - bob [10/Oct/2000:13:55:36 -0700] \"GET /apache_pb2.gif HTTP/1.0\" 200 2326"
```

放置这些示例日志事件后不久，您就可以将 CloudWatch 控制台中命名的指标检索为 ApacheNotFoundErrorCount。