

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

# 创建指标筛选条件
<a name="MonitoringPolicyExamples"></a>

以下过程和示例介绍如何创建指标筛选条件。

**Topics**
+ [创建日志组的指标筛选条件](CreateMetricFilterProcedure.md)
+ [示例：对日志事件进行计数](CountingLogEventsExample.md)
+ [示例：对字词的出现次数进行计数](CountOccurrencesExample.md)
+ [示例：对 HTTP 404 代码进行计数](Counting404Responses.md)
+ [示例：对 HTTP 4xx 代码进行计数](FindCountMetric.md)
+ [示例：从 Apache 日志中提取字段并分配维度](ExtractBytesExample.md)

# 创建日志组的指标筛选条件
<a name="CreateMetricFilterProcedure"></a>

要创建日志组的指标筛选条件，请执行下列步骤。在拥有一些数据点之前，该指标将不可见。

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

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

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

1.  选择日志组的名称。

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

1.  对于 **Filter pattern**（筛选条件模式），输入一种筛选条件模式。有关更多信息，请参阅 [指标筛选条件、订阅筛选条件、筛选日志事件和 Live Tail 的筛选条件模式语法](FilterAndPatternSyntax.md)。

1.  （可选）如果您使用的是集中式日志组，则可以在**筛选条件选择标准**下，根据源账户（`@aws.account`）、源区域（`@aws.region`）或这两个条件指定筛选条件。

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

1.  选择 **Next**（下一步），然后为指标筛选条件输入名称。

1.  在**指标详细信息**下，在**指标命名空间**中，输入要发布指标的 CloudWatch 命名空间的名称。如果该命名空间尚不存在，请确保选中 **Create new**（新建）。

1.  对于 **Metric name（指标名称）**，为新指标输入名称。

1.  对于 **Metric value（指标值）**，如果您的指标筛选条件正在计算筛选条件中关键字的出现次数，请输入 1。对于包含其中一个关键字的每个日志事件，此操作会以 1 为增量增加该指标。

    或者，输入令牌，例如 **\$1size**。对于包含 `size` 字段的每个日志事件，此操作会以 `size` 字段中的数值为增量增加该指标。

1.  （可选）对于 **Unit（单位）**，选择要分配给相应指标的单位。如果未指定单位，则单位将设置为 `None`。

1.  （可选）为指标输入多达三个维度的名称和令牌。如果将维度分配给指标筛选条件创建的指标，则无法为这些指标分配默认值。
**注意**  
 维度仅在 JSON 或以空格分隔的指标筛选条件中受支持。

1.  选择 **Create metric filter（创建指标筛选条件）**。可以从导航窗格找到您创建的指标筛选条件。选择 **Logs**（日志），然后选择 **Log groups**（日志组）。选择您为其创建指标筛选条件的日志组的名称，然后选择 **Metric filters**（指标筛选条件）选项卡。

# 示例：对日志事件进行计数
<a name="CountingLogEventsExample"></a>

最简单的日志事件监控就是对发生的日志事件进行计数。您可能想对所有事件进行计数，以创建“检测信号”式监视器，或只是练习创建指标筛选条件。

在以下 CLI 示例中，将名 MyAppAccessCount 为的指标筛选器应用于日志组 MyApp /access.log，以便在 CloudWatch命名空间 EventCount 中创建指标 MyNamespace。该筛选条件配置为与任何日志事件内容匹配并以“1”为增量增加该指标。

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

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

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

1. 选择日志组的名称。

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

1. 将 **Filter Pattern（筛选条件模式）**和 **Select Log Data to Test（选择要测试的日志数据）**保留为空。

1. 选择 **Next（下一步）**，然后对于 **Filter Name（筛选条件名称）**，键入 **EventCount**。

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

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

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

1. 对于 **Default Value（默认值）**，输入 0，然后选择 **Next（下一步）**。指定默认值可确保即使在未出现日志事件的时间段内也报告有数据，防止出现有时不存在数据的断点指标。

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

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

```
aws logs put-metric-filter \
  --log-group-name MyApp/access.log \
  --filter-name EventCount \
  --filter-pattern " " \
  --metric-transformations \
  metricName=MyAppEventCount,metricNamespace=MyNamespace,metricValue=1,defaultValue=0
```

您可以通过发布任何事件数据来测试此新策略。您应该会看到发布到该指标的数据点 MyAppAccessEventCount。

**要使用发布事件数据 AWS CLI**  
在命令提示符处，运行以下命令：

```
aws logs put-log-events \
  --log-group-name MyApp/access.log --log-stream-name TestStream1 \
  --log-events \
    timestamp=1394793518000,message="Test event 1" \
    timestamp=1394793518000,message="Test event 2" \
    timestamp=1394793528000,message="This message also contains an Error"
```

# 示例：对字词的出现次数进行计数
<a name="CountOccurrencesExample"></a>

日志事件经常包含您需要计数的重要消息，可能是关于操作的成功或失败的消息。例如，如果给定操作失败，可能发生错误，且错误记录到日志文件中。您可能需要监控这些日志条目以了解错误发生趋势。

在以下示例中，创建了一个指标筛选条件来监控“Error”这个词。策略已创建并添加到日志组 **MyApp/message.log**。 CloudWatch 对于每个包含 Error 的事件，Logs 会 ErrorCount 在 **MyApp/message.log** 命名空间中向 CloudWatch自定义指标发布一个数据点，其值为 “1”。如果没有任何事件包含“Error”这个单词，则发布值 0。在 CloudWatch 控制台中绘制这些数据时，请务必使用总和统计数据。

创建指标筛选条件后，可以在 CloudWatch 控制台中查看该指标。选择要查看的指标时，请选择与日志组名称匹配的指标命名空间。有关更多信息，请参阅[查看可用指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/viewing_metrics_with_cloudwatch.html)。

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

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

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

1. 选择日志组的名称。

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

1. 对于 **Filter pattern（筛选条件模式）**，输入 **Error**。
**注意**  
**Filter Pattern（筛选条件模式）**中的所有条目都区分大小写。

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

1. 选择 **Next（下一步）**，然后在 **Assign metric（分配指标）**页上，对于 **Filter Name（筛选条件名称）**，键入 **MyAppErrorCount**。

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

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

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

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

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

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

```
aws logs put-metric-filter \
  --log-group-name MyApp/message.log \
  --filter-name MyAppErrorCount \
  --filter-pattern 'Error' \
  --metric-transformations \
      metricName=ErrorCount,metricNamespace=MyNamespace,metricValue=1,defaultValue=0
```

您可以通过在消息中发布包含“Error”这个词的事件来测试此新策略。

**要使用发布活动 AWS CLI**  
在命令提示符处，运行以下 命令。注意，模式区分大小写。

```
aws logs put-log-events \
  --log-group-name MyApp/access.log --log-stream-name TestStream1 \
  --log-events \
    timestamp=1394793518000,message="This message contains an Error" \
    timestamp=1394793528000,message="This message also contains an Error"
```

# 示例：对 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.aws.amazon.com/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（创建指标筛选条件）**。

**要使用创建指标筛选器 AWS 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。

# 示例：对 HTTP 4xx 代码进行计数
<a name="FindCountMetric"></a>

如前面的示例一样，您可能需要监控 Web 服务访问日志和监控 HTTP 响应代码级别。例如，您可能需要监控所有 HTTP 400 级的错误。但是，您可能不想为每一个返回代码指定新的指标筛选条件。

以下示例演示如何创建包括访问日志中所有 400 级别 HTTP 代码响应的指标，该访问日志使用 [示例：对 HTTP 404 代码进行计数](Counting404Responses.md) 示例中的 Apache 访问日志格式。

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

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

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

1. 选择 Apache 服务器的日志组的名称。

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

1. 对于 **Filter pattern（筛选条件模式）**，输入 **[ip, id, user, timestamp, request, status\$1code=4\$1, size]**。

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

1. 选择 **Next（下一步）**，然后对于 **Filter name（筛选条件名称）**，键入 **HTTP4xxErrors**。

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

1. 在**指标名称**中，输入**HTTP4xx错误**。

1. 对于 **Metric Value（指标值）**，输入 1。这指定对于每个包含 4xx 错误的日志事件，计数以 1 累加。

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

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

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

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

您可以在 put-event 调用中使用以下数据来测试此规则。如果不删除前例中的监控规则，则会生成两个不同的指标。

```
127.0.0.1 - - [24/Sep/2013:11:49:52 -0700] "GET /index.html HTTP/1.1" 404 287
127.0.0.1 - - [24/Sep/2013:11:49:52 -0700] "GET /index.html HTTP/1.1" 404 287
127.0.0.1 - - [24/Sep/2013:11:50:51 -0700] "GET /~test/ HTTP/1.1" 200 3
127.0.0.1 - - [24/Sep/2013:11:50:51 -0700] "GET /favicon.ico HTTP/1.1" 404 308
127.0.0.1 - - [24/Sep/2013:11:50:51 -0700] "GET /favicon.ico HTTP/1.1" 404 308
127.0.0.1 - - [24/Sep/2013:11:51:34 -0700] "GET /~test/index.html HTTP/1.1" 200 3
```

# 示例：从 Apache 日志中提取字段并分配维度
<a name="ExtractBytesExample"></a>

有时，使用各个日志事件中的值而不是使用计数作为指标值非常有用。此示例介绍如何创建提取规则，以创建衡量 Apache Web 服务器传输的字节数的指标。

此示例还展示了如何将维度分配给您正在创建的指标。

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

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

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

1. 选择 Apache 服务器的日志组的名称。

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

1. 对于 **Filter pattern（筛选条件模式）**，输入 **[ip, id, user, timestamp, request, status\$1code, size]**。

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

1. 选择 **Next（下一步）**，然后对于 **Filter name（筛选条件名称）**，键入 **size**。

1. 在 **Metric Details（指标详细信息）**下，对于 **Metric namespace（指标命名空间）**，输入 **MyNameSpace**。因为这是一个新的命名空间，请确保已选中**新建**。

1. 对于 **Metric name（指标名称）**，输入 **BytesTransferred**

1. 对于 **Metric value（指标值）**，输入 **\$1size**。

1. 对于 **Unit（单位）**，选择 **Bytes（字节）**。

1. 对于 **Dimension Name（维度名称）**，键入 **IP**。

1. 对于 **Dimension Value（维度值）**，键入 **\$1ip**，然后选择 **Next（下一步）**。

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

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

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

```
aws logs put-metric-filter \
--log-group-name MyApp/access.log \
--filter-name BytesTransferred \
--filter-pattern '[ip, id, user, timestamp, request, status_code, size]' \
--metric-transformations  \
metricName=BytesTransferred,metricNamespace=MyNamespace,metricValue='$size',unit=Bytes,dimensions='{{IP=$ip}}'
```

**注意**  
在此命令中，使用此格式指定多个维度。  

```
aws logs put-metric-filter \
--log-group-name my-log-group-name \
--filter-name my-filter-name \
--filter-pattern 'my-filter-pattern' \
--metric-transformations  \
metricName=my-metric-name,metricNamespace=my-metric-namespace,metricValue=my-token,unit=unit,dimensions='{dimension1=$dim,dimension2=$dim2,dim3=$dim3}'
```

您可以在 put-log-event通话中使用以下数据来测试此规则。如果不删除前例中的监控规则，则会生成两个不同的指标。

```
127.0.0.1 - - [24/Sep/2013:11:49:52 -0700] "GET /index.html HTTP/1.1" 404 287
127.0.0.1 - - [24/Sep/2013:11:49:52 -0700] "GET /index.html HTTP/1.1" 404 287
127.0.0.1 - - [24/Sep/2013:11:50:51 -0700] "GET /~test/ HTTP/1.1" 200 3
127.0.0.1 - - [24/Sep/2013:11:50:51 -0700] "GET /favicon.ico HTTP/1.1" 404 308
127.0.0.1 - - [24/Sep/2013:11:50:51 -0700] "GET /favicon.ico HTTP/1.1" 404 308
127.0.0.1 - - [24/Sep/2013:11:51:34 -0700] "GET /~test/index.html HTTP/1.1" 200 3
```