

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

# 指标筛选条件的筛选条件模式语法
<a name="FilterAndPatternSyntaxForMetricFilters"></a>

**注意**  
**指标筛选器与 “ CloudWatch 日志见解” 查询有何不同**  
指标筛选器与 CloudWatch Logs Insights 查询的不同之处在于，每次找到匹配的日志时，都会将指定的数值添加到指标筛选器中。有关更多信息，请参阅 [为指标筛选条件配置指标值](#changing-default-increment-value)。  
有关如何使用 Amazon Logs Insights 查询语言查询 CloudWatch 日志组的信息，请参阅[CloudWatch 日志见解语言查询语法](CWL_QuerySyntax.md)。  
**通用筛选条件模式示例**  
有关适用于指标筛选条件以及[订阅筛选条件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SubscriptionFilters.html)和[筛选日志事件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SearchDataFilterPattern.html)的通用筛选条件模式语法的更多信息，请参阅[指标筛选条件、订阅筛选条件和筛选日志事件的筛选条件模式语法](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html)，其中包括以下示例：  
支持的正则表达式（regex）语法
匹配非结构化日志事件中的字词
匹配 JSON 日志事件中的字词
匹配以空格分隔的日志事件中的字词

*指标筛选器*允许您搜索和筛选进入日志的 CloudWatch 日志数据，从筛选的日志数据中提取指标观察结果，并将数据点转换为 CloudWatch 日志量度。当日志数据发送到日志时，您可以定义要 CloudWatch 在日志数据中查找的术语和模式。指标筛选条件将分配给日志组，分配给日志组的所有筛选条件都将应用于其日志流。

指标筛选条件与字词匹配时，它会通过指定的数值来增加指标的计数。例如，您可以创建一个指标筛选条件以计算录入事件中单词 ***ERROR*** 出现的次数。

您可以为指标分配度量单位和维度。例如，如果您创建了一个指标筛选条件，该筛选条件计算了单词 ***ERROR*** 在您的日志事件中出现的次数，则可以指定名为 `ErrorCode` 的维度，以显示包含单词 ***ERROR*** 的日志事件总数，并按报告的错误代码筛选数据。

**提示**  
为指标分配度量单位时，请确保指定正确的单位。如果稍后更改单位，则您的更改可能无法生效。有关 CloudWatch 支持的商品的完整列表，请参阅 Amazon CloudWatch API 参考[MetricDatum](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html)中的。

**Topics**
+ [为指标筛选条件配置指标值](#changing-default-increment-value)
+ [使用来自 JSON 或以空格分隔的录入事件的指标发布维度](#logs-metric-filters-dimensions)
+ [使用录入事件中的值来增加指标的值](#publishing-values-found-in-logs)

## 为指标筛选条件配置指标值
<a name="changing-default-increment-value"></a>

创建指标筛选条件时，您可以定义筛选条件模式并指定指标的值和原定设置值。您可以将指标值设置为数字、命名标识符或数字标识符。如果您未指定默认值，则当您的指标筛选条件未找到匹配项时，将 CloudWatch不会报告数据。即使该值为 0，也建议您指定原定设置值。设置默认值有助于更准确地 CloudWatch 报告数据，并 CloudWatch 防止聚合参差不齐的指标。 CloudWatch 每分钟汇总和报告指标值。

 当您的指标筛选条件在录入事件中找到匹配项时，它会按指标值增加指标的计数。如果您的指标筛选条件未找到匹配项，则会 CloudWatch 报告该指标的默认值。例如，您的日志组每分钟发布两条记录，指标值为 1，原定设置值为 0。如果指标筛选条件在第一分钟内的两个日志记录中均找到了匹配项，则该分钟的指标值为 2。如果指标筛选条件在第二分钟内未找到任何记录中的匹配项，则该分钟的原定设置值为 0。如果将维度分配给指标筛选条件生成的指标，则无法为这些指标指定原定设置值。

您还可以设置指标筛选条件，使用从录入事件中提取的值而不是静态值来增加指标。有关更多信息，请参阅 [使用录入事件中的值来增加指标的值](#publishing-values-found-in-logs)。

## 使用来自 JSON 或以空格分隔的录入事件的指标发布维度
<a name="logs-metric-filters-dimensions"></a>

您可以使用 CloudWatch 控制台或 AWS CLI 创建指标筛选条件，以发布包含 JSON 和以空格分隔的日志事件生成的指标的维度。维度是 name/value 值对，仅适用于 JSON 和以空格分隔的筛选模式。您可以创建最多三个维度的 JSON 和以空格分隔的指标筛选条件。有关维度的更多信息以及有关如何将维度分配给指标的信息，请参阅以下各部分：
+ *Amazon CloudWatch 用户指南*中的@@ [尺寸](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Dimension)
+ [示例：从 Apache 日志中提取字段并在 A *mazon CloudWatch 日志用户*指南中分配维度](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/ExtractBytesExample.html)

**重要**  
维度包含收集费用的值，与自定义指标相同。为了防止意外费用，请不要将高基数字段（例如 `IPAddress` 或 `requestID`）指定为维度。  
从录入事件中提取的指标按自定义指标收费。为了防止您收取意外的高额费用，如果亚马逊在一定时间内为指定维度生成 1000 个不同的 name/value 货币对，则可能会禁用您的指标筛选器。  
您可以创建账单告警，通知您预估费用。有关更多信息，请参阅[创建账单告警以监控 AWS 预估费用](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html)。

### 使用来自 JSON 日志事件的指标发布维度
<a name="logs-metric-filters-JSON"></a>

以下示例包含描述如何在 JSON 指标筛选条件中指定维度的代码段。

------
#### [ Example: JSON log event ]

```
{
  "eventType": "UpdateTrail",
  "sourceIPAddress": "111.111.111.111",
  "arrayKey": [
        "value",
        "another value"
  ],
  "objectList": [
       {"name": "a",
         "id": 1
       },
       {"name": "b",
         "id": 2
       }
  ]
  
}
```

**注意**  
如果您使用示例 JSON 录入事件测试示例指标筛选条件，则必须在单行中输入示例 JSON 日志。

------
#### [ Example: Metric filter ]

每当 JSON 录入事件包含属性 `eventType` 和 `"sourceIPAddress"` 时，指标筛选条件都会增加指标。

```
{ $.eventType = "*" && $.sourceIPAddress != 123.123.* }
```

在创建 JSON 指标筛选条件时，您可以将指标筛选条件中的任何属性指定为维度。例如，要设置 `eventType` 为维度，请使用以下内容：

```
"eventType" : $.eventType
```

示例指标包含名为 `"eventType"` 的维度，并且示例录入事件中维度的值为 `"UpdateTrail"`。

------

### 使用来自以空格分隔的日志事件的指标发布维度
<a name="logs-metric-filters-dimensions-space-delimited"></a>

以下示例包含描述如何在以空格分隔的指标筛选条件中指定维度的代码段。

------
#### [ Example: Space-delimited log event ]

```
                                
127.0.0.1 Prod frank [10/Oct/2000:13:25:15 -0700] "GET /index.html HTTP/1.0" 404 1534
```

------
#### [ Example: Metric filter ]

```
                                
[ip, server, username, timestamp, request, status_code, bytes > 1000]
```

当以空格分隔的录入事件包含筛选条件中指定的任何字段时，指标筛选条件将增加指标。例如，指标筛选条件在以空格分隔的录入事件示例中查找以下字段和值。

```
{
   "$bytes": "1534", 
   "$status_code": "404", 

   "$request": "GET /index.html HTTP/1.0", 
   "$timestamp": "10/Oct/2000:13:25:15 -0700", 
   "$username": "frank",
   "$server": "Prod", 
   "$ip": "127.0.0.1"
}
```

在创建以空格分隔的指标筛选条件时，您可以将指标筛选条件中的任何字段指定为维度。例如，要设置 `server` 为维度，请使用以下内容：

```
"server" : $server
```

示例指标筛选条件包含名为 `server` 的维度，并且示例录入事件中维度的值为 `"Prod"`。

------
#### [ Example: Match terms with AND (&&) and OR (\$1\$1) ]

您可以使用逻辑运算符 AND（"&&"）和 OR（"\$1\$1"）创建包含条件的以空格分隔的指标筛选条件。以下指标筛选条件会返回日志事件，其中事件中的第一个单词是 ERROR 或 WARN 的任何超字符串。

```
[w1=ERROR || w1=%WARN%, w2]
```

------

## 使用录入事件中的值来增加指标的值
<a name="publishing-values-found-in-logs"></a>

您可以创建指标筛选条件，该筛选条件会发布在录入事件中找到的数字值。本部分中的过程使用以下示例指标筛选条件来显示可以如何将 JSON 录入事件中的数字值发布到指标。

```
{ $.latency = * } metricValue: $.latency
```

**创建在录入事件中发布值的指标筛选条件**

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

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

1. 选择或创建日志组。

   有关如何创建日志组的信息，请参阅 *Amazon 日志用户指南中的 CloudWatch 日志中的创建 CloudWatch 日志*[组](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)。

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

1. 对于 **Filter Pattern**（筛选条件模式），输入 **\$1 \$1.latency = \$1 \$1**，然后选择 **Next**（下一步）。

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

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

1. （可选）对于 **Default Value**（原定设置值），输入 **0**，然后选择 **Next**（下一步）。

   即使该值为 0，也建议您指定原定设置值。设置默认值有助于更准确地 CloudWatch 报告数据，并 CloudWatch 防止聚合参差不齐的指标。 CloudWatch 每分钟汇总和报告指标值。

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

示例指标筛选条件与示例 JSON 录入事件中的字词 `"latency"` 匹配，并将 50 的数字值发布到指标 **myMetric**。

```
{
"latency": 50,
"requestType": "GET"
}
```