

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# メトリクスフィルターのフィルターパターン構文
<a name="FilterAndPatternSyntaxForMetricFilters"></a>

**注記**  
**メトリクスフィルターと CloudWatch Logs Insights クエリの違い**  
一致するログが見つかるたびに、指定された数値がメトリクスフィルターに追加されるという点において、メトリクスフィルターは CloudWatch Logs Insights クエリと異なります。詳細については、「[メトリクスフィルターのメトリクス値を設定する](#changing-default-increment-value)」を参照してください。  
Amazon CloudWatch Logs Insights のクエリ言語でロググループをクエリする方法については、[CloudWatch Logs Insights 言語のクエリ構文](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]*** という単語の出現回数を数えるメトリクスフィルターを作成する場合、**[*ERROR*]** という単語が含まれるログイベントの合計数を示す `ErrorCode` というディメンションを指定し、レポートされたエラーコードでデータをフィルタリングすることができます。

**ヒント**  
測定の単位をメトリクスに割り当てるとき、必ず正しい単位を指定してください。後で単位を変更すると、変更が有効にならない場合があります。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 は、1 分ごとにメトリクス値を集計してレポートします。

 メトリクスフィルターがログイベント内で一致するものを見つけたら、メトリクスの数がメトリクスの値だけ増加します。メトリクスフィルターで一致が見つからない場合、CloudWatch はメトリクスのデフォルト値をレポートします。例えば、ロググループが毎分 2 つのレコードを公開し、メトリクス値は 1 で、デフォルト値は 0 であるとします。最初の 1 分で両方のログレコードに一致が見つかった場合、その分のメトリクス値は 2 になります。次の 1 分間にどちらのレコードでも一致が見つからなかった場合、その分のデフォルト値は 0 となります。メトリクスフィルターが生成するメトリクスにディメンションを割り当てると、それらのメトリクスのデフォルト値を指定することはできません。

また、静的値ではなく、ログイベントから抽出された値でメトリクスを増分するようにメトリクスフィルターを設定することもできます。詳細については、「[ログイベントの値を使用してメトリクスの値を増分する](#publishing-values-found-in-logs)」を参照してください。

## JSON の値またはスペース区切りログイベントからメトリクスとともにディメンションを発行する
<a name="logs-metric-filters-dimensions"></a>

CloudWatch コンソールまたは AWS CLI を使用して、JSON およびスペース区切りのログイベントが生成するメトリクスを使用してディメンションを発行するメトリクスフィルターを作成できます。ディメンションとは名前と値のペアであり、JSON およびスペース区切りフィルターパターンでのみ使用できます。最大 3 つのディメンションを持つ JSON およびスペース区切りメトリクスフィルターを作成できます。ディメンションの詳細とディメンションをメトリクスに割り当てる方法の詳細については、以下のセクションを参照してください。
+ 「Amazon CloudWatch ユーザーガイド**」の「[Dimensions](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Dimension)」
+ 「Amazon CloudWatch Logs ユーザーガイド[https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/ExtractBytesExample.html](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/ExtractBytesExample.html)」の「*例: Apache ログからフィールドを抽出してディメンションを割り当てる*」

**重要**  
ディメンションには、カスタムメトリクスと同じ請求を収集する値が含まれています。不測の請求を防ぐため、`IPAddress` または `requestID` などをディメンションとするなど、高カーディナリティフィールドを指定しないでください。  
メトリクスをログイベントから抽出すると、カスタムメトリクスとして料金が発生します。意図しない高額請求の徴収を防ぐため、Amazon は、特定の時間内に指定したディメンションのために 1000 の異なる名前と値のペアを生成した場合、メトリクスフィルターを無効化することがあります。  
見積費用を通知する請求アラームを作成できます。詳細については、「[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 ログを 1 行で入力する必要があります。

------
#### [ 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. ナビゲーションペインで、**[ログ]**、**[ロググループ]** の順に選択します。

1. ロググループを選択または作成します。

   ロググループの作成手順については、「Amazon CloudWatch Logs ユーザーガイド**」の「[CloudWatch Logs にロググループを作成する](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)」を参照してください。

1. [**アクション**]、[**メトリクスフィルターの作成**] の順に選択します。

1. [**Filter Pattern**] (フィルターパターン) に **\$1 \$1.latency = \$1 \$1** と入力し、[**Next**] (次へ) を選択します。

1. [**Metric Name**] (メトリクス名) に、「**myMetric**」と入力します。

1. [**メトリクス値**] に「**\$1.latency**」と入力します。

1. [**Default Value**] (デフォルト値) に **0** と入力し、[**Next**] (次へ) を選択します。

   値が 0 であっても、デフォルト値を指定することをお勧めします。デフォルト値を設定すると、CloudWatch がデータをより正確にレポートし、CloudWatch がむらがあるメトリクスを集計するのを防ぐことができます。CloudWatch は、1 分ごとにメトリクス値を集計してレポートします。

1. **[Create metric filter]** (メトリクスフィルターの作成) を選択します。

サンプルメトリクスフィルターは、語句 `"latency"` をサンプル JSON ログイベントで照合し、数値 50 をメトリクスの **[myMetric]** に発行します。

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